diff options
| author | Marius <mariausol@gmail.com> | 2012-07-04 12:00:14 +0300 | 
|---|---|---|
| committer | Marius <mariausol@gmail.com> | 2012-07-04 12:00:14 +0300 | 
| commit | 895f68ef1727ec31a51ef8799e2bf576ea7642d0 (patch) | |
| tree | baec5079e7fd9febeee6c1cb257b064a46fe665b /tex | |
| parent | bb0eac07417aec9a0da32a54fbdad4553cebcce7 (diff) | |
| download | context-895f68ef1727ec31a51ef8799e2bf576ea7642d0.tar.gz | |
beta 2012.07.04 10:42
Diffstat (limited to 'tex')
95 files changed, 3682 insertions, 3437 deletions
diff --git a/tex/context/base/anch-pgr.mkiv b/tex/context/base/anch-pgr.mkiv index 130116bc7..01ef25dc4 100644 --- a/tex/context/base/anch-pgr.mkiv +++ b/tex/context/base/anch-pgr.mkiv @@ -365,11 +365,11 @@  \let\stopMPpositiongraphic\relax  \def\anch_positions_meta_graphic_prepare -  {\ifcsname\??gv\currentmpvariableclass:self\endcsname \else -     \letvalue{\??gv\currentmpvariableclass:self}\currentposition +  {\ifcsname\??graphicvariable\currentmpvariableclass:self\endcsname \else +     \letvalue{\??graphicvariable\currentmpvariableclass:self}\currentposition     \fi -   \ifcsname\??gv\currentmpvariableclass:from\endcsname \else -     \letvalue{\??gv\currentmpvariableclass:from}\currentposition +   \ifcsname\??graphicvariable\currentmpvariableclass:from\endcsname \else +     \letvalue{\??graphicvariable\currentmpvariableclass:from}\currentposition     \fi}  \def\anch_positions_meta_graphic_use#1#2#3% diff --git a/tex/context/base/anch-tab.mkiv b/tex/context/base/anch-tab.mkiv index 1b90d2476..2fb6938a2 100644 --- a/tex/context/base/anch-tab.mkiv +++ b/tex/context/base/anch-tab.mkiv @@ -13,6 +13,9 @@  \writestatus{loading}{ConTeXt Anchoring Macros / Table Extensions} +%D This is just a playground and functionality might change or even +%D dissappear in favour of better solutions. +  \unprotect  \newcount\c_anch_tabs @@ -57,23 +60,22 @@      \global\advance\c_anch_tabs\plusone  \to \everytabulate -%D Beware, the following code is somewhat weird and experimental -%D and might be dropped or become a loadable module. +%D Beware, the following code is somewhat weird and experimental and might be +%D dropped or become a loadable module.  %D \macros  %D   {GFC, GTC, GSC}  %D -%D The next macros extend tables and tabulation with -%D backgrounds and position related features. Areas are -%D specified with symbolic names, and symbolic references to -%D the graphics involved. Each table has its own namespace. +%D The next macros extend tables and tabulation with backgrounds and position +%D related features. Areas are specified with symbolic names, and symbolic +%D references to the graphics involved. Each table has its own namespace.  \newconditional\tablehaspositions -\newcount\noftabpositions -\newtoks \posXCtoks +\newcount      \noftabpositions +\newtoks       \posXCtoks -\def\dotablebpos{\bpos} -\def\dotableepos{\epos} +\def\anch_tabulate_bpos{\bpos} +\def\anch_tabulate_epos{\epos}  \installcorenamespace{positiontables} @@ -85,74 +87,80 @@  \let\tabulatepos\tablepos -\def\dodododoGSC[#1:#2]% -  {\remappositionframed{#2}{\tbPOSprefix#1}% -   \dotablebpos{\tbPOSprefix#1}% -   \doglobal\appendtoks\@EA\dotableepos\@EA{\tbPOSprefix#1}\to\posXCtoks} +\unexpanded\def\tbXC {\dosingleempty\anch_tables_XC } +\unexpanded\def\tbGSC{\dosingleempty\anch_tables_GSC} +\unexpanded\def\tbGFC{\dosingleempty\anch_tables_GFC} +\unexpanded\def\tbGTC{\dosingleempty\anch_tables_GTC} -\def\dododoGSC[#1:#2:#3]% -  {\doglobal\appendtoks\dodododoGSC[#1:#2]\to\posXCtoks\NC} +\def\anch_table_check_state +  {\iftrialtypesetting +     \global\settrue\tablehaspositions +     \firstargumentfalse +   \fi} -\def\dodoGSC[#1]% -  {\def\docommand##1{\dododoGSC[##1:##1]}% -   \processcommalist[#1]\docommand} +\def\anch_tables_XC [#1]{\anch_table_check_state\iffirstargument\anch_tables_indeed_XC [#1]\else\expandafter\fi\NC} +\def\anch_tables_GSC[#1]{\anch_table_check_state\iffirstargument\anch_tables_indeed_GSC[#1]\else\expandafter\NC\fi} +\def\anch_tables_GFC[#1]{\anch_table_check_state\iffirstargument\anch_tables_indeed_GFC[#1]\else\expandafter\NC\fi} +\def\anch_tables_GTC[#1]{\anch_table_check_state\iffirstargument\anch_tables_indeed_GTC[#1]\else\expandafter\NC\fi} -\def\dodododoGFC[#1:#2:#3]% -  {\remappositionframed{#2}{\tbPOSprefix#1}% -   \dotablebpos{\tbPOSprefix#1}} +\def\anch_tables_indeed_XC[#1]% +  {{\let\NC\relax\processcommalist[#1]\anch_tables_step_XC}} -\def\dododoGFC[#1]% -  {\def\docommand##1{\dodododoGFC[##1:##1]}% -   \processcommalist[#1]\docommand} +\def\anch_tables_step_XC#1% +  {\anch_tables_step_indeed_XC[#1]} -\def\dodoGFC[#1]% -  {\doglobal\appendtoks\dododoGFC[#1]\to\posXCtoks\NC} +\def\anch_tables_step_indeed_XC[#1#2]% +  {\if#1>\anch_tables_indeed_GFC  [#2:#2]\else +   \if#1+\anch_tables_indeed_GFC  [#2:#2]\else +   \if#1<\anch_tables_indeed_GTC  [#2:#2]\else +   \if#1-\anch_tables_indeed_GTC  [#2:#2]\else +   \if#1=\anch_tables_indeed_GSC  [#2:#2]\else +         \anch_tables_indeed_GSC[#1#2:#1#2]\fi\fi\fi\fi\fi} -\def\dododododoGTC[#1:#2]% -  {\dotableepos{\tbPOSprefix#1}} +\def\anch_tables_indeed_GSC[#1]% +  {\processcommalist[#1]\anch_tables_step_GSC} -\def\dodododoGTC[#1]% -  {\def\docommand##1{\dododododoGTC[##1:##1]}% -   \processcommalist[#1]\docommand} +\def\anch_tables_step_GSC#1% +  {\anch_tables_append_GSC[#1:#1]} -\def\dododoGTC[#1]% -  {\doglobal\appendtoks\dodododoGTC[#1]\to\posXCtoks} +\def\anch_tables_append_GSC[#1:#2:#3]% +  {\doglobal\appendtoks\anch_tables_process_GSC[#1:#2]\to\posXCtoks\NC} -\def\dodoGTC[#1]% -  {\doglobal\appendtoks\dododoGTC[#1]\to\posXCtoks\NC} +\def\anch_tables_process_GSC[#1:#2]% +  {\remappositionframed{#2}{\tbPOSprefix#1}% +   \anch_tabulate_bpos{\tbPOSprefix#1}% +   \doglobal\appendtoks\@EA\anch_tabulate_epos\@EA{\tbPOSprefix#1}\to\posXCtoks} -\def\dodododoXC[#1#2]% -  {\if#1>\dodoGFC  [#2:#2]\else -   \if#1+\dodoGFC  [#2:#2]\else -   \if#1<\dodoGTC  [#2:#2]\else -   \if#1-\dodoGTC  [#2:#2]\else -   \if#1=\dodoGSC  [#2:#2]\else -         \dodoGSC[#1#2:#1#2]\fi\fi\fi\fi\fi} +\def\anch_tables_indeed_GFC[#1]% +  {\doglobal\appendtoks\anch_tables_delayed_GFC[#1]\to\posXCtoks\NC} -\def\dododoXC#1% -  {\dodododoXC[#1]} +\def\anch_tables_delayed_GFC[#1]% +  {\processcommalist[#1]\anch_tables_step_GFC} -\def\dodoXC[#1]% -  {{\let\NC\relax\processcommalist[#1]\dododoXC}} +\def\anch_tables_step_GFC#1% +  {\anch_tables_process_GFC[#1:#1]} -\def\@@checktablepositionstate -  {\iftrialtypesetting -     \global\settrue\tablehaspositions -     \firstargumentfalse -   \fi} +\def\anch_tables_process_GFC[#1:#2:#3]% +  {\remappositionframed{#2}{\tbPOSprefix#1}% +   \anch_tabulate_bpos{\tbPOSprefix#1}} + +\def\anch_tables_indeed_GTC[#1]% +  {\doglobal\appendtoks\anch_tables_delayed_GTC[#1]\to\posXCtoks\NC} -\def\doGSC[#1]{\@@checktablepositionstate\iffirstargument\dodoGSC[#1]\else\expandafter\NC\fi} -\def\doGFC[#1]{\@@checktablepositionstate\iffirstargument\dodoGFC[#1]\else\expandafter\NC\fi} -\def\doGTC[#1]{\@@checktablepositionstate\iffirstargument\dodoGTC[#1]\else\expandafter\NC\fi} -\def\doXC [#1]{\@@checktablepositionstate\iffirstargument\dodoXC [#1]\else\expandafter\fi\NC} +\def\anch_tables_delayed_GTC[#1]% +  {\doglobal\appendtoks\anch_tables_process_GTC[#1]\to\posXCtoks} -\def\tbGSC{\dosingleempty\doGSC} -\def\tbGFC{\dosingleempty\doGFC} -\def\tbGTC{\dosingleempty\doGTC} -\def\tbXC {\dosingleempty\doXC } +\def\anch_tables_process_GTC[#1]% +  {\processcommalist[#1]\anch_tables_step_GTC} -%D The amount of code to support tables and tabulation is -%D rather minimalistic. +\def\anch_tables_step_GTC#1% +  {\anch_tables_step_indeed_GTC[#1:#1]} + +\def\anch_tables_step_indeed_GTC[#1:#2]% +  {\anch_tabulate_epos{\tbPOSprefix#1}} + +%D The amount of code to support tables and tabulation is rather +%D minimalistic.  \let\tabulatepos\tablepos @@ -187,31 +195,30 @@  % We need to handle paragraphs as well. -\let\doflushtabulateepos\relax +\let\anch_tabulate_flush_epos\relax -\def\dotabulatebpos +\def\anch_tabulate_bpos_indeed    {\bpos} -\def\dotabulateepos#1% +\def\anch_tabulate_epos_indeed#1%    {\ifvoid\b_tabl_tabulate_current\c_tabl_tabulate_column       \epos{#1}% -     \glet\doflushtabulateepos\relax +     \glet\anch_tabulate_flush_epos\relax     \else -     \gdef\doflushtabulateepos{\epos{#1}}% +     \gdef\anch_tabulate_flush_epos{\epos{#1}}%     \fi}  \def\flushtabulatesplitbox    {\box\b_tabl_tabulate -   \iftrialtypesetting\else\ifconditional\tablehaspositions\doflushtabulateepos\fi\fi} +   \iftrialtypesetting\else\ifconditional\tablehaspositions\anch_tabulate_flush_epos\fi\fi}  \appendtoks -    \let\dotablebpos\dotabulatebpos % ? -    \let\dotableepos\dotabulateepos % ? -    \glet\doflushtabulateepos\relax +    \let\anch_tabulate_bpos\anch_tabulate_bpos_indeed % ? +    \let\anch_tabulate_epos\anch_tabulate_epos_indeed % ? +    \glet\anch_tabulate_flush_epos\relax  \to \everytabulate -%D In order to prevent potential clashes with abbreviations, -%D postpone the mapping. +%D In order to prevent potential clashes with abbreviations, postpone the mapping.  \appendtoks      \let\GSC\tbGSC @@ -223,8 +230,8 @@  %D \macros  %D   {definepositionframed}  %D -%D The next example show how to provide backgrounds to table -%D cells. First we define some framed backgrounds. +%D The next example show how to provide backgrounds to table cells. First we define +%D some framed backgrounds.  %D  %D \startbuffer  %D \definepositionframed[x][background=color,backgroundcolor=red] @@ -244,8 +251,7 @@  %D \stoptabulate  %D \stopbuffer  %D -%D The table itself defines three areas (a, b and~c) using -%D these frames. +%D The table itself defines three areas (a, b and~c) using these frames.  %D  %D \typebuffer  %D % \getbuffer @@ -270,9 +276,8 @@      \let\XC \tbXC  \to \everytable -%D In the previous example, we could have provided an overlay to -%D the framed definition. A more direct approach is demonstrated -%D below: +%D In the previous example, we could have provided an overlay to the framed definition. +%D A more direct approach is demonstrated below:  %D  %D \startbuffer  %D \def\cw#1{\color[white]{#1}} @@ -291,8 +296,7 @@  %D  %D \typebuffer \getbuffer  %D -%D The definition of the table looks about the same as the -%D previous one: +%D The definition of the table looks about the same as the previous one:  %D  %D \startbuffer  %D \starttable[|c|c|c|] @@ -347,22 +351,26 @@  % \definepositionframed[y][background=color,fillcolor=green]  % \definepositionframed[z][background=color,fillcolor=blue] -\def\remappositionframed#1#2% from to +\unexpanded\def\remappositionframed#1#2% from to    {\copyposition{b:#1}{b:#2}%     \copyposition{e:#1}{e:#2}%     \anch_positions_set_action{b:#2}{\dopositionaction{b:#1}}}  \unexpanded\def\definepositionframed -  {\dodoubleargument\dodefinepositionframed} +  {\dodoubleargument\anch_framed_define} -\def\dodefinepositionframed[#1][#2]% -  {\anch_positions_set_action{b:#1}{\dopositionframed[#1][#2]}} +\def\anch_framed_define[#1][#2]% +  {\anch_positions_set_action{b:#1}{\anch_framed_handle[#1][#2]}} + +\unexpanded\def\anch_framed_handle +  {\bgroup +   \anch_framed_indeed}  \unexpanded\def\positionframed    {\bgroup -   \dodoubleempty\dopositionframed} +   \dodoubleempty\anch_framed_indeed} -\def\dopositionframed[#1][#2]% +\def\anch_framed_indeed[#1][#2]%    {\setbox\scratchbox\hbox       {\scratchwidth \dimexpr\MPx{e:#1}-\MPx{b:#1}\relax        \scratchdepth \dimexpr\MPy{b:#1}-\MPy{e:#1}+\MPd{e:#1}\relax diff --git a/tex/context/base/buff-ver.mkiv b/tex/context/base/buff-ver.mkiv index d8fbe31b4..36de37669 100644 --- a/tex/context/base/buff-ver.mkiv +++ b/tex/context/base/buff-ver.mkiv @@ -839,6 +839,6 @@  \appendtoks      \def\type#1{\letterbackslash\checkedstrippedcsname#1}% or maybe detokenize      \def\tex #1{\letterbackslash#1}% -\to \simplifiedcommands +\to \everysimplifycommands  \protect \endinput diff --git a/tex/context/base/catc-ini.mkiv b/tex/context/base/catc-ini.mkiv index 26c3ceee9..791ce31c4 100644 --- a/tex/context/base/catc-ini.mkiv +++ b/tex/context/base/catc-ini.mkiv @@ -87,6 +87,17 @@     \xdef\outputnewlinechar{^^J}%     \endgroup} +%D We predefine some prefixes ahead of syst-aux and mult-sys. We reserve 8 slots +%D for catcodes. + +\def\??catcodelet   {1>>} % let : \let +\def\??catcodedef   {2>>} % def : \def +\def\??catcodeued   {3>>} % ued : \unexpanded\def +\def\??catcodeget   {4>>} %       \meaning + +\def\??catcodetablet{5>>} +\def\??catcodetablen{6>>} +  \newcount\c_syst_catcodes_n \c_syst_catcodes_n\zerocount % 0 = signal, so advance before allocate  \newcount\c_syst_catcodes_a  \newcount\c_syst_catcodes_b @@ -94,7 +105,7 @@  \normalprotected\def\newcatcodetable#1% we could move the cctdefcounter to lua    {\global\advance\c_syst_catcodes_n\plusone -   \expandafter\xdef\csname\??qm:n:\number\c_syst_catcodes_n\endcsname{\string#1}% logging +   \expandafter\xdef\csname\??catcodetablen\number\c_syst_catcodes_n\endcsname{\string#1}% logging     \newconstant#1%     #1\c_syst_catcodes_n     \ctxlua{catcodes.register("\expandafter\gobbleoneargument\string#1",\number#1)}} @@ -151,12 +162,7 @@  \setnewconstant\c_syst_catcodes_hack\tildeasciicode  %D Once a catcode is assigned, the next assignments will happen -%D faster. We predefine some prefixes ahead of mult-sys. - -\def\??ql{@@ql} % let : \let -\def\??qd{@@qd} % def : \def -\def\??qu{@@qu} % ued : \unexpanded\def -\def\??qm{@@qm} %       \meaning +%D faster.  \def\letcatcodecommand{\afterassignment\syst_catcodes_let_a\c_syst_catcodes_a}  \def\defcatcodecommand{\afterassignment\syst_catcodes_def_a\c_syst_catcodes_a} @@ -167,46 +173,46 @@  \def\syst_catcodes_ued_a{\afterassignment\syst_catcodes_ued_b\c_syst_catcodes_b}  \def\syst_catcodes_let_b % each time -  {\ifcsname\??ql:\number\c_syst_catcodes_a:\number\c_syst_catcodes_b\endcsname -     \csname\??ql:\number\c_syst_catcodes_a:\number\c_syst_catcodes_b\expandafter\endcsname +  {\ifcsname\??catcodelet\number\c_syst_catcodes_a:\number\c_syst_catcodes_b\endcsname +     \csname\??catcodelet\number\c_syst_catcodes_a:\number\c_syst_catcodes_b\expandafter\endcsname     \else       \expandafter\syst_catcodes_let_c     \fi}  \def\syst_catcodes_def_b % each time -  {\ifcsname\??qd:\number\c_syst_catcodes_a:\number\c_syst_catcodes_b\endcsname -     \csname\??qd:\number\c_syst_catcodes_a:\number\c_syst_catcodes_b\expandafter\endcsname +  {\ifcsname\??catcodedef\number\c_syst_catcodes_a:\number\c_syst_catcodes_b\endcsname +     \csname\??catcodedef\number\c_syst_catcodes_a:\number\c_syst_catcodes_b\expandafter\endcsname     \else       \expandafter\syst_catcodes_def_c     \fi}  \def\syst_catcodes_ued_b % each time -  {\ifcsname\??qu:\number\c_syst_catcodes_a:\number\c_syst_catcodes_b\endcsname -     \csname\??qu:\number\c_syst_catcodes_a:\number\c_syst_catcodes_b\expandafter\endcsname +  {\ifcsname\??catcodeued\number\c_syst_catcodes_a:\number\c_syst_catcodes_b\endcsname +     \csname\??catcodeued\number\c_syst_catcodes_a:\number\c_syst_catcodes_b\expandafter\endcsname     \else       \expandafter\syst_catcodes_ued_c     \fi}  \def\syst_catcodes_let_c % only first time -  {\expandafter\gdef\csname\??ql:\number\c_syst_catcodes_a:\number\c_syst_catcodes_b\expandafter\endcsname\expandafter -     {\expandafter\let\csname\??qm:\number\c_syst_catcodes_a:\number\c_syst_catcodes_b\endcsname}% +  {\expandafter\gdef\csname\??catcodelet\number\c_syst_catcodes_a:\number\c_syst_catcodes_b\expandafter\endcsname\expandafter +     {\expandafter\let\csname\??catcodeget\number\c_syst_catcodes_a:\number\c_syst_catcodes_b\endcsname}%     \syst_catcodes_reinstate_unexpanded -   \csname\??ql:\number\c_syst_catcodes_a:\number\c_syst_catcodes_b\endcsname} +   \csname\??catcodelet\number\c_syst_catcodes_a:\number\c_syst_catcodes_b\endcsname}  \def\syst_catcodes_def_c % only first time (we could use \normalexpanded here) -  {\expandafter\gdef\csname\??qd:\number\c_syst_catcodes_a:\number\c_syst_catcodes_b\expandafter\endcsname +  {\expandafter\gdef\csname\??catcodedef\number\c_syst_catcodes_a:\number\c_syst_catcodes_b\expandafter\endcsname       \expandafter##\expandafter1\expandafter -       {\expandafter\def\csname\??qm:\number\c_syst_catcodes_a:\number\c_syst_catcodes_b\endcsname{##1}}% +       {\expandafter\def\csname\??catcodeget\number\c_syst_catcodes_a:\number\c_syst_catcodes_b\endcsname{##1}}%     \syst_catcodes_reinstate_normal -   \csname\??qd:\number\c_syst_catcodes_a:\number\c_syst_catcodes_b\endcsname} +   \csname\??catcodedef\number\c_syst_catcodes_a:\number\c_syst_catcodes_b\endcsname}  \def\syst_catcodes_ued_c % only first time -  {\expandafter\gdef\csname\??qu:\number\c_syst_catcodes_a:\number\c_syst_catcodes_b\expandafter\endcsname +  {\expandafter\gdef\csname\??catcodeued\number\c_syst_catcodes_a:\number\c_syst_catcodes_b\expandafter\endcsname       \expandafter##\expandafter1\expandafter -       {\expandafter\normalprotected\expandafter\def\csname\??qm:\number\c_syst_catcodes_a:\number\c_syst_catcodes_b\endcsname{##1}}% +       {\expandafter\normalprotected\expandafter\def\csname\??catcodeget\number\c_syst_catcodes_a:\number\c_syst_catcodes_b\endcsname{##1}}%     \syst_catcodes_reinstate_unexpanded -   \csname\??qu:\number\c_syst_catcodes_a:\number\c_syst_catcodes_b\endcsname} +   \csname\??catcodeued\number\c_syst_catcodes_a:\number\c_syst_catcodes_b\endcsname}  \def\reinstatecatcodecommand{\afterassignment\syst_catcodes_reinstate_normal\c_syst_catcodes_b} @@ -227,8 +233,8 @@  \newconstant\defaultcatcodetable  \def\catcodecommand#1% -  {\csname\??qm:\number -     \ifcsname\??qm:\number\currentcatcodetable:\number#1\endcsname +  {\csname\??catcodeget\number +     \ifcsname\??catcodeget\number\currentcatcodetable:\number#1\endcsname         \currentcatcodetable \else \defaultcatcodetable       \fi     :\number#1\endcsname} @@ -251,13 +257,13 @@  \normalprotected\def\pushcatcodetable    {\advance\c_syst_catcodes_level\plusone     \syst_catcodes_trace_push -   \expandafter\chardef\csname\??qm:t:\number\c_syst_catcodes_level\endcsname\currentcatcodetable} +   \expandafter\chardef\csname\??catcodetablet\number\c_syst_catcodes_level\endcsname\currentcatcodetable}  \normalprotected\def\popcatcodetable    {\ifcase\c_syst_catcodes_level       \syst_catcodes_trace_nesting_error     \else -     \expandafter\catcodetable\csname\??qm:t:\number\c_syst_catcodes_level\endcsname +     \expandafter\catcodetable\csname\??catcodetablet\number\c_syst_catcodes_level\endcsname       \syst_catcodes_trace_pop       \advance\c_syst_catcodes_level\minusone     \fi} @@ -269,7 +275,7 @@  \normalprotected\def\restorecatcodes % takes previous level    {\ifnum\c_syst_catcodes_level>\plusone -     \expandafter\catcodetable\csname\??qm:t:\number\numexpr\c_syst_catcodes_level-1\relax\endcsname +     \expandafter\catcodetable\csname\??catcodetablet\number\numexpr\c_syst_catcodes_level-1\relax\endcsname     \fi}  % \newtoks\everycatcodetable @@ -294,14 +300,14 @@  \def\syst_catcodes_prev    {\ifnum\numexpr\c_syst_catcodes_level-1\relax>\zerocount -     \csname\??qm:n:\number\csname\??qm:t:\number\numexpr\c_syst_catcodes_level-1\relax\endcsname\endcsname +     \csname\??catcodetablen\number\csname\??catcodetablet\number\numexpr\c_syst_catcodes_level-1\relax\endcsname\endcsname     \else       -%     \fi}  \def\catcodetablename    {\ifnum\currentcatcodetable>\zerocount -     \csname\??qm:n:\number\currentcatcodetable\endcsname +     \csname\??catcodetablen\number\currentcatcodetable\endcsname     \else       -%     \fi} diff --git a/tex/context/base/cont-log.mkiv b/tex/context/base/cont-log.mkiv index 5baa05bee..a83417ffd 100644 --- a/tex/context/base/cont-log.mkiv +++ b/tex/context/base/cont-log.mkiv @@ -276,6 +276,6 @@      \def\MetaFont{MetaFont}%      \def\MetaFun {MetaFun}%      \def\TeX     {TeX}% -\to \simplifiedcommands +\to \everysimplifycommands  \protect \endinput diff --git a/tex/context/base/cont-new.mkii b/tex/context/base/cont-new.mkii index 6cb0f0bdc..eea9250ad 100644 --- a/tex/context/base/cont-new.mkii +++ b/tex/context/base/cont-new.mkii @@ -11,7 +11,7 @@  %C therefore copyrighted by \PRAGMA. See mreadme.pdf for  %C details. -\newcontextversion{2012.06.30 12:32} +\newcontextversion{2012.07.04 10:42}  %D This file is loaded at runtime, thereby providing an  %D excellent place for hacks, patches, extensions and new diff --git a/tex/context/base/cont-new.mkiv b/tex/context/base/cont-new.mkiv index 442b42222..794733f23 100644 --- a/tex/context/base/cont-new.mkiv +++ b/tex/context/base/cont-new.mkiv @@ -11,7 +11,7 @@  %C therefore copyrighted by \PRAGMA. See mreadme.pdf for  %C details. -\newcontextversion{2012.06.30 12:32} +\newcontextversion{2012.07.04 10:42}  %D This file is loaded at runtime, thereby providing an  %D excellent place for hacks, patches, extensions and new @@ -124,47 +124,6 @@  % \markpage[nobackgrounds]  % \doifmarkedpageelse{nobackgrounds} -% Just a simple and fast hanger, for usage in macros. - -\def\setuphanging -  {\dodoubleempty\getparameters[\??ha]} - -\setuphanging -  [\c!distance=.5em] - -\def\starthanging -  {\noindent\bgroup -   \dowithnextbox -     {\setbox\nextbox\hbox{\flushnextbox\hskip\@@hadistance}% -      \hangindent\nextboxwd -      \hangafter\plusone -      \flushnextbox\ignorespaces} -   \hbox} - -\def\stophanging -  {\endgraf -   \egroup} - -% experimental - -\def\stophangaround -  {\endgraf -   \egroup} - -\def\starthangaround -  {\noindent\bgroup -   \dowithnextbox -     {\ifdim\nextboxht>\strutht\setbox\nextbox\tbox{\flushnextbox}\fi -      \setbox\nextbox\hbox{\flushnextbox\hskip\@@hadistance}% -      \getboxheight\scratchdimen\of\box\nextbox -      \getnoflines\scratchdimen -      \nextboxht\strutht -      \nextboxdp\strutdp -      \hangindent\nextboxwd -      \hangafter-\noflines -      \llap{\flushnextbox}\ignorespaces} -   \hbox} -  \def\modevalue#1#2#3%    {\@EA\ifx\csname\@mode@\systemmodeprefix#1\endcsname\endcsname\enabledmode#2\else#2\fi} @@ -179,7 +138,7 @@  %    \placefloatplaceholder}  \def\placefloatplaceholder -  {\ifroomforfloat \else +  {\ifconditional\c_page_floats_room \else       \scratchdimen\pagegoal       \advance\scratchdimen-\pagetotal       \advance\scratchdimen-3\lineheight @@ -328,12 +287,12 @@  % \the\dimexpr(\dimchoice{11pt}{{<10pt}{8pt}{<12pt}{9pt}{<15pt}{10pt}{=11pt}{12pt}})  % \the\dimexpr(\dimchoice{14pt}{{<10pt}{8pt}{<12pt}{9pt}{<15pt}{10pt}{=11pt}{12pt}}) -\def\tabulaterule % to be redone, not correct -  {\dotabulaterule -     {\hrule\!!height.5\scratchdimen\!!depth.5\scratchdimen\relax -      \doifvalue{\??tt\currenttabulate\c!distance}\v!grid -        {\kern-\scratchdimen}}} % experimental tm-prikkels -% so far +%\def\tabulaterule % to be redone, not correct +%  {\dotabulaterule +%     {\hrule\!!height.5\scratchdimen\!!depth.5\scratchdimen\relax +%      \doif{\tabulateparameter\c!distance}\v!grid +%        {\kern-\scratchdimen}}} % experimental tm-prikkels +%  % between alignment lines certain rules apply, and even a  % simple test can mess up a table, which is why we have a diff --git a/tex/context/base/context-version.pdf b/tex/context/base/context-version.pdf Binary files differindex b0e91f6fa..f95cc016a 100644 --- a/tex/context/base/context-version.pdf +++ b/tex/context/base/context-version.pdf diff --git a/tex/context/base/context-version.png b/tex/context/base/context-version.png Binary files differindex 2a2f8a374..70c4214dc 100644 --- a/tex/context/base/context-version.png +++ b/tex/context/base/context-version.png diff --git a/tex/context/base/context.mkii b/tex/context/base/context.mkii index c547b109d..232902240 100644 --- a/tex/context/base/context.mkii +++ b/tex/context/base/context.mkii @@ -20,7 +20,7 @@  %D your styles an modules.  \edef\contextformat {\jobname} -\edef\contextversion{2012.06.30 12:32} +\edef\contextversion{2012.07.04 10:42}  %D For those who want to use this: diff --git a/tex/context/base/context.mkiv b/tex/context/base/context.mkiv index bcaa34449..9f6d4e3c3 100644 --- a/tex/context/base/context.mkiv +++ b/tex/context/base/context.mkiv @@ -19,11 +19,13 @@  %D 2004.8.30 the low level interface is english. Watch out and adapt  %D your styles an modules. +% \everypar{\writestatus{!!!!}{some spurious input in line \the\inputlineno}\wait} +  %D The order of loading will change when all modules have been cleaned  %D up and the dependencies are more consistent.  \edef\contextformat {\jobname} -\edef\contextversion{2012.06.30 12:32} +\edef\contextversion{2012.07.04 10:42}  %D For those who want to use this: @@ -121,7 +123,7 @@  \loadmarkfile{attr-ini} -\loadmarkfile{core-var} +\loadmarkfile{core-ini}  \loadmarkfile{core-env}  \loadmarkfile{layo-ini} @@ -275,7 +277,7 @@  \loadmkvifile{strc-flt} -\loadmarkfile{page-mis} +\loadmarkfile{page-pst}  \loadmkvifile{page-mbk}  \loadmarkfile{page-mul}  \loadmarkfile{page-set} @@ -304,14 +306,15 @@  \loadmarkfile{strc-blk}  \loadmarkfile{page-imp} -\loadmarkfile{page-sel} % optional -\loadmarkfile{page-com} % optional +\loadmkvifile{page-sel} % optional  \loadmkvifile{scrn-pag}  \loadmkvifile{scrn-wid}  \loadmkvifile{scrn-but}  \loadmkvifile{scrn-bar} +\loadmarkfile{page-com} % optional (after scrn-pag) +  \loadmarkfile{strc-bkm} % bookmarks  \loadmarkfile{tabl-com} @@ -461,7 +464,6 @@  \loadmarkfile{core-ctx} % this order might change but we need to check depedencies / move to another namespace -\loadmarkfile{core-ini}  \loadmarkfile{core-def}  %usemodule[x][res-04] % xml resource libraries diff --git a/tex/context/base/core-con.mkiv b/tex/context/base/core-con.mkiv index 241d43165..5979bfe37 100644 --- a/tex/context/base/core-con.mkiv +++ b/tex/context/base/core-con.mkiv @@ -20,35 +20,27 @@  \ifdefined\currentlanguage \else \let\currentlanguage\empty              \fi  \ifdefined\labeltext       \else \let\labeltext      \firstofoneargument \fi -%D This module deals with all kind of conversions from numbers -%D and dates. I considered splitting this module in a support -%D one and a core one, but to keep things simple as well as -%D preserve the overview, I decided against splitting. +%D This module deals with all kind of conversions from numbers and dates. I +%D considered splitting this module in a support one and a core one, but to keep +%D things simple as well as preserve the overview, I decided against splitting.  \let\spr\firstofoneargument % separator  \let\stp\firstofoneargument % stopper -% cleaner, some day: -% -% \def\isolateseparators % etex only, even works with list separator overloading -%   {\unexpanded\def\spr##1{{##1}}% -%    \unexpanded\def\stp##1{{##1}}} - -% needed for arab : +% needed for arab:  \unexpanded\def\isolateseparators % even works with list separator overloading -  {\def\spr##1{{##1}}% -   \def\stp##1{{##1}}} +  {\def\spr##1{{##1}}%            % we can probably best mess around with zwj +   \def\stp##1{{##1}}}            % and friends  %D \macros  %D   {numbers}  %D -%D First we deal with the dummy conversion of numbers using the -%D \TEX\ primitive \type{\number}. The uppercase alternative is -%D only there for compatibility with the other conversion -%D macros. We could do without \type{#1} but this way we get -%D rid of unwanted braces. For the savety we also define a -%D non||sence uppercase alternative. +%D First we deal with the dummy conversion of numbers using the \TEX\ primitive +%D \type{\number}. The uppercase alternative is only there for compatibility with +%D the other conversion macros. We could do without \type{#1} but this way we get +%D rid of unwanted braces. For the savety we also define a non||sence uppercase +%D alternative.  %D  %D \showsetup{numbers}  %D @@ -57,8 +49,8 @@  %D \def\Numbers#1{\number#1}  %D \stoptyping  %D -%D Due to read ahead, as in \type{[\pagenumber\space]} the space will -%D disappear, unless we use: +%D Due to read ahead, as in \type{[\pagenumber\space]} the space will disappear, +%D unless we use:  \def\numbers#1{\purenumber{#1}}  \def\Numbers#1{\purenumber{#1}} @@ -66,10 +58,9 @@  %D \macros  %D   {romannumerals,Romannumerals}  %D -%D \TEX\ the program uses a rather tricky conversion from -%D numbers to their roman counterparts. This conversion could -%D of course be programmed in \TEX\ itself, but I guess Knuth -%D found the programming trick worth presenting. +%D \TEX\ the program uses a rather tricky conversion from numbers to their roman +%D counterparts. This conversion could of course be programmed in \TEX\ itself, but +%D I guess Knuth found the programming trick worth presenting.  %D  %D \showsetup{romannumerals}  %D \showsetup{Romannumerals} @@ -113,9 +104,9 @@  %D \macros  %D   {character,Character}  %D -%D Converting a number into a character can of course only -%D be done with numbers less or equal to~26. At the cost of -%D much more macros a faster conversion is possible, using: +%D Converting a number into a character can of course only be done with numbers +%D less or equal to~26. At the cost of much more macros a faster conversion is +%D possible, using:  %D  %D \starttyping  %D \setvalue{char1}{a} \def\character#1{\getvalue{char#1}} @@ -134,9 +125,8 @@  %D \macros  %D   {characters,Characters}  %D -%D Converting large numbers is supported by the next two -%D macros. This time we just count on: $\cdots$~x, y, z, aa, -%D ab, ac~$\cdots$. +%D Converting large numbers is supported by the next two macros. This time we +%D just count on: $\cdots$~x, y, z, aa, ab, ac~$\cdots$.  %D  %D \showsetup{characters}  %D \showsetup{Characters} @@ -174,9 +164,8 @@  %D \macros  %D   {protectconversion}  %D -%D The previous two commands are not robust enough to be -%D passed to \type{\write} en \type{\message}. That's why we -%D introduce: +%D The previous two commands are not robust enough to be passed to \type +%D {\write} en \type{\message}. That's why we introduce:  \unexpanded\def\protectconversion    {\let\doconvertcharacters\firstofoneargument} @@ -184,10 +173,9 @@  %D \macros  %D   {normaltime,normalyear,normalmonth,normalday}  %D -%D The last part of this module is dedicated to converting -%D dates. Because we want to use as meaningful commands as -%D possible, and because \TEX\ already uses up some of those, -%D we save the original meanings. +%D The last part of this module is dedicated to converting dates. Because we +%D want to use as meaningful commands as possible, and because \TEX\ already +%D uses up some of those, we save the original meanings.  \savenormalmeaning\time  \savenormalmeaning\year @@ -197,10 +185,9 @@  %D \macros  %D   {month,MONTH}  %D -%D Converting the month number into a month name is done -%D using a case statement, abstact values and the label -%D mechanism. This way users can easily redefine a label from -%D for instance german into austrian. +%D Converting the month number into a month name is done using a case statement, +%D abstact values and the label mechanism. This way users can easily redefine a +%D label from for instance german into austrian.  %D  %D \starttyping  %D \setuplabeltext [de] [january=J\"anner] @@ -224,11 +211,9 @@  \def\MONTHLONG #1{\WORD{\monthlong {#1}}}  \def\MONTHSHORT#1{\WORD{\monthshort{#1}}} -%D We never explicitly needed this, but Tobias Burnus pointed -%D out that it would be handy to convert to the day of the -%D week. In doing so, we have to calculate the total number of -%D days, taking leapyears into account. For those who are -%D curious: +%D We never explicitly needed this, but Tobias Burnus pointed out that it would be +%D handy to convert to the day of the week. In doing so, we have to calculate the +%D total number of days, taking leapyears into account. For those who are curious:  %D  %D \startitemize[packed]  %D \item  years that can be divided by 4 are leapyears @@ -239,8 +224,7 @@  %D \macros  %D   {weekday,WEEKDAY}  %D -%D The first one is sort of redundant. It takes the day -%D number argument. +%D The first one is sort of redundant. It takes the day number argument.  %D  %D \showsetup{weekday}  %D \showsetup{WEEKDAY} @@ -277,15 +261,15 @@  %D \getbuffer  %D \stoplines  %D -%D The macro \type {\getdayoftheweek} can be used to calculate -%D the number \type {\normalweekday}. +%D The macro \type {\getdayoftheweek} can be used to calculate the number +%D \type {\normalweekday}.  %D \macros  %D   {doifleapyearelse,  %D    getdayspermonth}  %D -%D Sometimes we need to know if we're dealing with a -%D leapyear, so here is a testmacro: +%D Sometimes we need to know if we're dealing with a leapyear, so here is a +%D testmacro:  %D  %D \starttyping  %D \doifleapyearelse{year}{yes}{no} @@ -297,8 +281,7 @@  %D \getdayspermonth{year}{month}  %D \stoptyping  %D -%D The number of days is available in the macro \type -%D {\numberofdays}. +%D The number of days is available in the macro \type {\numberofdays}.  \def\doifleapyearelse#1%    {\ctxcommand{doifleapyearelse(\number#1)}} @@ -320,13 +303,11 @@  %D \macros  %D   {currentdate, rawdate, date}  %D -%D We use these conversion macros in the date formatting -%D macro: +%D We use these conversion macros in the date formatting macro:  %D  %D \showsetup{currentdate}  %D -%D This macro takes care of proper spacing and delivers for -%D instance: +%D This macro takes care of proper spacing and delivers for instance:  %D  %D \startbuffer  %D \currentdate[weekday,day,month,year] % still dutch example @@ -351,8 +332,8 @@  %D  %D or typeset: \getbuffer.  %D -%D When no argument is passed, the current date is given as -%D specified per language (using \type{\installlanguage}). +%D When no argument is passed, the current date is given as specified per +%D language (using \type{\installlanguage}).  %D  %D \showsetup{currentdate}  %D @@ -367,8 +348,8 @@  %D  %D \typebuffer  %D -%D The date is specified by one character keys. When no date -%D is given, we get the current date. +%D The date is specified by one character keys. When no date is given, we +%D get the current date.  %D  %D \startlines  %D \getbuffer @@ -430,10 +411,13 @@  \def\syst_converters_date[#1][#2]%    {\begingroup     \iffirstargument -     \getparameters[\??da][d=\normalday,m=\normalmonth,y=\normalyear,#1]% -     \normalday  \@@dad\relax -     \normalmonth\@@dam\relax -     \normalyear \@@day\relax +     \letdummyparameter\c!d\normalday +     \letdummyparameter\c!m\normalmonth +     \letdummyparameter\c!y\normalyear +     \getdummyparameters[#1]% +     \normalday  \directdummyparameter\c!d\relax +     \normalmonth\directdummyparameter\c!m\relax +     \normalyear \directdummyparameter\c!y\relax     \fi     \syst_converters_current_date[#2]%     \endgroup} @@ -444,9 +428,8 @@  %D \macros  %D   {currenttime}  %D -%D The currenttime is actually the jobtime. You can specify -%D a pattern similar to the previous date macro using the -%D keys \type {h}, \type {m} and a separator. +%D The currenttime is actually the jobtime. You can specify a pattern similar +%D to the previous date macro using the keys \type {h}, \type {m} and a separator.  \unexpanded\def\calculatecurrenttime    {\edef\currenthour  {\ctxcommand{hour  ()}}% @@ -462,7 +445,6 @@  \unexpanded\def\currenttime    {\doifnextoptionalelse\syst_converters_current_time_yes\syst_converters_current_time_nop} -  \unexpanded\def\syst_converters_current_time_yes[#1]%    {\calculatecurrenttime     \processallactionsinset[#1][h=>\currenthour,m=>\currentminute,\s!unknown=>\commalistelement]} @@ -471,16 +453,15 @@    {\normalexpanded{\syst_converters_current_time_yes[\currenttimespecification]}} -%D Because we're dealing with dates, we also introduce a few -%D day loops: +%D Because we're dealing with dates, we also introduce a few day loops:  %D  %D \starttyping  %D \processmonth{year}{month}{command}  %D \processyear{year}{command}{before}{after}  %D \stoptyping  %D -%D The counters \type {\normalyear}, \type {\normalmonth} and -%D \type{\normalday} can be used for for date manipulations. +%D The counters \type {\normalyear}, \type {\normalmonth} and \type {\normalday} +%D can be used for for date manipulations.  \unexpanded\def\processmonth#1#2#3% year month command    {\begingroup @@ -505,15 +486,13 @@  %D \macros  %D   {defineconversion, convertnumber}  %D -%D Conversion involves the macros that we implemented earlier -%D in this module. +%D Conversion involves the macros that we implemented earlier in this module.  %D  %D \showsetup{defineconversion}  %D \showsetup{convertnumber}  %D -%D We can feed this command with conversion macros as well as -%D a set of conversion symbols. Both need a bit different -%D treatment. +%D We can feed this command with conversion macros as well as a set of conversion +%D symbols. Both need a bit different treatment.  %D  %D \starttyping  %D \defineconversion [roman] [\romannumerals] @@ -549,9 +528,9 @@  \def\syst_converters_checked_conversion#1#2%    {\ctxcommand{checkedconversion("#1",#2)}} -%D If a conversion is just a font switch then we need to make sure -%D that the number is indeed end up as number in the input, so we -%D need to handle the second argument. +%D If a conversion is just a font switch then we need to make sure that the +%D number is indeed end up as number in the input, so we need to handle the +%D second argument.  \def\convertnumber#1#2% expandable    {\csname\??conversionarguments @@ -600,19 +579,17 @@  %D \macros  %D   {ordinaldaynumber, highordinalstr, ordinalstr}  %D -%D Efficient general ordinal number converters are sometimes -%D difficult to implement. Fortunately dates never exceed the -%D number~31. +%D Efficient general ordinal number converters are sometimes difficult to +%D implement. Fortunately dates never exceed the number~31.  \def\highordinalstr     #1{\high{\notsmallcapped{#1}}}  \def\ordinalstr         #1{\notsmallcapped{#1}}  \def\ordinaldaynumber   #1{\ctxcommand{ordinal(#1,"\currentlanguage")}} -%D As longs as symbols are linked to levels or numbers, we can -%D also use the conversion mechanism, but in for instance the -%D itemization macros, we prefer symbols because they can more -%D easier be (partially) redefined. Symbols are implemented -%D in another module. +%D As longs as symbols are linked to levels or numbers, we can also use the +%D conversion mechanism, but in for instance the itemization macros, we prefer +%D symbols because they can more easier be (partially) redefined. Symbols are +%D implemented in another module.  \def\smallcappedromannumerals#1{\smallcapped{\romannumerals{#1}}}  \def\smallcappedcharacters   #1{\smallcapped{\characters   {#1}}} diff --git a/tex/context/base/core-def.mkiv b/tex/context/base/core-def.mkiv index 5423b97aa..d418689ef 100644 --- a/tex/context/base/core-def.mkiv +++ b/tex/context/base/core-def.mkiv @@ -24,38 +24,87 @@  \setupinteraction[\c!symbolset=navigation 1] +% what a mess + +\everypar  \emptytoks +\neverypar \emptytoks + +\appendtoks +  % \flushnotes +    \page_otr_command_synchronize_side_floats % an otr specific command +    \checkindentation +    \showparagraphnumber +    \restoreinterlinepenalty +  % \flushmargincontents +  % \flushcommentanchors +    \flushnotes +    \synchronizenotes +    \OTRSETshowstatus +    \registerparoptions +  % \flushsyncpositions +    \flushpostponednodedata +    \typo_delimited_repeat +    \insertparagraphintro +\to \everypar + +\appendtoks +    \flushnotes +\to \everydisplay + +\appendtoks +    \adjustsidefloatdisplaylines +\to \everydisplay + +% \appendtoks +%     \flushsyncpositions +% \to \everyheadstart + +% \appendtoks +%     \flushsyncresets +% \to \everyendoftextbody + +\appendtoks +    \ignorespaces +\to \everybeginofpar + +\appendtoks +    \removeunwantedspaces +  % \strut                % option ? +  % \flushsyncresets +  % \setlastlinewidth     % gone, will be done in lua +    \endgraf +\to \everyendofpar +  % initialization order:  \ifdefined\font_preloads_at_every_job  \else \let\font_preloads_at_every_job \relax \fi  \ifdefined\font_preloads_at_start_text \else \let\font_preloads_at_start_text\relax \fi  \ifdefined\font_preloads_at_stop_text  \else \let\font_preloads_at_stop_text \relax \fi -\appendtoks  \font_preloads_at_start_text          \to \everystarttext -\appendtoks  \font_preloads_at_stop_text           \to \everystoptext - -\appendtoks  \showcontextbanner                    \to \everyjob -\appendtoks  \initializenewlinechar                \to \everyjob -\appendtoks  \calculatecurrenttime                 \to \everyjob -\appendtoks  \loadsystemfiles                      \to \everyjob - -\appendtoks  \loadoptionfile                       \to \everyjob % obsolete  \appendtoks -    \job_options_get_commandline % expands some commands -    \job_options_get_ctxfile     % might expand some commands -\to \everyjob % ok here? - -\appendtoks  \font_preloads_at_every_job           \to \everyjob -\appendtoks  \settopskip                           \to \everyjob -\appendtoks  \initializemainlanguage               \to \everyjob -\appendtoks  \xmlinitialize                        \to \everyjob % is this still needed? -\appendtoks  \setfalse\c_page_backgrounds_new      \to \everyjob -\appendtoks  \setfalse\c_page_backgrounds_some     \to \everyjob -\appendtoks  \initializepagecounters               \to \everyjob +    \font_preloads_at_start_text +\to \everystarttext -\appendtoks  \directsetup{*runtime:options}        \to \everyjob % obsolete -\appendtoks  \directsetup{*runtime:modules}        \to \everyjob % obsolete +\appendtoks +    \font_preloads_at_stop_text +\to \everystoptext  \appendtoks +    \showcontextbanner +    \initializenewlinechar +    \calculatecurrenttime +    \loadsystemfiles +  % \loadoptionfile                       % obsolete, but nice to keep as reference of when/how +    \job_options_get_commandline          % expands some commands +    \job_options_get_ctxfile              % might expand some commands +    \font_preloads_at_every_job +    \settopskip                           % brrr +    \initializemainlanguage +    \initializexmlprocessing              % is this still needed? +    \initializepagebackgrounds +    \initializepagecounters +  % \directsetup{*runtime:options}%       % obsolete as the option file is replaced by a more direct mechanism +  % \directsetup{*runtime:modules}%       % obsolete as the option file is replaced by a more direct mechanism      \job_options_set_modes      \job_options_set_modules      \job_options_set_environments @@ -65,14 +114,25 @@      \job_options_log  \to \everystarttext -\appendtoks  \ifarrangingpages\poparrangedpages\fi \to \everybye +\appendtoks +    \ifarrangingpages\poparrangedpages\fi +\to \everybye + +\prependtoks +    \resetallattributes +\to \everybeforeoutput -\prependtoks \resetallattributes                   \to \everybeforeoutput +\appendtoks +    \the\everybackendshipout +\to \everyshipout -\appendtoks  \the\everybackendshipout              \to \everyshipout -\prependtoks \the\everylastbackendshipout          \to \everylastshipout +\prependtoks +    \the\everylastbackendshipout +\to \everylastshipout -\prependtoks \lefttoright                          \to \everybeforeoutput +\prependtoks +    \lefttoright +\to \everybeforeoutput  % temporary here: diff --git a/tex/context/base/core-env.mkiv b/tex/context/base/core-env.mkiv index 1819d084d..6b369b29a 100644 --- a/tex/context/base/core-env.mkiv +++ b/tex/context/base/core-env.mkiv @@ -625,4 +625,51 @@  \def\env                   {\getvariable       \s!environment}  \def\envvar                {\getvariabledefault\s!environment} +%D \macros +%D   {defineselector,setupselector,select,directselect} +%D +%D \starttyping +%D \defineselector[caption][max=2,n=2] +%D +%D \start +%D     \setupselector[caption][n=1] +%D     \placelist[figure][criterium=all] +%D \stop +%D +%D \starttext +%D     \placefigure +%D       {\select{caption}{zapf}{\input zapf \relax}} +%D       {} +%D \stoptext +%D \stoptyping + +\installcorenamespace{selector} + +\unexpanded\def\defineselector{\dodoubleargument\syst_selectors_define} +\unexpanded\def\setupselector {\dodoubleargument\syst_selectors_setup} + +% \def\syst_selectors_define[#1][#2]{\getparameters[\??selector#1][\c!max=\plusone,\c!n=\plusone,#2]} +% \def\syst_selectors_setup [#1][#2]{\getparameters[\??selector#1][#2]} + +\def\syst_selectors_define[#1][{\getparameters[\??selector#1][\c!max=\plustwo,\c!n=\plusone,} +\def\syst_selectors_setup [#1][{\getparameters[\??selector#1][} + +\unexpanded\def\select % unexpandable +  {\directselect} + +% \def\directselect#1% expandable +%   {\filterfromnext % maybe add an \expanded +%      {\csname\??selector\ifcsname\??selector#1\c!max\endcsname#1\fi\c!max\endcsname}% +%      {\csname\??selector\ifcsname\??selector#1\c!n  \endcsname#1\fi\c!n  \endcsname}} +% +% this is more efficient when the arguments are used a few times (or passed along): + +\def\directselect#1% expandable +  {\expandafter\filterfromnext +     \csname\??selector\ifcsname\??selector#1\c!max\endcsname#1\fi\c!max\expandafter\endcsname +     \csname\??selector\ifcsname\??selector#1\c!n  \endcsname#1\fi\c!n  \endcsname} + +\letvalue{\??selector\c!max}\plusone +\letvalue{\??selector\c!n  }\plusone +  \protect \endinput diff --git a/tex/context/base/core-ini.mkiv b/tex/context/base/core-ini.mkiv index 6235d5bde..7b32cb3a2 100644 --- a/tex/context/base/core-ini.mkiv +++ b/tex/context/base/core-ini.mkiv @@ -13,58 +13,199 @@  \writestatus{loading}{ConTeXt Core Macros / Additional Initialization} -%D We will move more code to here, so that we become less dependent of the -%D orde in which modules are loaded. -  \unprotect -\everypar  \emptytoks -\neverypar \emptytoks +%D We introduce a couple of variables that are used all over \CONTEXT. Alternatively +%D we could define them in each module but as they are part of the bigger picture we +%D prefer to do it here. Ideally we should hav ea proper dependency tree but it might +%D be that we want to make versions with a smaller footprints in which case one would +%D still need to define the token list registers (unless we could do that runtime). -\appendtoks -    %flushnotes -    \page_otr_command_synchronize_side_floats % an otr specific command -    \checkindentation -    \showparagraphnumber -    \restoreinterlinepenalty -    %flushmargincontents -    %flushcommentanchors -    \flushnotes -    \synchronizenotes -    \OTRSETshowstatus -    \registerparoptions -   %\flushsyncpositions -    \flushpostponednodedata -    \typo_delimited_repeat -    \insertparagraphintro -\to \everypar +%D \macros +%D   {every...} +%D +%D A few every's. -\appendtoks -    \flushnotes -\to \everydisplay +%D Output routine: + +\newtoks \everybeforeoutput +\newtoks \everyafteroutput + +%D Shipout: + +\newtoks \everyshipout +\newtoks \everybeforeshipout +\newtoks \everyaftershipout +\newtoks \everyfirstshipout +\newtoks \everylastshipout + +%D End of run: + +\newtoks \everybye +\newtoks \everygoodbye +\newtoks \everynotabene + +%D Document: + +\newtoks \everysetupdocument +\newtoks \everyendoftextbody + +\newtoks \everystarttext +\newtoks \everystoptext + +%D Purity: + +\newtoks \everyforgetall +\newtoks \everycleanupfeatures +\newtoks \everysimplifycommands + +\let\simplifiedcommands\everysimplifycommands % backward compatible, will stay as it's used in styles + +\unexpanded\def\forgetall       {\the\everyforgetall} +\unexpanded\def\cleanupfeatures {\the\everycleanupfeatures} +\unexpanded\def\simplifycommands{\the\everysimplifycommands}  \appendtoks -    \adjustsidefloatdisplaylines -\to \everydisplay +    \everypar\emptytoks % pretty important +\to \everyforgetall + +%D Page building: + +\newtoks \everybeforepagebody +\newtoks \everyafterpagebody + +\let\everypagebody\everybeforepagebody % backward compatible, will become obsolete + +%D Floats: + +\newtoks \everyinsidefloat + +%D Sectioning: + +\newtoks \everyheadstart + +%D Par building (experimental, used in xml <p> .. </p>) + +\newtoks \everybeginofpar +\newtoks \everyendofpar +%newtoks \everyparflush + +\unexpanded\def\bpar{\the\everybeginofpar\ignorespaces}                  % may interfere with \everypar +\unexpanded\def\epar{\ifhmode\removeunwantedspaces\the\everyendofpar\fi} % test prevents problems with \bpar\epar + +%D Lists: + +\newtoks \everylistentry +\newtoks \everysavesortkeys + +%D Marks: -% \appendtoks -%     \flushsyncpositions -% \to \everyheadstart +\newtoks \everymarking -% \appendtoks -%     \flushsyncresets -% \to \everyendoftextbody +%D Fonts: + +\newtoks \everyfont +\newtoks \everyglobalbodyfont +\newtoks \everydefinedfont + +\newevery \everybodyfont   \EveryBodyFont +\newevery \everyfontswitch \EveryFontSwitch + +\newtoks \everysetupbodyfont +\newtoks \everyswitchtobodyfont + +%D Math: + +\newtoks \everybeforedisplayformula +\newtoks \everymathematics + +\prependtoks \the\everymathematics \to \everymath +\prependtoks \the\everymathematics \to \everydisplay + +%D Tables: + +\newtoks \everytable % we need to disstinguish kinds + +%D State mess: + +\newtoks \everypushsomestate +\newtoks \everypopsomestate + +\unexpanded\def\pushsomestates{\the\everypushsomestate} +\unexpanded\def\popsomestates {\the\everypopsomestate } + +%D More generic (used to be pushcolor etc) + +\newtoks\everystarttextproperties +\newtoks\everystoptextproperties + +\unexpanded\def\starttextproperties{\the\everystarttextproperties} +\unexpanded\def\stoptextproperties {\the\everystoptextproperties} + +%D \macros +%D   {trialtypesetting} +%D +%D We disable trial typesetting in the output routine, +%D just to be sure. + +\prependtoks +    \resettrialtypesetting +\to \everybeforepagebody + +%D \macros +%D   {ifinpagebody,ifinsidecolumns,ifdoublesided,ifsinglesided} +%D +%D These will become system modes and conditionals + +\newif \ifinpagebody +\newif \ifinsidecolumns +\newif \ifdoublesided   \doublesidedfalse +\newif \ifsinglesided   \singlesidedtrue +\newif \ifinsidefloat +\newif \ifdoingblocks +\newif \ifgridsnapping + +%D \macros +%D   {ifproductionrun} +%D +%D This boolean can be used to bypass certain initializations. + +\newif\ifproductionrun  \appendtoks -    \ignorespaces -\to \everybeginofpar +    \productionruntrue +\to \everydump + +%D \macros +%D   {everyboxedcontent, ifboxedcontent, +%D    startboxedcontent, stopboxedcontent} +%D +%D This one is relatively new and will be used as a more robust test for inner +%D situations. + +\newif  \ifboxedcontent +\newtoks\everyboxedcontent  \appendtoks -    \removeunwantedspaces -    %strut                % option ? -  % \flushsyncresets -    %setlastlinewidth     % gone, will be done in lua -    \endgraf -\to \everyendofpar +    \boxedcontenttrue +\to \everyboxedcontent + +\unexpanded\def\startboxedcontent{\bgroup\the\everyboxedcontent} + +\let\stopboxedcontent\egroup + +%D We store some original meanings, maybe in \type {math-ini}. + +\let\normalat   \at +\let\normalin   \in +\let\normalfrom \from +%let\normalover \over +\let\normalabout\about + +%D This will be implemented way later: + +\let\setlayoutcomponentattribute  \gobbleoneargument +\let\resetlayoutcomponentattribute\relax +\let\layoutcomponentboxattribute  \empty  \protect \endinput diff --git a/tex/context/base/core-var.mkiv b/tex/context/base/core-var.mkiv deleted file mode 100644 index f9baa8995..000000000 --- a/tex/context/base/core-var.mkiv +++ /dev/null @@ -1,254 +0,0 @@ -%D \module -%D   [       file=core-var, -%D        version=1998.02.21, -%D          title=\CONTEXT\ Core Macros, -%D       subtitle=Variables, -%D         author=Hans Hagen, -%D           date=\currentdate, -%D      copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] -%C -%C This module is part of the \CONTEXT\ macro||package and is -%C therefore copyrighted by \PRAGMA. See mreadme.pdf for -%C details. - -\writestatus{loading}{ConTeXt Core Macros / Variables} - -\unprotect - -%D Much of this will move to *-ini files. - -%D We introduce a couple of variables that are used all over -%D \CONTEXT. Alternatively we could define them in each module -%D but as they are part of the bigger picture we prefer to do -%D it here. - -%D \macros -%D   {every...} -%D -%D A few every's. Some are only used in \MKII\ or \MKIV. - -%D Output routine: - -\newtoks \everybeforeoutput -\newtoks \everyafteroutput - -%D Shipout: - -\newtoks \everyshipout -\newtoks \everybeforeshipout -\newtoks \everyaftershipout -\newtoks \everyfirstshipout -\newtoks \everylastshipout - -%D End of run: - -\newtoks \everybye -\newtoks \everygoodbye -\newtoks \everynotabene - -%D Document - -\newtoks \everysetupdocument -\newtoks \everyendoftextbody - -\newtoks \everystarttext -\newtoks \everystoptext - -%D Purity: - -\newtoks \everyforgetall -\newtoks \everycleanupfeatures - -\unexpanded\def\cleanupfeatures{\the\everycleanupfeatures} -\unexpanded\def\forgetall      {\the\everyforgetall} - -\appendtoks -    \everypar\emptytoks % pretty important -\to \everyforgetall - -%D Page building: - -\newtoks \everybeforepagebody -\newtoks \everyafterpagebody - -\let \everypagebody \everybeforepagebody % backward compatible, will become obsolete - -%D Floats: - -\newtoks \everyinsidefloat - -%D Sectioning: - -\newtoks \everyheadstart - -%D Par building (experimental, used in xml <p> .. </p>) - -\newtoks \everybeginofpar -\newtoks \everyendofpar -%newtoks \everyparflush - -\unexpanded\def\bpar{\dostarttagged\t!paragraph\empty\the\everybeginofpar\ignorespaces} % may interfere with \everypar -\unexpanded\def\epar{\ifhmode\removeunwantedspaces\the\everyendofpar\fi\dostoptagged  } % test prevents problems with \bpar\epar - -%D Lists: - -\newtoks \everylistentry -\newtoks \everysavesortkeys - -%D Marks: - -\newtoks \everymarking - -%D Fonts: - -\newtoks \everyfont -\newtoks \everyglobalbodyfont -\newtoks \everydefinedfont - -\newevery \everybodyfont   \EveryBodyFont -\newevery \everyfontswitch \EveryFontSwitch - -\newtoks \everysetupbodyfont -\newtoks \everyswitchtobodyfont - -%D Math: - -\newtoks \everybeforedisplayformula -\newtoks \everymathematics - -\prependtoks \the\everymathematics \to \everymath -\prependtoks \the\everymathematics \to \everydisplay - -%D Tables - -\newtoks \everytable - -%D Simplification: - -\newtoks \simplifiedcommands - -\unexpanded\def\simplifycommands -  {\the\simplifiedcommands} - -\appendtoks -    \let\ =\space -\to \simplifiedcommands - -%D State mess: - -\newtoks \everypushsomestate -\newtoks \everypopsomestate - -\def\pushsomestates{\the\everypushsomestate} -\def\popsomestates {\the\everypopsomestate } - -%D More generic (used to be pushcolor etc) - -\newtoks\everystarttextproperties -\newtoks\everystoptextproperties - -\unexpanded\def\starttextproperties{\the\everystarttextproperties} -\unexpanded\def\stoptextproperties {\the\everystoptextproperties} - -%D \macros -%D   {trialtypesetting} -%D -%D We disable trial typesetting in the output routine, -%D just to be sure. - -\prependtoks \resettrialtypesetting \to \everybeforepagebody - -%D \macros -%D   {ifinpagebody,ifinsidecolumns,ifdoublesided,ifsinglesided} - -\newif \ifinpagebody -\newif \ifinsidecolumns -\newif \ifdoublesided   \doublesidedfalse -\newif \ifsinglesided   \singlesidedtrue -\newif \ifinsidefloat -\newif \ifdoingblocks -\newif \ifgridsnapping - -%D \macros -%D   {ifprocessingXML} -%D -%D We need this one even if no \XML\ is supported. - -% \newif\ifprocessingXML % old way - -%D \macros -%D   {ifproductionrun} -%D -%D This boolean can be used to bypass certain -%D initializations. - -\newif\ifproductionrun   \appendtoks \productionruntrue \to \everydump - -%D \macros -%D   {everyboxedcontent, ifboxedcontent, -%D    startboxedcontent, stopboxedcontent} -%D -%D This one is relatively new and will be used as a more -%D robust test for inner situations. - -\newif  \ifboxedcontent -\newtoks\everyboxedcontent - -\appendtoks \boxedcontenttrue \to \everyboxedcontent - -\unexpanded\def\startboxedcontent{\bgroup\the\everyboxedcontent} -\let\stopboxedcontent  \egroup - -%D \macros -%D   {fastmode,silentmode} -%D -%D These commands are obsolete. - -\let\fastmode  \relax -\let\silentmode\relax - -%D \macros -%D   {defineselector,setupselector} -%D -%D \starttyping -%D \defineselector[caption][max=2,n=2] -%D -%D \start -%D     \setupselector[caption][n=1] -%D     \placelist[figure][criterium=all] -%D \stop -%D -%D \starttext -%D     \placefigure -%D       {\select{caption}{zapf}{\input zapf \relax}} -%D       {} -%D \stoptext -%D \stoptyping - -\unexpanded\def\defineselector{\dodoubleargument\dodefineselector} -\unexpanded\def\setupselector {\dodoubleargument\dosetupselector} - -\def\dodefineselector[#1][#2]{\getparameters[\??sx#1][\c!max=2,\c!n=1,#2]} -\def\dosetupselector [#1][#2]{\getparameters[\??sx#1][#2]} - -\unexpanded\def\select#1% -  {\filterfromnext -     {\executeifdefined{\??sx#1\c!max}1} -     {\executeifdefined{\??sx#1\c!n  }1}} - -%D We store some original meanings, maybe in \type -%D {math-ini}. - -\let\normalat   \at -\let\normalin   \in -\let\normalfrom \from -%let\normalover \over -\let\normalabout\about - -%D Add-ons: - -\let\setlayoutcomponentattribute  \gobbleoneargument -\let\resetlayoutcomponentattribute\relax -\let\layoutcomponentboxattribute  \empty - -\protect \endinput diff --git a/tex/context/base/enco-ini.mkiv b/tex/context/base/enco-ini.mkiv index 816e59d9d..aca70f0c0 100644 --- a/tex/context/base/enco-ini.mkiv +++ b/tex/context/base/enco-ini.mkiv @@ -385,6 +385,6 @@  \appendtoks      \let\buildtextaccent\secondoftwoarguments -\to \simplifiedcommands +\to \everysimplifycommands  \protect \endinput diff --git a/tex/context/base/file-ini.mkvi b/tex/context/base/file-ini.mkvi index b0f6244aa..989241dd1 100644 --- a/tex/context/base/file-ini.mkvi +++ b/tex/context/base/file-ini.mkvi @@ -73,15 +73,17 @@  %D \popendofline  %D \stoptyping +\installsystemnamespace{eolstack} +  \newcount\c_system_files_eol_level  \unexpanded\def\pushendofline    {\advance\c_system_files_eol_level\plusone -   \expandafter\chardef\csname\??fi:eol:\number\c_system_files_eol_level\endcsname\catcode\endoflineasciicode +   \expandafter\chardef\csname\??eolstack\number\c_system_files_eol_level\endcsname\catcode\endoflineasciicode     \catcode\endoflineasciicode\commentcatcode}  \unexpanded\def\popendofline -  {\catcode\endoflineasciicode\csname\??fi:eol:\number\c_system_files_eol_level\endcsname +  {\catcode\endoflineasciicode\csname\??eolstack\number\c_system_files_eol_level\endcsname     \advance\c_system_files_eol_level\minusone}  \unexpanded\def\restoreendofline @@ -101,11 +103,11 @@     \the\everystartreadingfile     \pushcatcodetable       % saveguard     \setcatcodetable\ctxcatcodes -   \ctxlua{regimes.push()}}% temporarily this way +   \ctxcommand{pushregime()}}% temporarily this way  \unexpanded\def\stopreadingfile    {\popcatcodetable      % saveguard -   \ctxlua{regimes.pop()}% temporarily this way +   \ctxcommand{popregime()}% temporarily this way     \the\everystopreadingfile     \global\advance\readingfilelevel\minusone} @@ -203,11 +205,13 @@  %D This command obeys the standard method for locating files. We could  %D move this function to the \LUA\ end. +\installsystemnamespace {fileonce} +  \unexpanded\def\doonlyonce#whatever% -  {\ifcsname\??fi:#whatever\endcsname +  {\ifcsname\??fileonce#whatever\endcsname       \expandafter\gobbleoneargument     \else -     \letgvalue{\??fi:#whatever}\relax +     \letgvalue{\??fileonce#whatever}\relax       \expandafter\firstofoneargument     \fi} @@ -215,11 +219,11 @@    {\doonlyonce{#name}{\doiffileelse{#name}{\inputgivenfile{#name}}\donothing}}  \unexpanded\def\doendinputonce#name% -  {\ifcsname\??fi:#name\endcsname +  {\ifcsname\??fileonce#name\endcsname       \expandafter\endinput     \fi}  \unexpanded\def\forgetdoingonce#whatever% -  {\global\letbeundefined{\??fi:#whatever}} +  {\global\letbeundefined{\??fileonce#whatever}}  \protect \endinput diff --git a/tex/context/base/file-job.mkvi b/tex/context/base/file-job.mkvi index 4a54c6b2f..3bde3f268 100644 --- a/tex/context/base/file-job.mkvi +++ b/tex/context/base/file-job.mkvi @@ -75,17 +75,14 @@  \def\syst_files_load#name% only mkiv files    {\readsysfile{#name.\mksuffix}{\showmessage\m!system2{#name.\mksuffix}}\donothing} +% obsolete, but we keep it as reference of what happened +%  % \unexpanded\def\loadoptionfile  %   {\readjobfile{\jobname.\f!optionextension}  %      {\writestatus\m!system{\jobname.\f!optionextension\space loaded}%  %       \ctxcommand{copyfiletolog("\jobname.\f!optionextension")}}%  %      {\writestatus\m!system{no \jobname.\f!optionextension}}} -\unexpanded\def\loadoptionfile % this one is soon obsolete -  {\readjobfile{\jobname.\f!optionextension} -     {\ctxcommand{copyfiletolog("\jobname.\f!optionextension")}}% -     {}} -  % document structure  \ifdefined\textlevel\else \newcount\textlevel \fi % might go away diff --git a/tex/context/base/font-sty.mkvi b/tex/context/base/font-sty.mkvi index d8f01afa7..3e1bb96da 100644 --- a/tex/context/base/font-sty.mkvi +++ b/tex/context/base/font-sty.mkvi @@ -84,7 +84,7 @@  % \appendtoks  %     \let\groupedcommand\thirdofthreearguments -% \to \simplifiedcommands +% \to \everysimplifycommands  %D This command also defines the keyword as command. This means  %D that the example definition of \type{bold} we gave before, diff --git a/tex/context/base/grph-raw.mkiv b/tex/context/base/grph-raw.mkiv index 5b488cf58..a40b78455 100644 --- a/tex/context/base/grph-raw.mkiv +++ b/tex/context/base/grph-raw.mkiv @@ -45,14 +45,14 @@  \unexpanded\def\bitmapimage[#1]#2%    {\hbox\bgroup -     \getparameters[\??gb][\c!color=rgb,\c!width=,\c!height=,\c!x=,\c!y=,#1]% -     \ctxlua{figures.bitmapimage { +     \getdummyparameters[\c!color=rgb,\c!width=,\c!height=,\c!x=,\c!y=,#1]% +     \ctxlua{figures.bitmapimage { % we could pass #1 directly ... todo          data        = \!!bs#2\!!es, -        xresolution = "\@@gbx", -        yresolution = "\@@gby", -        colorspace  = "\@@gbcolor", -        width       = "\@@gbwidth", -        height      = "\@@gbheight" +        colorspace  = "\directdummyparameter\c!color", +        width       = "\directdummyparameter\c!width", +        height      = "\directdummyparameter\c!height" +        xresolution = "\directdummyparameter\c!x", +        yresolution = "\directdummyparameter\c!y",       }}%     \egroup} diff --git a/tex/context/base/grph-trf.mkiv b/tex/context/base/grph-trf.mkiv index 4474eb8f1..87193ae4d 100644 --- a/tex/context/base/grph-trf.mkiv +++ b/tex/context/base/grph-trf.mkiv @@ -575,8 +575,9 @@  %D  %D \showsetup{setupclipping} -\unexpanded\def\setupclipping -  {\dodoubleargument\getparameters[\??cp]} +\installcorenamespace{clipping} + +\installdirectcommandhandler \??clipping {clipping}  \unexpanded\def\clip    {\dosingleempty\grph_clip} @@ -584,62 +585,106 @@  \def\grph_clip[#1]% nb top->bottom left->right    {\bgroup     \iffirstargument -     \getparameters[\??cp][#1]% +     \setupcurrentclipping[#1]%     \fi     \dowithnextboxcs\grph_clip_finish\hbox}  \def\grph_clip_finish -  {\doifelse\@@cpstate\v!start +  {\doifelse{\clippingparameter\c!state}\v!start       \grph_clip_yes_finish       \grph_clip_nop_finish} +% \def\grph_clip_yes_finish +%   {\ifdim\@@cpwidth>\zeropoint +%      \!!dimena\@@cpwidth +%      \!!dimenc\@@cphoffset +%    \else +%      \!!dimena\wd\nextbox +%      \divide\!!dimena \@@cpnx +%      \!!dimenc\@@cpx\!!dimena +%      \advance\!!dimenc -\!!dimena +%      \!!dimena\@@cpsx\!!dimena +%    \fi +%    \relax % sure +%    \ifdim\@@cpheight>\zeropoint +%      \!!dimenb\@@cpheight +%      \!!dimend\ht\nextbox +%      \advance\!!dimend -\@@cpvoffset +%      \advance\!!dimend -\!!dimenb +%    \else +%      \!!dimenb\ht\nextbox +%      \divide\!!dimenb \@@cpny +%      \!!dimend-\@@cpy\!!dimenb +%      \advance\!!dimend -\@@cpsy\!!dimenb +%      \advance\!!dimend \!!dimenb +%      \!!dimenb\@@cpsy\!!dimenb +%      \advance\!!dimend \ht\nextbox % dimend ! +%    \fi +%    \setbox\nextbox\hbox                            % old +%      {\advance\!!dimenc -\@@cpleftoffset           % new ! +%       \advance\!!dimend -\@@cpbottomoffset         % new ! % - added +%       \hskip-\!!dimenc\lower\!!dimend\box\nextbox}% old +%    \wd\nextbox\zeropoint +%    \ht\nextbox\zeropoint +%    \dp\nextbox\zeropoint +%    \setbox\nextbox\hbox +%      {\advance\!!dimena \@@cpleftoffset         % new ! +%       \advance\!!dimena \@@cprightoffset        % new ! +%       \advance\!!dimenb \@@cpbottomoffset       % new ! +%       \advance\!!dimenb \@@cptopoffset          % new ! +%       \dostartclipping\@@cpmp\!!dimena\!!dimenb % old +%         \box\nextbox +%       \dostopclipping}% +%    \setbox\nextbox\hbox                       % new ! +%      {\!!dimena-\@@cpleftoffset               % new ! +%       \!!dimenb \@@cpbottomoffset             % new ! % - removed +%       \hskip\!!dimena\lower\!!dimenb\box\nextbox}% new ! +%    \wd\nextbox\!!dimena +%    \ht\nextbox\!!dimenb +%    \dp\nextbox\zeropoint +%    \box\nextbox +%    \egroup} +  \def\grph_clip_yes_finish -  {\ifdim\@@cpwidth>\zeropoint -     \!!dimena\@@cpwidth -     \!!dimenc\@@cphoffset +  {\ifdim\clippingparameter\c!width>\zeropoint +     \scratchwidth  \clippingparameter\c!width +     \scratchxoffset\clippingparameter\c!hoffset     \else -     \!!dimena\wd\nextbox -     \divide\!!dimena \@@cpnx -     \!!dimenc\@@cpx\!!dimena -     \advance\!!dimenc -\!!dimena -     \!!dimena\@@cpsx\!!dimena +     \scratchwidth\dimexpr\wd\nextbox/\clippingparameter\c!nx\relax +     \scratchxoffset\dimexpr\clippingparameter\c!x\scratchwidth-\scratchwidth\relax +     \scratchwidth\clippingparameter\c!sx\scratchwidth     \fi     \relax % sure -   \ifdim\@@cpheight>\zeropoint -     \!!dimenb\@@cpheight -     \!!dimend\ht\nextbox -     \advance\!!dimend -\@@cpvoffset -     \advance\!!dimend -\!!dimenb +   \ifdim\clippingparameter\c!height>\zeropoint +     \scratchheight\clippingparameter\c!height +     \scratchyoffset\dimexpr\ht\nextbox-\clippingparameter\c!voffset-\scratchheight\relax     \else -     \!!dimenb\ht\nextbox -     \divide\!!dimenb \@@cpny -     \!!dimend-\@@cpy\!!dimenb -     \advance\!!dimend -\@@cpsy\!!dimenb -     \advance\!!dimend \!!dimenb -     \!!dimenb\@@cpsy\!!dimenb -     \advance\!!dimend \ht\nextbox % dimend ! +     \scratchheight\dimexpr\ht\nextbox/\clippingparameter\c!ny\relax +     \scratchyoffset\dimexpr-\clippingparameter\c!y\scratchheight-\clippingparameter\c!sy\scratchheight+\scratchheight\relax +     \scratchheight\clippingparameter\c!sy\scratchheight +     \advance\scratchyoffset \ht\nextbox     \fi -   \setbox\nextbox\hbox                            % old -     {\advance\!!dimenc -\@@cpleftoffset           % new ! -      \advance\!!dimend -\@@cpbottomoffset         % new ! % - added -      \hskip-\!!dimenc\lower\!!dimend\box\nextbox}% old +   \setbox\nextbox\hbox +     {\advance\scratchxoffset -\clippingparameter\c!leftoffset  \relax +      \advance\scratchyoffset -\clippingparameter\c!bottomoffset\relax +      \hskip-\scratchxoffset +      \lower\scratchyoffset +      \box\nextbox}%     \wd\nextbox\zeropoint     \ht\nextbox\zeropoint     \dp\nextbox\zeropoint     \setbox\nextbox\hbox -     {\advance\!!dimena \@@cpleftoffset         % new ! -      \advance\!!dimena \@@cprightoffset        % new ! -      \advance\!!dimenb \@@cpbottomoffset       % new ! -      \advance\!!dimenb \@@cptopoffset          % new ! -      \dostartclipping\@@cpmp\!!dimena\!!dimenb % old +     {\advance\scratchwidth \dimexpr\clippingparameter\c!leftoffset  +\clippingparameter\c!rightoffset\relax +      \advance\scratchheight\dimexpr\clippingparameter\c!bottomoffset+\clippingparameter\c!topoffset  \relax +      \dostartclipping{\clippingparameter\c!mp}\scratchwidth\scratchheight          \box\nextbox        \dostopclipping}% -   \setbox\nextbox\hbox                       % new ! -     {\!!dimena-\@@cpleftoffset               % new ! -      \!!dimenb \@@cpbottomoffset             % new ! % - removed -      \hskip\!!dimena\lower\!!dimenb\box\nextbox}% new ! -   \wd\nextbox\!!dimena -   \ht\nextbox\!!dimenb +   \setbox\nextbox\hbox +     {\hskip-\clippingparameter\c!leftoffset +      \lower \clippingparameter\c!bottomoffset +      \box\nextbox}% +   \wd\nextbox\scratchwidth +   \ht\nextbox\scratchheight     \dp\nextbox\zeropoint     \box\nextbox     \egroup} @@ -650,18 +695,18 @@  \setupclipping    [\c!state=\v!start, -   \c!n=1, % was 2 -   \c!nx=\@@cpn,\c!x=1,\c!sx=1, -   \c!ny=\@@cpn,\c!y=1,\c!sy=1, +   \c!n=\plusone, % was \plustwo +   \c!nx=\clippingparameter\c!n,\c!x=\plusone,\c!sx=\plusone, +   \c!ny=\clippingparameter\c!n,\c!y=\plusone,\c!sy=\plusone,     \c!width=\zeropoint,     \c!height=\zeropoint,     \c!hoffset=\zeropoint,     \c!voffset=\zeropoint,     \c!offset=\zeropoint, -   \c!leftoffset=\@@cpoffset,  % \zeropoint, -   \c!rightoffset=\@@cpoffset, % \zeropoint, -   \c!topoffset=\@@cpoffset,   % \zeropoint, -   \c!bottomoffset=\@@cpoffset,% \zeropoint, +   \c!leftoffset=\clippingparameter\c!offset, +   \c!rightoffset=\clippingparameter\c!offset, +   \c!topoffset=\clippingparameter\c!offset, +   \c!bottomoffset=\clippingparameter\c!offset,     \c!mp=]  %D \startbuffer diff --git a/tex/context/base/lang-lab.mkiv b/tex/context/base/lang-lab.mkiv index 0e0c4b31c..68458e069 100644 --- a/tex/context/base/lang-lab.mkiv +++ b/tex/context/base/lang-lab.mkiv @@ -133,8 +133,7 @@       \let#7\firstofoneargument % to be checked       \let#8\firstofoneargument % to be checked       \let#9\firstofoneargument % to be checked -   \to \simplifiedcommands -  } +   \to \everysimplifycommands}  \let\flushleftlabelclass \firstoftwoarguments  \let\flushrightlabelclass\secondoftwoarguments @@ -262,15 +261,17 @@  %D which expands to {\em something} or {\em iets}, depending on  %D de current language. +\installcorenamespace{translation} +  \unexpanded\def\translate    {\dosingleempty\lang_translate}  \def\lang_translate[#1]% -  {\getparameters[\??lg][#1]% -   \ifcsname\??lg\currentlanguage\endcsname -     \csname\??lg\currentlanguage\endcsname -   \else\ifcsname\??lg\s!en\endcsname -     \csname\??lg\s!en\endcsname +  {\getparameters[\??translation][#1]% +   \ifcsname\??translation\currentlanguage\endcsname +     \csname\??translation\currentlanguage\endcsname +   \else\ifcsname\??translation\s!en\endcsname +     \csname\??translation\s!en\endcsname     \else       [translation #1]%     \fi\fi} @@ -293,8 +294,8 @@  %D \stoptyping  \def\assigntranslation[#1]\to#2% -  {\getparameters[\??lg][#1]% -   \edef#2{\csname\??lg\currentlanguage\endcsname}} +  {\getparameters[\??translation][#1]% +   \edef#2{\csname\??translation\currentlanguage\endcsname}}  %D \macros  %D   {commalistsentence} diff --git a/tex/context/base/lang-mis.mkiv b/tex/context/base/lang-mis.mkiv index a537a2936..4d8b8e08a 100644 --- a/tex/context/base/lang-mis.mkiv +++ b/tex/context/base/lang-mis.mkiv @@ -683,7 +683,7 @@      \doglobal \appendtoks          \def|#1|{\ifx#1\empty\empty-\else#1\fi}% -    \to \simplifiedcommands +    \to \everysimplifycommands  \egroup diff --git a/tex/context/base/luat-ini.mkiv b/tex/context/base/luat-ini.mkiv index 46b2d1f7f..094c4ee53 100644 --- a/tex/context/base/luat-ini.mkiv +++ b/tex/context/base/luat-ini.mkiv @@ -108,16 +108,18 @@  %D Beware: because \type {\expanded} is een convert command, the error  %D message will show \type{<inserted text>} as part of the message. +\installcorenamespace{luacode} +  \def\luat_start_named_lua_code#1%    {\begingroup     \obeylualines     \obeyluatokens -   \csname\??lu:c:#1\endcsname} +   \csname\??luacode#1\endcsname}  \unexpanded\def\definenamedlua[#1]#2[#3]% no optional arg handling here yet -  {\ifcsname\??lu:c:#1\endcsname \else +  {\ifcsname\??luacode#1\endcsname \else       \scratchcounter\ctxlua{lua.registername("#1","#3")}% -     \normalexpanded{\edef\csname\??lu:c:#1\endcsname##1\csname\e!stop#1\v!code\endcsname}% +     \normalexpanded{\edef\csname\??luacode#1\endcsname##1\csname\e!stop#1\v!code\endcsname}%         {\endgroup\noexpand\directlua\the\scratchcounter{protect("#1\s!data")##1}}%       \expandafter\def \csname\e!start#1\v!code\endcsname   {\luat_start_named_lua_code{#1}}%       \expandafter\edef\csname        #1\v!code\endcsname##1{\noexpand\directlua\the\scratchcounter{protect("#1\s!data")##1}}% diff --git a/tex/context/base/lxml-ini.mkiv b/tex/context/base/lxml-ini.mkiv index 83e0a6f71..73cd4be7e 100644 --- a/tex/context/base/lxml-ini.mkiv +++ b/tex/context/base/lxml-ini.mkiv @@ -313,7 +313,7 @@      \xmlprocessingmode\executeifdefined{\??xmldefaults\directxmlparameter\c!default}\plusone  \to \everysetupxml -\unexpanded\def\xmlinitialize % is this still needed? +\unexpanded\def\initializexmlprocessing % is this still needed?    {\the\everysetupxml}  \let\p_lxml_entities\empty diff --git a/tex/context/base/math-ali.mkiv b/tex/context/base/math-ali.mkiv index 94800b3ba..57727b03a 100644 --- a/tex/context/base/math-ali.mkiv +++ b/tex/context/base/math-ali.mkiv @@ -15,17 +15,6 @@  \unprotect -% helpers .. will move - -\def\doxxdoubleempty#1#2% -  {\ifx#2[\expandafter\dodoxxdoubleempty\else\expandafter\noxxdoubleempty\fi#1#2} - -\def\dodoxxdoubleempty#1[#2]#3% -  {\ifx#3[\else\expandafter\nonoxxdoubleempty\fi#1[#2]#3} - -\def\noxxdoubleempty      #1{#1[][]} -\def\nonoxxdoubleempty#1[#2]{#1[#2][]} -  %D The code here has been moved from other files. Beware: the \MKII\ and  %D \MKIV\ code is not gathered in files with the same name. In the  %D meantime this code has been adapted to \MKIV\ but mnore is possible. @@ -38,19 +27,25 @@  % n>1 #### needed, strange # interaction in recurse +\newtoks\c_math_align_a +\newtoks\c_math_align_b +\newtoks\c_math_align_c +  \def\math_build_eqalign    {\scratchtoks\emptytoks -   \dorecurse{\mathalignmentparameter\c!m} -     {\ifnum\recurselevel>\plusone -       %\appendtoks -       %  \tabskip\mathalignmentparameter\c!distance&\tabskip\zeropoint -       %\to\scratchtoks -        \scratchtoks\expandafter{\the\scratchtoks\tabskip\mathalignmentparameter\c!distance&\tabskip\zeropoint}% -      \fi -      \normalexpanded{\scratchtoks{\the\scratchtoks\the\!!toksa}}% -      \dorecurse{\numexpr\mathalignmentparameter\c!n-\plusone\relax} -        {\normalexpanded{\scratchtoks{\the\scratchtoks\the\!!toksb}}}}% -   \normalexpanded{\scratchtoks{\the\scratchtoks\the\!!toksc}}} +   \dorecurse{\mathalignmentparameter\c!m}\def\math_build_eqalign +   \normalexpanded{\scratchtoks{\the\scratchtoks\the\c_math_align_c}}} + +\def\math_build_eqalign_step +  {\ifnum\recurselevel>\plusone +    %\appendtoks +    %  \tabskip\mathalignmentparameter\c!distance&\tabskip\zeropoint +    %\to\scratchtoks +     \scratchtoks\expandafter{\the\scratchtoks\tabskip\mathalignmentparameter\c!distance&\tabskip\zeropoint}% +   \fi +   \normalexpanded{\scratchtoks{\the\scratchtoks\the\c_math_align_a}}% +   \dorecurse{\numexpr\mathalignmentparameter\c!n-\plusone\relax} +     {\normalexpanded{\scratchtoks{\the\scratchtoks\the\c_math_align_b}}}}  \def\math_math_in_eqalign#1{$\tabskip\zeropoint\everycr\emptytoks\displaystyle{{}#1{}}$}  \def\math_text_in_eqalign#1{$\tabskip\zeropoint\everycr\emptytoks#1$} @@ -73,14 +68,14 @@  % use zeroskipplusfill  \def\math_prepare_r_eqalign_no -  {\!!toksa{\strut\math_first_in_eqalign\hfil\math_left_of_equalign\span\math_math_in_eqalign{##}\math_right_of_eqalign\tabskip\zeropoint}% -   \!!toksb{&\math_next_in_eqalign\math_left_of_equalign\span\math_math_in_eqalign{##}\math_right_of_eqalign\tabskip\zeropoint}% +  {\c_math_align_a{\strut\math_first_in_eqalign\hfil\math_left_of_equalign\span\math_math_in_eqalign{##}\math_right_of_eqalign\tabskip\zeropoint}% +   \c_math_align_b{&\math_next_in_eqalign\math_left_of_equalign\span\math_math_in_eqalign{##}\math_right_of_eqalign\tabskip\zeropoint}%     \ifnum\mathraggedstatus=\plusone -     \!!toksc{\hfil&\span\math_text_in_eqalign{##}\tabskip\zeropoint}% +     \c_math_align_c{\hfil&\span\math_text_in_eqalign{##}\tabskip\zeropoint}%     \else\ifnum\mathraggedstatus=\plusthree -     \!!toksc{\hfil\tabskip\zeropoint\!!plus 1\!!fill&\span\math_text_in_eqalign{##}\tabskip\zeropoint}% +     \c_math_align_c{\hfil\tabskip\zeropoint\!!plus 1\!!fill&\span\math_text_in_eqalign{##}\tabskip\zeropoint}%     \else -     \!!toksc{\hfil\tabskip\centering&\llap{\span\math_text_in_eqalign{##}}\tabskip\zeropoint}% +     \c_math_align_c{\hfil\tabskip\centering&\llap{\span\math_text_in_eqalign{##}}\tabskip\zeropoint}%     \fi\fi     \global\mathnumberstatus\zerocount     \math_build_eqalign @@ -88,15 +83,15 @@     \tabskip\centering}  \def\math_prepare_l_eqalign_no -  {\!!toksa{\strut\math_first_in_eqalign\hfil\math_left_of_equalign\span\math_math_in_eqalign{##}\math_right_of_eqalign\tabskip\zeropoint}% -   \!!toksb{&\math_next_in_eqalign\math_left_of_equalign\span\math_math_in_eqalign{##}\math_right_of_eqalign\tabskip\zeropoint}% +  {\c_math_align_a{\strut\math_first_in_eqalign\hfil\math_left_of_equalign\span\math_math_in_eqalign{##}\math_right_of_eqalign\tabskip\zeropoint}% +   \c_math_align_b{&\math_next_in_eqalign\math_left_of_equalign\span\math_math_in_eqalign{##}\math_right_of_eqalign\tabskip\zeropoint}%     % problem: number is handled after rest and so ends up in the margin     \ifnum\mathraggedstatus=\plusone -     \!!toksc{\hfil&\kern-\displaywidth\rlap{\span\math_text_in_eqalign{##}}\tabskip\displaywidth}% +     \c_math_align_c{\hfil&\kern-\displaywidth\rlap{\span\math_text_in_eqalign{##}}\tabskip\displaywidth}%     \else\ifnum\mathraggedstatus=\plusthree -     \!!toksc{\hfil\tabskip\zeropoint\!!plus 1\!!fill&\kern-\displaywidth\span\math_rlap{\span\math_text_in_eqalign{##}}\tabskip\displaywidth}% +     \c_math_align_c{\hfil\tabskip\zeropoint\!!plus 1\!!fill&\kern-\displaywidth\span\math_rlap{\span\math_text_in_eqalign{##}}\tabskip\displaywidth}%     \else -     \!!toksc{\hfil\tabskip\centering&\kern-\displaywidth\rlap{\span\math_text_in_eqalign{##}}\tabskip\displaywidth}% +     \c_math_align_c{\hfil\tabskip\centering&\kern-\displaywidth\rlap{\span\math_text_in_eqalign{##}}\tabskip\displaywidth}%     \fi\fi     \global\mathnumberstatus\zerocount     \math_build_eqalign @@ -112,7 +107,7 @@       \let\math_finish_eqalign_no\relax     \fi     #1% -   \halign \ifcase\eqalignmode \or to \displaywidth \fi \@EA {\the\scratchtoks\crcr#2\crcr}% +   \halign \ifcase\eqalignmode \or to \displaywidth \fi \expandafter {\the\scratchtoks\crcr#2\crcr}%     \math_finish_eqalign_no}  \def\math_both_eqalign_no_aligned#1% @@ -128,7 +123,7 @@      \fi     \fi     #1% -   \halign \ifcase\eqalignmode \or to \displaywidth \fi \@EA \bgroup\the\scratchtoks\crcr} +   \halign \ifcase\eqalignmode \or to \displaywidth \fi \expandafter \bgroup\the\scratchtoks\crcr}  \def\math_rlap#1%    {\setbox\scratchbox\hbox{#1}% @@ -221,7 +216,7 @@  \setupmathalignment    [\c!n=2,     \c!m=1, -   \c!distance=1em] +   \c!distance=\emwidth]  \definemathalignment[align]            % default case (this is what amstex users expect)  \definemathalignment[\v!mathalignment] % prefered case (this is cleaner, less clashing) @@ -408,8 +403,8 @@  \installcommandhandler \??mathcases {mathcases} \??mathcases  \setupmathcases -  [\c!distance=1em, -   \c!numberdistance=2.5em, +  [\c!distance=\emwidth, +   \c!numberdistance=2.5\emwidth,     \c!left={\left\{\mskip\thinmuskip},     \c!right={\right.}] @@ -434,7 +429,7 @@     \def\NC{\math_cases_NC}%     \def\MC{\math_cases_NC\ifmmode\else$\def\endmath{$}\fi}%     \global\let\math_cases_NC\math_cases_NC_indeed -   \def\NR{\unskip\endmath&\global\let\math_cases_NC\math_cases_NC_indeed\doxxdoubleempty\math_cases_NR}% +   \def\NR{\unskip\endmath&\global\let\math_cases_NC\math_cases_NC_indeed\dodirectdoubleempty\math_cases_NR}%     \normalbaselines     \mathsurround\zeropoint     \everycr\emptytoks @@ -515,7 +510,7 @@  \installcommandhandler \??mathmatrix {mathmatrix} \??mathmatrix  \setupmathmatrix -  [\c!distance=1em, +  [\c!distance=\emwidth,     \c!left=,     \c!right=,     \c!align=\v!middle] @@ -570,20 +565,20 @@  \definemathmatrix[\v!mathmatrix]  \def\math_matrix_prepare -  {\!!toksa{\strut\math_first_in_eqalign\math_left_of_equalign\span +  {\c_math_align_a{\strut\math_first_in_eqalign\math_left_of_equalign\span              \math_text_in_eqalign{\mathmatrixparameter\c!style##}\math_right_of_eqalign}% -   \!!toksb{&\hskip\mathmatrixparameter\c!distance +   \c_math_align_b{&\hskip\mathmatrixparameter\c!distance              \math_next_in_eqalign\math_left_of_equalign\span              \math_text_in_eqalign{\mathmatrixparameter\c!style##}\math_right_of_eqalign}% -   \!!toksc{&&\hskip\mathmatrixparameter\c!distance +   \c_math_align_c{&&\hskip\mathmatrixparameter\c!distance              \math_left_of_equalign\span              \math_text_in_eqalign{\mathmatrixparameter\c!style##}\math_right_of_eqalign}%     \scratchtoks\emptytoks -   \normalexpanded{\scratchtoks{\the\scratchtoks\the\!!toksa}}% +   \normalexpanded{\scratchtoks{\the\scratchtoks\the\c_math_align_a}}%     \dorecurse{\numexpr\scratchcounter-\plusone\relax} -     {\normalexpanded{\scratchtoks{\the\scratchtoks\the\!!toksb}}}% -   \normalexpanded{\scratchtoks{\the\scratchtoks\the\!!toksc}}% -   \halign \@EA \bgroup\the\scratchtoks \crcr} +     {\normalexpanded{\scratchtoks{\the\scratchtoks\the\c_math_align_b}}}% +   \normalexpanded{\scratchtoks{\the\scratchtoks\the\c_math_align_c}}% +   \halign \expandafter \bgroup\the\scratchtoks \crcr}  \unexpanded\def\dodomatrixNC    {\gdef\domatrixNC{\endmath&}} diff --git a/tex/context/base/math-arr.mkiv b/tex/context/base/math-arr.mkiv index f18d6be2b..91bb7889b 100644 --- a/tex/context/base/math-arr.mkiv +++ b/tex/context/base/math-arr.mkiv @@ -40,146 +40,102 @@  %    \smash-$  %    $} -\def\exmthfont#1{\mr} % \symbolicsizedfont#1\plusone{MathExtension}} - -\def\domthfrac#1#2#3#4#5#6#7% +\def\math_stylebuilders_fract#1#2#3#4#5#6#7%    {\begingroup     \mathsurround\zeropoint     \setbox0\hbox{$#1 #6$}%     \setbox2\hbox{$#1 #7$}% -   \dimen0\wd0 -   \ifdim\wd2>\dimen0 \dimen0\wd2 \fi +   \dimen0\wd\ifdim\wd2>\wd0 2\else 0\fi     \setbox4\hbox to \dimen0{\leaders\hbox{#4}\hss#5}%     \mathord{\vcenter{{\offinterlineskip       \hbox to \dimen0{\hss\box0\hss}% -     \kern \ht4% +     \kern\ht4%       \hbox to \dimen0{\hss\copy4\hss}% -     \kern \ht4% +     \kern\ht4%       \hbox to \dimen0{\hss\box2\hss}}}}%     \endgroup} -\def\domthsqrt#1#2#3#4#5% +\def\math_stylebuilders_sqrt#1#2#3#4#5%    {\begingroup     \mathsurround\zeropoint     \setbox0\hbox{$#1 #5$}% -   \dimen0=1.05\ht0 \advance\dimen0 1pt  \ht0 \dimen0 -   \dimen0=1.05\dp0 \advance\dimen0 1pt  \dp0 \dimen0 -   \dimen0\wd0 -   \setbox4\hbox to \dimen0{\exmthfont#2\leaders\hbox{#3}\hfill#4}% -   \delimitershortfall=0pt -   \nulldelimiterspace=0pt -   \setbox2\hbox{$\left\delimiter"0270370 \vrule height\ht0 depth \dp0 width0pt -                  \right.$}% -   \mathord{\vcenter{\hbox{\copy2 -                           \rlap{\raise\dimexpr\ht2-\ht4\relax\copy4}\copy0}}}% +   \ht0\dimexpr1.05\ht0+\onepoint\relax +   \dp0\dimexpr1.05\dp0+\onepoint\relax +   \setbox4\hbox to \wd0{\mr#2\leaders\hbox{#3}\hfill#4}% +   \delimitershortfall\zeropoint +   \nulldelimiterspace\zeropoint +   \setbox2\hbox{$\left\delimiter"0270370 \vrule \!!height\ht0 \!!depth \dp0 \!!width\zeropoint\right.$}% is this the right code point? +   \mathord{\vcenter{\hbox{\copy2\rlap{\raise\dimexpr\ht2-\ht4\relax\copy4}\copy0}}}%     \endgroup}  \def\mthfrac#1#2#3#4#5{\mathchoice -  {\domthfrac\displaystyle     \textface        {#1}{#2}{#3}{#4}{#5}}% -  {\domthfrac\textstyle        \textface        {#1}{#2}{#3}{#4}{#5}}% -  {\domthfrac\scriptstyle      \scriptface      {#1}{#2}{#3}{#4}{#5}}% -  {\domthfrac\scriptscriptstyle\scriptscriptface{#1}{#2}{#3}{#4}{#5}}} +  {\math_stylebuilders_frac\displaystyle     \textface        {#1}{#2}{#3}{#4}{#5}}% +  {\math_stylebuilders_frac\textstyle        \textface        {#1}{#2}{#3}{#4}{#5}}% +  {\math_stylebuilders_frac\scriptstyle      \scriptface      {#1}{#2}{#3}{#4}{#5}}% +  {\math_stylebuilders_frac\scriptscriptstyle\scriptscriptface{#1}{#2}{#3}{#4}{#5}}}  \def\mthsqrt#1#2#3{\mathchoice -  {\domthsqrt\displaystyle     \textface    {#1}{#2}{#3}}% -  {\domthsqrt\textstyle        \textface    {#1}{#2}{#3}}% -  {\domthsqrt\scriptstyle      \textface    {#1}{#2}{#3}}% -  {\domthsqrt\scriptscriptstyle\textface    {#1}{#2}{#3}}} - -% temp here - -%D We next define extensible arrows. Extensible arrows are arrows that -%D change their length according to the width of the text to be placed -%D above and below the arrow. Since we need to define a lot of arrows, -%D we first define some helper macros. The basic idea is to measure -%D the width of the box to be placed above and below the arrow, and -%D make the \quotation{body} of the arrow as long as the bigger of the -%D two widths. - -\def\mtharrfactor{1} -\def\mtharrextra {0} - -% \def\domthxarr#1#2#3#4#5% hm, looks like we do a double mathrel -%   {\begingroup -%    \def\mtharrfactor{1}% -%    \def\mtharrextra {0}% -%    \processaction[#1] % will be sped up -%      [  \v!none=>\def\mtharrfactor{0}, -%        \v!small=>\def\mtharrextra{10}, -%       \v!medium=>\def\mtharrextra{15}, -%          \v!big=>\def\mtharrextra{20}, -%       \v!normal=>, -%      \v!default=>, -%      \v!unknown=>\doifnumberelse{#1}{\def\mtharrextra{#1}}\donothing]% -%    \mathsurround\zeropoint -%    \muskip0=\thirdoffourarguments  #2mu -%    \muskip2=\fourthoffourarguments #2mu -%    \muskip4=\firstoffourarguments  #2mu -%    \muskip6=\secondoffourarguments #2mu -%    \muskip0=\mtharrfactor\muskip0 \advance\muskip0 \mtharrextra mu -%    \muskip2=\mtharrfactor\muskip2 \advance\muskip2 \mtharrextra mu -%    \setbox0\hbox{$\scriptstyle -%                   \mkern\muskip4\relax -%                   \mkern\muskip0\relax -%                   #5\relax -%                   \mkern\muskip2\relax -%                   \mkern\muskip6\relax -%                  $}% -%    \setbox4\hbox{#3\displaystyle}% -%    \dimen0\wd0 -%    \ifdim\wd4>\dimen0 \dimen0\wd4 \fi -%    \setbox2\hbox{$\scriptstyle -%                   \mkern\muskip4\relax -%                   \mkern\muskip0\relax -%                   #4\relax -%                   \mkern\muskip2\relax -%                   \mkern\muskip6\relax -%                  $}% -%    \ifdim\wd2>\dimen0 \dimen0\wd2 \fi -%    \setbox4\hbox to \dimen0{#3\displaystyle}% -%    \mathrel{\mathop{\hbox to \dimen0{\hss\copy4\hss}}\limits\normalsuperscript{\box0}\normalsubscript{\box2}}% -%    \endgroup} - -\def\domthxarr#1#2#3#4#5% hm, looks like we do a double mathrel +  {\math_stylebuilders_sqrt\displaystyle     \textface{#1}{#2}{#3}}% +  {\math_stylebuilders_sqrt\textstyle        \textface{#1}{#2}{#3}}% +  {\math_stylebuilders_sqrt\scriptstyle      \textface{#1}{#2}{#3}}% +  {\math_stylebuilders_sqrt\scriptscriptstyle\textface{#1}{#2}{#3}}} + +%D We next define extensible arrows. Extensible arrows are arrows that change their +%D length according to the width of the text to be placed above and below the arrow. +%D Since we need to define a lot of arrows, we first define some helper macros. The +%D basic idea is to measure the width of the box to be placed above and below the +%D arrow, and make the \quote {body} of the arrow as long as the bigger of the two +%D widths. + +\installcorenamespace{matharrowsettings} + +\def\m_math_arrows_factor{1} +\def\m_math_arrows_extra {0} + +\setvalue{\??matharrowsettings\v!none   }{\def\m_math_arrows_factor{0}} +\setvalue{\??matharrowsettings\v!small  }{\def\m_math_arrows_extra{10}} +\setvalue{\??matharrowsettings\v!medium }{\def\m_math_arrows_extra{15}} +\setvalue{\??matharrowsettings\v!big    }{\def\m_math_arrows_extra{20}} +\setvalue{\??matharrowsettings\v!normal }{} +\setvalue{\??matharrowsettings          }{} +\setvalue{\??matharrowsettings\s!unknown}{\doifnumberelse\p_mathspacing{\let\m_math_arrows_extra\p_mathspacing}\donothing} + +\def\math_arrows_construct#1#2#3#4#5% hm, looks like we do a double mathrel (a bit cleaned up .. needs checking)    {\begingroup -   \def\mtharrfactor{1}% -   \def\mtharrextra {0}% -   \processaction[#1] % will be sped up -     [  \v!none=>\def\mtharrfactor{0}, -       \v!small=>\def\mtharrextra{10}, -      \v!medium=>\def\mtharrextra{15}, -         \v!big=>\def\mtharrextra{20}, -      \v!normal=>, -     \v!default=>, -     \v!unknown=>\doifnumberelse{#1}{\def\mtharrextra{#1}}\donothing]% +   \def\m_math_arrows_factor{1}% +   \def\m_math_arrows_extra {0}% +   \edef\p_math_spacing{#1}% +   \csname\??matharrowsettings +     \ifcsname\??matharrowsettings\p_mathspacing\endcsname\p_mathspacing\else\s!unknown\fi +   \endcsname     \mathsurround\zeropoint -   \muskip0=\thirdoffourarguments  #2mu -   \muskip2=\fourthoffourarguments #2mu -   \muskip0=\mtharrfactor\muskip0 -   \muskip2=\mtharrfactor\muskip2 -   \advance\muskip0 \mtharrextra mu -   \advance\muskip2 \mtharrextra mu -   \advance\muskip0 \firstoffourarguments  #2mu -   \advance\muskip2 \secondoffourarguments #2mu +   \muskip0=\muexpr\m_math_arrows_factor\muexpr\thirdoffourarguments #2\onemuskip\relax+\m_math_arrows_extra\onemuskip+\firstoffourarguments #2\onemuskip\relax +   \muskip2=\muexpr\m_math_arrows_factor\muexpr\fourthoffourarguments#2\onemuskip\relax+\m_math_arrows_extra\onemuskip+\secondoffourarguments#2\onemuskip\relax     \setbox0\hbox{$\scriptstyle                    \mkern\muskip0\relax                    #5\relax                    \mkern\muskip2\relax                   $}% -   \setbox4\hbox{#3\displaystyle}% -   \dimen0\wd0 -   \ifdim\wd4>\dimen0 \dimen0\wd4 \fi     \setbox2\hbox{$\scriptstyle                    \mkern\muskip0\relax                    #4\relax                    \mkern\muskip2\relax                   $}% -   \ifdim\wd2>\dimen0 \dimen0\wd2 \fi -   \setbox4\hbox to \dimen0{#3\displaystyle}% +   \setbox4\hbox{#3\displaystyle}% +   \dimen0\wd0\relax +   \ifdim\wd2>\dimen0 +     \dimen0\wd2\relax +   \fi +   \ifdim\wd4>\dimen0 +     \dimen0\wd4\relax +   \fi +   \ifdim\wd4=\dimen0\else +     \setbox4\hbox to \dimen0{#3\displaystyle}% +   \fi     \mathrel{\mathop{\hbox to \dimen0{\hss\copy4\hss}}\limits\normalsuperscript{\box0}\normalsubscript{\box2}}%     \endgroup} -\let\domthxarrsingle\domthxarr +\let\math_arrows_construct_single\math_arrows_construct  %D There are some arrows which are created by stacking two arrows. The next  %D macro helps in defining such \quotation{double arrows}. @@ -194,29 +150,27 @@  %     \chemical{SO_2}  % \stopchemicalformula -\def\domthxarrdouble#1#2#3#4#5#6#7% opt l r sp rs top bot +\def\math_arrows_construct_double#1#2#3#4#5#6#7% opt l r sp rs top bot    {\mathrel -     {\scratchdimen.32ex\relax % was .22, todo: make configurable -      \setbox0\hbox{$\domthxarr{#1}{#2}{#4}{\phantom{#6}}{#7}$}% -      \setbox2\hbox{$\domthxarr{#1}{#3}{#5}{#6}{\phantom{#7}}$}% +     {\scratchdimen.32\exheight\relax % was .22, todo: make configurable +      \setbox0\hbox{$\math_arrows_construct{#1}{#2}{#4}{\phantom{#6}}{#7}$}% +      \setbox2\hbox{$\math_arrows_construct{#1}{#3}{#5}{#6}{\phantom{#7}}$}%        \raise\scratchdimen\box0        \kern-\wd2        \lower\scratchdimen\box2}}  %D \macros{definematharrow}  %D -%D Macro for defining new arrows. We can define two types of -%D arrows|<|single arrows and double arrows. Single arrows are defined -%D as +%D Macro for defining new arrows. We can define two types of arrows|<|single arrows +%D and double arrows. Single arrows are defined as  %D  %D \starttyping  %D \definematharrow [xrightarrow]        [0359] [\rightarrowfill]  %D \stoptyping  %D -%D The first argument is the name of the arrow (\tex{xrightarrow} in -%D this case.) The second argument consists of a set of 4 numbers and -%D specify the spacing correction in math units~\type{mu}. These -%D numbers define: +%D The first argument is the name of the arrow (\tex {xrightarrow} in this case.) The +%D second argument consists of a set of 4 numbers and specify the spacing correction +%D in math units~\type {mu}. These numbers define:  %D  %D \startlines  %D   1st number: arrow||tip correction @@ -225,9 +179,9 @@  %D   4th number: space (multiplied by \tex{matharrfactor} and advanced by \tex{matharrextra})  %D \stoplines  %D -%D The third argument is the name of the extensible fill. The third -%D argument is optional when the arrow is redefined later (this is -%D useful for font specific tweaking of the skips.) For example, +%D The third argument is the name of the extensible fill. The third argument is optional +%D when the arrow is redefined later (this is useful for font specific tweaking of the +%D skips.) For example,  %D  %D \startbuffer  %D \math{\xrightarrow{above}} @@ -245,78 +199,80 @@  %D                  [\rightharpoonupfill,\leftharpoondownfill]  %D \stoptyping  %D -%D The second and the third set of arguments consist of comma -%D separated values. The first element of the second argument -%D (\type{3095}) corresponds to the spacing correction of top arrow -%D fill (\tex{rightarrowupfill}).  Similarly, \type{0359} corresponds -%D to bottom arrow fill \tex{leftharpoondownfill}). Stacking them on -%D top of each other we get $\xrightleftharpoons[big]{above}{below}$. -%D The following math arrows are defined +%D The second and the third set of arguments consist of comma separated values. The +%D first element of the second argument (\type {3095}) corresponds to the spacing +%D correction of top arrow fill (\tex{rightarrowupfill}). Similarly, \type {0359} +%D corresponds to bottom arrow fill \tex {leftharpoondownfill}). Stacking them on +%D top of each other we get $\xrightleftharpoons [big] {above} {below}$. The +%D following math arrows are defined  %D  %D \placetable[none]{}{\starttable[|l|m|] -%D   \NC \tex{xrightarrow        }  \NC \xrightarrow        [big]  \NC \NR -%D   \NC \tex{xleftarrow         }  \NC \xleftarrow         [big]  \NC \NR -%D   \NC \tex{xequal             }  \NC \xequal             [big]  \NC \NR -%D   \NC \tex{xRightarrow        }  \NC \xRightarrow        [big]  \NC \NR -%D   \NC \tex{xLeftarrow         }  \NC \xLeftarrow         [big]  \NC \NR -%D   \NC \tex{xLeftrightarrow    }  \NC \xLeftrightarrow    [big]  \NC \NR -%D   \NC \tex{xleftrightarrow    }  \NC \xleftrightarrow    [big]  \NC \NR -%D   \NC \tex{xmapsto            }  \NC \xmapsto            [big]  \NC \NR -%D   \NC \tex{xtwoheadrightarrow }  \NC \xtwoheadrightarrow [big]  \NC \NR -%D   \NC \tex{xtwoheadleftarrow  }  \NC \xtwoheadleftarrow  [big]  \NC \NR -%D   \NC \tex{xrightharpoondown  }  \NC \xrightharpoondown  [big]  \NC \NR -%D   \NC \tex{xrightharpoonup    }  \NC \xrightharpoonup    [big]  \NC \NR -%D   \NC \tex{xleftharpoondown   }  \NC \xleftharpoondown   [big]  \NC \NR -%D   \NC \tex{xleftharpoonup     }  \NC \xleftharpoonup     [big]  \NC \NR -%D   \NC \tex{xhookleftarrow     }  \NC \xhookleftarrow     [big]  \NC \NR -%D   \NC \tex{xhookrightarrow    }  \NC \xhookrightarrow    [big]  \NC \NR -%D   \NC \tex{xleftrightharpoons }  \NC \xleftrightharpoons [big]  \NC \NR -%D   \NC \tex{xrightleftharpoons }  \NC \xrightleftharpoons [big]  \NC \NR +%D   \NC \tex{xrightarrow}        \NC \xrightarrow        [big] \NC \NR +%D   \NC \tex{xleftarrow}         \NC \xleftarrow         [big] \NC \NR +%D   \NC \tex{xequal}             \NC \xequal             [big] \NC \NR +%D   \NC \tex{xRightarrow}        \NC \xRightarrow        [big] \NC \NR +%D   \NC \tex{xLeftarrow}         \NC \xLeftarrow         [big] \NC \NR +%D   \NC \tex{xLeftrightarrow}    \NC \xLeftrightarrow    [big] \NC \NR +%D   \NC \tex{xleftrightarrow}    \NC \xleftrightarrow    [big] \NC \NR +%D   \NC \tex{xmapsto}            \NC \xmapsto            [big] \NC \NR +%D   \NC \tex{xtwoheadrightarrow} \NC \xtwoheadrightarrow [big] \NC \NR +%D   \NC \tex{xtwoheadleftarrow}  \NC \xtwoheadleftarrow  [big] \NC \NR +%D   \NC \tex{xrightharpoondown}  \NC \xrightharpoondown  [big] \NC \NR +%D   \NC \tex{xrightharpoonup}    \NC \xrightharpoonup    [big] \NC \NR +%D   \NC \tex{xleftharpoondown}   \NC \xleftharpoondown   [big] \NC \NR +%D   \NC \tex{xleftharpoonup}     \NC \xleftharpoonup     [big] \NC \NR +%D   \NC \tex{xhookleftarrow}     \NC \xhookleftarrow     [big] \NC \NR +%D   \NC \tex{xhookrightarrow}    \NC \xhookrightarrow    [big] \NC \NR +%D   \NC \tex{xleftrightharpoons} \NC \xleftrightharpoons [big] \NC \NR +%D   \NC \tex{xrightleftharpoons} \NC \xrightleftharpoons [big] \NC \NR  %D \stoptable} +%D If needed this can be optimized (i.e. we can preexpand using \type +%D {\docheckedpair}). +  \unexpanded\def\definematharrow -  {\doquadrupleargument\dodefinematharrow} +  {\doquadrupleargument\math_arrows_define} -\def\dodefinematharrow[#1][#2][#3][#4]% name type[none|both] template command +\def\math_arrows_define[#1][#2][#3][#4]% name type[none|both] template command    {\iffourthargument -      \executeifdefined{dodefine#2arrow}\gobblethreearguments{#1}{#3}{#4}% +      \executeifdefined{math_arrows_define_#2}\gobblethreearguments{#1}{#3}{#4}%     \else\ifthirdargument -      \dodefinebotharrow{#1}{#2}{#3}% +      \math_arrows_define_both{#1}{#2}{#3}%     \else\ifsecondargument -      \redefinebotharrow{#1}{#2}{#3}% +      \math_arrows_define_both_again{#1}{#2}{#3}%     \fi\fi\fi} -\def\redefinebotharrow#1#2#3% real dirty, this overload! -  {\doifdefined{#1} -     {\pushmacro\dohandlemtharrow -      \def\dohandlemtharrow[##1][##2]{\setuvalue{#1}{\dohandlemtharrow[#2][##2]}}% -      % == \def\dohandlemtharrow[##1][##2]{\dodefinebotharrow{#1}{#2}{##2}}% -      \getvalue{#1}% -      \popmacro\dohandlemtharrow}} +\def\math_arrows_define_both_again#1#2#3% real dirty, this overload! +  {\ifcsname#1\endcsname +     \pushmacro\math_arrows_do +     \def\math_arrows_do[##1][##2]{\setuvalue{#1}{\math_arrows_do[#2][##2]}}% +     \getvalue{#1}% +     \popmacro\math_arrows_do +   \fi} -\def\dodefinebotharrow#1#2#3% -  {\setuvalue{#1}{\dohandlemtharrow[#2][#3]}} +\def\math_arrows_define_both#1#2#3% +  {\setuvalue{#1}{\math_arrows_do[#2][#3]}} -\def\dohandlemtharrow -  {\dotripleempty\doxmtharrow} +\unexpanded\def\math_arrows_do +  {\dotripleempty\math_arrows_handle} -\def\doxmtharrow[#1][#2][#3]% #3 == optional arg -  {\def\dodoxmtharrow{\dododoxmtharrow[#1,\empty,\empty][#2,\empty,\empty][#3]}% {##1}{##2} -   \dodoublegroupempty\dodoxmtharrow} +\def\math_arrows_handle[#1][#2][#3]% #3 == optional arg .. \empty can be just 'empty' +  {\def\math_arrows_handle_indeed{\math_arrows_handle_finalize[#1,\empty,\empty][#2,\empty,\empty][#3]}% {##1}{##2} +   \dodoublegroupempty\math_arrows_handle_indeed} -\def\dododoxmtharrow[#1,#2,#3][#4,#5,#6][#7]#8#9% [3] is the optional arg +\def\math_arrows_handle_finalize[#1,#2,#3][#4,#5,#6][#7]#8#9% [3] is the optional arg    {\edef\!!stringa{#2}%     \ifx\!!stringa\empty       \ifsecondargument -       \mathrel{\domthxarrsingle{#7}{#1}{#4}{#8}{#9}}% +       \mathrel{\math_arrows_construct_single{#7}{#1}{#4}{#8}{#9}}%       \else -       \mathrel{\domthxarrsingle{#7}{#1}{#4}{}{#8}}% +       \mathrel{\math_arrows_construct_single{#7}{#1}{#4}{}{#8}}%       \fi     \else       \ifsecondargument -       \mathrel{\domthxarrdouble{#7}{#1}{#2}{#4}{#5}{#8}{#9}}% +       \mathrel{\math_arrows_construct_double{#7}{#1}{#2}{#4}{#5}{#8}{#9}}%       \else -       \mathrel{\domthxarrdouble{#7}{#1}{#2}{#4}{#5}{}{#8}}% +       \mathrel{\math_arrows_construct_double{#7}{#1}{#2}{#4}{#5}{}{#8}}%       \fi     \fi} @@ -324,34 +280,32 @@  %D \macros{mtharrowfill,defaultmtharrowfill}  %D -%D To extend the arrows we need to define a \quotation{math arrow -%D fill}. This command takes 8 arguments: the first four correspond -%D the second argument of \tex{definematharrow} explained above. The -%D other three specify the tail, body and head of the arrow. The last -%D argument specifies the math-mode in which the arrow is drawn. -%D \tex{defaultmtharrowfill} has values tweaked to match Latin Modern -%D fonts. For fonts that are significantly different (e.g.  cows) a +%D To extend the arrows we need to define a \quotation {math arrow fill}. This +%D command takes 8 arguments: the first four correspond the second argument of +%D \tex {definematharrow} explained above. The other three specify the tail, +%D body and head of the arrow. The last argument specifies the math-mode in which +%D the arrow is drawn. \tex {defaultmtharrowfill} has values tweaked to match +%D Latin Modern fonts. For fonts that are significantly different (e.g. cows) a  %D different set of values need to be determined.  \def\mtharrowfill#1#2#3#4#5#6#7#8% -  {$\mathsurround 0pt -    \thickmuskip0mu\medmuskip\thickmuskip\thinmuskip\thickmuskip +  {$\mathsurround\zeropoint +    \thickmuskip\zeromuskip\medmuskip\thickmuskip\thinmuskip\thickmuskip      \relax#8#5% -    \mkern-#1mu -    \cleaders\hbox{$#8\mkern -#2mu#6\mkern -#3mu$}\hfill -    \mkern-#4mu#7$} +    \mkern-#1\onemuskip +    \cleaders\hbox{$#8\mkern-#2\onemuskip#6\mkern-#3\onemuskip$}\hfill +    \mkern-#4\onemuskip#7$}  \def\defaultmtharrowfill{\mtharrowfill 7227} -%D We now define some arrow fills that will be used for defining the -%D arrows. Plain \TEX\ already defines \tex{leftarrowfill} and -%D \tex{rightarrowfill}. The \tex{defaultmtharrowfill} command defines an -%D arrowfill that takes an argument (so that it can also be used -%D with over and under arrows). However the Plain \TEX\ definitions of -%D \tex{leftarrowfill} and \tex{rightarrowfill} do not take this extra -%D argument. To be backward compatible with Plain \TEX, we define two -%D arrowfills: \tex{specrightarrowfill} which takes an extra argument, and -%D \tex{rightarrowfill} which does not. +%D We now define some arrow fills that will be used for defining the arrows. Plain +%D \TEX\ already defines \tex {leftarrowfill} and \tex {rightarrowfill}. The \tex +%D {defaultmtharrowfill} command defines an arrowfill that takes an argument (so +%D that it can also be used with over and under arrows). However the Plain \TEX\ +%D definitions of \tex {leftarrowfill} and \tex {rightarrowfill} do not take this +%D extra argument. To be backward compatible with Plain \TEX, we define two +%D arrowfills: \tex {specrightarrowfill} which takes an extra argument, and \tex +%D {rightarrowfill} which does not.  \unexpanded\def\specrightarrowfill   {\defaultmtharrowfill \relbar               \relbar \rightarrow}  \unexpanded\def\specleftarrowfill    {\defaultmtharrowfill \leftarrow            \relbar \relbar} @@ -382,10 +336,9 @@  \unexpanded\def\doublebond{{\xequal}}  \unexpanded\def\triplebond{{\xtriplerel}} -%D Now we define most commonly used arrows. These include arrows -%D defined in \filename{amsmath.sty}, \filename{extarrows.sty}, -%D \filename{extpfel.sty} and \filename{mathtools.sty} packages for -%D \LATEX\ (plus a few more). +%D Now we define most commonly used arrows. These include arrows defined in \filename +%D {amsmath.sty}, \filename {extarrows.sty}, \filename {extpfel.sty} and \filename +%D {mathtools.sty} packages for \LATEX\ (plus a few more).  \definematharrow [xrightarrow]         [0359]      [\specrightarrowfill]  \definematharrow [xleftarrow]          [3095]      [\specleftarrowfill] @@ -427,27 +380,27 @@  %D \macros{definemathoverarrow,defineunderarrow}  %D -%D These macros for define math-overarrows are adapted from -%D \filename{amsmath.sty} +%D These macros for define math-overarrows are adapted from \filename +%D {amsmath.sty}  \unexpanded\def\definemathoverarrow -  {\dotripleargument\dodefinemathoverarrow} +  {\dotripleargument\math_arrows_define_over} -\def\dodefinemathoverarrow[#1][#2][#3]% +\def\math_arrows_define_over[#1][#2][#3]%    {\ifthirdargument -      \setuvalue{#1}{\dohandlemathoverarrow[#2][#3]}% +      \setuvalue{#1}{\math_arrows_over_handle[#2][#3]}%      \else -      \setuvalue{#1}{\dohandlemathoverarrow[\zeropoint][#2]}% +      \setuvalue{#1}{\math_arrows_over_handle[\zeropoint][#2]}%      \fi} -\def\dohandlemathoverarrow[#1][#2]% -  {\mathpalette{\dodohandlemathoverarrow{#1}{#2}}} +\def\math_arrows_over_handle[#1][#2]% +  {\mathpalette{\math_arrows_over_handle_indeed{#1}{#2}}} -%D Note: \filename{math-pln.tex} has \type{\kern-\onepoint} and -%D \filename{amsmath.sty} does not. We keep the kern amount -%D configurable. This is useful for harpoons. +%D Note: \filename {math-pln.tex} has \type {\kern-\onepoint} and \filename +%D {amsmath.sty} does not. We keep the kern amount configurable. This is useful +%D for harpoons. -\def\dodohandlemathoverarrow#1#2#3#4% +\def\math_arrows_over_handle_indeed#1#2#3#4%    {\vbox{\ialign{##\crcr     #2#3\crcr     \noalign{\kern#1\nointerlineskip}% @@ -456,21 +409,21 @@  %D Now the under arrows  \unexpanded\def\definemathunderarrow -  {\dotripleargument\dodefinemathunderarrow} +  {\dotripleargument\math_arrows_define_over}  %D For underarrows the default kern is 0.3ex -\def\dodefinemathunderarrow[#1][#2][#3]% +\def\math_arrows_define_over[#1][#2][#3]%    {\ifthirdargument -      \setuvalue{#1}{\dohandlemathunderarrow[#2][#3]}% +      \setuvalue{#1}{\math_arrows_under_handle[#2][#3]}%      \else -      \setuvalue{#1}{\dohandlemathunderarrow[0.3ex][#2]}% +      \setuvalue{#1}{\math_arrows_under_handle[0.3ex][#2]}%      \fi} -\def\dohandlemathunderarrow[#1][#2]% -  {\mathpalette{\dodohandlemathunderarrow{#1}{#2}}} +\def\math_arrows_under_handle[#1][#2]% +  {\mathpalette{\math_arrows_under_handle_indeed{#1}{#2}}} -\def\dodohandlemathunderarrow#1#2#3#4% +\def\math_arrows_under_handle_indeed#1#2#3#4%    {\vtop{\ialign{##\crcr     $\mathsurround\zeropoint\hfil#3#4\hfil$\crcr     \noalign{\nointerlineskip\kern#1}% diff --git a/tex/context/base/math-for.mkiv b/tex/context/base/math-for.mkiv index aee640572..0c8bd05ae 100644 --- a/tex/context/base/math-for.mkiv +++ b/tex/context/base/math-for.mkiv @@ -30,19 +30,4 @@  \let\setupformulas   \setupformula  \let\setupsubformulas\setupsubformula -% D \macros -% D   {setuptextformulas} -% D -% D This command sets up in||line math. Most features deals -% D with grid snapping and are experimental. - -% \newtoks \everysetuptextformulas -% -% \unexpanded\def\setuptextformulas -%   {\dosingleempty\dosetuptextformulas} -% -% \def\dosetuptextformulas[#1]% -%   {\getparameters[\??mt][#1]% -%    \the\everysetuptextformulas} -  \protect \endinput diff --git a/tex/context/base/math-ini.mkiv b/tex/context/base/math-ini.mkiv index 9a8dbef25..e6a3ae6f3 100644 --- a/tex/context/base/math-ini.mkiv +++ b/tex/context/base/math-ini.mkiv @@ -53,6 +53,8 @@  \definesystemattribute[mathmode]       [public]  \definesystemattribute[mathitalics]    [public] +\definesystemattribute[displaymath]    [public] +  \appendtoks      \attribute\mathmodeattribute\plusone  \to \everydisplay @@ -61,6 +63,10 @@      \attribute\mathmodeattribute\plusone  \to \everybeforedisplayformula +\appendtoksonce +    \attribute\displaymathattribute\plusone +\to \everybeforedisplayformula +  \setnewconstant\defaultmathfamily \zerocount % 255  %D Some measures (maybe spac-mth): @@ -75,18 +81,6 @@  %D Configuration for integrals. (If needed we can speed this up and make it  %D installable; no processaction is needed then). -% \newtoks\everysetupmathematics -% -% \unexpanded\def\setupmathematics -%   {\dosingleargument\dosetupmathematics} -% -% \def\dosetupmathematics[#1]% -%   {\getparameters[\??mo][#1]% -%    \the\everysetupmathematics} -% -% \def\mathematicsparameter#1% -%   {\ifcsname\??mo#1\endcsname\csname\??mo#1\endcsname\fi} -  \installcorenamespace{mathematics}  \installswitchcommandhandler \??mathematics {mathematics} \??mathematics diff --git a/tex/context/base/meta-ini.mkiv b/tex/context/base/meta-ini.mkiv index a62b81ccf..b1b8998a5 100644 --- a/tex/context/base/meta-ini.mkiv +++ b/tex/context/base/meta-ini.mkiv @@ -104,14 +104,6 @@     \c!textstyle=,     \c!textcolor=] -% \unexpanded\def\defineMPinstance -%   {\dodoubleargument\meta_define_instance} - -% \def\meta_define_instance[#1][#2]% -%   {\ifcsname\??mpinstancetokens#1\endcsname\else\expandafter\newtoks\csname\??mpinstancetokens#1\endcsname\fi -%    \t_meta_instance\emptytoks % in case we redefine -%    \getparameters[\??mpinstance#1][\s!format=mpost,\s!extensions=\v!no,\s!initializations=\v!no,#2]} -  \appendtoks      \ifcsname\??mpinstancetokens\currentMPinstance\endcsname \else          \expandafter\newtoks\csname\??mpinstancetokens\currentMPinstance\endcsname @@ -362,34 +354,36 @@  \let \m_meta_current_variable         \empty  \let \m_meta_current_variable_template\empty +\installcorenamespace{graphicvariable} +  \def \meta_prepare_variable_default   {\MPcolor{black}} % just to be sure we use a color but ... -\edef\meta_unknown_variable_template  {\??gv:\s!unknown} +\edef\meta_unknown_variable_template  {\??graphicvariable:\s!unknown} -\letvalue{\??gv:\s!unknown}\empty +\letvalue{\??graphicvariable:\s!unknown}\empty  \unexpanded\def\setupMPvariables    {\dodoubleempty\meta_setup_variables}  \def\meta_setup_variables[#1][#2]%    {\ifsecondargument -     \getrawparameters[\??gv#1:][#2]% +     \getrawparameters[\??graphicvariable#1:][#2]%     \else -     \getrawparameters[\??gv:][#1]% +     \getrawparameters[\??graphicvariable:][#1]%     \fi}  \unexpanded\def\presetMPvariable    {\dodoubleargument\meta_preset_variable}  \def\meta_preset_variable[#1][#2=#3]% -  {\ifcsname\??gv#1:#2\endcsname \else -     \setvalue{\??gv#1:#2}{#3}% +  {\ifcsname\??graphicvariable#1:#2\endcsname \else +     \setvalue{\??graphicvariable#1:#2}{#3}%     \fi}  \def\MPrawvar#1#2% no checking -  {\csname\??gv#1:#2\endcsname} +  {\csname\??graphicvariable#1:#2\endcsname}  \def\MPvariable#1% todo: could be a framed chain -  {\csname\??gv\currentmpvariableclass:#1\endcsname} +  {\csname\??graphicvariable\currentmpvariableclass:#1\endcsname}  \unexpanded\def\useMPvariables    {\dodoubleargument\meta_use_variables} @@ -403,7 +397,7 @@  \unexpanded\def\meta_prepare_variable#1%    {\edef\m_meta_current_variable_template -     {\??gv\currentmpvariableclass:#1}% +     {\??graphicvariable\currentmpvariableclass:#1}%     \edef\m_meta_current_variable       {\csname\ifcsname\m_meta_current_variable_template\endcsname          \m_meta_current_variable_template\else\meta_unknown_variable_template @@ -1172,11 +1166,9 @@  %D  %D Here is a generic setup command: -\newtoks\everysetupMPgraphics +\installcorenamespace{MPgraphics} -\unexpanded\def\setupMPgraphics[#1]% -  {\getparameters[\??mp][#1]% -   \the\everysetupMPgraphics} +\installsetuponlycommandhandler \??MPgraphics {MPgraphics}  %D Here we hook in the outer color. When \type {color} is set to \type  %D {global} we get the outer color automatically. If you change this @@ -1184,7 +1176,7 @@  %D behave in unexpected ways.  \appendtoks -    \doifelse\@@mpcolor\v!global{\MPcolormethod\plusone}{\MPcolormethod\zerocount}% +    \doifelse{\directMPgraphicsparameter\c!color}\v!global{\MPcolormethod\plusone}{\MPcolormethod\zerocount}%  \to \everysetupMPgraphics  \setupMPgraphics diff --git a/tex/context/base/mult-def.mkiv b/tex/context/base/mult-def.mkiv index a2673f9d2..c7c3402a6 100644 --- a/tex/context/base/mult-def.mkiv +++ b/tex/context/base/mult-def.mkiv @@ -63,6 +63,10 @@  \def\s!italics        {italics}  \def\s!integral       {integral} +\def\c!HL             {HL} +\def\c!VL             {VL} +\def\c!NL             {NL} +  \ifdefined\v!kerncharacters\else \def\v!kerncharacters{kerncharacters} \fi % no time now for translations should be a e! actually  \ifdefined\v!stretched     \else \def\v!stretched     {stretched}      \fi  \ifdefined\v!vulgarfraction\else \def\v!vulgarfraction{vulgarfraction} \fi diff --git a/tex/context/base/mult-low.lua b/tex/context/base/mult-low.lua index fb4e05d49..fbd5d585d 100644 --- a/tex/context/base/mult-low.lua +++ b/tex/context/base/mult-low.lua @@ -17,6 +17,7 @@ return {          "zeropoint", "onepoint", "halfapoint", "onebasepoint", "maxdimen", "scaledpoint", "thousandpoint",          "points", "halfpoint",          "zeroskip", +        "zeromuskip", "onemuskip",          "pluscxxvii", "pluscxxviii", "pluscclv", "pluscclvi",          "normalpagebox",          --        -- @@ -203,7 +204,7 @@ return {          --          "removetoks", "appendtoks", "prependtoks", "appendtotoks", "prependtotoks", "to",          -- -        "endgraf", "empty", "null", "space", "quad", "enspace", "obeyspaces", "obeylines", "normalspace", +        "endgraf", "endpar", "everyendpar", "empty", "null", "space", "quad", "enspace", "obeyspaces", "obeylines", "normalspace",          --          "executeifdefined",          -- diff --git a/tex/context/base/mult-sys.mkiv b/tex/context/base/mult-sys.mkiv index f76840971..46d321632 100644 --- a/tex/context/base/mult-sys.mkiv +++ b/tex/context/base/mult-sys.mkiv @@ -452,108 +452,52 @@  %D for instance is available as \type{\??ag} and expands to  %D \type{@@ag} in composed variables. -\definesystemvariable {ab}   % AlignedBoxes -\definesystemvariable {ae}   % AttributEs -\definesystemvariable {an}   % ANchor -\definesystemvariable {as}   % AlignmentSwitch -\definesystemvariable {bp}   % BreakPoint -\definesystemvariable {bx}   % BackendExport -\definesystemvariable {cb}   % CollectBox -\definesystemvariable {cp}   % CliP -\definesystemvariable {da}   % DAte +\definesystemvariable {du}   % dummy, will stay + +% these will be replaced by namespaces / commandhandlers +  \definesystemvariable {db}   % Labels  \definesystemvariable {dd}   % DoorDefinieren -\definesystemvariable {de}   % DEel -\definesystemvariable {dl}   % DunneLijnen -\definesystemvariable {dn}   % DoorNummeren -\definesystemvariable {dm}   % DefineMeasure -\definesystemvariable {du}   % DUmmy -\definesystemvariable {ef}   % ExternFiguur -\definesystemvariable {en}   % ENvironments -\definesystemvariable {ex}   % ExterneFiguren -\definesystemvariable {fc}   % FramedContent -\definesystemvariable {fi}   % FIle Once -\definesystemvariable {fo}   % xml FO (xtag) -\definesystemvariable {fu}   % FontSolution -\definesystemvariable {fw}   % simpleFonts by Wolfgang -\definesystemvariable {fx}   % FoXet -\definesystemvariable {gb}   % Graphic Bitmaps -\definesystemvariable {gv}   % Graphic Variable -\definesystemvariable {ha}   % HAng  \definesystemvariable {id}   % Index -\definesystemvariable {ih}   % InHoudsopgave -\definesystemvariable {il}   % stelInvulRegelsin -\definesystemvariable {ip}   % InsertPages -\definesystemvariable {it}   % stelInTerliniein -\definesystemvariable {iv}   % stelInvulLijnenin -\definesystemvariable {ka}   % KAntlijn +  \definesystemvariable {kl}   % KoLommen -\definesystemvariable {km}   % KenMerk -\definesystemvariable {kp}   % KopPelteken  \definesystemvariable {ks}   % KolomSpan -\definesystemvariable {kt}   % KonTakten -\definesystemvariable {kw}   % KontaktWaarde -\definesystemvariable {le}   % LinetablE -\definesystemvariable {lf}   % LocalFigures -\definesystemvariable {lg}   % taal (LanGuage) -\definesystemvariable {lk}   % LinK -\definesystemvariable {ll}   % Layers -\definesystemvariable {lr}   % LayeR -\definesystemvariable {lu}   % LUacode -\definesystemvariable {ma}   % MargeAchtergrond  \definesystemvariable {mc}   % MultiColumn -\definesystemvariable {mt}   % inline MaTh -\definesystemvariable {mt}   % multi column (!!! double usage) -\definesystemvariable {mo}   % Math Options -\definesystemvariable {mp}   % MetaPost -\definesystemvariable {nn}   % structurenumbering -\definesystemvariable {nm}   % Nummering -\definesystemvariable {np}   % NaastPlaatsen -\definesystemvariable {nr}   % Nummeren +\definesystemvariable {mt}   % MulTicolumn + +\definesystemvariable {fc}   % FramedContent +\definesystemvariable {od}   % Omlijnd Defaults (simple)  \definesystemvariable {oi}   % OmlijndInstellingen  \definesystemvariable {ol}   % OmLijnd -\definesystemvariable {od}   % Omlijnd Defaults (simple) -\definesystemvariable {pb}   % PuBlication -\definesystemvariable {pc}   % PageComment -\definesystemvariable {ph}   % ParagrapH -\definesystemvariable {pn}   % PaginaNummer -\definesystemvariable {pr}   % PRogrammas -\definesystemvariable {py}   % PropertYs + +\definesystemvariable {le}   % LinetablE + +% bibl: +  \definesystemvariable {pv}   % PublicationVariable -\definesystemvariable {ql}   % catcode table let     % already defined -\definesystemvariable {qd}   % catcode table def     % already defined -\definesystemvariable {qu}   % catcode table ued     % already defined -\definesystemvariable {qm}   % catcode table meaning % already defined -\definesystemvariable {rn}   % RegelNummer -\definesystemvariable {rs}   % RaSters -\definesystemvariable {rt}   % RoosTers -\definesystemvariable {rw}   % RenderingWindow -\definesystemvariable {sb}   % SectieBlok -\definesystemvariable {sd}   % SounD -\definesystemvariable {se}   % SEctie -\definesystemvariable {sh}   % ShapeText -\definesystemvariable {sp}   % SelecteerPapier +\definesystemvariable {pb}   % PuBlication + +% needs checking (namespaces now) + +\definesystemvariable {fw}   % simpleFonts by Wolfgang + +% old pragma + +\definesystemvariable {kt}   % KonTakten +\definesystemvariable {kw}   % KontaktWaarde  \definesystemvariable {st}   % STickers -\definesystemvariable {sx}   % Selector -\definesystemvariable {ta}   % TAb -\definesystemvariable {tb}   % TekstBlokken -\definesystemvariable {te}   % TEmplate -\definesystemvariable {ti}   % TabelInstellingen -\definesystemvariable {tl}   % TekstLijnen -\definesystemvariable {tt}   % TabulaTe -\definesystemvariable {tx}   % TeXtflow -\definesystemvariable {ur}   % URl -\definesystemvariable {vn}   % VoetNoten +\definesystemvariable {km}   % KenMerk + +% mkii +  \definesystemvariable {xf}   % XML File (xtag)  \definesystemvariable {xp}   % XML Processing (xtag, so still needed) -\definesystemvariable {za}   % layout adapt % ZetspiegelAanpassing -\definesystemvariable {zc}   % columns +\definesystemvariable {fo}   % xml FO (xtag) +\definesystemvariable {fx}   % FoXet  % still used but defined locally -\definesystemvariable {cs}   % CharacterSpacing  \definesystemvariable {ts}   % TypeScript -\definesystemvariable {kk}   % Kapitalen  % obsolete but kept for a while (core-obs) @@ -621,8 +565,8 @@  %definefileconstant {figureextension}    {tuf}  %definefileconstant {inputextension}     {tui}  %definefileconstant {outputextension}    {tuo} % tup for previous run -\definefileconstant {optionextension}    {top} -\definefileconstant {temporaryextension} {tmp} +%definefileconstant {optionextension}    {top} +%definefileconstant {temporaryextension} {tmp}  %definefileconstant {patternsextension}  {pat}  %definefileconstant {hyphensextension}   {hyp}  %definefileconstant {fontmapextension}   {map} diff --git a/tex/context/base/pack-bck.mkvi b/tex/context/base/pack-bck.mkvi index fbe704fab..57d0ee456 100644 --- a/tex/context/base/pack-bck.mkvi +++ b/tex/context/base/pack-bck.mkvi @@ -209,7 +209,7 @@  %    \c!color=,  %    \c!background=\v!screen,  %    \c!backgroundcolor=\backgroundparameter\c!color, -%    \c!screen=\@@rsscreen, +%    \c!screen=\defaultbackgroundscreen,  %     \c!background=\v!color,     \c!backgroundcolor=lightgray, diff --git a/tex/context/base/pack-mrl.mkiv b/tex/context/base/pack-mrl.mkiv index dae6acf47..72b12d639 100644 --- a/tex/context/base/pack-mrl.mkiv +++ b/tex/context/base/pack-mrl.mkiv @@ -13,26 +13,24 @@  \writestatus{loading}{ConTeXt Packaging Macros / More Rules} -%D This module needs an overhaul. +%D The (re)implementation of margin rules has been moved elsewhere.  \unprotect  %D \macros  %D   {setupblackrules,blackrule}  %D -%D The graphic capabilities of \TEX\ do not go beyond simple -%D filled rules, except of course when using specials. Let's -%D start with a warning: using this commands is far more slower -%D than using the \TEX\ primitives \type{\hrule} and -%D \type{\vrule}, but they save us some tokens. The +%D The graphic capabilities of \TEX\ do not go beyond simple filled rules, except of +%D course when using specials or, in \MKIV, manipulate node lists. Let's start with +%D a warning: using this commands is far more slower than using the \TEX\ primitives +%D \type {\hrule} and \type {\vrule}, but they save us some tokens. The  %D characteristics of these rule drawing command can be set by:  %D  %D \showsetup{setupblackrules}  %D -%D The simple command draws only one rule. Its optional -%D argument can be used to specify the dimensions. By setting -%D the width, height or depth to \type {max}, one gets the -%D natural dimensions. +%D The simple command draws only one rule. Its optional argument can be used to +%D specify the dimensions. By setting the width, height or depth to \type {max}, one +%D gets the natural dimensions.  %D  %D \showsetup{blackrule} @@ -73,8 +71,8 @@  %D \macros  %D   {blackrules}  %D -%D One can call for a sequence of black rules, if needed -%D equally spaced over the given width. +%D One can call for a sequence of black rules, if needed equally spaced over the +%D given width.  %D  %D \showsetup{blackrules}  %D @@ -93,9 +91,8 @@  %D \getbuffer  %D \stoplines  %D -%D We could of course have implemented this macro using -%D \type{\leaders}, but this would probably have taken more -%D tokens. +%D We could of course have implemented this macro using \type {\leaders}, but this +%D would probably have taken more tokens.  \unexpanded\def\blackrules % probably never used    {\hbox\bgroup @@ -135,139 +132,19 @@     \c!distance=.25\emwidth,     \c!color=] -%D Marginrules will either become obsolete or be redone. - -%D The next commands can be used to draw margin rules. We -%D support two methods: \marginrule{one for in||line use} and -%D one that acts on a paragraph. Drawing a margin rule is -%D rather straightforward because we can use the commands that -%D put text in the margin. - -\def\dodrawmarginrule -  {\setbox\scratchbox\hbox -     {\vrule\!!depth\strutdepth\!!height\strutheight\!!width\@@karulethickness}% -   \smashbox\scratchbox % no \vsmash !!! -   \box\scratchbox} - -\def\drawmarginrule -  {\strut\inleft{\dodrawmarginrule}} - -%D \macros -%D   {marginrule} -%D -%D The first method gobbles words and simply puts a bar in the -%D margin. This method is not entirely robust. -%D -%D \showsetup{marginrule} - -\definecomplexorsimple\marginrule - -\def\simplemarginrule -  {\let\processword\drawmarginrule -   \processwords} - -\def\complexmarginrule[#1]% -  {\ifnum#1<\@@kalevel\relax \else -     \def\@@kadefaultwidth{#1}% -     \expandafter\simplemarginrule -   \fi} - -%D We need an auxiliary variable - -\def\@@kadefaultwidth{1} - -%D \macros -%D   {setupmarginrules} -%D -%D This macro definitions show us that we can pass an optional -%D level, which is matched against the previous set one. The -%D level can be set up with -%D -%D \showsetup{setupmarginrules} - -% \unexpanded\def\setupmarginrules -%   {\dodoubleargument\getparameters[\??ka]} -% -% %D \macros -% %D   {startmarginrule} -% %D -% %D The second method collects text and reformats it afterwards, -% %D using the shapebox macros. We prevent local margin rules. -% %D -% %D \showsetup{startmarginrule} -% -% \definecomplexorsimple\startmarginrule -% -% \def\simplestartmarginrule -%   {\bgroup -%    \let\drawmarginrule\relax -%    \let\stopmarginrule\dostopmarginrule -%    \beginofshapebox} -% -% \def\complexstartmarginrule[#1]% -%   {\bgroup -%    \let\drawmarginrule\relax -%    \ifnum#1<\@@kalevel\relax -%      \let\stopmarginrule\egroup -%    \else -%      \def\@@kadefaultwidth{#1}% -%      \let\stopmarginrule\dostopmarginrule -%      \expandafter\beginofshapebox -%    \fi} -% -% \def\dostopmarginrule -%   {\endofshapebox -%    \reshapebox -%      {\hbox{\inleftmargin{\dodrawmarginrule}\box\shapebox}}% -%    \flushshapebox -%    \egroup} - -%D \startbuffer -%D \setupmarginrules[level=5] -%D -%D \startmarginrule[1] -%D First we set the level at~5. Next we typeset this first -%D paragraph as a level~1 one. As expected no rule show up. -%D \stopmarginrule -%D -%D \startmarginrule[5] -%D The second paragraph is a level~5 one. As we can see here, -%D the marginal rule gets a width according to its level. -%D \stopmarginrule -%D -%D \startmarginrule[8] -%D It will of course be no surprise that this third paragraph -%D has a even thicker margin rule. This behavior can be -%D overruled by specifying the width explictly. -%D \stopmarginrule -%D \stopbuffer -%D -%D In next example we show most features. Watch the rule -%D thickness adapting itself to the level. -%D -%D \startexample -%D \getbuffer -%D \stopexample -%D -%D We just said: -%D -%D \typebuffer -  %D \macros  %D   {vl, hl}  %D -%D The command \type{\vl} draws a vertical rule \vl\ with strut -%D dimensions, multiplied with the factor specified in the -%D optional argument. The height and depth are clipped \vl[3] -%D to the baselinedistance. Its horizontal counterpart -%D \type{\hl} draws a horizontal rule \hl\ with a width of 1em, -%D multiplied with the optional factor. The horizontal rule is -%D drawn on top of the baseline. +%D The command \type {\vl} draws a vertical rule \vl\ with strut dimensions, +%D multiplied with the factor specified in the optional argument. The height and +%D depth are clipped \vl [3] to the baselinedistance. Its horizontal counterpart +%D \type {\hl} draws a horizontal rule \hl\ with a width of 1em, multiplied with the +%D optional factor. The horizontal rule is drawn on top of the baseline.  %D  %D \showsetup{vl}  %D \showsetup{hl} -\unexpanded\def\dovlwdhtdp#1#2#3% used elsewhere +\unexpanded\def\pack_rule_vl_indeed#1#2#3%    {\bgroup     \setbox\scratchbox\hbox       {\vrule @@ -279,25 +156,27 @@     \box\scratchbox     \egroup} -\def\complexvl[#1]% -  {\dovlwdhtdp\plusone{#1}{#1}} +\def\pack_rule_vl[#1]% +  {\pack_rule_vl_indeed{#1}{#1}{#1}} -\def\complexhl[#1]% +\def\pack_rule_hl[#1]%    {\hbox       {\vrule          \!!width #1\emwidth          \!!height\linewidth          \!!depth \zeropoint}} -\definecomplexorsimple\vl \def\simplevl{\complexvl[\plusone]} -\definecomplexorsimple\hl \def\simplehl{\complexhl[\plusone]} +\unexpanded\def\vl{\dosingleempty\pack_rule_vl} +\unexpanded\def\hl{\dosingleempty\pack_rule_hl} + +\let\dovlwdhtdp\pack_rule_vl_indeed % used elsewhere  %D \macros  %D   {hairline, thinrule, thinrules, setupthinrules}  %D -%D Drawing thin lines can of course easily be accomplished by -%D the \TEX\ primitives \type{\hrule} and \type{\vrule}. The -%D next few macros however free us from some specifications. +%D Drawing thin lines can of course easily be accomplished by the \TEX\ +%D primitives \type{\hrule} and \type{\vrule}. The next few macros however +%D free us from some specifications.  %D  %D \startbuffer  %D some text @@ -338,112 +217,158 @@  %D  %D which looks like: \thinrules[n=2] -\newconstant\ruletype +\installcorenamespace{thinrules} +\installcorenamespace{thinrulealternatives} + +\installdirectcommandhandler \??thinrules {thinrules} + +\setupthinrules +  [\c!interlinespace=\v!small, +   \c!n=3, +   \c!before=, +   \c!inbetween={\blank[\v!white]}, +   \c!after=, +   \c!color=, +   \c!height=.5\linewidth, +   \c!depth=.5\linewidth, +   \c!frame=\v!on, % compatible with textbackgrounds +   \c!alternative=\v!b, +   \c!backgroundcolor=, +   \c!background=, +   \c!rulethickness=\linewidth] + +\letvalue{\??thinrulealternatives\v!a   }\zerocount +\letvalue{\??thinrulealternatives\v!b   }\plusone +\letvalue{\??thinrulealternatives\v!c   }\plustwo +\letvalue{\??thinrulealternatives\v!none}\zerocount + +\newconstant\c_pack_thinrules_type  \def\thinrule    {\strut     \bgroup -   \ruletype\plusone -   \processaction -     [\@@dlalternative] -     [ \v!a=>\ruletype\zerocount,% no line -      %\v!b=>\ruletype\plusone  ,% height/depth -       \v!c=>\ruletype\plustwo  ,% topheight/botdepth -      %  11=>\ruletype\plusone  ,% fallback for  backgrounds -          0=>\ruletype\zerocount,% compatible with backgrounds -      %   1=>\ruletype\plusone  ,% compatible with backgrounds -          2=>\ruletype\plustwo  ]% compatible with backgrounds -   \doifsomething\@@dlrulethickness -     {\linewidth\@@dlrulethickness}% +   \edef\p_height    {\directthinrulesparameter\c!height}% +   \edef\p_depth     {\directthinrulesparameter\c!depth}% +   \edef\p_background{\directthinrulesparameter\c!background}% +   \edef\p_frame     {\directthinrulesparameter\c!frame}% +   \linewidth\dimexpr\directthinrulesparameter\c!rulethickness/\plustwo\relax     \ifdim\linewidth=\zeropoint -     \ruletype\zerocount +     \c_pack_thinrules_type\zerocount +   \else\ifx\p_frame\v!on +     \c_pack_thinrules_type\expandcheckedcsname\??thinrulealternatives{\directthinrulesparameter\c!alternative}\v!b\relax +   \else +     \c_pack_thinrules_type\zerocount +   \fi\fi +   \ifnum\c_pack_thinrules_type=\plusone +     \ifx\p_height\v!max +       \scratchheight\strutht +     \else +       \setdimensionwithunit\scratchheight\p_height\strutht +     \fi +     \ifx\p_depth\v!max +        \scratchdepth\strutdp +     \else +        \setdimensionwithunit\scratchdepth\p_depth\strutdp +     \fi     \else -     \doifnot\@@dlframe\v!on{\ruletype\zerocount}% +     \scratchheight\strutht +     \scratchdepth \strutdp     \fi -   \ifnum\ruletype=\plusone -     \doif\@@dlheight\v!max{\let\@@dlheight\!!plusone}% -     \doif\@@dldepth \v!max{\let\@@dldepth \!!plusone}% +   \ifx\p_background\v!color +     \startcolor[\directthinrulesparameter\c!backgroundcolor]% +       \ifnum\c_pack_thinrules_type=\plustwo % prevent overshoot due to rounding +         \leaders +           \hrule +             \!!height\dimexpr\scratchheight-\linewidth\relax +             \!!depth \dimexpr\scratchdepth -\linewidth\relax +           \hfill +       \else +         \leaders +           \hrule +             \!!height\scratchheight +             \!!depth \scratchdepth +           \hfill +       \fi +     \stopcolor +     \ifcase\c_pack_thinrules_type +       % no rule +     \or +       \startcolor[\directthinrulesparameter\c!color]% +         \hfillneg +         \leaders +           \hrule +             \!!height\linewidth +             \!!depth \linewidth +           \hfill +       \stopcolor +     \or +       \startcolor[\directthinrulesparameter\c!color]% +         \hfillneg +         \leaders +           \hrule +             \!!height\dimexpr-\scratchdepth+\linewidth\relax +             \!!depth \scratchdepth +           \hfill +         \hfillneg +         \leaders +           \hrule +             \!!height\scratchheight +             \!!depth \dimexpr-\scratchheight+\linewidth\relax +           \hfill +       \stopcolor +     \fi     \else -     \let\@@dlheight\!!plusone -     \let\@@dldepth\!!plusone +     \ifcase\c_pack_thinrules_type +       % no rule +     \else +       \startcolor[\directthinrulesparameter\c!color]% +         \leaders +           \hrule +             \!!height\scratchheight +             \!!depth \scratchdepth +           \hfill +       \stopcolor +     \fi     \fi -   \freezedimensionwithunit\@@dlheight\strutht -   \freezedimensionwithunit\@@dldepth\strutdp -   \divide\linewidth \plustwo -   \doifelse\@@dlbackground\v!color -     {\startcolor[\@@dlbackgroundcolor]% -      \ifnum\ruletype=\plustwo % prevent overshoot due to rounding -        \leaders -          \hrule -            \!!height\dimexpr\@@dlheight-.5\linewidth\relax -            \!!depth \dimexpr\@@dldepth -.5\linewidth\relax -          \hfill -      \else -        \leaders -          \hrule -            \!!height\@@dlheight -            \!!depth \@@dldepth -          \hfill -      \fi -      \stopcolor -      \ifcase\ruletype -        % no rule -      \or -        \startcolor[\@@dlcolor]% -        \hfillneg -        \leaders\hrule\!!height\linewidth\!!depth\linewidth\hfill -        \stopcolor -      \or -        \startcolor[\@@dlcolor]% -        \hfillneg\leaders\hrule\!!height\dimexpr-\@@dldepth+\linewidth\relax\!!depth\@@dldepth\hfill -        \hfillneg\leaders\hrule\!!height\@@dlheight\!!depth\dimexpr-\@@dlheight+\linewidth\relax\hfill -        \stopcolor -      \fi} -     {\ifcase\ruletype \else -        \startcolor[\@@dlcolor]% -        \leaders\hrule\!!height\@@dlheight\!!depth\@@dldepth\hfill -        \stopcolor -      \fi}%     \strut     \carryoverpar\egroup} -\def\hairline +\unexpanded\def\hairline    {\endgraf     \thinrule     \endgraf} -\def\dosetupthinrules[#1]% -  {\getparameters[\??dl][#1]} +\unexpanded\def\thinrules +  {\dosingleempty\pack_thinrules} -\unexpanded\def\setupthinrules -  {\dosingleargument\dosetupthinrules} - -\def\dothinrules[#1]% +\def\pack_thinrules[#1]%    {\bgroup -   \dosetupthinrules[#1]% -   \@@dlbefore -   \assignvalue\@@dlinterlinespace\@@dlinterlinespace{1.0}{1.5}{2.0}% -   \spacing\@@dlinterlinespace -   \dorecurse\@@dln -     {\ifnum\recurselevel=\@@dln \dothinrulesnobreak \else -      \ifnum\recurselevel=2      \dothinrulesnobreak \fi\fi -                                 \thinrule -      \ifnum\recurselevel<\@@dln\relax +   \setupcurrentthinrules[#1]% +   \assignvalue{\directthinrulesparameter\c!interlinespace}\m_pack_thinrules_interlinespace{1.0}{1.5}{2.0}% +   \spacing\m_pack_thinrules_interlinespace +   \edef\p_after    {\directthinrulesparameter\c!after}% +   \edef\p_inbetween{\directthinrulesparameter\c!inbetween}% +   \directthinrulesparameter\c!before +   \scratchcounter\directthinrulesparameter\c!n\relax +   \dorecurse\scratchcounter +     {\ifnum\recurselevel=\scratchcounter \penalty500 \else +      \ifnum\recurselevel=\plustwo        \penalty500 \fi\fi +      \thinrule +      \ifnum\recurselevel<\scratchcounter\relax          % test needed, else messed up whitespace -        \ifx\@@dlinbetween\empty -          \softbreak +        \ifx\p_inbetween\empty +          \softbreak % \ifhmode \hskip \parfillskip \break \fi          \else            \endgraf            \nowhitespace -          \@@dlinbetween +          \p_inbetween          \fi        \fi}% -   \doifelsenothing\@@dlafter -     {\carryoverpar\egroup} -     {\@@dlafter\egroup}} - -\def\thinrules -  {\dosingleempty\dothinrules} +   \ifx\p_after\empty +     \carryoverpar\egroup +   \else +     \p_after\egroup +   \fi{}}  %D A couple of examples are given below.  %D @@ -464,11 +389,10 @@  %D  %D \typebuffer {\getbuffer}  %D -%D There are a couple of alternative ways to visualize rules -%D using backgrounds. At first sight these may look strange, -%D but they make sense in educational settings. The -%D alternatives are more or less compatible with the more -%D advanced \METAPOST\ based implementation. +%D There are a couple of alternative ways to visualize rules using backgrounds. At +%D first sight these may look strange, but they make sense in educational settings. +%D The alternatives are more or less compatible with the more advanced \METAPOST\ +%D based implementation.  %D  %D \startbuffer[a]  %D \setupthinrules @@ -507,22 +431,10 @@  %D \typebuffer[b] \getbuffer[a,b]  %D \macros -%D   {optimizethinrules} -%D -%D By saying \type {\thinrulestrue} or \type {-false}, we -%D can influence the way dangling lines are handled. - -\newif\ifoptimizethinrules \optimizethinrulestrue - -\def\dothinrulesnobreak -  {\ifoptimizethinrules\penalty500\fi} - -%D \macros  %D   {textrule, starttextrule, setuptextrules}  %D -%D Putting rules before and after a paragraph is very space -%D sensitive, but the next command handles that quite well. It -%D comes in two disguises: +%D Putting rules before and after a paragraph is very space sensitive, but the +%D next command handles that quite well. It comes in two disguises:  %D  %D \startbuffer  %D \textrule[top]{fragments} @@ -562,132 +474,143 @@  %D \showsetup{starttextrule}  %D \showsetup{setuptextrules}  %D -%D The implementation looks a bit complicated due to the -%D optional arguments. +%D The implementation looks a bit complicated due to the optional arguments. + +\installcorenamespace{textrules} +\installcorenamespace{textrulealternatives} + +\installdirectcommandhandler \??textrules {textrules} + +\setuptextrules +  [\c!location=\v!left, +   \c!before=\blank, +   \c!after=\blank, +   \c!inbetween=, +   \c!width=2\emwidth, +   \c!style=\v!bold, +   \c!color=, +   \c!rulecolor=, +   \c!bodyfont=, +   \c!rulethickness=\linewidth, +   \c!distance=.5\emwidth] + +\unexpanded\def\textrule +  {\dosingleempty\pack_textrule} + +\def\pack_textrule +  {\iffirstargument +     \expandafter\pack_textrule_yes +   \else +     \expandafter\pack_textrule_nop +   \fi} + +\def\pack_textrule_yes[#1]% +  {\expandcheckedcsname\??textrulealternatives{#1}\v!bottom} + +\def\pack_textrule_nop[#1]% +  {\dosinglegroupempty\pack_textrule_nop_indeed} + +\def\pack_textrule_nop_indeed +  {\iffirstargument +     \expandafter\pack_textrule_nop_indeed_yes +   \else +     \expandafter\pack_textrule_nop_indeed_nop +   \fi} + +\def\pack_textrule_nop_indeed_yes +  {\csname\??textrulealternatives\v!top\endcsname} -\unexpanded\def\setuptextrules -  {\dodoubleargument\getparameters[\??tl]} +\def\pack_textrule_nop_indeed_nop +  {\csname\??textrulealternatives\v!bottom\endcsname\empty} -\def\complextextrule[#1]% if needed we can make it installable -  {\let\next\dobottomtextrule -   \processaction -     [#1] -     [    \v!top=>\let\next\dotoptextrule, -       \v!middle=>\let\next\domiddletextrule, -       \v!bottom=>\let\next\dobottomtextrule]% -   \dosinglegroupempty\next} +\setvalue{\??textrulealternatives\v!top}#1% +  {\page[\v!preference] % interferes +   \directtextrulesparameter\c!before\relax +   \pack_textrule_with_text{#1}% +   \nowhitespace +   \directtextrulesparameter\c!inbetween\relax +   \endgraf} -\definecomplexorsimple\textrule +\setvalue{\??textrulealternatives\v!bottom}#1% +  {\pack_textrule_following{#1}% +   \directtextrulesparameter\c!after\relax +   \page[\v!preference]} -\def\simpletextrule -  {\dosinglegroupempty\dounknowntextrule} +\setvalue{\??textrulealternatives\v!middle}#1% +  {\pack_textrule_following{#1}% +   \directtextrulesparameter\c!inbetween\relax +   \page[\v!preference]} -\def\docomplextextrule#1% +\def\pack_textrule_with_text#1%    {\bgroup -   \advance\hsize\dimexpr-\rightskip-\leftskip\relax -   \setbox\scratchbox\hbox to \hsize -     {\dimen4\dimexpr .5ex+.5\linewidth\relax -      \dimen6\dimexpr-.5ex+.5\linewidth\relax +   \setbox\scratchbox\hbox to \availablehsize +     {\scratchwidth \directtextrulesparameter\c!rulethickness\relax +      \scratchheight\dimexpr .5\exheight+.5\scratchwidth\relax +      \scratchdepth \dimexpr-.5\exheight+.5\scratchwidth\relax        \doifsomething{#1} -        {\doifelse\@@tllocation\v!inmargin +        {\doifelse{\directtextrulesparameter\c!location}\v!inmargin             {\llap -              {\dousestyleparameter\@@tlstyle -               \dousecolorparameter\@@tlcolor +              {\usetextrulesstyleandcolor\c!style\c!color                 #1%                 \hskip\leftmargindistance}} -           {\color[\@@tlrulecolor] -              {\vrule\!!height\dimen4\!!depth\dimen6\!!width\@@tlwidth}% -            \hbox spread 2\dimexpr\@@tldistance\relax +           {\color[\directtextrulesparameter\c!rulecolor] +              {\vrule\!!height\scratchheight\!!depth\scratchdepth\!!width\directtextrulesparameter\c!width}% +            \hbox spread 2\dimexpr\directtextrulesparameter\c!distance\relax                {\hss -               \dousestyleparameter\@@tlstyle -               \dousecolorparameter\@@tlcolor +               \usetextrulesstyleandcolor\c!style\c!color                 \strut#1%                 \hss}}}% -      \color[\@@tlrulecolor] -        {\leaders\hrule\!!height\dimen4\!!depth\dimen6\hfill}}% +      \color[\directtextrulesparameter\c!rulecolor] +        {\leaders\hrule\!!height\scratchheight\!!depth\scratchdepth\hfill}}%     \ht\scratchbox\strutht     \dp\scratchbox\strutdp     \noindent\box\scratchbox -%\nobreak\verticalstrut\kern-\struttotal -% evt \witruimte     \egroup} -\def\dotoptextrule#1% -  {\page[\v!preference] % interferes -   %\whitespace % no -   \@@tlbefore -   \docomplextextrule{#1}% -% todo, option: \doifnothing{#1}{\ruledvskip-.5ex} -   \nowhitespace -   \@@tlinbetween -   \endgraf} - -\def\dodobottomtextrule#1#2% +\def\pack_textrule_following#1%    {\ifhmode       \endgraf     \fi -   \dimen0\strutdp -   \ifdim\prevdepth>\strutdp\else % was <\strutdp -     \ifdim\prevdepth>\zeropoint -       \advance\dimen0 -\prevdepth +   \vskip\dimexpr \strutdp +.5\exheight +     \ifdim\prevdepth>\strutdp\else % was <\strutdp +       \ifdim\prevdepth>\zeropoint +         -\prevdepth +       \fi       \fi -   \fi -   \advance\dimen0 .5ex -   \vskip\dimen0 -% == -%    \vskip\dimexpr \strutdp + .5ex -%       \ifdim\prevdepth>\strutdp\else\ifdim\prevdepth>\zeropoint-\prevdepth\fi\fi\relax -% -   \@@tlinbetween -   \doifelsenothing{#2} -     {\bgroup -      \advance\hsize\dimexpr-\rightskip-\leftskip\relax -      \nointerlineskip -      \moveleft-\leftskip\vbox -        {\color[\@@tlrulecolor] -           {\hrule\!!depth\linewidth\!!height\zeropoint\!!width\hsize}}% -      \egroup} -     {\docomplextextrule{#2}}% -   \ifvmode\prevdepth\zeropoint\fi -   #1% -   \page[\v!preference]} - -\def\dobottomtextrule -  {\dodobottomtextrule\@@tlafter} - -\def\domiddletextrule -  {\dodobottomtextrule\@@tlinbetween} - -\def\dounknowntextrule -  {\iffirstargument -     \@EA\dotoptextrule -   \else -     \@EA\dobottomtextrule\@EA\empty +   \relax +   \directtextrulesparameter\c!inbetween\relax +   \doifelsenothing{#1} +     {\nointerlineskip +      \dontleavehmode\vbox +        {\color[\directtextrulesparameter\c!rulecolor] +           {\hrule\!!depth\directtextrulesparameter\c!rulethickness\!!height\zeropoint\!!width\availablehsize}}} +     {\pack_textrule_with_text{#1}}% +   \ifvmode +     \prevdepth\zeropoint     \fi}  %D The grouped commands also supports bodyfont switching:  \unexpanded\def\starttextrule#1%    {\bgroup -   \def\dounknowntextrule{\domiddletextrule} -   \dotoptextrule{#1} +   \def\pack_textrule_nop_indeed{\csname\??textrulealternatives\v!middle\endcsname}% +   \csname\??textrulealternatives\v!top\endcsname{#1}%     \bgroup -   \doifsomething\@@tlbodyfont{\switchtobodyfont[\@@tlbodyfont]}} +   \doifsomething{\directtextrulesparameter\c!bodyfont}{\switchtobodyfont[\directtextrulesparameter\c!bodyfont]}}  \unexpanded\def\stoptextrule    {\par     \egroup -   \dobottomtextrule\empty +   \csname\??textrulealternatives\v!bottom\endcsname\empty     \egroup}  %D \macros  %D   {fillinrules, setupfillinrules}  %D -%D The next few commands do not really deserve a place in a -%D core module, because they deal with specific typography. -%D Nevertheless I decided to make them part of the core, -%D because they permit us to make questionaires. Let's start -%D with some examples. +%D The next few commands do not really deserve a place in a core module, because +%D they deal with specific typography. Nevertheless I decided to make them part of +%D the core, because they permit us to make questionaires. Let's start with some +%D examples.  %D  %D \fillinrules[n=2,width=fit]{first}  %D \fillinrules[n=2,width=broad]{first} @@ -696,85 +619,112 @@  %D \fillinrules[n=2]{first}{last}  %D \fillintext{first}{last} \input reich \par  %D -%D The main command is \type{\fillinrules}. This command takes -%D one and an optional second argument and sets a paragraph with -%D empty visualized lines. +%D The main command is \type{\fillinrules}. This command takes one and an optional +%D second argument and sets a paragraph with empty visualized lines.  %D  %D \showsetup{fillinrules}  %D \showsetup{setupfillinrules} -\unexpanded\def\setupfillinrules -  {\dodoubleargument\getparameters[\??il]} -\definecomplexorsimpleempty\fillinrules +\installcorenamespace{fillinrules} + +\installdirectcommandhandler \??fillinrules {fillinrules} + +\setupfillinrules +  [\c!width=\v!broad, +   \c!distance=\emwidth, +   \c!before=\blank, +   \c!after=\blank, +   \c!n=\plusone, +   \c!interlinespace=\v!small, +   \c!separator=, +   \c!style=, +   \c!color=] -\def\complexfillinrules[#1]% -  {\def\docomplexfillinrules##1##2% -     {\dodocomplexfillinrules[#1]{##1}{##2}{\thinrules -        [\c!n=\@@iln,\c!interlinespace=\@@ilinterlinespace,\c!before=,\c!after=]}}% -   \dodoublegroupempty\docomplexfillinrules} +\unexpanded\def\fillinrules +  {\dosingleempty\pack_fillinrules} -\def\dodocomplexfillinrules[#1]#2#3#4% +\def\pack_fillinrules[#1]%    {\endgraf -   \@@ilbefore     \begingroup -   \setupfillinrules[#1]% +   \setupcurrentfillinrules[#1]% +   \let\pack_fillinrules_rule\thinrules +   \dodoublegroupempty\pack_fillinrules_indeed} + +\def\pack_fillinrules_indeed#1#2% +  {\directfillinrulesparameter\c!before +   \setupcurrentthinrules +     [\c!n=\directfillinrulesparameter\c!n, +      \c!interlinespace=\directfillinrulesparameter\c!interlinespace, +      \c!before=, +      \c!after=]% +   \scratchdistance\directfillinrulesparameter\c!distance\relax +   \edef\m_fillinrules_one{#1}% +   \edef\m_fillinrules_two{#2}%     \noindent -   \doifsomething{#2} -     {\doifelse\@@ilwidth\v!fit -        {\let\@@ildistance\!!zeropoint -         \hbox} -        {\doifelse\@@ilwidth\v!broad -           {\hbox} -           {\hbox to \@@ilwidth}}% -        \bgroup -          \dousestyleparameter\@@ilstyle -          \dousecolorparameter\@@ilcolor -          \strut#2\hfill\@@ilseparator\hskip\@@ildistance -        \egroup}% -  %\hangindent=\wd0\relax % tzt hang=yes,n -  %\parindent=\hangindent -  %\box0\relax +   \ifx\m_fillinrules_one\empty \else +     \edef\p_width{\directfillinrulesparameter\c!width}% +     \ifx\p_width\v!fit +       \scratchdistance\zeropoint +       \hbox +     \else\ifx\p_width\v!broad +       \hbox +     \else +       \hbox to \directfillinrulesparameter\c!width +     \fi\fi +     \bgroup +       \usefillinrulesstyleandcolor\c!style\c!color +       \strut +       \m_fillinrules_one +       \hfill\directfillinrulesparameter\c!separator +       \hskip\scratchdistance +     \egroup +   \fi     \setupwhitespace[\v!big]%     \ignorespaces -   #4% -   \doifsomething{#3} -     {\kern\@@ildistance -      \dousestyleparameter\@@ilstyle -      \dousecolorparameter\@@ilcolor -      #3\strut}% -   \endgroup +   \pack_fillinrules_rule +   \ifx\m_fillinrules_two\empty \else +     \kern\scratchdistance +     \usefillinrulesstyleandcolor\c!style\c!color +     \m_fillinrules_two +     \strut +   \fi     \endgraf -   \@@ilafter} +   \directfillinrulesparameter\c!after +   \endgroup}  %D \macros  %D   {fillintext}  %D -%D To provide compatible layouts when texts and lines are -%D mixed, one can typeset a paragraph by using the command -%D \type{\fillintext}. +%D To provide compatible layouts when texts and lines are mixed, one can typeset +%D a paragraph by using the command \type {\fillintext}.  %D  %D \showsetup{fillintext} -\definecomplexorsimpleempty\fillintext +\unexpanded\def\fillintext +  {\dosingleempty\pack_fillintext} + +\def\pack_fillintext[#1]% ugly +  {\endgraf +   \begingroup +   \setupcurrentfillinrules[#1]% +   \dodoublegroupempty\pack_fillintext_indeed} -\def\complexfillintext[#1]% rather rough, using an \unhbox is suboptimal -  {\def\docomplexfillintext##1##2% -     {\dowithnextbox -        {\dodocomplexfillinrules[#1]{##1}{\hfill##2}{\unhbox\nextbox\unskip}}% -      \hbox\bgroup\let\par\egroup\ignorespaces}% -   \dodoublegroupempty\docomplexfillintext} +\def\pack_fillintext_indeed#1#2% +  {\def\pack_fillinrules_rule{\unhbox\nextbox\unskip}% +   \dowithnextbox{\pack_fillinrules_indeed{#1}{\hfill#2}}% +   \hbox\bgroup\let\par\egroup\ignorespaces}  %D \macros  %D   {fillinline, setupfillinlines}  %D -%D Another member of the family takes care of putting a (often -%D small) rule after a piece of text, like +%D Another member of the family takes care of putting a (often small) rule after +%D a piece of text, like  %D  %D \startbuffer -%D \fillinline \input reich \par +%D +%D \stopbuffer\fillinline \input reich \par  %D \fillinline[margin=0cm] \input reich \par -%D \stopbuffer  %D  %D \startexample  %D \getbuffer @@ -789,82 +739,71 @@  %D \showsetup{fillinline}  %D \showsetup{setupfillinlines} -\unexpanded\def\setupfillinlines -  {\dodoubleargument\getparameters[\??iv]} +\installcorenamespace{fillinlines} -\definecomplexorsimpleempty\fillinline +\installdirectcommandhandler \??fillinlines {fillinlines} -\def\complexfillinline[#1]% -  {%\endgraf % interferes with \definedescription cum suis -   \@@ivbefore -   \begingroup -   \setupfillinlines[#1]% -   \advance\rightskip \@@ivmargin -   \parfillskip\zeropoint -   \def\par % very dangerous -     {\let\par\endgraf % -) -      \ifhmode\unskip\hfill\fi -      \scratchdimen\dimexpr\@@ivwidth-\@@ivdistance\relax -      \ifdim\scratchdimen>\@@ivmargin\else\expandafter\rlap\fi -        {\kern\@@ivdistance -         \vrule -           \!!width   \scratchdimen -           \!!height.5\linewidth -           \!!depth .5\linewidth}% -      \endgraf % ! -      \endgroup -      \endgraf % ! -      \@@ilafter}} - -%D Will move up: - -% \setupmarginrules -%   [\c!level=0, -%    \c!rulethickness=\@@kadefaultwidth\linewidth] - -\setupthinrules -  [\c!interlinespace=\v!small, -   \c!n=3, -   \c!before=, -   \c!inbetween={\blank[\v!white]}, -   \c!after=, +\setupfillinlines +  [\c!width=8\emwidth, % was 3cm +   \c!margin=\directfillinlinesparameter\c!width, +   \c!rulethickness=\linewidth,     \c!color=, -   \c!height=.5\linewidth, -   \c!depth=.5\linewidth, -   \c!frame=\v!on, % compatible with textbackgrounds -   \c!alternative=\v!b, -   \c!backgroundcolor=, -   \c!background=, -   \c!rulethickness=] - -\setuptextrules -  [\c!location=\v!left, +   \c!distance=\emwidth,     \c!before=\blank, -   \c!after=\blank, -   \c!inbetween=, -   \c!width=2em, -   \c!style=\v!bold, -   \c!color=, -   \c!rulecolor=, -   \c!bodyfont=, -   \c!distance=.5em] +   \c!after=\blank] -\setupfillinrules -  [\c!width=\v!broad, -   \c!distance=1em, -   \c!before=\blank, -   \c!after=\blank, -   \c!n=1, -   \c!interlinespace=\v!small, -   \c!separator=, -   \c!style=\v!normal, -   \c!color=] +\unexpanded\def\fillinline +  {\dosingleempty\pack_fillinline} + +\ifdefined\endpar % experiment with \endpar + +    \def\pack_fillinline[#1]% +      {% \endpar % no, as it interferes with \definedescription cum suis +       \begingroup +       \setupcurrentfillinlines[#1]% +       \directfillinlinesparameter\c!before +       \begingroup +       \advance\rightskip \directfillinlinesparameter\c!margin\relax +       \parfillskip\zeropoint +       \pushmacro\endpar +       \def\endpar +         {\popmacro\endpar +          \ifhmode\unskip\hfill\fi +          \scratchwidth\dimexpr\directfillinlinesparameter\c!width-\directfillinlinesparameter\c!distance\relax +          \ifdim\scratchwidth>\directfillinlinesparameter\c!margin\else\expandafter\rlap\fi +            {\kern\directfillinlinesparameter\c!distance +             \scratchheight\dimexpr\directfillinlinesparameter\c!rulethickness/\plustwo\relax +             \color[\directfillinlinesparameter\c!color]{\vrule\!!width\scratchwidth\!!height\scratchheight\!!depth\scratchheight}}% +          \endpar +          \endgroup +          \endpar +          \directfillinlinesparameter\c!after +          \endgroup}} % carryover ? + +\else + +    \def\pack_fillinline[#1]% +      {%\endgraf % no, as it interferes with \definedescription cum suis +       \begingroup +       \setupcurrentfillinlines[#1]% +       \directfillinlinesparameter\c!before +       \begingroup +       \advance\rightskip \directfillinlinesparameter\c!margin\relax +       \parfillskip\zeropoint +       \def\par +         {\let\par\endgraf +          \ifhmode\unskip\hfill\fi +          \scratchwidth\dimexpr\directfillinlinesparameter\c!width-\directfillinlinesparameter\c!distance\relax +          \ifdim\scratchwidth>\directfillinlinesparameter\c!margin\else\expandafter\rlap\fi +            {\kern\directfillinlinesparameter\c!distance +             \scratchheight\dimexpr\directfillinlinesparameter\c!rulethickness/\plustwo\relax +             \color[\directfillinlinesparameter\c!color]{\vrule\!!width\scratchwidth\!!height\scratchheight\!!depth\scratchheight}}% +          \endgraf +          \endgroup +          \endgraf +          \directfillinlinesparameter\c!after +          \endgroup}} % carryover ? -\setupfillinlines -  [\c!width=3cm, -   \c!margin=\@@ivwidth, -   \c!distance=1em, -   \c!before=\blank, -   \c!after=\blank] +\fi  \protect \endinput diff --git a/tex/context/base/pack-rul.mkiv b/tex/context/base/pack-rul.mkiv index 16b4460e9..e0be2db13 100644 --- a/tex/context/base/pack-rul.mkiv +++ b/tex/context/base/pack-rul.mkiv @@ -54,8 +54,16 @@  %D  %D \showsetup{setupscreens} -\unexpanded\def\setupscreens -  {\dodoubleargument\getparameters[\??rs]} +\installcorenamespace{screens} + +\installsetuponlycommandhandler \??screens {screens} + +\appendtoks +    \edef\defaultbackgroundscreen{\directscreensparameter\c!screen} +\to \everysetupscreens + +\setupscreens +  [\c!screen=0.90] % was 0.95 but that's hardly visible  %D The parameter handler: @@ -2492,7 +2500,7 @@    %\c!foregroundstyle=,    %\c!background=,    %\c!backgroundcolor=, -   \c!backgroundscreen=\@@rsscreen, +   \c!backgroundscreen=\defaultbackgroundscreen,     \c!linecorrection=\v!on,     \c!depthcorrection=\v!on,     \c!margin=\v!standard] @@ -2861,7 +2869,7 @@    %\c!foregroundcolor=,    %\c!foregroundstyle=,    %\c!background=, -   \c!backgroundscreen=\@@rsscreen, +   \c!backgroundscreen=\defaultbackgroundscreen,    %\c!backgroundcolor=,     \c!backgroundoffset=\zeropoint,    %\c!framecolor=, @@ -2890,7 +2898,4 @@     %\c!toffset=\zeropoint,     ]%\c!boffset=\zeropoint] -\setupscreens -  [\c!screen=0.95] -  \protect \endinput diff --git a/tex/context/base/page-bck.mkiv b/tex/context/base/page-bck.mkiv index 100c186dd..4fbbba9f4 100644 --- a/tex/context/base/page-bck.mkiv +++ b/tex/context/base/page-bck.mkiv @@ -42,6 +42,12 @@      \fi  \to \everybeforepagebody +\unexpanded\def\initializepagebackgrounds +  {\setfalse\c_page_backgrounds_new +   \setfalse\c_page_backgrounds_new_right +   \setfalse\c_page_backgrounds_new_left +   \setfalse\c_page_backgrounds_some} +  %D We keep calculations and checks to a minimum and also  %D try to minimize the amount of tracing due to expansion. @@ -122,22 +128,27 @@       \page_backgrounds_set_nop     \fi} -\def\page_backgrounds_check#1% -  {\edef\currentotrbackground{\??ma#1}% +%D We don't use the commandhandler code as we want these multitude of backgrounds to be +%D as fast as possible. + +\installcorenamespace{layoutbackgrounds} + +\unexpanded\def\page_backgrounds_check#1% +  {\edef\currentotrbackground{\??layoutbackgrounds#1}%     \page_backgrounds_check_background}  \def\ifsomebackgroundfound#1% -  {\ifcsname\??ma#1\endcsname} +  {\ifcsname\??layoutbackgrounds#1\endcsname}  \def\doifsomebackgroundelse#1% -  {\ifcsname\??ma#1\endcsname +  {\ifcsname\??layoutbackgrounds#1\endcsname       \expandafter\firstoftwoarguments     \else       \expandafter\secondoftwoarguments     \fi}  \def\doifsomebackground#1% -  {\ifcsname\??ma#1\endcsname +  {\ifcsname\??layoutbackgrounds#1\endcsname       \expandafter\firstofoneargument     \else       \expandafter\gobbleoneargument @@ -148,7 +159,7 @@  %D features can be used.  \def\page_backgrounds_add_to_box#1% area -  {\ifcsname\??ma#1\endcsname +  {\ifcsname\??layoutbackgrounds#1\endcsname       \expandafter\page_backgrounds_add_to_box_indeed     \else       \expandafter\gobblefourarguments @@ -158,11 +169,11 @@  % need a real framed or can we use a fake (i.e. no foreground, only for hidden)  \def\page_backgrounds_add_to_box_indeed#1#2#3#4% area box width height / always non zero -  {\ifcsname\??ma#1\c!setups\endcsname % to be done -     \doprocesslocalsetups{\csname\??ma#1\c!setups\endcsname}% should not produce funny spaces ! +  {\ifcsname\??layoutbackgrounds#1\c!setups\endcsname % to be done +     \doprocesslocalsetups{\csname\??layoutbackgrounds#1\c!setups\endcsname}% should not produce funny spaces !     \fi     % #2 has the right dimensions already -   \setbox#2\hbox{\localbackgroundframed{\??ma#1}#1#2}}% a real framed (including foreground) +   \setbox#2\hbox{\localbackgroundframed{\??layoutbackgrounds#1}#1#2}}% a real framed (including foreground)  %D There are quite some backgrounds. At the bottom layer,  %D there is the {\em paper} background. This one is only @@ -230,7 +241,7 @@       \page_backgrounds_set_boxes_a       \page_backgrounds_set_boxes_b       \page_backgrounds_set_boxes_c -   \ifx\@@mastate\v!repeat\else +   \ifx\p_page_backgrounds_state\v!repeat\else       \global\setfalse\c_page_backgrounds_new     \fi} @@ -284,9 +295,9 @@     \fi \fi}  \def\page_backgrounds_set_offsets_indeed -  {\ifcsname\??ma\v!text\v!text\endcsname +  {\ifcsname\??layoutbackgrounds\v!text\v!text\endcsname       \page_backgrounds_set_offsets_yes -   \else\ifcsname\??ma\v!text\endcsname +   \else\ifcsname\??layoutbackgrounds\v!text\endcsname       \page_backgrounds_set_offsets_yes     \else       \page_backgrounds_set_offsets_nop @@ -299,26 +310,26 @@     \global\pagebackgroundcompensation\zeropoint}  \def\page_backgrounds_set_offsets_yes -  {\global\pagebackgroundcompensation\csname\??ma\v!page\c!offset\endcsname\relax +  {\global\pagebackgroundcompensation\csname\??layoutbackgrounds\v!page\c!offset\endcsname\relax     \ifzeropt\pagebackgroundcompensation       \page_backgrounds_set_offsets_nop     \else -     \ifcsname\??ma\v!top\v!text\endcsname +     \ifcsname\??layoutbackgrounds\v!top\v!text\endcsname         \global\pagebackgroundhoffset\zeropoint -     \else\ifcsname\??ma\v!bottom\v!text\endcsname +     \else\ifcsname\??layoutbackgrounds\v!bottom\v!text\endcsname         \global\pagebackgroundhoffset\zeropoint       \else         \global\pagebackgroundhoffset\pagebackgroundcompensation       \fi\fi -     \ifcsname\??ma\v!text\v!rightedge\endcsname +     \ifcsname\??layoutbackgrounds\v!text\v!rightedge\endcsname         \global\pagebackgroundvoffset\zeropoint         \global\pagebackgrounddepth  \zeropoint -     \else\ifcsname\??ma\v!text\v!leftedge\endcsname +     \else\ifcsname\??layoutbackgrounds\v!text\v!leftedge\endcsname         \global\pagebackgroundvoffset\zeropoint         \global\pagebackgrounddepth  \zeropoint       \else         \global\pagebackgroundvoffset\pagebackgroundcompensation -       \global\pagebackgrounddepth  \csname\??ma\v!page\c!depth\endcsname\relax +       \global\pagebackgrounddepth  \csname\??layoutbackgrounds\v!page\c!depth\endcsname\relax       \fi\fi     \fi} @@ -370,7 +381,7 @@       \bgroup\hbox\bgroup         \goleftonpage         \ifdim\leftedgewidth>\zeropoint -         \ifcsname\??ma#1\v!leftedge\endcsname +         \ifcsname\??layoutbackgrounds#1\v!leftedge\endcsname             \page_backgrounds_set_box_cell#1\v!leftedge\leftedgewidth#2%           \else             \kern\leftedgewidth @@ -378,21 +389,21 @@           \kern\leftedgedistance         \fi         \ifdim\leftmarginwidth>\zeropoint -         \ifcsname\??ma#1\v!leftmargin\endcsname +         \ifcsname\??layoutbackgrounds#1\v!leftmargin\endcsname             \page_backgrounds_set_box_cell#1\v!leftmargin\leftmarginwidth#2%           \else             \kern\leftmarginwidth           \fi           \kern\leftmargindistance         \fi -       \ifcsname\??ma#1\v!text\endcsname +       \ifcsname\??layoutbackgrounds#1\v!text\endcsname           \page_backgrounds_set_box_cell#1\v!text\makeupwidth#2%         \else           \kern\makeupwidth         \fi         \ifdim\rightmarginwidth>\zeropoint           \kern\rightmargindistance -         \ifcsname\??ma#1\v!rightmargin\endcsname +         \ifcsname\??layoutbackgrounds#1\v!rightmargin\endcsname             \page_backgrounds_set_box_cell#1\v!rightmargin\rightmarginwidth#2%           \else             \kern\rightmarginwidth @@ -400,7 +411,7 @@         \fi         \ifdim\rightedgewidth>\zeropoint           \kern\rightedgedistance -         \ifcsname\??ma#1\v!rightedge\endcsname +         \ifcsname\??layoutbackgrounds#1\v!rightedge\endcsname             \page_backgrounds_set_box_cell#1\v!rightedge\rightedgewidth#2%           \else             \kern\rightedgewidth @@ -415,15 +426,15 @@  \def\page_backgrounds_set_box_cell#1#2#3#4% pos pos width height    {\begingroup -   \ifcsname\??ma#1#2\c!setups\endcsname -     \doprocesslocalsetups{\csname\??ma#1#2\c!setups\endcsname}% should not produce funny spaces ! +   \ifcsname\??layoutbackgrounds#1#2\c!setups\endcsname +     \expandafter\doprocesslocalsetups\csname\??layoutbackgrounds#1#2\c!setups\endcsname % should not produce funny spaces !     \fi -   \ifcsname\??ma#1#2\c!command\endcsname +   \ifcsname\??layoutbackgrounds#1#2\c!command\endcsname       \expandafter\page_backgrounds_set_box_cell_nop     \else       \expandafter\page_backgrounds_set_box_cell_yes     \fi#1#2#3#4% -   \localbackgroundframed{\??ma#1#2}{#1:#2}\scratchbox +   \localbackgroundframed{\??layoutbackgrounds#1#2}{#1:#2}\scratchbox     \endgroup}  \def\page_backgrounds_set_box_cell_nop#1#2#3#4% @@ -432,7 +443,7 @@     \ht\scratchbox#4}  \def\page_backgrounds_set_box_cell_yes#1#2#3#4% -  {\setbox\scratchbox\vbox to #4{\vss\hbox to#3{\hss\csname\??ma#1#2\c!command\endcsname\hss}\vss}% +  {\setbox\scratchbox\vbox to #4{\vss\hbox to#3{\hss\csname\??layoutbackgrounds#1#2\c!command\endcsname\hss}\vss}%     \dp\scratchbox\zeropoint}  %D The background mechanism is quite demanding in terms or @@ -456,53 +467,58 @@  \unexpanded\def\setupbackgrounds    {\dotripleempty\page_backgrounds_setup} -\def\page_backgrounds_setup[#1][#2][#3]% +\def\page_backgrounds_setup    {\ifthirdargument -     \page_backgrounds_setup_double{#1}{#2}{#3}% +     \expandafter\page_backgrounds_setup_double     \else\ifsecondargument -     \page_backgrounds_setup_single{#1}{#2}% +     \doubleexpandafter\page_backgrounds_setup_single     \else\iffirstargument -     \page_backgrounds_setup_basics{#1}% -   \fi\fi\fi -   \the\everybackgroundssetup} +     \tripleexpandafter\page_backgrounds_setup_basics +   \fi\fi\fi}  \appendtoks -   \doifelsevalue{\??ma\v!page\c!offset}\v!overlay +   \doifelsevalue{\??layoutbackgrounds\v!page\c!offset}\v!overlay       {\global\pageoffset\zeropoint} -     {\global\pageoffset\csname\??ma\v!page\c!offset\endcsname}% -   \global\pagedepth\csname\??ma\v!page\c!depth\endcsname +     {\global\pageoffset\csname\??layoutbackgrounds\v!page\c!offset\endcsname}% +   \global\pagedepth\csname\??layoutbackgrounds\v!page\c!depth\endcsname     \global\pagebackgroundoffset\pageoffset     \global\pagebackgrounddepth\pagedepth -   \doifelse\@@mastate\v!stop -     {\global\setfalse\c_page_backgrounds_new} -     {\global\settrue \c_page_backgrounds_new}% +   \edef\p_page_backgrounds_state{\csname\??layoutbackgrounds\c!state\endcsname}% +   \ifx\p_page_backgrounds_state\v!stop +     \global\setfalse\c_page_backgrounds_new +   \else +     \global\settrue \c_page_backgrounds_new +   \fi  \to \everybackgroundssetup  \def\v_page_backgrounds_double_set{\v!paper,\v!page,\v!leftpage,\v!rightpage}  \def\v_page_backgrounds_single_set{\v!text,\v!hidden,\v!paper,\v!page,\v!leftpage,\v!rightpage}  \def\v_page_backgrounds_common_set{\v!leftedge,\v!leftmargin,\v!text,\v!rightmargin,\v!rightedge} -\def\page_backgrounds_setup_double#1#2#3% +\def\page_backgrounds_setup_double[#1][#2][#3]% if needed we can speed this up    {\global\settrue\c_page_backgrounds_some -   \def\docommand##1% +   \def\page_backgrounds_setup_step##1%       {\doifinsetelse{##1}\v_page_backgrounds_double_set          {\page_backgrounds_setup_and_check{##1}{#3}} -        {\def\dodocommand####1{\page_backgrounds_setup_and_check{##1####1}{#3}}% -         \processcommalist[#2]\dodocommand}}% -   \processcommalist[#1]\docommand} +        {\def\page_backgrounds_setup_step_nested####1{\page_backgrounds_setup_and_check{##1####1}{#3}}% +         \processcommalist[#2]\page_backgrounds_setup_step_nested}}% +   \processcommalist[#1]\page_backgrounds_setup_step +   \the\everybackgroundssetup} -\def\page_backgrounds_setup_single#1#2% +\def\page_backgrounds_setup_single[#1][#2][#3]%    {\global\settrue\c_page_backgrounds_some     \doifcommonelse{#1}\v_page_backgrounds_single_set -     {\def\docommand##1{\page_backgrounds_setup_and_check{##1}{#2}}% -      \processcommalist[#1]\docommand}% -     {\page_backgrounds_setup_double{#1}\v_page_backgrounds_common_set{#2}}} +     {\def\page_backgrounds_setup_step##1{\page_backgrounds_setup_and_check{##1}{#2}}% +      \processcommalist[#1]\page_backgrounds_setup_step +      \the\everybackgroundssetup}% +     {\page_backgrounds_setup_double[#1][\v_page_backgrounds_common_set][#2]}} -\def\page_backgrounds_setup_basics#1% -  {\getparameters[\??ma][#1]} +\def\page_backgrounds_setup_basics[#1][#2][#3]% +  {\getparameters[\??layoutbackgrounds][#1]% +   \the\everybackgroundssetup}  \def\page_backgrounds_setup_and_check#1#2% tag settings -  {\edef\currentotrbackground{\??ma#1}% +  {\edef\currentotrbackground{\??layoutbackgrounds#1}%     \getparameters[\currentotrbackground][#2]%     \page_backgrounds_check_background} @@ -511,7 +527,7 @@  % hm, we can delay them -\unexpanded\def\installsomebackground#1#2{\inheritlocalframed[\??ma#1#2][\??od]} +\unexpanded\def\installsomebackground#1#2{\inheritlocalframed[\??layoutbackgrounds#1#2][\??od]}  \installsomebackground \v!paper     \empty  \installsomebackground \v!page      \empty @@ -551,7 +567,7 @@  \installsomebackground \v!rightpage \empty  \getparameters -  [\??ma\v!page] +  [\??layoutbackgrounds\v!page]    [\c!offset=\zeropoint, % hm, so we need to force overlay elsewhere     \c!depth=\zeropoint] @@ -567,12 +583,12 @@  % todo page-2   .. page+2   achter pagina -> bleed  %      spread-2 .. spread+2 achter spread -> spread (repeat 2 times) -\def\enablehiddenbackground +\unexpanded\def\enablehiddenbackground    {\global\settrue\c_page_backgrounds_hidden_enabled     \global\settrue\c_page_backgrounds_some     \page_backgrounds_recalculate} -\def\disablehiddenbackground +\unexpanded\def\disablehiddenbackground    {\global\setfalse\c_page_backgrounds_hidden_enabled}  \def\hiddenbackgroundlist @@ -598,7 +614,7 @@  % \installsomebackground \v!local \empty % not really a background, invisible for users  %  % \getparameters -%   [\??ma\v!local] +%   [\??layoutbackgrounds\v!local]  %   [\c!component=local,  %    \c!background=\localbackgroundlist]  % @@ -618,7 +634,7 @@  %    \fi}  %  % \def\page_backgrounds_add_local_to_box_indeed#1% -%   {\setbox#1\hbox{\localbackgroundframed{\??ma\v!local}\v!local#1}% +%   {\setbox#1\hbox{\localbackgroundframed{\??layoutbackgrounds\v!local}\v!local#1}%  %    \global\advance\localpositionnumber\plusone} % afterwards !  %  % \let\page_backgrounds_add_local_to_box\gobbleoneargument diff --git a/tex/context/base/page-col.mkiv b/tex/context/base/page-col.mkiv index 87591e336..3143cadd2 100644 --- a/tex/context/base/page-col.mkiv +++ b/tex/context/base/page-col.mkiv @@ -13,22 +13,23 @@  \writestatus{loading}{ConTeXt Page Macros / Column Helpers} -%D Here we implement a couple of helpers for dealing with -%D columns. For the moment we keep the names. +%D Here we implement a couple of helpers for dealing with columns. For +%D the moment we keep the names. When the mul and set modules are redone +%D these can be adapted or disappear.  \unprotect -%D The next two registers can be used to store pre column -%D material as well as footnotes or so. +%D The next two registers can be used to store pre column material as well +%D as footnotes or so.  \newbox\precolumnbox   \newdimen\precolumnboxheight  \newbox\postcolumnbox  \newdimen\postcolumnboxheight -%D We reserve a counter for the number of columns as well as -%D the current column. Both are not to be changed by users! +%D We reserve a counter for the number of columns as well as the current +%D column. Both are not to be changed by users! -\newcount\nofcolumns \nofcolumns = 1 -\newcount\mofcolumns \mofcolumns = 1 +\newcount\nofcolumns \nofcolumns\plusone +\newcount\mofcolumns \mofcolumns\plusone  \setnewconstant\maxnofcolumns       50  \setnewconstant\allocatednofcolumns  0 @@ -38,14 +39,13 @@  \newdimen\finalcolumnheights  \newcount\finalcolumnlines -%D This register can be used as a temporary storage for page -%D content. +%D This register can be used as a temporary storage for page content.  \newbox\restofpage  %D A few more (some might go away): -\newif\ifintermediatefootnotes +\newif\ifintermediatefootnotes % seems to be obsolete  \newif\ifcarryoverfootnotes  %\carryoverfootnotestrue  \newif\iflastcolumnfootnotes %\lastcolumnfootnotestrue  \newif\ifbalancecolumns      %\balancecolumnstrue @@ -70,7 +70,6 @@  \newif\ifrecentercolumnbox    \recentercolumnboxtrue  \newif\ifrerecentercolumnbox  \rerecentercolumnboxtrue -\newif\ifpackcolumnfloats     \packcolumnfloatstrue  %D During initialization the temporary boxes are allocated.  %D This enables us to use as much columns as we want, without @@ -80,7 +79,12 @@  %D Two sets of boxes are declared, the txtboxes are used for  %D the text, the topboxes are for moved column floats. -\def\initializecolumns#1% +\installcorenamespace{columntext} +\installcorenamespace{columnfooter} +\installcorenamespace{columntop} +\installcorenamespace{columnbottom} + +\unexpanded\def\initializecolumns#1%    {\ifnum#1>\maxnofcolumns       \showmessage\m!columns1\maxnofcolumns       \nofcolumns\maxnofcolumns @@ -90,11 +94,10 @@     \ifnum\nofcolumns>\allocatednofcolumns       \dorecurse\nofcolumns         {\ifnum\recurselevel>\allocatednofcolumns\relax -          % \newbox\next \letgvalue{\??zc-\recurselevel-t}=\next -          \expandafter\newbox\csname\??zc-\recurselevel-t\endcsname % text -          \expandafter\newbox\csname\??zc-\recurselevel-f\endcsname % foot -          \expandafter\newbox\csname\??zc-\recurselevel-h\endcsname % top insert -          \expandafter\newbox\csname\??zc-\recurselevel-l\endcsname % top insert +          \expandafter\newbox\csname\??columntext  \recurselevel\endcsname % text +          \expandafter\newbox\csname\??columnfooter\recurselevel\endcsname % footer +          \expandafter\newbox\csname\??columntop   \recurselevel\endcsname % top insert +          \expandafter\newbox\csname\??columnbottom\recurselevel\endcsname % bottom insert          \fi}%       \global\allocatednofcolumns\nofcolumns     \fi} @@ -107,10 +110,10 @@  \def\currenttopcolumnbox {\columntopbox \mofcolumns}  \def\lasttopcolumnbox    {\columntopbox \nofcolumns} -\def\columntextbox     #1{\csname\??zc-\number#1-t\endcsname} -\def\columnfootbox     #1{\csname\??zc-\number#1-f\endcsname} -\def\columntopbox      #1{\csname\??zc-\number#1-h\endcsname} -\def\columnbotbox      #1{\csname\??zc-\number#1-l\endcsname} +\def\columntextbox     #1{\csname\??columntext  \number#1\endcsname} +\def\columnfootbox     #1{\csname\??columnfooter\number#1\endcsname} +\def\columntopbox      #1{\csname\??columntop   \number#1\endcsname} +\def\columnbotbox      #1{\csname\??columnbottom\number#1\endcsname}  \def\columnsettextbox    {\global\setbox\columntextbox}  \def\columnsetfootbox    {\global\setbox\columnfootbox} @@ -122,30 +125,30 @@  \def\columngettopbox     {\copy\columntopbox}  \def\columngetbotbox     {\copy\columnbotbox} -\def\columnerasetextboxes{\dorecurse\allocatednofcolumns{\columnsettextbox\recurselevel\emptybox}} -\def\columnerasefootboxes{\dorecurse\allocatednofcolumns{\columnsetfootbox\recurselevel\emptybox}} -\def\columnerasetopboxes {\dorecurse\allocatednofcolumns{\columnsettopbox \recurselevel\emptybox}} -\def\columnerasebotboxes {\dorecurse\allocatednofcolumns{\columnsetbotbox \recurselevel\emptybox}} +\unexpanded\def\columnerasetextboxes{\dorecurse\allocatednofcolumns{\columnsettextbox\recurselevel\emptybox}} +\unexpanded\def\columnerasefootboxes{\dorecurse\allocatednofcolumns{\columnsetfootbox\recurselevel\emptybox}} +\unexpanded\def\columnerasetopboxes {\dorecurse\allocatednofcolumns{\columnsettopbox \recurselevel\emptybox}} +\unexpanded\def\columnerasebotboxes {\dorecurse\allocatednofcolumns{\columnsetbotbox \recurselevel\emptybox}} + +%D Without going in details we present two macro's which handle the columns. The +%D action which is transfered by the the first and only parameter can do something +%D with \type {\currentcolumnbox}. In case of the mid columns, \type +%D {\firstcolumnbox} and \type {\lastcolumnbox} are handled outside these macro's. -%D Without going in details we present two macro's which handle -%D the columns. The action which is transfered by the the first -%D and only parameter can do something with \type -%D {\currentcolumnbox}. In case of the mid columns, \type -%D {\firstcolumnbox} and \type {\lastcolumnbox} are handled -%D outside these macro's. +%D If needed these can be sped up by using a dedicated loop macro. -\def\dohandlecolumn#1% +\unexpanded\def\dohandlecolumn#1%    {\mofcolumns\recurselevel     \let\currentcolumn\recurselevel     #1\relax} -\def\dohandleallcolumns#1% +\unexpanded\def\dohandleallcolumns#1%    {\dorecurse\nofcolumns{\dohandlecolumn{#1}}} -\def\dohandlerevcolumns#1% +\unexpanded\def\dohandlerevcolumns#1%    {\dostepwiserecurse\nofcolumns\plusone\minusone{\dohandlecolumn{#1}}} -\def\dohandlemidcolumns#1% +\unexpanded\def\dohandlemidcolumns#1%    {\dohandleallcolumns       {\ifnum\recurselevel>\plusone          \ifnum\recurselevel<\nofcolumns diff --git a/tex/context/base/page-com.mkiv b/tex/context/base/page-com.mkiv index 80012dd14..61cb49e89 100644 --- a/tex/context/base/page-com.mkiv +++ b/tex/context/base/page-com.mkiv @@ -30,79 +30,141 @@  %D \stoppagecomment  %D \stoptyping -\unexpanded\def\setuppagecomment -  {\dosingleempty\dosetuppagecomment} - -\def\dosetuppagecomment[#1]% -  {\getparameters[\??pc][#1]% -   \doifelse\@@pcstate\v!start -     {\doifinsetelse\@@pclocation{\v!bottom,\v!top} -        {\setuppapersize[\c!left=\hskip\@@pcoffset]% -         \edef\@@pcpaperheight{\the\dimexpr\paperheight+\@@pcoffset+\@@pcoffset+\@@pcdistance+\@@pcheight}% -         \edef\@@pcpaperwidth {\the\dimexpr\paperwidth +\@@pcoffset+\@@pcoffset}% -         \defineoverlay[\v!pagecomment][\placepagecommentTB]} -        {\setuppapersize[\c!top=\vskip\@@pcoffset]% -         \edef\@@pcpaperheight{\the\dimexpr\paperheight+\@@pcoffset+\@@pcoffset}% -         \edef\@@pcpaperwidth {\the\dimexpr\paperwidth +\@@pcoffset+\@@pcoffset+\@@pcdistance+\@@pcwidth}% -         \defineoverlay[\v!pagecomment][\placepagecommentLR]}% -      \processaction -        [\@@pclocation] -        [ \v!bottom=>{\setuplayout[\c!location=]\setuppapersize[\c!bottom=\vss,\c!top   =\vskip\@@pcoffset]}, -             \v!top=>{\setuplayout[\c!location=]\setuppapersize[\c!top   =\vss,\c!bottom=\vskip\@@pcoffset]}, -            \v!left=>{\setuplayout[\c!location=]\setuppapersize[\c!left  =\hss,\c!right =\hskip\@@pcoffset]}, -           \v!right=>{\setuplayout[\c!location=]\setuppapersize[\c!right =\hss,\c!left  =\hskip\@@pcoffset]}]% -      \definepapersize -        [\v!pagecomment] -        [\c!height=\@@pcpaperheight, -          \c!width=\@@pcpaperwidth]% -      \let\@@pcprintpapersize\printpapersize -      \setuppapersize[\papersize][\v!pagecomment]% -      \setupbackgrounds[\v!paper][\c!background=\v!pagecomment]}% todo append if already set -    {\doif\@@pcstate\v!stop % else initialization  invokes backgrounds -       {% this should be tested first -        % \normalexpanded{\noexpand\setuppapersize[\papersize][\@@pcprintpapersize]}% -        \setupbackgrounds[\v!paper][\c!background=]}}} - -\def\@@pcprintpapersize{\printpapersize} - -\unexpanded\def\placepagecommentTB +\installcorenamespace{pagecomment} +\installcorenamespace{pagecommentlocations} +\installcorenamespace{pagecommentstates} + +\newdimen\d_page_comments_offset +\newdimen\d_page_comments_page_width +\newdimen\d_page_comments_page_height +\newdimen\d_page_comments_width +\newdimen\d_page_comments_height +\newdimen\d_page_comments_distance + +\newconditional\c_page_comment_enabled + +\let\p_page_commands_location\v!none +\let\p_page_commands_state   \v!stop + +\installsetuponlycommandhandler \??pagecomment {pagecomment} + +\appendtoks +    \edef\p_page_commands_location{\directpagecommentparameter\c!location}% +    \edef\p_page_commands_state   {\directpagecommentparameter\c!state}% +    \expandcheckedcsname\??pagecommentstates\p_page_commands_state\v!none +\to \everysetuppagecomment + +\ifdefined\scrn_canvas_synchronize_simple + +    \appendtoks +        \ifx\p_page_commands_state\v!start +            \scrn_canvas_synchronize_simple +        \else +            \scrn_canvas_synchronize_complex +        \fi +    \to \everyshipout + +\fi + +\setvalue{\??pagecommentstates\v!start}% +  {\d_page_comments_offset  \directpagecommentparameter\c!offset  \relax +   \d_page_comments_distance\directpagecommentparameter\c!distance\relax +   \d_page_comments_width   \directpagecommentparameter\c!width   \relax +   \d_page_comments_height  \directpagecommentparameter\c!height  \relax +   \expandcheckedcsname\??pagecommentlocations\p_page_commands_location\v!none +   \definepapersize[\v!pagecomment][\c!height=\d_page_comments_page_height,\c!width=\d_page_comments_page_width]% +   \setuppapersize[\papersize][\v!pagecomment]% +   \setupbackgrounds[\v!paper][\c!background=\v!pagecomment]} % maybe append if already set + +\setvalue{\??pagecommentstates\v!stop}% +  {\setupbackgrounds[\v!paper][\c!background=]} + +\setvalue{\??pagecommentstates\v!none}% +  {} + +\setvalue{\??pagecommentlocations\v!bottom}% +  {\setuplayout[\c!location=]% +   \setuppapersize[\c!top=\vskip\d_page_comments_offset,\c!bottom=\vss,\c!left=\hskip\d_page_comments_offset,\c!right=]% +   \d_page_comments_page_height\dimexpr\paperheight+2\d_page_comments_offset+\d_page_comments_distance+\d_page_comments_height\relax +   \d_page_comments_page_width \dimexpr\paperwidth +2\d_page_comments_offset\relax +   \defineoverlay[\v!pagecomment][\page_comments_top_bottom]} + +\setvalue{\??pagecommentlocations\v!top}% +  {\setuplayout[\c!location=]% +   \setuppapersize[\c!top=\vss,\c!bottom=\vskip\d_page_comments_offset,\c!left=\hskip\d_page_comments_offset,\c!right=]% +   \d_page_comments_page_height\dimexpr\paperheight+2\d_page_comments_offset+\d_page_comments_distance+\d_page_comments_height\relax +   \d_page_comments_page_width \dimexpr\paperwidth +2\d_page_comments_offset\relax +   \defineoverlay[\v!pagecomment][\page_comments_top_bottom]} + +\setvalue{\??pagecommentlocations\v!left}% +  {\setuplayout[\c!location=]% +   \setuppapersize[\c!top=\vskip\d_page_comments_offset,\c!bottom=,\c!left=\hss,\c!right=\hskip\d_page_comments_offset]% +   \d_page_comments_page_height\dimexpr\paperheight+2\d_page_comments_offset\relax +   \d_page_comments_page_width \dimexpr\paperwidth +2\d_page_comments_offset+\d_page_comments_distance+\d_page_comments_width\relax +   \defineoverlay[\v!pagecomment][\page_comments_left_right]} + +\setvalue{\??pagecommentlocations\v!right}% +  {\setuplayout[\c!location=]% +   \setuppapersize[\c!top=\vskip\d_page_comments_offset,\c!bottom=,\c!left=\hskip\d_page_comments_offset,\c!right =\hss]% +   \d_page_comments_page_height\dimexpr\paperheight+2\d_page_comments_offset\relax +   \d_page_comments_page_width \dimexpr\paperwidth +2\d_page_comments_offset+\d_page_comments_distance+\d_page_comments_width\relax +   \defineoverlay[\v!pagecomment][\page_comments_left_right]} + +\setvalue{\??pagecommentlocations\v!none}% +  {}% \setuppapersize[\c!bottom=,\c!top=,\c!left=,\c!right=]} + +\unexpanded\def\page_comments_top_bottom    {\vbox to \printpaperheight       {%\forgetall -      \hsize\printpaperwidth -      \vskip\@@pcoffset -      \doifelse\@@pclocation\v!bottom{\vskip\dimexpr\paperheight+\@@pcdistance\relax}\vss -      \hskip\@@pcoffset -      \vbox to \@@pcheight +      \hsize\printpaperwidth\relax +      \ifx\p_page_commands_location\v!bottom +        \vskip\dimexpr\paperheight+\d_page_comments_distance+\d_page_comments_offset\relax +      \else +        \vskip\d_page_comments_offset +        \vss +      \fi +      \hskip\d_page_comments_offset +      \vbox to \d_page_comments_height          {%\forgetall           \hsize\paperwidth -         \ifpagecomment +         \ifconditional\c_page_comment_enabled             \getbuffer[\v!pagecomment]% -           \global\pagecommentfalse +           \global\setfalse\c_page_comment_enabled           \fi}%        \hfill -      \doifelse\@@pclocation\v!bottom\vss{\vskip\dimexpr\paperheight+\@@pcdistance\relax}% -      \vskip\@@pcoffset}} +      \ifx\p_page_commands_location\v!bottom +        \vss +        \vskip\d_page_comments_offset +      \else +        \vskip\dimexpr\paperheight+\d_page_comments_distance+\d_page_comments_offset\relax +      \fi}} -\unexpanded\def\placepagecommentLR +\unexpanded\def\page_comments_left_right    {\hbox to \printpaperwidth -     {\hskip\@@pcoffset -      \doifelse\@@pclocation\v!right{\hskip\paperwidth\hskip\@@pcdistance}\hss +     {\ifx\p_page_commands_location\v!right +        \hskip\dimexpr\paperwidth+\d_page_comments_distance+\d_page_comments_offset\relax +      \else +        \hskip\d_page_comments_offset +        \hss +      \fi        \vbox to \printpaperheight          {%\forgetall -         \vskip\@@pcoffset -         \hsize\@@pcwidth -         \ifpagecomment +         \vskip\d_page_comments_offset +         \hsize\d_page_comments_width +         \ifconditional\c_page_comment_enabled             \getbuffer[\v!pagecomment]% -           \global\pagecommentfalse +           \global\setfalse\c_page_comment_enabled           \fi           \vss}% -      \doifelse\@@pclocation\v!right\hss{\hskip\paperwidth\hskip\@@pcdistance}% -      \hskip\@@pcoffset}} - -\newif\ifpagecomment +      \ifx\p_page_commands_location\v!right +        \hss +        \hskip\d_page_comments_offset +      \else +        \hskip\dimexpr\paperwidth+\d_page_comments_distance+\d_page_comments_offset\relax +      \fi}}  \setvalue{\e!start\v!pagecomment}% -  {\global\pagecommenttrue +  {\global\settrue\c_page_comment_enabled     \grabbufferdatadirect\v!pagecomment{\e!start\v!pagecomment}{\e!stop\v!pagecomment}}  \setuppagecomment diff --git a/tex/context/base/page-fac.mkiv b/tex/context/base/page-fac.mkiv index fef1cd5ac..88789abe9 100644 --- a/tex/context/base/page-fac.mkiv +++ b/tex/context/base/page-fac.mkiv @@ -25,19 +25,21 @@  %D \stoptext  %D \stoptyping -\newbox\b_page_facings_content +\newbox        \b_page_facings_content +\newconditional\c_page_facings_busy -\unexpanded\def\setupoppositeplacing -  {\dodoubleargument\getparameters[\??np]} +\installcorenamespace{oppositeplacing} + +\installsetuponlycommandhandler \??oppositeplacing {oppositeplacing}  \unexpanded\def\startopposite    {\dowithnextboxcontent       {\hsize\makeupwidth}%       {\global\setbox\b_page_facings_content\vbox          {\ifvoid\b_page_facings_content -           \@@npbefore +           \directoppositeplacingparameter\c!before           \else -           \@@npinbetween +           \directoppositeplacingparameter\c!inbetween             \unvbox\b_page_facings_content           \fi           \box\nextbox}}% @@ -47,26 +49,34 @@    {\egroup}  \def\page_facings_finish -  {\ifvoid\b_page_facings_content\else +  {\ifvoid\b_page_facings_content \else       \global\setbox\b_page_facings_content\vbox to \makeupheight         {\unvbox\b_page_facings_content -        \@@npafter +        \directoppositeplacingparameter\c!after          \vss}%     \fi}  \def\page_facings_flush -  {\doif\@@npstate\v!start -     {\ifvoid\b_page_facings_content\else -        \ifnum\realpageno>\plusone -          \begingroup -          \pageornamentstate\plusone % tricky -          \page_facings_finish -          \page_boxes_shipout{\page_boxes_constructed_page\box\b_page_facings_content}% -          \endgroup -        \else -          \global\setbox\b_page_facings_content\emptybox -        \fi -      \fi}} +  {\ifconditional\c_page_facings_busy +     \ifvoid\b_page_facings_content \else +        \page_facings_flush_indeed +     \fi +   \fi} + +\def\page_facings_flush_indeed +  {\ifnum\realpageno>\plusone +     \begingroup +     \pageornamentstate\plusone % tricky +     \page_facings_finish +     \page_boxes_shipout{\page_boxes_constructed_page\box\b_page_facings_content}% +     \endgroup +   \else +     \global\setbox\b_page_facings_content\emptybox +   \fi} + +\appendtoks +    \doifelse{\directoppositeplacingparameter\c!state}\v!start\settrue\setfalse\c_page_facings_busy +\to \everysetupoppositeplacing  \setupoppositeplacing    [\c!state=\v!start, diff --git a/tex/context/base/page-flt.mkiv b/tex/context/base/page-flt.mkiv index 18c0ad263..4655d92af 100644 --- a/tex/context/base/page-flt.mkiv +++ b/tex/context/base/page-flt.mkiv @@ -20,31 +20,28 @@  \unprotect -%D To be checked and removed - -%def\dosavefloatinfo   {\showmessage\m!floatblocks2{\the\totalnoffloats}} -\def\doinsertfloatinfo {\showmessage\m!floatblocks4{\the\totalnoffloats}} -\def\dofloatflushedinfo{\showmessage\m!floatblocks3{\the\numexpr\totalnoffloats-\savednoffloats\relax}} +%def\page_floats_report_saved  {\showmessage\m!floatblocks2{\the\totalnoffloats}} +\def\page_floats_report_total  {\showmessage\m!floatblocks4{\the\totalnoffloats}} +\def\page_floats_report_flushed{\showmessage\m!floatblocks3{\the\numexpr\totalnoffloats-\savednoffloats\relax}}  %D Extra float registers. -\newif\ifsomefloatwaiting     \somefloatwaitingfalse -\newif\ifroomforfloat         \roomforfloattrue -\newif\ifnofloatpermitted     \nofloatpermittedfalse -\newif\ifcenterfloatbox       \centerfloatboxtrue -\newif\iflocalcenterfloatbox  \localcenterfloatboxfalse -\newif\ifglobalcenterfloatbox \globalcenterfloatboxfalse -\newif\ifflushingfloats       \flushingfloatsfalse -\newif\ifpackflushedfloats    \packflushedfloatstrue % for the moment -\newif\ifpackcolumnfloats     \packcolumnfloatstrue - -\newcount\totalnoffloats -\newcount\savednoffloats -\newcount\noffloatinserts +\newconditional\c_page_floats_room +\newconditional\c_page_floats_some_waiting +\newconditional\c_page_floats_not_permitted +\newconditional\c_page_floats_flushing +\newconditional\c_page_floats_center_box          \settrue\c_page_floats_center_box +\newconditional\c_page_floats_center_box_local +\newconditional\c_page_floats_center_box_global +\newconditional\c_page_floats_pack_flushed        \settrue\c_page_floats_pack_flushed + +%D For the moment we keep this but they will become private too. + +\newcount\totalnoffloats     % these will be redone ... handled at the lua end anyway +\newcount\savednoffloats     % these will be redone ... handled at the lua end anyway +\newcount\noffloatinserts    % these will be redone ... handled at the lua end anyway  \newcount\nofcollectedfloats % communication channel -\newbox  \floatlist -\newbox  \savedfloatlist  \newbox  \floattext  \newdimen\floatwidth @@ -65,55 +62,55 @@  \appendtoks     \ifcase\savednoffloats -     \global\somefloatwaitingfalse +     \global\setfalse\c_page_floats_some_waiting     \else -     \global\somefloatwaitingtrue +     \global\settrue\c_page_floats_some_waiting     \fi  \to \everyfloatscheck -\def\dofloatsflush#1#2% +\unexpanded\def\page_floats_flush#1#2%    {\ctxcommand{flushfloat("#1",\number#2)}%     \the\everyfloatscheck} -\def\dofloatsflushbylabel#1#2% +\unexpanded\def\page_floats_flush_by_label#1#2%    {\ctxcommand{flushfloat("#1","#2",true)}%     \the\everyfloatscheck} -\def\dofloatssave#1% +\unexpanded\def\page_floats_save#1%    {\ctxcommand{savefloat("#1")}%     \the\everyfloatscheck} -\def\dofloatsresave#1% +\unexpanded\def\page_floats_resave#1%    {\ctxcommand{resavefloat("#1")}%     \the\everyfloatscheck} -\def\dopushsavedfloats +\unexpanded\def\page_floats_push_saved    {\ctxcommand{pushfloat()}%     \the\everyfloatscheck} -\def\dopopsavedfloats +\unexpanded\def\page_floats_pop_saved    {\ctxcommand{popfloat()}%     \the\everyfloatscheck} -\def\dofloatsgetinfo#1% +\unexpanded\def\page_floats_get_info#1%    {\ctxcommand{consultfloat("#1")}} -\def\doifelsesavedfloat#1% +\unexpanded\def\page_floats_if_else#1%    {\ctxcommand{doifelsesavedfloat("#1")}} -\def\dofloatscollect#1#2#3% +\unexpanded\def\page_floats_collect#1#2#3%    {\ctxcommand{collectfloat("#1",\number\dimexpr#2,\number\dimexpr#3)}} -\def\nofstackedfloatincategory#1% +\unexpanded\def\nofstackedfloatincategory#1%    {\ctxcommand{nofstackedfloats("#1")}} -\let\dopushcolumnfloats\dopushsavedfloats -\let\dopopcolumnfloats \dopopsavedfloats +\let\page_floats_column_push_saved\page_floats_push_saved % overloaded in page-mul +\let\page_floats_column_pop_saved \page_floats_pop_saved  % overloaded in page-mul -\def\dofloatssavepagefloat#1#2% +\unexpanded\def\page_floats_save_page_float#1#2%    {\ctxcommand{savefloat("#1", { specification = "#2" })}} -\def\dofloatssavesomewherefloat#1#2% #1=method +\unexpanded\def\page_floats_save_somewhere_float#1#2% #1=method    {\ctxcommand{savefloat("#1", { specification = "#2", label = "\floatlabel" })}}  %D This is an experimental new feature (for Alan Braslau), a prelude to more: @@ -133,12 +130,12 @@  %D \placenamedfloat[figure][beta]  %D \stoptyping -\def\placenamedfloat -  {\dodoubleargument\doplacenamedfloat} +\unexpanded\def\placenamedfloat +  {\dodoubleargument\page_floats_place_named} -\def\doplacenamedfloat[#1][#2]% +\def\page_floats_place_named[#1][#2]%    {\doloop -     {\dofloatsflushbylabel\s!somewhere{#2}% +     {\page_floats_flush_by_label\s!somewhere{#2}%        \ifvoid\floatbox          \exitloop        \else @@ -162,10 +159,10 @@  %  % \placefloatwithsetups[somefigure]{}{\externalfigure[dummy][width=5cm,height=2cm]} -\def\placefloatwithsetups -  {\dotripleempty\doplacefloatwithsetups} +\unexpanded\def\placefloatwithsetups +  {\dotripleempty\page_floats_place_with_setups} -\long\def\doplacefloatwithsetups[#1][#2][#3]#4% +\def\page_floats_place_with_setups[#1][#2][#3]#4%    {\def\floatsetupcaption   {#4}%     \def\floatsetupcontent   {\copy\nextbox}%     \def\floatsetupwidth     {\wd\nextbox}% @@ -178,10 +175,10 @@  %D  %D First we reimplement some helpers. -\def\dogetfloat -  {\ifsomefloatwaiting -     \dofloatsflush\s!text{1}% -     \ifcenterfloatbox +\unexpanded\def\page_floats_get +  {\ifconditional\c_page_floats_some_waiting +     \page_floats_flush\s!text\plusone +     \ifconditional\c_page_floats_center_box         \ifdim\wd\globalscratchbox<\hsize           \global\setbox\floatbox\hbox to \hsize{\hss\box\floatbox\hss}%         \else @@ -198,40 +195,30 @@       \global\setbox\floatbox\emptybox     \fi} -\def\dosavefloat -  {\dofloatssave\s!text -   \nonoindentation} % brrr nonoindentation here - -\def\doresavefloat -  {\dofloatsresave\s!text} - -\def\doreversesavefloat -  {\dofloatsresave\s!text} - -\def\doflushsavedfloats +\unexpanded\def\page_floats_flush_saved    {\doloop -     {\ifsomefloatwaiting +     {\ifconditional\c_page_floats_some_waiting          \page_otr_command_check_if_float_fits -        \ifroomforfloat -          \dogetfloat +        \ifconditional\c_page_floats_room +          \page_floats_get            \doplacefloatbox          \else            \exitloop          \fi        \else -%         \ifconditional\c_page_margin_blocks_present % not here, here just as many floats as fit -%           \page_otr_command_flush_margin_blocks -%         \else +      % \ifconditional\c_page_margin_blocks_present % not here, here just as many floats as fit +      %   \page_otr_command_flush_margin_blocks +      % \else            \exitloop -%         \fi +      % \fi        \fi}}  %D Page floats use different stacks. -\newtoks \everybeforeflushedpagefloat +\newtoks\everybeforeflushedpagefloat -\def\doflushsomepagefloat#1% future releases can do more clever things -  {\dofloatsflush{#1}{1}% +\def\page_floats_flush_page_floats_indeed#1% future releases can do more clever things +  {\page_floats_flush{#1}\plusone     \edef\floatspecification{\ctxcommand{getfloatvariable("specification")}}% Is this okay?     \the\everybeforeflushedpagefloat     \vbox to \textheight @@ -240,38 +227,15 @@        \doifnotinset\v!low\floatspecification\vfill}%     \page_otr_fill_and_eject_page} -\def\doflushpagefloats +\unexpanded\def\page_floats_flush_page_floats % used in postpone    {\edef\m_page_otf_checked_page_float{\ctxcommand{checkedpagefloat()}}% (true) for packed     \ifx\m_page_otf_checked_page_float\empty       % nothing     \else\ifx\m_page_otf_checked_page_float\v!empty        \emptyhbox \page_otr_fill_and_eject_page % why not dummy_page     \else -      \doflushsomepagefloat\m_page_otf_checked_page_float +      \page_floats_flush_page_floats_indeed\m_page_otf_checked_page_float     \fi\fi} - -\def\uncenteredfloatbox % hm, where is this one used (was in save/restore, see old implementation) -  {\ifcenterfloatbox -     \ifhbox\floatbox\relax % remove centering -       \ifdim\wd\floatbox=\hsize -         \ifhbox\floatbox -           \setbox\scratchbox\hbox -             {\unhbox\floatbox -              \unskip\unskip -              \global\setbox\globalscratchbox\lastbox}% -           \box\globalscratchbox -         \else -           \box\floatbox -         \fi -       \else -         \box\floatbox -       \fi -     \else -       \box\floatbox -     \fi -   \else -     \box\floatbox -   \fi}  % temp hack, needed to prevent floatbox being forgotten during  % output, this will change to using another box for flushing @@ -291,3 +255,28 @@  \to \everyafteroutput  \protect \endinput + +% hm, where is this one used (was in save/restore, see old implementation) +% +% \unexpanded\def\uncenteredfloatbox +%   {\ifconditional\c_page_floats_center_box +%      \ifhbox\floatbox\relax % remove centering +%        \ifdim\wd\floatbox=\hsize +%          \ifhbox\floatbox +%            \setbox\scratchbox\hbox +%              {\unhbox\floatbox +%               \unskip\unskip +%               \global\setbox\globalscratchbox\lastbox}% +%            \box\globalscratchbox +%          \else +%            \box\floatbox +%          \fi +%        \else +%          \box\floatbox +%        \fi +%      \else +%        \box\floatbox +%      \fi +%    \else +%      \box\floatbox +%    \fi} diff --git a/tex/context/base/page-flw.mkiv b/tex/context/base/page-flw.mkiv index 9afacf584..ec1fa636d 100644 --- a/tex/context/base/page-flw.mkiv +++ b/tex/context/base/page-flw.mkiv @@ -14,93 +14,127 @@  \writestatus{loading}{ConTeXt Page Macros / Text Flows}  %D This is high experimental and especially flushing may change (proper -%D spacing is the driving force here). +%D spacing is the driving force here). It's an old mechanism used for +%D playing with stepping through document threads. As it's a simple and +%D effective mechanism we keep it around. It's not to be confused with +%D upcoming stream support. +%D +%D \starttyping +%D \setuppapersize [S6] +%D \setuptolerance [verytolerant,stretch] +%D \setupfooter    [strut=no] +%D \setupwhitespace[big] +%D +%D \setuplayout +%D   [rightedge=5cm,width=fit,margin=0pt,edgedistance=1cm, +%D    footer=4cm,footerdistance=1cm,header=0cm] +%D +%D \setuptexttexts  [edge][][\vbox{\flushtextflow{alpha}}] +%D \setupfootertexts[edge][][\vbox{\flushtextflow{beta}}] +%D \setupfootertexts        [\vbox{\flushtextflow{gamma}}][] +%D +%D \definetextflow [alfa]  [width=\rightedgewidth] +%D \definetextflow [beta]  [width=\rightedgewidth] +%D \definetextflow [gamma] [width=\footerheight] +%D +%D \starttext +%D +%D \dorecurse{50} +%D   {\getrandomnumber{\funny}{0}{8} +%D    \ifcase\funny \starttextflow[alfa]  \input tufte.tex   \stoptextflow +%D    \or           \starttextflow[beta]  \input knuth.tex   \stoptextflow +%D    \or           \starttextflow[gamma] \input materie.tex \stoptextflow +%D    \or          {\bf   TUFTE}\quad \input tufte   \par +%D    \or          {\bf   TUFTE}\quad \input tufte   \par +%D    \or          {\bf   KNUTH}\quad \input knuth   \par +%D    \or          {\bf   KNUTH}\quad \input knuth   \par +%D    \or          {\bf MATERIE}\quad \input materie \par +%D    \else        {\bf MATERIE}\quad \input materie \par +%D    \fi} +%D +%D \stoptext +%D \stoptyping  \unprotect -\unexpanded\def\definetextflow -  {\dodoubleempty\dodefinetextflow} +\installcorenamespace{textflow} +\installcorenamespace{textflowbox} -\def\dodefinetextflow[#1][#2]% flow settings -  {\iffirstargument -     \doiftextflowcollectorelse{#1} -       {\setbox\textflowcollector{#1}\emptybox} -       {\@EA\newbox\csname\??tx:c:#1\endcsname}% -     \getparameters[\??tx:p:#1] -       [\c!width=\hsize,\c!style=,#2]% -   \fi} +\installcommandhandler \??textflow {textflow} \??textflow -\def\textflowparameter#1#2{\csname\??tx:p:#1#2\endcsname} -\def\textflowcollector  #1{\csname\??tx:c:#1\endcsname} +\setuptextflow +  [%c!style=, +   %c!color=, +   \c!width=\availablehsize] -\def\doiftextflowcollectorelse#1{\doifdefinedelse{\??tx:c:#1}} +\appendtoks +    \ifcsname\??textflowbox\currenttextflow\endcsname +       \setbox\csname\??textflowbox\currenttextflow\endcsname\emptybox +    \else +       \expandafter\newbox\csname\??textflowbox\currenttextflow\endcsname +    \fi +\to \everydefinetextflow -\def\doiftextflowelse#1% -  {\doiftextflowcollectorelse{#1} -     {\ifvoid\textflowcollector{#1}% -        \expandafter\secondoftwoarguments -      \else -        \expandafter\firstoftwoarguments -      \fi} -     {\secondoftwoarguments}} +\let\b_page_textflow_box\zerocount -\def\doiftextflow#1% -  {\doiftextflowelse{#1}\firstofoneargument\gobbleoneargument} +\def\textflowcollector#1% +  {\csname\??textflowbox#1\endcsname} + +\unexpanded\def\doiftextflowcollectorelse#1% +  {\ifcsname\??textflowbox#1\endcsname +     \expandafter\firstoftwoarguments +   \else +     \expandafter\secondoftwoarguments +   \fi} + +\unexpanded\def\doiftextflowelse#1% +  {\ifcsname\??textflowbox#1\endcsname +     \ifvoid\csname\??textflowbox#1\endcsname +       \doubleexpandafter\secondoftwoarguments +     \else +       \doubleexpandafter\firstoftwoarguments +     \fi +   \else +     \expandafter\secondoftwoarguments +   \fi} + +% \unexpanded\def\doiftextflow#1% +%   {\doiftextflowelse{#1}\firstofoneargument\gobbleoneargument}  \unexpanded\def\starttextflow[#1]% -  {\doiftextflowcollectorelse{#1} -     {\global\setbox\textflowcollector{#1}\vbox -        \bgroup -        \unvbox\textflowcollector{#1}% -        \hsize\textflowparameter{#1}\c!width -        \dousestyleparameter{\textflowparameter{#1}\c!style}% -        \unexpanded\def\stoptextflow{\endgraf\egroup}} -     {\let\stoptextflow\relax}} +  {\begingroup +   \edef\currenttextflow{#1}% +   \ifcsname\??textflowbox\currenttextflow\endcsname +     \b_page_textflow_box\csname\??textflowbox\currenttextflow\endcsname +     \global\setbox\b_page_textflow_box\vbox +       \bgroup +       \dontcomplain +       \ifvoid\b_page_textflow_box\else +         \unvbox\b_page_textflow_box +       \fi +       \hsize\textflowparameter\c!width\relax +       \usetextflowstyleandcolor\c!style\c!color +       \unexpanded\def\stoptextflow{\endgraf\egroup\endgroup}% +   \else +     \let\stoptextflow\endgroup +   \fi} -\def\flushtextflow#1% -  {\doiftextflow{#1} -     {\ifdim\ht\textflowcollector{#1}>\vsize -        \setbox\scratchbox\vsplit\textflowcollector{#1} to \vsize -        \unvbox\scratchbox +\unexpanded\def\flushtextflow#1% +  {\begingroup +   \edef\currenttextflow{#1}% +   \ifcsname\??textflowbox\currenttextflow\endcsname +     \b_page_textflow_box\csname\??textflowbox\currenttextflow\endcsname +     \ifvoid\b_page_textflow_box +       % sorry +     \else\ifdim\ht\b_page_textflow_box>\vsize +        \setbox\scratchbox\vsplit\b_page_textflow_box to \vsize +        \ifvoid\scratchbox\else +          \unvbox\scratchbox +        \fi        \else -        \unvbox\textflowcollector{#1}% -      \fi}} +        \unvbox\b_page_textflow_box +      \fi\fi +   \fi +   \endgroup}  \protect \endinput - -% Example (dutch) -% -% \stelpapierformaatin [S6] -% \steltolerantiein    [soepel,rek] -% \stelkleurenin       [status=start] -% \stelvoetin          [strut=nee] -% \stelwitruimtein     [groot] -% -% \stellayoutin -%   [rechterrand=5cm,breedte=passend,marge=0pt,randafstand=1cm, -%    voet=4cm,voetafstand=1cm,hoofd=0cm] -% -% \stelteksttekstenin[rand][][\vbox{\flushtextflow{alpha}}] -% \stelvoettekstenin [rand][][\vbox{\flushtextflow{beta}}] -% \stelvoettekstenin         [\vbox{\flushtextflow{gamma}}][] -% -% \definetextflow [alfa]  [breedte=\rechterrandbreedte] -% \definetextflow [beta]  [breedte=\rechterrandbreedte] -% \definetextflow [gamma] [breedte=\voethoogte] -% -% \starttekst -% -% \dorecurse{50} -%   {\getrandomnumber{\funny}{0}{8} -%    \ifcase\funny \starttextflow[alfa]  \input tufte.tex   \stoptextflow -%    \or           \starttextflow[beta]  \input knuth.tex   \stoptextflow -%    \or           \starttextflow[gamma] \input materie.tex \stoptextflow -%    \or          {\bf   TUFTE}\quad \input tufte   \par -%    \or          {\bf   TUFTE}\quad \input tufte   \par -%    \or          {\bf   KNUTH}\quad \input knuth   \par -%    \or          {\bf   KNUTH}\quad \input knuth   \par -%    \or          {\bf MATERIE}\quad \input materie \par -%    \else        {\bf MATERIE}\quad \input materie \par -%    \fi} -% -% \stoptekst diff --git a/tex/context/base/page-imp.mkiv b/tex/context/base/page-imp.mkiv index 9d0f722fe..5eb587b7b 100644 --- a/tex/context/base/page-imp.mkiv +++ b/tex/context/base/page-imp.mkiv @@ -148,8 +148,7 @@         \donetrue       \fi     \else % testen, aangepast / expanded nodig ? -     \normalexpanded{\doifinsetelse{\the\shippedoutpages}{\pagestoshipout}}% -       \donetrue\donefalse +     \normalexpanded{\doifinsetelse{\the\shippedoutpages}{\pagestoshipout}}\donetrue\donefalse     \fi     \ifdone       \setbox\shipoutscratchbox\hbox{#1}% diff --git a/tex/context/base/page-ini.mkiv b/tex/context/base/page-ini.mkiv index 78d7f892e..59fcb38b6 100644 --- a/tex/context/base/page-ini.mkiv +++ b/tex/context/base/page-ini.mkiv @@ -64,7 +64,7 @@  \def\page_otr_flush_all_floats    {%\flushnotes already done -   \ifsomefloatwaiting +   \ifconditional\c_page_floats_some_waiting       \begingroup       \noftopfloats\plusthousand       \nofbotfloats\zerocount @@ -107,7 +107,7 @@     \doincrementpageboundcounters % should hook into an every     \page_adapts_synchronize     \page_otr_check_for_pending_inserts -   \doflushspread +   \page_spread_flush % defined later     \page_postponed_blocks_flush}  % Can't we get rid of this hackery? It's used in some widgets diff --git a/tex/context/base/page-ins.mkiv b/tex/context/base/page-ins.mkiv index 793e28d4c..33c50451b 100644 --- a/tex/context/base/page-ins.mkiv +++ b/tex/context/base/page-ins.mkiv @@ -13,20 +13,17 @@  \writestatus{loading}{ConTeXt Core Macros / Insertions} -%D Insertions are special data collections that are associated -%D to \TEX's internal page builder. When multiple footnote -%D classes were introduced, I decided to isolate some of the -%D functionality in a module. +%D Insertions are special data collections that are associated to \TEX's internal +%D page builder. When multiple footnote classes were introduced, I decided to +%D isolate some of the functionality in a module.  \unprotect -\newtoks\@@insertionlist - -\def\processinsertions{\the\@@insertionlist} +\newtoks\t_page_inserts_list  \let\doprocessinsert\gobbleoneargument -\def\installinsertion#1% +\unexpanded\def\installinsertion#1%    {\ifdefined#1\else       \let#1\relax     \fi @@ -35,56 +32,61 @@       \count#1\plusthousand       \skip #1\zeropoint       \dimen#1\maxdimen -     \appendtoks\doprocessinsert#1\to\@@insertionlist +     \appendtoks\doprocessinsert#1\to\t_page_inserts_list     \fi} -\def\synchronizeinsertions -  {\def\doprocessinsert##1{\ifvoid##1\else\insert##1{\unvbox##1}\fi}% +\unexpanded\def\processinsertions +  {\the\t_page_inserts_list} + +\unexpanded\def\synchronizeinsertions +  {\let\doprocessinsert\page_inserts_synchronize     \processinsertions} -%D For instance, when we postpone footnotes, we need to save -%D some data related to the inserts. The next methods are -%D far from ideal, but better than nothing. We save and -%D restore box content and associated data independently. -%D The box content is only restores when non||void. - -\def\backupinsertion#1% -  {\csname\string#1\endcsname} - -\def\installbackupinsertion#1% -  {\expandafter\newinsert\csname\string#1\endcsname -   \count\backupinsertion#1\zerocount -   \skip \backupinsertion#1\zeropoint -   \dimen\backupinsertion#1\maxdimen} - -\def\saveinsertionbox#1% -  {\ifdim\ht#1>\zeropoint % hm, actually unknown -     \global\setbox\backupinsertion#1\box#1% -   \else -     \global\setbox\backupinsertion#1\emptybox +\def\page_inserts_synchronize#1% +  {\ifvoid#1\else +     \insert#1{\unvbox#1}% +   \fi} + +%D For instance, when we postpone footnotes, we need to save some data related to +%D the inserts. The next methods are far from ideal, but better than nothing. We +%D save and restore box content and associated data independently. The box content +%D is only restores when non||void. + +\installcorenamespace{insertionbackup} + +\unexpanded\def\installbackupinsertion#1% +  {\ifcsname\??insertionbackup\string#1\endcsname \else +     \expandafter\newinsert\csname\??insertionbackup\string#1\endcsname +     \count\csname\??insertionbackup\string#1\endcsname\zerocount +     \skip \csname\??insertionbackup\string#1\endcsname\zeropoint +     \dimen\csname\??insertionbackup\string#1\endcsname\maxdimen     \fi} -\def\restoreinsertionbox#1% +\unexpanded\def\saveinsertionbox#1% hm, actually unknown +  {\global\setbox\csname\??insertionbackup\string#1\endcsname +     \ifdim\ht#1>\zeropoint\box#1\else\emptybox\fi} + +\unexpanded\def\restoreinsertionbox#1%    {\ifvoid\backupinsertion#1\else % if void, we keep the content -     \global\setbox#1\box\backupinsertion#1% +     \global\setbox#1\box\csname\??insertionbackup\string#1\endcsname     \fi} -\def\eraseinsertionbackup#1% -  {\global\setbox\backupinsertion#1\emptybox} +\unexpanded\def\eraseinsertionbackup#1% +  {\global\setbox\csname\??insertionbackup\string#1\endcsname\emptybox} -\def\saveinsertiondata#1% -  {\global\skip \backupinsertion#1\skip #1% -   \global\count\backupinsertion#1\count#1% -   \global\dimen\backupinsertion#1\dimen#1} +\unexpanded\def\saveinsertiondata#1% +  {\global\skip \csname\??insertionbackup\string#1\endcsname\skip #1% +   \global\count\csname\??insertionbackup\string#1\endcsname\count#1% +   \global\dimen\csname\??insertionbackup\string#1\endcsname\dimen#1} -\def\restoreinsertiondata#1% -  {\global\skip #1\skip \backupinsertion#1% -   \global\count#1\count\backupinsertion#1% -   \global\dimen#1\dimen\backupinsertion#1} +\unexpanded\def\restoreinsertiondata#1% +  {\global\skip #1\skip \csname\??insertionbackup\string#1\endcsname +   \global\count#1\count\csname\??insertionbackup\string#1\endcsname +   \global\dimen#1\dimen\csname\??insertionbackup\string#1\endcsname}  %D Auxiliary macros: -\def\addinsertionheight#1\to#2% +\unexpanded\def\addinsertionheight#1\to#2%    {\ifvoid#1\else       \advance#2 1\skip#1\relax       \advance#2  \ht  #1\relax diff --git a/tex/context/base/page-lay.mkiv b/tex/context/base/page-lay.mkiv index 78839ea70..504478e5e 100644 --- a/tex/context/base/page-lay.mkiv +++ b/tex/context/base/page-lay.mkiv @@ -576,7 +576,7 @@    %\writestatus{layout target}{(\the\paperwidth,\the\paperheight) -> (\the\printpaperwidth,\the\printpaperheight)}%     \page_layouts_synchronize} -\ifx\page_paper_set_offsets\undefined +\ifdefined\page_paper_set_offsets \else    \def\page_paper_set_offsets % will move      {\global\paperoffset\v_page_target_offset @@ -585,8 +585,13 @@  \fi -\ifdefined\setups                  \else \unexpanded\def\setups[#1]{\setdefaultpenalties} \fi % still needed? -\ifdefined\synchronizegridsnapping \else \let\synchronizegridsnapping\relax               \fi +\ifdefined\setups \else +    \unexpanded\def\setups[#1]{\setdefaultpenalties}  % still needed? +\fi + +\ifdefined\synchronizegridsnapping \else +    \let\synchronizegridsnapping\relax +\fi  \let\p_page_layouts_width \empty  \let\p_page_layouts_height\empty @@ -806,7 +811,7 @@       \page_layouts_check_revert     \fi\fi\fi\fi\fi\fi} -\def\installlayoutmethod#1#2% +\unexpanded\def\installlayoutmethod#1#2%    {\setgvalue{\??layoutmethod#1}{#2}}  \installlayoutmethod\v!default{\page_layouts_check_default} @@ -926,8 +931,11 @@  %D \macros  %D   {adaptlayout} +\installcorenamespace{adaptlayout}  \installcorenamespace{pageadaptations} +\installsetuponlycommandhandler \??adaptlayout {adaptlayout} +  \newdimen\d_page_adepts_pushed_text_height  \newdimen\d_page_adepts_pushed_footer_height  \newdimen\d_page_adepts_height @@ -946,21 +954,28 @@  \def\page_adapts_layout_register#1#2%    {\setgvalue{\??pageadaptations#2}{\page_adapts_layout_indeed{#1}}} +\let\p_adapts_height\zeropoint +\let\p_adapts_lines \zerocount +  \def\page_adapts_layout_indeed#1% -  {\getparameters[\??za][\c!height=\zeropoint,\c!lines=0,#1]% +  {\setupcurrentadaptlayout[\c!height=\zeropoint,\c!lines=\zerocount,#1]%     \page_adepts_push -   \doifelse\@@zaheight\v!max -     {\global\d_page_adepts_height\footerheight} -     {\global\d_page_adepts_height\dimexpr -        \ifnum\@@zalines=\zerocount -          \@@zaheight +   \edef\p_adapts_height{\adaptlayoutparameter\c!height}% +   \edef\p_adapts_lines {\adaptlayoutparameter\c!lines}% +   \ifx\p_adapts_height\v!max +     \global\d_page_adepts_height\footerheight +   \else +     \global\d_page_adepts_height\dimexpr +        \ifnum\p_adapts_lines=\zerocount +          \p_adapts_height          \else -          \@@zalines\openlineheight +          \p_adapts_lines\openlineheight          \fi        \relax        \ifdim\d_page_adepts_height>\footerheight          \global\d_page_adepts_height\footerheight -      \fi} +      \fi +   \fi     \global\advance\textheight   \d_page_adepts_height     \global\advance\footerheight-\d_page_adepts_height     \showmessage\m!layouts1{\the\d_page_adepts_height,\the\realpageno}% @@ -1105,33 +1120,50 @@  % #single #left #right -\def\doifoddpageelse   {\ifodd\pagenoshift\expandafter\doifoddpageelseyes  \else\expandafter\doifoddpageelsenop  \fi} -\def\doifoddpageelseyes{\ifodd\realpageno \expandafter\secondoftwoarguments\else\expandafter\firstoftwoarguments \fi} -\def\doifoddpageelsenop{\ifodd\realpageno \expandafter\firstoftwoarguments \else\expandafter\secondoftwoarguments\fi} +\def\doifoddpageelse +  {\ifodd\pagenoshift +     \expandafter\page_layouts_if_odd_else_yes +   \else +     \expandafter\page_layouts_if_odd_else_nop +   \fi} + +\def\page_layouts_if_odd_else_yes +  {\ifodd\realpageno +     \expandafter\secondoftwoarguments +   \else +     \expandafter\firstoftwoarguments +   \fi} + +\def\page_layouts_if_odd_else_nop +  {\ifodd\realpageno +     \expandafter\firstoftwoarguments +   \else +     \expandafter\secondoftwoarguments +   \fi}  \let\doifonevenpaginaelse\doifoddpageelse -\def\redoifoddpageelse#1{\doifoddpageelse} +\def\page_layouts_if_odd_else_again#1{\doifoddpageelse}  \def\doifbothsidesoverruled    {\ifdoublesided -     \expandafter\redoifoddpageelse +     \expandafter\page_layouts_if_odd_else_again     \else       \expandafter\firstofthreearguments     \fi}  \def\doifbothsides% #1 #2 #3    {\ifdoublesided -     \expandafter\doifbothsidesindeed +     \expandafter\page_layouts_if_both_sides     \else       \expandafter\firstofthreearguments     \fi} -\def\doifbothsidesindeed +\def\page_layouts_if_both_sides    {\ifsinglesided       \expandafter\firstofthreearguments     \else -     \expandafter\redoifoddpageelse +     \expandafter\page_layouts_if_odd_else_again     \fi}  \newdimen\texthoffset @@ -1179,12 +1211,12 @@  \def\rightorleftpageaction    {\ifdoublesided -     \expandafter\rightorleftpageactionindeed +     \expandafter\page_layouts_right_or_left_page_action     \else       \expandafter\firstoftwoarguments     \fi} -\def\rightorleftpageactionindeed +\def\page_layouts_right_or_left_page_action    {\ifsinglesided       \expandafter\firstoftwoarguments     \else diff --git a/tex/context/base/page-lin.lua b/tex/context/base/page-lin.lua index b830dbbb9..4dec0deec 100644 --- a/tex/context/base/page-lin.lua +++ b/tex/context/base/page-lin.lua @@ -134,6 +134,10 @@ function boxed.register(configuration)      return last  end +function commands.registerlinenumbering(configuration) +    context(boxed.register(configuration)) +end +  function boxed.setup(n,configuration)      local d = data[n]      if d then @@ -152,6 +156,8 @@ function boxed.setup(n,configuration)      return n  end +commands.setuplinenumbering = boxed.setup +  local function check_number(n,a,skip,sameline)      local d = data[a]      if d then @@ -280,3 +286,6 @@ function boxed.stage_two(n,m)         end      end  end + +commands.linenumbersstageone = boxed.stage_one +commands.linenumbersstagetwo = boxed.stage_two diff --git a/tex/context/base/page-lin.mkiv b/tex/context/base/page-lin.mkiv index 671d4c712..a26fc2c74 100644 --- a/tex/context/base/page-lin.mkiv +++ b/tex/context/base/page-lin.mkiv @@ -26,20 +26,6 @@  %  % we should use normal counters but then we need to sync settings -% not yet ok, we need to give the top line a proper height -% -% \newbox\locallinenumberbox -% -% \unexpanded\def\startlocallinenumbering -%   {\setbox\locallinenumberbox\vbox\bgroup -%    \startlinenumbering} -% -% \unexpanded\def\stoplocallinenumbering -%   {\stoplinenumbering -%    \egroup -%    \mkdoprocessdeepboxcontents\locallinenumberbox -%    \unvbox\locallinenumberbox} -  % some line  %  % \startlocallinenumbering @@ -55,137 +41,96 @@  \definesystemattribute[linenumber]   [public]  \definesystemattribute[linereference][public] -\appendtoksonce \attribute\linenumberattribute \attributeunsetvalue \to \everyforgetall -\appendtoksonce \attribute\displaymathattribute\plusone             \to \everybeforedisplayformula +\appendtoksonce +    \attribute\linenumberattribute\attributeunsetvalue +\to \everyforgetall  \newcount   \linenumber % not used -\newbox     \linenumberscratchbox -\newcount   \linenumberchunk -\newcount   \linerefcounter -\newconstant\linenumbernesting +\newbox     \b_page_lines_scratch +\newcount   \c_page_lines_reference +\newconstant\c_page_lines_nesting  \newconditional\tracelinenumbering -\def\mkprocesstextlinenumbers#1#2% -  {\setbox\linenumberscratchbox\vbox -     {\forgetall -      \offinterlineskip -      \ctxlua{nodes.lines.boxed.stage_one(\number#1,\ifcase\linenumbernesting false\else true\fi)}}% #2 -   \ctxlua{nodes.lines.boxed.stage_two(\number#1,\number\linenumberscratchbox)}}% can move to lua code -  % id nr shift width leftskip dir -\let\makelinenumber\gobblesevenarguments +\installcorenamespace{linenumberinginstance} + +\let\makelinenumber\gobblesevenarguments % used at lua end  \newconditional\boxcontentneedsprocessing -\def\mkdoprocesspagecontents   #1{\mkaddtextlinenumbers{#1}\plusone      \plusone   \zerocount} -\def\mkdoprocessboxcontents    #1{\mkaddtextlinenumbers{#1}\plusone      \plusone   \zerocount} -\def\mkdoprocessdeepboxcontents#1{\mkaddtextlinenumbers{#1}\plusone      \plusone   \plusone  } -\def\mkdoprocesscolumncontents #1{\mkaddtextlinenumbers{#1}\currentcolumn\nofcolumns\zerocount} +\def\mkdoprocesspagecontents   #1{\page_lines_add_numbers_to_box{#1}\plusone      \plusone   \zerocount} +\def\mkdoprocessboxcontents    #1{\page_lines_add_numbers_to_box{#1}\plusone      \plusone   \zerocount} +\def\mkdoprocessdeepboxcontents#1{\page_lines_add_numbers_to_box{#1}\plusone      \plusone   \plusone  } +\def\mkdoprocesscolumncontents #1{\page_lines_add_numbers_to_box{#1}\currentcolumn\nofcolumns\zerocount} -\def\mklinenumberparameters -  {continue = "\linenumberparameter\c!continue", -   start    = \linenumberparameter\c!start, -   step     = \linenumberparameter\c!step, -   method   = "\linenumberparameter\c!method", +\def\page_lines_parameters_regular +  {continue = "\linenumberingparameter\c!continue", +   start    = \number\linenumberingparameter\c!start, +   step     = \number\linenumberingparameter\c!step, +   method   = "\linenumberingparameter\c!method",     tag      = "\currentlinenumbering"} -\def\mklinenumberupdateparameters -  {continue = "\linenumberparameter\c!continue"} - -\def\mkdefinetextlinenumbering -  {\setxvalue{ln:c:\currentlinenumbering}{\number\cldcontext{nodes.lines.boxed.register({\mklinenumberparameters})}}} +\def\page_lines_parameters_update +  {continue = "\linenumberingparameter\c!continue"} -\def\mkupdatetextlinenumbering -  {\ctxlua{nodes.lines.boxed.setup(\getvalue{ln:c:\currentlinenumbering},{\mklinenumberupdateparameters})}} +\def\page_lines_start_define +  {\setxvalue{\??linenumberinginstance\currentlinenumbering}{\ctxcommand{registerlinenumbering({\page_lines_parameters_regular})}}} -\def\mkstarttextlinenumbering#1#2% always when assignment -  {\globallet\mkprocesspagecontents  \mkdoprocesspagecontents -   \globallet\mkprocesscolumncontents\mkdoprocesscolumncontents -   \global\settrue\boxcontentneedsprocessing % see core-rul.mkiv -   \edef\currentlinenumbering{#1}% -   \ifcase#2\relax -     \mkupdatetextlinenumbering % continue -   \or -     \mkdefinetextlinenumbering % only when assignment -   \fi -   \attribute\linenumberattribute\getvalue{ln:c:\currentlinenumbering}\relax} +\def\page_lines_start_update +  {\ctxcommand{setuplinenumbering(\csname\??linenumberinginstance\currentlinenumbering\endcsname,{\page_lines_parameters_update})}} -\def\mksetuptextlinenumbering -  {\ifcsname ln:c:\currentlinenumbering\endcsname -     \ctxlua{nodes.lines.boxed.setup(\getvalue{ln:c:\currentlinenumbering},{\mklinenumberparameters})}% +\def\page_lines_setup +  {\ifcsname \??linenumberinginstance\currentlinenumbering\endcsname +     \ctxcommand{setuplinenumbering(\csname\??linenumberinginstance\currentlinenumbering\endcsname,{\page_lines_parameters_regular})}%     \fi} -\def\mkstoptextlinenumbering -  {\attribute\linenumberattribute\attributeunsetvalue} -  % we could make this a bit more efficient by putting the end reference  % in the same table as the start one but why make things complex ... -\let\dofinishlinereference\dofinishfullreference +\let\dofinishlinereference\dofinishfullreference % at lua end -\def\mksomelinereference#1#2#3% +\unexpanded\def\page_lines_some_reference#1#2#3%    {\dontleavehmode\begingroup -   \global\advance\linerefcounter\plusone -   \attribute\linereferenceattribute\linerefcounter +   \global\advance\c_page_lines_reference\plusone +   \attribute\linereferenceattribute\c_page_lines_reference     #3%     % for the moment we use a simple system i.e. no prefixes etc .. todo: store as number -   \expanded{\strc_references_set_named_reference{line}{#2}{conversion=\linenumberparameter\c!conversion}{\the\linerefcounter}}% kind labels userdata text +   \normalexpanded{\strc_references_set_named_reference{line}{#2}{conversion=\linenumberingparameter\c!conversion}{\the\c_page_lines_reference}}% kind labels userdata text     \endgroup} -\def\mkstartlinereference#1{\mksomelinereference{#1}{lr:b:#1}{}\ignorespaces} -\def\mkstoplinereference #1{\removeunwantedspaces\mksomelinereference{#1}{lr:e:#1}{}} +\def\page_lines_reference_start#1{\page_lines_some_reference{#1}{lr:b:#1}{}\ignorespaces} +\def\page_lines_reference_stop #1{\removeunwantedspaces\page_lines_some_reference{#1}{lr:e:#1}{}} + +% \def\mklinestartreference#1[#2]{\in{#1}[lr:b:#2]} % not interfaced/ not used +% \def\mklinestopreference #1[#2]{\in{#1}[lr:e:#2]} % not interfaced/ not used -\def\mklinestartreference#1[#2]{\in{#1}[lr:b:#2]} % not interfaced -\def\mklinestopreference #1[#2]{\in{#1}[lr:e:#2]} % not interfaced +\newif\ifnumberinglines   % will change +\newif\iftypesettinglines % will change -% high level interface +\installcorenamespace{linenumbering} -\newif\ifnumberinglines -\newif\iftypesettinglines +\installcommandhandler \??linenumbering {linenumbering} \??linenumbering -\let\currentlinenumbering\empty +\setnewconstant\c_page_lines_mode     \plusone  % 0=continue, 1=restart +\setnewconstant\c_page_lines_location \plusone  % 0=middle, 1=left, 2=right, 3=inner, 4=outer, 5=text, 6=begin, 7=end +\setnewconstant\c_page_lines_alignment\plusfive % 0=middle, 1=left, 2=right, 5=auto -\setnewconstant\linenumbermode     \plusone  % 0=continue, 1=restart -\setnewconstant\linenumberlocation \plusone  % 0=middle, 1=left, 2=right, 3=inner, 4=outer, 5=text, 6=begin, 7=end -\setnewconstant\linenumberalignment\plusfive % 0=middle, 1=left, 2=right, 5=auto +\newdimen\d_page_lines_width +\newdimen\d_page_lines_distance  \newevery \beforeeverylinenumbering \relax  \newevery \aftereverylinenumbering  \relax  \newevery \everylinenumber          \relax -\newdimen\linenumberwidth -\newdimen\linenumberdistance - -\unexpanded\def\definelinenumbering -  {\dosingleempty\dodefinelinenumbering} - -\def\dodefinelinenumbering[#1]% -  {\edef\currentlinenumbering{#1}% -   \mkdefinetextlinenumbering} - -\unexpanded\def\setuplinenumbering -  {\dodoubleempty\dosetuplinenumbering} - -\def\dosetuplinenumbering[#1][#2]% -  {\ifsecondargument -     \def\currentlinenumbering{#1}% -     \getparameters[\??rn#1][#2]% -   \else -     \let\currentlinenumbering\empty -     \getparameters[\??rn][#1]% -   \fi -   \mksetuptextlinenumbering} - -% some day commandhandler - -\def\linenumberparameter#1% -  {\csname\??rn\ifcsname\??rn\currentlinenumbering#1\endcsname\currentlinenumbering\fi#1\endcsname} +\appendtoks +   \page_lines_setup +\to \everysetuplinenumbering -\unexpanded\def\dolinenumberattributes#1#2% -  {\dousestyleparameter{\linenumberparameter#1}% -   \dousecolorparameter{\linenumberparameter#2}} +\appendtoks +   \page_lines_start_define +\to \everydefinelinenumbering  \setuplinenumbering    [\c!conversion=\v!numbers, @@ -204,253 +149,270 @@     \c!align=\v!auto]  \definelinenumbering - -\unexpanded\def\startlinenumbering -  {\dodoubleempty\dostartlinenumbering} +  []  % no intermediate changes in values, define a class, otherwise each range  % would need a number  % todo: text -\expandafter\let\csname\??rn:l:\v!middle    \endcsname \zerocount -\expandafter\let\csname\??rn:l:\v!left      \endcsname \plusone -\expandafter\let\csname\??rn:l:\v!margin    \endcsname \plusone -\expandafter\let\csname\??rn:l:\v!inmargin  \endcsname \plusone -\expandafter\let\csname\??rn:l:\v!inleft    \endcsname \plusone -\expandafter\let\csname\??rn:l:\v!right     \endcsname \plustwo -\expandafter\let\csname\??rn:l:\v!inright   \endcsname \plustwo -\expandafter\let\csname\??rn:l:\v!inner     \endcsname \plusthree -\expandafter\let\csname\??rn:l:\v!outer     \endcsname \plusfour -\expandafter\let\csname\??rn:l:\v!text      \endcsname \plusfive -\expandafter\let\csname\??rn:l:\v!begin     \endcsname \plussix -\expandafter\let\csname\??rn:l:\v!end       \endcsname \plusseven - -\expandafter\let\csname\??rn:a:\v!middle    \endcsname \zerocount -\expandafter\let\csname\??rn:a:\v!right     \endcsname \plusone -\expandafter\let\csname\??rn:a:\v!flushleft \endcsname \plusone -\expandafter\let\csname\??rn:a:\v!left      \endcsname \plustwo -\expandafter\let\csname\??rn:a:\v!flushright\endcsname \plustwo -\expandafter\let\csname\??rn:a:\v!auto      \endcsname \plusfive - -\def\dostartlinenumbering[#1][#2]% todo: c!continue +\installcorenamespace{linennumberinglocation} +\installcorenamespace{linennumberingalternative} + +\expandafter\let\csname\??linennumberinglocation\v!middle       \endcsname \zerocount +\expandafter\let\csname\??linennumberinglocation\v!left         \endcsname \plusone +\expandafter\let\csname\??linennumberinglocation\v!margin       \endcsname \plusone +\expandafter\let\csname\??linennumberinglocation\v!inmargin     \endcsname \plusone +\expandafter\let\csname\??linennumberinglocation\v!inleft       \endcsname \plusone +\expandafter\let\csname\??linennumberinglocation\v!right        \endcsname \plustwo +\expandafter\let\csname\??linennumberinglocation\v!inright      \endcsname \plustwo +\expandafter\let\csname\??linennumberinglocation\v!inner        \endcsname \plusthree +\expandafter\let\csname\??linennumberinglocation\v!outer        \endcsname \plusfour +\expandafter\let\csname\??linennumberinglocation\v!text         \endcsname \plusfive +\expandafter\let\csname\??linennumberinglocation\v!begin        \endcsname \plussix +\expandafter\let\csname\??linennumberinglocation\v!end          \endcsname \plusseven + +\expandafter\let\csname\??linennumberingalternative\v!middle    \endcsname \zerocount +\expandafter\let\csname\??linennumberingalternative\v!right     \endcsname \plusone +\expandafter\let\csname\??linennumberingalternative\v!flushleft \endcsname \plusone +\expandafter\let\csname\??linennumberingalternative\v!left      \endcsname \plustwo +\expandafter\let\csname\??linennumberingalternative\v!flushright\endcsname \plustwo +\expandafter\let\csname\??linennumberingalternative\v!auto      \endcsname \plusfive + +\unexpanded\def\startlinenumbering +  {\dodoubleempty\page_lines_start} + +\def\page_lines_start[#1][#2]% todo: c!continue    {\begingroup -   \linenumbermode\plusone +   \c_page_lines_mode\plusone     \ifsecondargument -     \def\currentlinenumbering{#1}% +     \edef\currentlinenumbering{#1}%       \doifassignmentelse{#2} -       {\getparameters[\??rn\currentlinenumbering][#2]} +       {\setupcurrentlinenumbering[#2]}         {\doifnumberelse{#2}% downward compatible -          {\setvalue{\??rn#1\c!start}{#2}}% +          {\setcurrentlinenumberingparameter\c!start{#2}}%            {\doif{#2}\v!continue -             {\getparameters[\??rn\currentlinenumbering][\c!continue=\v!yes]% -              \linenumbermode\zerocount}}}% +             {\letcurrentlinenumberingparameter\c!continue\v!yes +              \c_page_lines_mode\zerocount}}}%     \else\iffirstargument       \doifnumberelse{#1}% downward compatible         {\let\currentlinenumbering\empty -        \setvalue{\??rn\c!start}{#1}}% +        \setcurrentlinenumberingparameter\c!start{#1}}%         {\doifelse{#1}\v!continue            {\let\currentlinenumbering\empty -           \getparameters[\??rn\currentlinenumbering][\c!continue=\v!yes]% -           \linenumbermode\zerocount} -          {\def\currentlinenumbering{#1}}}% +           \letcurrentlinenumberingparameter\c!continue\v!yes +           \c_page_lines_mode\zerocount} +          {\edef\currentlinenumbering{#1}}}%     \fi\fi -   \doif{\linenumberparameter\c!continue}\v!yes -     {\linenumbermode\zerocount}% +   \doif{\linenumberingparameter\c!continue}\v!yes +     {\c_page_lines_mode\zerocount}%     \numberinglinestrue     \the\beforeeverylinenumbering -   \mkstarttextlinenumbering\currentlinenumbering\linenumbermode} +   \globallet\mkprocesspagecontents  \mkdoprocesspagecontents +   \globallet\mkprocesscolumncontents\mkdoprocesscolumncontents +   \global\settrue\boxcontentneedsprocessing % see core-rul.mkiv +   \ifcase\c_page_lines_mode\relax +     \page_lines_start_update % continue +   \or +     \page_lines_start_define % only when assignment +   \fi +   \attribute\linenumberattribute\getvalue{\??linenumberinginstance\currentlinenumbering}\relax}  \unexpanded\def\stoplinenumbering -  {\mkstoptextlinenumbering +  {\attribute\linenumberattribute\attributeunsetvalue     \the\aftereverylinenumbering     \endgroup}  % number placement .. will change into (the new) margin code -\def\mkdoinnerlinenumber{\doifoddpageelse\mkdoleftlinenumber\mkdorightlinenumber} -\def\mkdoouterlinenumber{\doifoddpageelse\mkdorightlinenumber\mkdoleftlinenumber} +\def\page_lines_number_inner_indeed{\doifoddpageelse\page_lines_number_left_indeed\page_lines_number_right_indeed} +\def\page_lines_number_outer_indeed{\doifoddpageelse\page_lines_number_right_indeed\page_lines_number_left_indeed} -\def\mkleftlinenumber -  {\ifcase\linenumberlocation -     \expandafter\mkdoleftlinenumber +\def\page_lines_number_left +  {\ifcase\c_page_lines_location +     \expandafter\page_lines_number_left_indeed     \or -     \expandafter\mkdoleftlinenumber +     \expandafter\page_lines_number_left_indeed     \or -     \expandafter\mkdoleftlinenumber +     \expandafter\page_lines_number_left_indeed     \or -     \expandafter\mkdoinnerlinenumber +     \expandafter\page_lines_number_inner_indeed     \or -     \expandafter\mkdoouterlinenumber +     \expandafter\page_lines_number_outer_indeed     \or -     \expandafter\mkdotextlinenumber +     \expandafter\page_lines_number_text_indeed     \or -     \expandafter\mkdobeginlinenumber +     \expandafter\page_lines_number_begin_indeed     \or -     \expandafter\mkdoendlinenumber +     \expandafter\page_lines_number_end_indeed     \fi} -\def\mkrightlinenumber -  {\ifcase\linenumberlocation -     \expandafter\mkdorightlinenumber +\def\page_lines_number_right +  {\ifcase\c_page_lines_location +     \expandafter\page_lines_number_right_indeed     \or -     \expandafter\mkdorightlinenumber +     \expandafter\page_lines_number_right_indeed     \or -     \expandafter\mkdorightlinenumber +     \expandafter\page_lines_number_right_indeed     \or -     \expandafter\mkdoouterlinenumber +     \expandafter\page_lines_number_outer_indeed     \or -     \expandafter\mkdoinnerlinenumber +     \expandafter\page_lines_number_inner_indeed     \or -     \expandafter\mkdotextlinenumber +     \expandafter\page_lines_number_text_indeed     \or -     \expandafter\mkdoendlinenumber +     \expandafter\page_lines_number_end_indeed     \or -     \expandafter\mkdobeginlinenumber +     \expandafter\page_lines_number_begin_indeed     \fi} -\newconditional\faketextlinenumber -\newconstant   \linenumberbox -\newconstant   \linenumbercolumn -\newconstant   \linenumberlastcolumn +\newconditional\c_page_lines_fake_number +\newconstant   \b_page_lines_number +\newconstant   \c_page_lines_column +\newconstant   \c_page_lines_last_column -\def\mkaddtextlinenumbers#1#2#3#4% box col max nesting +\def\page_lines_add_numbers_to_box#1#2#3#4% box col max nesting    {\bgroup -   \linenumberbox       #1\relax -   \linenumbercolumn    #2\relax -   \linenumberlastcolumn#3\relax -   \linenumbernesting   #4\relax +   \b_page_lines_number     #1\relax +   \c_page_lines_column     #2\relax +   \c_page_lines_last_column#3\relax +   \c_page_lines_nesting    #4\relax     \fullrestoreglobalbodyfont -   \let\makelinenumber\maketextlinenumber -   \mkprocesstextlinenumbers\linenumberbox\linenumbernesting +   \let\makelinenumber\page_lines_make_number % used at lua end +   \setbox\b_page_lines_scratch\vbox +     {\forgetall +      \offinterlineskip +      \ctxcommand{linenumbersstageone(\number\b_page_lines_number,\ifcase\c_page_lines_nesting false\else true\fi)}}% +   \ctxcommand{linenumbersstagetwo(\number\b_page_lines_number,\number\b_page_lines_scratch)}% can move to lua code     \egroup} -\def\maketextlinenumber#1#2% +\let\page_lines_make_number_indeed\relax + +\def\page_lines_make_number#1#2%    {\edef\currentlinenumbering{#1}%     \ifcase#2\relax -     \settrue \faketextlinenumber +     \settrue \c_page_lines_fake_number     \else -     \setfalse\faketextlinenumber +     \setfalse\c_page_lines_fake_number     \fi -   \linenumberlocation \executeifdefined{\??rn:l:\linenumberparameter\c!location}\plusone  % left -   \linenumberalignment\executeifdefined{\??rn:a:\linenumberparameter\c!align   }\plusfive % auto -   \ifcase\linenumberlastcolumn\relax -     \settrue \faketextlinenumber +   \c_page_lines_location \executeifdefined{\??linennumberinglocation   \linenumberingparameter\c!location}\plusone \relax % left +   \c_page_lines_alignment\executeifdefined{\??linennumberingalternative\linenumberingparameter\c!align   }\plusfive\relax % auto +   \ifcase\c_page_lines_last_column\relax +     \settrue \c_page_lines_fake_number     \or      % one column -     \ifcase\linenumberlocation -       \settrue \faketextlinenumber -        % hm +     \ifcase\c_page_lines_location +       \settrue \c_page_lines_fake_number +       \let\page_lines_make_number_indeed\page_lines_number_fake_indeed       \or -       \let\domakelinenumber\mkleftlinenumber +       \let\page_lines_make_number_indeed\page_lines_number_left       \or -       \let\domakelinenumber\mkrightlinenumber +       \let\page_lines_make_number_indeed\page_lines_number_right       \or % inner -       \let\domakelinenumber\mkdoinnerlinenumber +       \let\page_lines_make_number_indeed\page_lines_number_inner_indeed       \or % outer -       \let\domakelinenumber\mkdoouterlinenumber +       \let\page_lines_make_number_indeed\page_lines_number_outer_indeed       \or % text -       \let\domakelinenumber\mkdotextlinenumber +       \let\page_lines_make_number_indeed\page_lines_number_text_indeed       \or -       \let\domakelinenumber\mkdobeginlinenumber +       \let\page_lines_make_number_indeed\page_lines_number_begin_indeed       \or -       \let\domakelinenumber\mkdoendlinenumber +       \let\page_lines_make_number_indeed\page_lines_number_end_indeed       \fi -   \else\ifcase\linenumbercolumn\relax -     \settrue \faketextlinenumber +   \else\ifcase\c_page_lines_column\relax +     \settrue \c_page_lines_fake_number     \or -     \let\domakelinenumber\mkleftlinenumber -     \ifcase\linenumberlocation\or -       \linenumberlocation\plusone +     \let\page_lines_make_number_indeed\page_lines_number_left +     \ifcase\c_page_lines_location\or +       \c_page_lines_location\plusone       \or -       \linenumberlocation\plustwo +       \c_page_lines_location\plustwo       \else -       \linenumberlocation\plusone +       \c_page_lines_location\plusone       \or -       \linenumberlocation\plusone +       \c_page_lines_location\plusone       \or -       \linenumberlocation\plusone +       \c_page_lines_location\plusone       \or -       \linenumberlocation\plusone % todo +       \c_page_lines_location\plusone % todo       \or -       \linenumberlocation\plusone % todo +       \c_page_lines_location\plusone % todo       \fi     \else -     \let\domakelinenumber\mkrightlinenumber -     \ifcase\linenumberlocation\or -       \linenumberlocation\plustwo +     \let\page_lines_make_number_indeed\page_lines_number_right +     \ifcase\c_page_lines_location\or +       \c_page_lines_location\plustwo       \or -       \linenumberlocation\plusone +       \c_page_lines_location\plusone       \or -       \linenumberlocation\plustwo +       \c_page_lines_location\plustwo       \or -       \linenumberlocation\plustwo +       \c_page_lines_location\plustwo       \or -       \linenumberlocation\plustwo % todo +       \c_page_lines_location\plustwo % todo       \or -       \linenumberlocation\plustwo % todo +       \c_page_lines_location\plustwo % todo       \fi     \fi\fi -   \domakelinenumber{#1}} +   \page_lines_make_number_indeed{#1}} -\def\mkdotextlinenumber #1#2#3#4#5#6% beware, one needs so compensate for this in the width ! -  {\hbox{\dosomelinenumber{#1}{2}{#2}{#5}\hskip#3\scaledpoint}} +\let\page_lines_number_fake_indeed\gobblesixarguments % needs checking -\def\mkdotextlinenumber #1#2#3#4#5#6% beware, one needs so compensate for this in the width ! -  {\hbox{\dosomelinenumber{#1}{2}{#2}{#5}\hskip#3\scaledpoint}} +\def\page_lines_number_text_indeed#1#2#3#4#5#6% beware, one needs so compensate for this in the \hsize +  {\hbox{\page_lines_number_construct{#1}{2}{#2}{#5}\hskip#3\scaledpoint}} -\def\mkdoleftlinenumber #1#2#3#4#5#6% +\def\page_lines_number_left_indeed#1#2#3#4#5#6%    {\naturalhbox to \zeropoint       {\ifcase\istltdir#6\else \hskip-#4\scaledpoint \fi -      \llap{\dosomelinenumber{#1}{2}{#2}{#5}\kern#3\scaledpoint}}} +      \llap{\page_lines_number_construct{#1}{2}{#2}{#5}\kern#3\scaledpoint}}} -\def\mkdorightlinenumber#1#2#3#4#5#6% +\def\page_lines_number_right_indeed#1#2#3#4#5#6%    {\naturalhbox to \zeropoint       {\ifcase\istltdir#6\else \hskip-#4\scaledpoint \fi -      \rlap{\hskip#4\scaledpoint\hskip#3\scaledpoint\dosomelinenumber{#1}{1}{#2}{#5}}}} +      \rlap{\hskip\dimexpr#4\scaledpoint+#3\scaledpoint\relax\page_lines_number_construct{#1}{1}{#2}{#5}}}} -\def\mkdobeginlinenumber #1#2#3#4#5#6% +\def\page_lines_number_begin_indeed#1#2#3#4#5#6%    {\ifcase\istltdir#6\relax -     \linenumberlocation\plusone -     \expandafter\mkdoleftlinenumber +     \c_page_lines_location\plusone +     \expandafter\page_lines_number_left_indeed     \else -     \linenumberlocation\plustwo -     \expandafter\mkdorightlinenumber +     \c_page_lines_location\plustwo +     \expandafter\page_lines_number_left_indeed     \fi{#1}{#2}{#3}{#4}{#5}{#6}} -\def\mkdoendlinenumber#1#2#3#4#5#6% +\def\page_lines_number_end_indeed#1#2#3#4#5#6%    {\ifcase\istltdir#6\relax -     \linenumberlocation\plustwo -     \expandafter\mkdorightlinenumber +     \c_page_lines_location\plustwo +     \expandafter\page_lines_number_left_indeed     \else -     \linenumberlocation\plusone -     \expandafter\mkdoleftlinenumber +     \c_page_lines_location\plusone +     \expandafter\page_lines_number_left_indeed     \fi{#1}{#2}{#3}{#4}{#5}{#6}} -\def\dosomelinenumber#1#2#3#4% tag 1=left|2=right linenumber leftskip +\def\page_lines_number_construct#1#2#3#4% tag 1=left|2=right linenumber leftskip    {\begingroup     \def\currentlinenumbering{#1}%     \def\linenumber{#3}% unsafe -   \doifelse{\linenumberparameter\c!width}\v!margin -     {\linenumberwidth\leftmarginwidth} -     {\linenumberwidth\linenumberparameter\c!width}% -   \linenumberdistance\linenumberparameter\c!distance\relax -   \ifcase#2\relax\or\hskip\linenumberdistance\fi\relax -   \ifnum\linenumberlocation=\plusfive -     \scratchdimen\dimexpr#4\scaledpoint-\linenumberdistance\relax -     \linenumberlocation\plusone +   \doifelse{\linenumberingparameter\c!width}\v!margin +     {\d_page_lines_width\leftmarginwidth} +     {\d_page_lines_width\linenumberingparameter\c!width}% +   \d_page_lines_distance\linenumberingparameter\c!distance\relax +   \ifcase#2\relax\or\hskip\d_page_lines_distance\fi\relax +   \ifnum\c_page_lines_location=\plusfive +     \scratchdimen\dimexpr#4\scaledpoint-\d_page_lines_distance\relax +     \c_page_lines_location\plusone     \else       \scratchdimen\zeropoint     \fi -   \ifcase\linenumberalignment -     \linenumberlocation\zerocount % middle +   \ifcase\c_page_lines_alignment +     \c_page_lines_location\zerocount % middle     \or -     \linenumberlocation\plusone % left +     \c_page_lines_location\plusone % left     \or -     \linenumberlocation\plustwo % right +     \c_page_lines_location\plustwo % right     \fi -   \ifconditional\tracelinenumbering\ruledhbox\else\hbox\fi to \linenumberwidth -     {\ifcase\linenumberlocation +   \ifconditional\tracelinenumbering\ruledhbox\else\hbox\fi to \d_page_lines_width +     {\ifcase\c_page_lines_location          \hss % middle        \or          % left @@ -461,16 +423,16 @@        \or          \doifoddpageelse\hss\relax % outer        \fi -      \ifconditional\faketextlinenumber +      \ifconditional\c_page_lines_fake_number          % we need to reserve space        \else -        \dolinenumberattributes\c!style\c!color -        \linenumberparameter\c!command -          {\linenumberparameter\c!left -           \convertnumber{\linenumberparameter\c!conversion}{#3}% -           \linenumberparameter\c!right}% +        \uselinenumberingstyleandcolor\c!style\c!color +        \linenumberingparameter\c!command +          {\linenumberingparameter\c!left +           \convertnumber{\linenumberingparameter\c!conversion}{#3}% +           \linenumberingparameter\c!right}%        \fi -      \ifcase\linenumberlocation +      \ifcase\c_page_lines_location          \hss % middle        \or          \hss % left @@ -481,53 +443,60 @@        \or          \doifoddpageelse\relax\hss % outer        \fi}% -   \ifcase#2\relax\or\or\hskip\linenumberdistance\fi\relax -   \hskip-\scratchdimen +   \ifcase#2\relax +     \hskip-\scratchdimen +   \or +     \hskip-\scratchdimen +   \or +     \hskip\dimexpr\d_page_lines_distance-\scratchdimen\relax +   \fi +   \relax     \the\everylinenumber     \endgroup} -% left right inner outer - -% align: \alignedline\@@rnalign\v!right{\box0\hskip\@@rndistance} -  % referencing -\unexpanded\def\someline [#1]{\mkstartlinereference{#1}\mkstoplinereference{#1}} % was just a def -\unexpanded\def\startline[#1]{\mkstartlinereference{#1}} -\unexpanded\def\stopline [#1]{\mkstoplinereference {#1}} +\unexpanded\def\someline [#1]{\page_lines_reference_start{#1}\page_lines_reference_stop{#1}} % was just a def +\unexpanded\def\startline[#1]{\page_lines_reference_start{#1}} +\unexpanded\def\stopline [#1]{\page_lines_reference_stop {#1}} -\def\mkshowstartlinereference#1% +\def\page_lines_reference_show_start#1%    {\ifconditional\tracelinenumbering       \setbox\scratchbox\hbox{\llap         {\vrule\!!width\onepoint\!!depth\strutdp\!!height.8\strutht\raise.85\strutht\hbox{\llap{\tt\txx#1}}}}% -     \smashbox\scratchbox\box\scratchbox +     \smashbox\scratchbox +     \box\scratchbox     \fi} -\def\mkshowstoplinereference#1% +\def\page_lines_reference_show_stop#1%    {\ifconditional\tracelinenumbering       \setbox\scratchbox\hbox{\rlap         {\raise.85\strutht\hbox{\rlap{\tt\txx#1}}\vrule\!!width\onepoint\!!depth\strutdp\!!height.8\strutht}}% -     \smashbox\scratchbox\box\scratchbox +     \smashbox\scratchbox +     \box\scratchbox     \fi} -\def\mkstartlinereference#1{\mksomelinereference{#1}{lr:b:#1}{\mkshowstartlinereference{#1}}\ignorespaces} -\def\mkstoplinereference #1{\removeunwantedspaces\mksomelinereference{#1}{lr:e:#1}{\mkshowstoplinereference{#1}}} +\def\page_lines_reference_start#1{\page_lines_some_reference{#1}{lr:b:#1}{\page_lines_reference_show_start{#1}}\ignorespaces} +\def\page_lines_reference_stop #1{\removeunwantedspaces\page_lines_some_reference{#1}{lr:e:#1}{\page_lines_reference_show_stop{#1}}}  % eventually we will do this in lua  \def\currentreferencelinenumber{\ctxcommand{filterreference("linenumber")}} -\def\doifelsesamelinereference#1#2#3% +\let\m_page_lines_from\empty +\let\m_page_lines_to  \empty + +\unexpanded\def\doifelsesamelinereference#1#2#3%    {\doifreferencefoundelse{lr:b:#1} -     {\edef\fline{\currentreferencelinenumber}% +     {\edef\m_page_lines_from{\currentreferencelinenumber}%        \doifreferencefoundelse{lr:e:#1} -        {\edef\tline{\currentreferencelinenumber}% -         %[\fline,\tline] -         \ifx\fline\tline#2\else#3\fi} +        {\edef\m_page_lines_to{\currentreferencelinenumber}% +         %[\m_page_lines_from,\m_page_lines_to] +         \ifx\m_page_lines_from\m_page_lines_to#2\else#3\fi}          {#2}}       {#2}} -\def\inline#1[#2]% +\unexpanded\def\inline#1[#2]%    {\doifelsenothing{#1}       {\doifelsesamelinereference{#2}          {\in{\leftlabeltext\v!line}{\rightlabeltext\v!line}[lr:b:#2]} @@ -536,7 +505,7 @@          {\in{#1}[lr:b:#2]}          {\in{#1}[lr:b:#2]--\in[lr:e:#2]}}} -\def\inlinerange[#1]% +\unexpanded\def\inlinerange[#1]%    {\doifelsesamelinereference{#1}       {\in[lr:b:#1]}       {\in[lr:b:#1]--\in[lr:e:#1]}} diff --git a/tex/context/base/page-mbk.mkvi b/tex/context/base/page-mbk.mkvi index eb8061bf3..9e3e57193 100644 --- a/tex/context/base/page-mbk.mkvi +++ b/tex/context/base/page-mbk.mkvi @@ -220,9 +220,9 @@        \box\floatbox        \filbreak}%     \ifdim\ht\b_page_margin_blocks>\textheight -   % \dosavefloatinfo % no saving done anyway +   % page_floats_report_saved % no saving done anyway     \else -     \doinsertfloatinfo +     \page_floats_report_total     \fi}  \def\page_margin_blocks_process_float_nop diff --git a/tex/context/base/page-mul.mkiv b/tex/context/base/page-mul.mkiv index 3792f06ee..e22ecd0a3 100644 --- a/tex/context/base/page-mul.mkiv +++ b/tex/context/base/page-mul.mkiv @@ -11,9 +11,8 @@  %C therefore copyrighted by \PRAGMA. See mreadme.pdf for  %C details. -% SEE PAGE-MUL-NEW.MKIV - -% BEWARE: TEMPORARY ISSUES WITH VSIZE AND HSIZE BUT WILL BE REDONE +% !!! there are some issues with hsize an vsize as well as flushing +% !!! floats but this module will be redone anyway  \writestatus{loading}{ConTeXt Page Macros / Simple Multi Column} @@ -304,7 +303,7 @@    %\setcolumntextheight\relax     \widowpenalty\zerocount % is gewoon beter     \clubpenalty \zerocount % zeker bij grids -   \dopushcolumnfloats +   \page_floats_column_push_saved     \dimen0\dimexpr\pagetotal+\parskip+\openlineheight\relax     \ifdim\dimen0<\pagegoal       \allowbreak @@ -389,7 +388,7 @@     \synchronizeoutput % new may 2004 / we need to: \pagegoal\vsize     \checkendcolumnfootnotes     \dosomebreak\allowbreak -   \dopopcolumnfloats} +   \page_floats_column_pop_saved}  %D Because some initializations happen three times, we defined a macro for  %D them. Erasing \type{\everypar} is needed because we don't want anything @@ -1084,21 +1083,24 @@  %D  %D When all those floats are flushed, we switch to the local flushing routine. -\def\dopushcolumnfloats -  {\ifsomefloatwaiting -     \showmessage\m!columns6{\the\savednoffloats}% -     \global\setbox\savedfloatlist\box\floatlist -     \xdef\dopopcolumnfloats -       {\global\savednoffloats\the\savednoffloats -        \global\setbox\floatlist\box\savedfloatlist -        \global\noexpand\somefloatwaitingtrue}% -     \global\savednoffloats\zerocount -     \global\somefloatwaitingfalse -   \else -     \global\let\dopopcolumnfloats\relax -   \fi} - -\let\dopopcolumnfloats\relax +% \newbox  \floatlist +% \newbox  \savedfloatlist +% +% \def\page_floats_column_push_saved +%   {\ifconditional\c_page_floats_some_waiting +%      \showmessage\m!columns6{\the\savednoffloats}% +%      \global\setbox\savedfloatlist\box\floatlist +%      \xdef\page_floats_column_pop_saved +%        {\global\savednoffloats\the\savednoffloats +%         \global\setbox\floatlist\box\savedfloatlist +%         \global\noexpand\settrue\c_page_floats_some_waiting}% +%      \global\savednoffloats\zerocount +%      \global\setfalse\c_page_floats_some_waiting +%    \else +%      \global\let\page_floats_column_pop_saved\relax +%    \fi} +% +% \let\page_floats_column_pop_saved\relax  % \def\setcolumnfloats % messy as it adapts everypar  %   {\xdef\globalsavednoffloats{\the\savednoffloats}% @@ -1212,25 +1214,25 @@  \def\docolumnroomfloat    {\ifpostponecolumnfloats -     \global\roomforfloatfalse -   \else\ifnofloatpermitted -     \global\roomforfloatfalse +     \global\setfalse\c_page_floats_room +   \else\ifconditional\c_page_floats_not_permitted +     \global\setfalse\c_page_floats_room     \else       \bgroup       \getcolumnstatus\column\count255\total\dimen0\goal\dimen2\\% -     \dofloatsgetinfo\s!text +     \page_floats_get_info\s!text       \setbox\scratchbox\vbox % tricky met objecten ?         {\blank[\rootfloatparameter\c!spacebefore]          \snaptogrid\vbox{\vskip\floatheight}}% copy?       \advance\dimen0\dimexpr\ht\scratchbox+2\openlineheight+.5\lineheight\relax\relax % needed because goal a bit higher       \ifdim\dimen0>\dimen2 -       \global\roomforfloatfalse +       \global\setfalse\c_page_floats_room       \else -       \global\roomforfloattrue +       \global\settrue\c_page_floats_room       \fi       \ifdim\floatwidth>\hsize         \showmessage\m!columns{11}\empty -       \global\roomforfloatfalse +       \global\setfalse\c_page_floats_room       \fi       \egroup     \fi\fi} @@ -1241,7 +1243,7 @@  \newif\ifflushingcolumnfloats \flushingcolumnfloatstrue  \def\doflushcolumnfloat -  {\ifpostponecolumnfloats\else\ifflushingcolumnfloats\ifsomefloatwaiting +  {\ifpostponecolumnfloats\else\ifflushingcolumnfloats\ifconditional\c_page_floats_some_waiting       \doflushcolumnfloatindeed     \fi\fi\fi} @@ -1251,7 +1253,7 @@     \let\doflushcolumnfloat\relax     \getcolumnstatus\column\mofcolumns\total\dimen0\goal\dimen2\\%     \ifdim\dimen0>\zeropoint -     \dofloatsgetinfo\s!text +     \page_floats_get_info\s!text       \ifdim\floatwidth>\hsize          % dropped ?       \else @@ -1263,7 +1265,7 @@           \ifnum\mofcolumns<\nofcolumns             \advance\mofcolumns \plusone             \ifdim\ht\currenttopcolumnbox=\zeropoint -             \dofloatsflush\s!text{1}% +             \page_floats_flush\s!text\plusone               \global\setbox\currenttopcolumnbox\vbox                 {\snaptogrid\vbox{\box\floatbox}                  \whitespace % nodig ? @@ -1287,7 +1289,7 @@             \blank[\rootfloatparameter\c!spacebefore]             \nobreak           \fi -         \dofloatsflush\s!text{1}% +         \page_floats_flush\s!text\plusone           \page_otr_command_flush_float_box           \blank[\rootfloatparameter\c!spaceafter]         \fi @@ -1312,7 +1314,7 @@    {\ifpostponecolumnfloats\else       \bgroup       \forgetall -     \ifsomefloatwaiting +     \ifconditional\c_page_floats_some_waiting         \dimen8\zeropoint         \dimen4\zeropoint         \count0\zerocount   % count0 can be used local @@ -1326,7 +1328,7 @@                    \whitespace % nodig ?                    \blank[\rootfloatparameter\c!spaceafter]}%            \else -            \dofloatsgetinfo\s!text +            \page_floats_get_info\s!text              \ifdim\floatwidth>\hsize                \dimen0\dimexpr\floatwidth+\intercolumnwidth+.5pt\relax                \dimen2\dimexpr\hsize     +\intercolumnwidth+.5pt\relax @@ -1337,7 +1339,7 @@                  \count0\zerocount                \else                  \dimen0\dimexpr\count0\hsize+\count0\intercolumnwidth-\intercolumnwidth\relax -                \dofloatsflush\s!text{1}% +                \page_floats_flush\s!text\plusone                  \ifdim\floatwidth>\finalcolumntextwidth % better somewhere else too                    \global\setbox\floatbox\hbox to \finalcolumntextwidth{\hss\box\floatbox\hss}%                  \fi % otherwise the graphic may disappear @@ -1350,7 +1352,7 @@                \fi                \showmessage\m!columns{13}\empty              \else -              \dofloatsflush\s!text{1}% +              \page_floats_flush\s!text\plusone                \ifdim\floatwidth>\finalcolumntextwidth % better somewhere else too                  \global\setbox\floatbox\hbox to \finalcolumntextwidth{\hss\box\floatbox\hss}%                \fi % otherwise the graphic may disappear @@ -1386,11 +1388,11 @@  \def\insertcolumnfloats    {\doloop -     {\ifsomefloatwaiting +     {\ifconditional\c_page_floats_some_waiting          \bgroup          \forgetall          % no check for width -        \dogetfloat +        \page_floats_get          \blank[\rootfloatparameter\c!spacebefore]          \snaptogrid\vbox{\copy\floatbox}          \blank[\rootfloatparameter\c!spaceafter] diff --git a/tex/context/base/page-not.mkiv b/tex/context/base/page-not.mkiv index 06e2f3875..ddc9b1522 100644 --- a/tex/context/base/page-not.mkiv +++ b/tex/context/base/page-not.mkiv @@ -13,12 +13,12 @@  \writestatus{loading}{ConTeXt Page Macros / Footnotes} -%D Terrible hacks: we need to share save/restore +%D This is an old mechanism that will be replaced as soon as the multicolumn +%D code is redone. -%D We've moved some footnote handling to a separate page -%D module. The macros below are used in the single and multi -%D column page handlers and permit mixed usage of column and -%D page notes. +%D We've moved some footnote handling to a separate page module. The macros below +%D are used in the single and multi column page handlers and permit mixed usage of +%D column and page notes.  \unprotect diff --git a/tex/context/base/page-one.mkiv b/tex/context/base/page-one.mkiv index 89fd7d4a8..025a9aa1a 100644 --- a/tex/context/base/page-one.mkiv +++ b/tex/context/base/page-one.mkiv @@ -210,7 +210,7 @@  \unexpanded\def\page_one_command_set_top_insertions    {\bgroup -   \ifsomefloatwaiting +   \ifconditional\c_page_floats_some_waiting       \noffloatinserts\zerocount       \let\totaltopinserted\!!zeropoint       \page_one_command_set_top_insertions_indeed @@ -229,23 +229,23 @@  \def\page_one_command_set_top_insertions_indeed    {\ifnum\noffloatinserts<\noftopfloats -     \dogetfloat +     \page_floats_get       \page_one_prepare_top_float       \ifdim\topinserted<\textheight\relax         \xdef\totaltopinserted{\the\topinserted}%         \page_one_insert_top_float -       \ifsomefloatwaiting +       \ifconditional\c_page_floats_some_waiting           \advance\noffloatinserts \plusone         \else           \noffloatinserts\noftopfloats\relax         \fi -       \dofloatflushedinfo +       \page_floats_report_flushed       \else -       \doresavefloat +       \page_floats_resave\s!text         \noffloatinserts\noftopfloats\relax       \fi     \else -     \ifsomefloatwaiting +     \ifcoditional\c_page_floats_some_waiting         \showmessage\m!floatblocks6{\the\noftopfloats}%       \fi       \let\page_one_command_set_top_insertions_indeed\relax @@ -254,7 +254,7 @@  \unexpanded\def\page_one_command_set_bottom_insertions    {\bgroup -   \ifsomefloatwaiting +   \ifconditional\c_page_floats_some_waiting       \noffloatinserts\zerocount       \page_one_command_set_bottom_insertions_indeed     \fi @@ -262,7 +262,7 @@  \def\page_one_command_set_bottom_insertions_indeed    {\ifnum\noffloatinserts<\nofbotfloats\relax -     \dogetfloat +     \page_floats_get       \global\advance\botinserted \ht\floatbox\relax       \global\advance\botinserted \dp\floatbox\relax       \global\advance\botinserted \floattopskip\relax @@ -271,19 +271,19 @@           {\forgetall            \blank[\rootfloatparameter\c!spacebefore]%            \page_otr_command_flush_float_box}% -       \ifsomefloatwaiting +       \ifconditional\c_page_floats_some_waiting           \advance\noffloatinserts \plusone         \else           \noffloatinserts\nofbotfloats         \fi -       \dofloatflushedinfo +       \page_floats_report_flushed       \else -       \doresavefloat +       \page_floats_resave\s!text         \noffloatinserts\nofbotfloats\relax       \fi -     \global\nofloatpermittedtrue % vgl topfloats s! +     \global\settrue\c_page_floats_not_permitted % vgl topfloats s!     \else -     \ifsomefloatwaiting +     \ifconditional\c_page_floats_some_waiting         \showmessage\m!floatblocks7{\the\nofbotfloats}%       \fi       \let\page_one_command_set_bottom_insertions_indeed\relax @@ -324,31 +324,31 @@       \fi     \fi     \global\botinserted\zeropoint -   \global\nofloatpermittedfalse} +   \global\setfalse\c_page_floats_not_permitted}  \unexpanded\def\page_one_command_flush_floats -  {\global\flushingfloatstrue -   \ifsomefloatwaiting +  {\global\settrue\c_page_floats_flushing +   \ifconditional\c_page_floats_some_waiting       \par       % if kept, then option and definitely off in gridmode ! ! ! !       % \ifvmode \prevdepth\maxdimen \fi % prevents whitespace; problematic in icare tests       \page_one_command_flush_floats_indeed     \fi     \global\savednoffloats\zerocount -   \global\somefloatwaitingfalse -   \global\flushingfloatsfalse} +   \global\setfalse\c_page_floats_some_waiting +   \global\setfalse\c_page_floats_flushing}  \unexpanded\def\page_one_command_flush_float_box -  {\ifcenterfloatbox \ifdim\wd\floatbox<\hsize +  {\ifconditional\c_page_floats_center_box \ifdim\wd\floatbox<\hsize       \global\setbox\floatbox\hbox to \hsize{\hss\box\floatbox\hss}%     \fi \fi     \snaptogrid\hbox{\iftestfloatbox\ruledhbox\fi{\box\floatbox}}} % was copy  \def\page_one_command_flush_floats_indeed % much in common with OTRSET -  {\ifsomefloatwaiting -     \ifpackflushedfloats -       \centerfloatboxfalse % not needed as we do call directly -       \dofloatscollect\s!text{\hsize}{1em}% +  {\ifconditional\c_page_floats_some_waiting +     \ifconditional\c_page_floats_pack_flushed +       \setfalse\c_page_floats_center_box % not needed as we do call directly +       \page_floats_collect\s!text\hsize\emwidth         %% no longer (interferes with footnotes):         %%         %% \page_one_command_set_vsize % test 2011.06.24.001 @@ -357,9 +357,9 @@           {\hfil            \dorecurse\nofcollectedfloats              {\ifcase\columndirection % nog document wide -               \dofloatsflush\s!text{1}% +               \page_floats_flush\s!text\plusone               \else -               \dofloatsflush\s!text{\the\numexpr\nofcollectedfloats-\recurselevel+1\relax}% +               \page_floats_flush\s!text{\the\numexpr\nofcollectedfloats-\recurselevel+1\relax}%               \fi               \ifdim\wd\floatbox>\makeupwidth % \hsize                 \hbox to \makeupwidth{\hss\box\floatbox\hss}% @@ -371,7 +371,7 @@               \fi}%            \hfil}%       \else -       \dogetfloat +       \page_floats_get       \fi       % there is a chance that due to rounding errors, the float       % fits on a page where it was first rejected, in which case @@ -394,8 +394,8 @@     \fi}  \unexpanded\def\page_one_command_check_if_float_fits -  {\ifnofloatpermitted -     \global\roomforfloatfalse +  {\ifconditional\c_page_floats_not_permitted +     \global\setfalse\c_page_floats_room     \else       % new per 31/5/2004, should be an option, only one column mode       \begingroup @@ -419,19 +419,19 @@       \fi       \relax % really needed ! ! ! !       \ifdim\dimen0>\dimen2 -       \global\roomforfloatfalse +       \global\setfalse\c_page_floats_room       \else -       \global\roomforfloattrue +       \global\settrue\c_page_floats_room       \fi     \fi}  \unexpanded\def\page_one_command_flush_saved_floats    {\global\topinserted\zeropoint     \global\botinserted\zeropoint -   \ifflushingfloats \else +   \ifconditional\c_page_floats_flushing \else       \page_one_command_set_top_insertions       \page_one_command_set_bottom_insertions -     \ifsomefloatwaiting +     \ifconditional\c_page_floats_some_waiting          \doif{\rootfloatparameter\c!cache}\v!no\page_one_command_flush_floats % could be _otr_       \else\ifconditional\c_page_margin_blocks_present         \page_one_command_flush_floats @@ -443,7 +443,7 @@       \baselinecorrection     %\fi     \doplacefloatbox -   \doinsertfloatinfo +   \page_floats_report_total     \dohandlenextfloatindent}  \def\page_one_place_float_force @@ -469,10 +469,10 @@  %def\page_one_place_float_margin     {\page_one_place_float_side_indeed\page_sides_process_float_margin\nonoindentation} % wil be overloaded  \def\page_one_place_float_margin     {\page_margin_blocks_process_float} -\def\page_one_place_float_page       {\dofloatssavepagefloat     \s!page     \floatlocationmethod} -\def\page_one_place_float_leftpage   {\dofloatssavepagefloat     \s!leftpage \floatlocationmethod} -\def\page_one_place_float_rightpage  {\dofloatssavepagefloat     \s!rightpage\floatlocationmethod} -\def\page_one_place_float_somewhere  {\dofloatssavesomewherefloat\s!somewhere\floatlocationmethod} +\def\page_one_place_float_page       {\page_floats_save_page_float     \s!page     \floatlocationmethod} +\def\page_one_place_float_leftpage   {\page_floats_save_page_float     \s!leftpage \floatlocationmethod} +\def\page_one_place_float_rightpage  {\page_floats_save_page_float     \s!rightpage\floatlocationmethod} +\def\page_one_place_float_somewhere  {\page_floats_save_somewhere_float\s!somewhere\floatlocationmethod}  \def\page_one_place_float_here       {\page_one_place_float_otherwise_here}  \def\page_one_place_float_auto       {\page_one_place_float_otherwise} @@ -488,38 +488,41 @@    {\doifinsetelse\v!always\floatlocationmethod       {\page[\v!preference]%        \page_otr_command_check_if_float_fits -      \ifroomforfloat +      \ifconditional\c_page_floats_room          \page_one_place_float_here_indeed        \else          \showmessage\m!floatblocks9\empty -        \doreversesavefloat +        \page_floats_resave\s!text        \fi} -     {\ifsomefloatwaiting -        \dosavefloat +     {\ifconditional\c_page_floats_some_waiting +        \page_floats_save\s!text +        \nonoindentation        \else          \page[\v!preference]%          \page_otr_command_check_if_float_fits -        \ifroomforfloat +        \ifconditional\c_page_floats_room            \page_one_place_float_here_indeed          \else -          \dosavefloat +          \page_floats_save\s!text +          \nonoindentation          \fi        \fi}}  \def\page_one_place_float_otherwise_else    {\doifinsetelse\v!always\floatlocationmethod       {\page_otr_command_check_if_float_fits -      \ifroomforfloat +      \ifconditional\c_page_floats_room          \page_one_place_float_auto_top_bottom        \else          \showmessage\m!floatblocks9\empty -        \doreversesavefloat +        \page_floats_resave\s!text        \fi}       {\page_otr_command_check_if_float_fits -      \ifroomforfloat +      \ifconditional\c_page_floats_room          \page_one_place_float_auto_top_bottom        \else -        \dosavefloat +        \page_floats_save\s!text +        \nonoindentation        \fi}}  \def\floatautofactor{.5} @@ -544,7 +547,7 @@  \def\page_one_place_float_top_indeed % maybe remember last beforeskip    {\page_one_prepare_top_float     \page_one_insert_top_float -   \doinsertfloatinfo} +   \page_floats_report_total}  \def\page_one_place_float_bottom_indeed    {\global\advance\botinserted\dimexpr\ht\floatbox+\dp\floatbox+\floattopskip\relax @@ -552,15 +555,15 @@       {\forgetall        \blank[\rootfloatparameter\c!spacebefore]%        \page_otr_command_flush_float_box}% -   %\global\nofloatpermittedtrue -   \doinsertfloatinfo} +   %\global\settrue\c_page_floats_not_permitted +   \page_floats_report_total}  \def\page_one_place_float_face % links, rechts, midden, hoog, midden, laag    {%\checkwaitingfloats{#1}%     \startopposite     \page_otr_command_flush_float_box     \stopopposite -  }%\doinsertfloatinfo} +  }%\page_floats_report_total}  \unexpanded\def\page_one_command_flush_side_floats    {\page_sides_flush_floats} diff --git a/tex/context/base/page-plg.mkiv b/tex/context/base/page-plg.mkiv index 004b9204d..ec61da1d2 100644 --- a/tex/context/base/page-plg.mkiv +++ b/tex/context/base/page-plg.mkiv @@ -11,10 +11,11 @@  %C therefore copyrighted by \PRAGMA. See mreadme.pdf for  %C details. -% \ifx\pageareabox\undefined \else \endinput \fi -  \writestatus{loading}{ConTeXt Page Macros / Extra Page Building} +%D This still needs some work, especially the dimensions need to be +%D checked cq.\ optimized. Beware: method has become alternative! +  %D This feature has been present for a while but has never been  %D exploited: pluggable pagebuilders. The next example code  %D demonstrates the application of one such a plug-in. This variant @@ -31,6 +32,8 @@  %D \startpagelayout[leftpage]  %D   \setupTABLE[offset=overlay]  %D   \setupTABLE[c][1][width=\leftmarginwidth] +%D   \setupTABLE[c][2][width=\textwidth] +%D   \setupTABLE[c][3][width=\rightmarginwidth]  %D   \bTABLE  %D     \bTR  %D       \bTD[nx=3,background=color,backgroundcolor=green] @@ -43,7 +46,7 @@  %D     \eTR  %D     \bTR  %D       \bTD[nx=3,offset=overlay] -%D         {\bTABLE[width=.5\hsize] +%D         {\bTABLE  %D            \bTR  %D              \bTD \pagearea[footer][text][left] \eTD  %D              \bTD \pagearea[bottom][text][left] \eTD @@ -56,7 +59,9 @@  %D  %D \startpagelayout[rightpage]  %D   \setupTABLE[offset=overlay] -%D   \setupTABLE[c][1][width=\rightmarginwidth] +%D   \setupTABLE[c][1][width=\leftmarginwidth] +%D   \setupTABLE[c][2][width=\textwidth] +%D   \setupTABLE[c][3][width=\rightmarginwidth]  %D   \bTABLE  %D     \bTR  %D       \bTD[nx=3] \pagearea[header][text][middle] \eTD @@ -67,7 +72,7 @@  %D     \eTR  %D     \bTR  %D       \bTD[nx=3,offset=overlay] -%D         {\bTABLE[width=.5\hsize] +%D         {\bTABLE  %D            \bTR  %D              \bTD \pagearea[bottom][text][right] \eTD  %D              \bTD \pagearea[footer][text][right] \eTD @@ -80,12 +85,9 @@  %D  %D \setupcolors[state=start]  %D -%D \setupbackgrounds[text][background=color,backgroundcolor=blue] -%D \setupbackgrounds[header][text][background=color,backgroundcolor=red] -%D  %D \setuppagenumbering[alternative=doublesided,location=]  %D -%D \setuplayout[method=makeup] +%D \setuplayout[alternative=makeup]  %D  %D \definetextbackground  %D   [test] @@ -110,6 +112,8 @@  \unprotect +\installcorenamespace{layoutmakeupalternative} +  \def\page_boxes_construct_content_makeup#1#2#3% targetbox flusher box    {\setbox#1\hbox       {\vbox to \textheight @@ -125,65 +129,76 @@     \dp#1\zeropoint     \hsize\paperwidth     \vsize\paperheight -   \setbox#1\vbox{\csname\??layoutmethod\doifbothsidesoverruled\v!page\v!rightpage\v!leftpage\endcsname}% +   \setbox#1\vbox{\csname\??layoutmakeupalternative\doifbothsidesoverruled\v!page\v!rightpage\v!leftpage\endcsname}%     \wd#1\paperwidth     \ht#1\paperheight     \dp#1\zeropoint}  \installlayoutalternative\v!makeup{\page_boxes_construct_content_makeup} -\newbox\pageareabox +\newbox\b_page_area  \unexpanded\def\pagearea    {\dotripleempty\page_area} -\def\page_area[#1][#2][#3]% +\def\page_area    {\ifthirdargument -     \doifelse{#3}\v!left -       {\page_area_indeed{#1}{#2}\c!lefttext} -       {\doifelse{#3}\v!right -          {\page_area_indeed{#1}{#2}\c!righttext} -          {\page_area_indeed{#1}{#2}\c!middletext}}% +     \expandafter\page_area_three     \else\ifsecondargument -     \doifbothsidesoverruled -       {\page_area_indeed{#1}{#2}\c!righttext} -       {\page_area_indeed{#1}{#2}\c!righttext} -       {\page_area_indeed{#1}{#2}\c!lefttext }% +     \doubleexpandafter\page_area_two     \else -     \doif{#1}\v!text % copy due to trial runs in TABLE -       {\iftrialtypesetting -%           \copy\pagebox -          \fakebox\pagebox -        \else -%           \localpositioningfalse -          \page_backgrounds_add_to_text\pagebox -          \page_grids_add_to_box\pagebox -          \box\pagebox -        \fi}% +     \doubleexpandafter\page_area_one     \fi\fi} +\def\page_area_three[#1][#2][#3]% +  {\edef\m_page_area_three{#3}% +   \ifx\m_page_area_three\v!left +     \let\m_page_area_three\c!lefttext +   \else\ifx\m_page_area_three\v!right +     \let\m_page_area_three\c!righttext +   \else +     \let\m_page_area_three\c!middletext +   \fi\fi +   \page_area_indeed{#1}{#2}\m_page_area_three} + +\def\page_area_two[#1][#2][#3]% +  {\edef\m_page_area_three{\doifbothsidesoverruled\c!righttext\c!righttext\c!lefttext}% +   \page_area_indeed{#1}{#2}\m_page_area_three} + +\def\page_area_one[#1][#2][#3]% +  {\edef\m_page_area_one{#1} +   \ifx\m_page_area_one\v!text % copy due to trial runs in TABLE +     \iftrialtypesetting +       \fakebox\pagebox +     \else +       \page_backgrounds_add_to_text\pagebox +       \page_grids_add_to_box\pagebox +       \box\pagebox +     \fi +   \fi} +  \def\page_area_indeed#1#2#3% -  {\setbox\pageareabox\vbox{\getspecificlayouttext{#1}{#2}{#3}}% +  {\setbox\b_page_area\vbox{\getspecificlayouttext{#1}{#2}{#3}}%     \ifsomebackgroundfound{#1#2}%       \iftrialtypesetting -%        \box\pageareabox -       \fakebox\pageareabox +       \fakebox\b_page_area       \else -       \localframed -         [\??ma#1#2] -         [\c!width=\wd\pageareabox, -          \c!height=\ht\pageareabox, +     % todo: \localbackgroundframed{\??layoutbackgrounds#1#2}{#1:#2} +       \localframed % todo: +         [\??layoutbackgrounds#1#2] +         [\c!width=\wd\b_page_area, +          \c!height=\ht\b_page_area,            \c!offset=\v!overlay] -         {\box\pageareabox}% +         {\box\b_page_area}%       \fi     \else -     \box\pageareabox +     \box\b_page_area     \fi}  % to be done nicely (proper namespacing) -\setvalue{\??layoutmethod\v!leftpage }{\csname\??layoutmethod\v!page\endcsname} -\setvalue{\??layoutmethod\v!rightpage}{\csname\??layoutmethod\v!page\endcsname} +\setvalue{\??layoutmakeupalternative\v!leftpage }{\csname\??layoutmakeupalternative\v!page\endcsname} +\setvalue{\??layoutmakeupalternative\v!rightpage}{\csname\??layoutmakeupalternative\v!page\endcsname}  \unexpanded\def\startpagelayout    {\bgroup @@ -194,6 +209,6 @@  \def\page_layouts_start_layout[#1]#2\stoppagelayout    {\egroup -   \setvalue{\??layoutmethod#1}{#2}} +   \setvalue{\??layoutmakeupalternative#1}{#2}}  \protect \endinput diff --git a/tex/context/base/page-mis.lua b/tex/context/base/page-pst.lua index 20ed23b50..8586830cf 100644 --- a/tex/context/base/page-mis.lua +++ b/tex/context/base/page-pst.lua @@ -1,6 +1,6 @@ -if not modules then modules = { } end modules ['page-mis'] = { +if not modules then modules = { } end modules ['page-pst'] = {      version   = 1.001, -    comment   = "companion to page-mis.mkiv", +    comment   = "companion to page-pst.mkiv",      author    = "Hans Hagen, PRAGMA-ADE, Hasselt NL",      copyright = "PRAGMA ADE / ConTeXt Development Team",      license   = "see context related readme files" diff --git a/tex/context/base/page-mis.mkiv b/tex/context/base/page-pst.mkiv index 6137bb462..1078dda03 100644 --- a/tex/context/base/page-mis.mkiv +++ b/tex/context/base/page-pst.mkiv @@ -2,7 +2,7 @@  %D   [       file=page-mis,  %D        version=2008.11.17, % was part of page-flt.tex / 2000.10.20  %D          title=\CONTEXT\ Page Macros, -%D       subtitle=Misc Float Things, +%D       subtitle=Postponing,  %D         author=Hans Hagen,  %D           date=\currentdate,  %D      copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] @@ -11,9 +11,9 @@  %C therefore copyrighted by \PRAGMA. See mreadme.pdf for  %C details. -\writestatus{loading}{ConTeXt Page Macros / Misc Float Things} +\writestatus{loading}{ConTeXt Page Macros / Postponing} -\registerctxluafile{page-mis}{1.001} +\registerctxluafile{page-pst}{1.001}  \unprotect @@ -21,8 +21,13 @@  \newevery\everytopofpage\relax -\appendtoks   \the\everytopofpage          \to\everystarttext -\appendtoks\global\everytopofpage\emptytoks\to\everystoptext +\appendtoks +    \the\everytopofpage +\to \everystarttext + +\appendtoks +    \global\everytopofpage\emptytoks +\to \everystoptext  % \startpostponing [pagenumber] [+pageoffset]  % @@ -44,8 +49,10 @@  %D is somewhat easier and we also can erase buffers easier when  %D we keep a local cache, especially as we can flush per page. -\newif   \ifinpostponing                    % prevents nesting -\newcount\c_page_postponed_blocks_next_page % set at the lua end +%newif      \ifinpostponing                    % prevents nesting + +\newcount   \c_page_postponed_blocks_next_page % set at the lua end +\newconstant\c_page_postponed_busy  \unexpanded\setvalue{\e!start\v!postponing}%    {\bgroup @@ -65,11 +72,11 @@  \unexpanded\def\page_postponed_blocks_flush_indeed    {\begingroup     \setsystemmode\v!postponing -   \inpostponingtrue                  % for old times sake +   \settrue\c_page_postponed_busy     \global\pagetotal\zeropoint        % here? still needed? (was after flush pagefloats)     \the\everytopofpage\relax    %\flushrestfloats -   \doflushpagefloats +   \page_floats_flush_page_floats     \setnormalcatcodes                 % postponing in verbatim     \restoreglobalbodyfont             % otherwise problems inside split verbatim     \ctxcommand{flushpostponedblocks()}% @@ -77,8 +84,8 @@     \page_otr_command_flush_floats     % new but potential dangerous, maybe we need a classification     \endgroup}                         % of blocks: with and without flush -\def\page_postponed_blocks_flush -  {\ifinpostponing +\unexpanded\def\page_postponed_blocks_flush +  {\ifconditional\c_page_postponed_busy       % probably a nested flush     \else\ifnum\c_page_postponed_blocks_next_page=\zerocount       % nothing in cache diff --git a/tex/context/base/page-sel.mkiv b/tex/context/base/page-sel.mkiv deleted file mode 100644 index 27f094118..000000000 --- a/tex/context/base/page-sel.mkiv +++ /dev/null @@ -1,347 +0,0 @@ -%D \module -%D   [       file=page-sel, % moved from page-imp -%D        version=1998.01.15, -%D          title=\CONTEXT\ Page Macros, -%D       subtitle=Page Selection, -%D         author=Hans Hagen, -%D           date=\currentdate, -%D      copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] -%C -%C This module is part of the \CONTEXT\ macro||package and is -%C therefore copyrighted by \PRAGMA. See mreadme.pdf for -%C details. - -%D This will become runtime loaded code. - -\writestatus{loading}{ConTeXt Page Macros / Page Selection} - -\unprotect - -%D One can (mis)use this mechanism, in close cooperation -%D with \PDFTEX\ to arrange pages of already produced files. -%D -%D \starttyping -%D \insertpages[file.pdf][1,3][n=30,width=18cm] -%D \stoptyping -%D -%D The pages are inserted in the text area, and even pages -%D are repositioned according to the width. In this example -%D empty pages are added after page 1 and 3. -%D -%D Selecting pages can be accomplished by: -%D -%D \starttyping -%D \filterpages[file.pdf][1,3,5][n=30,width=18cm] -%D \stoptyping -%D -%D One may pass \type {odd} or \type {even} instead of a -%D comma separated list. A third alternative is: -%D -%D \starttyping -%D \copypages[file.pdf][n=30,scale=950] -%D \stoptyping -%D -%D This macros inserts the page, according to the settings -%D provided. - -\def\insertpages -  {\dotripleempty\doinsertpages} - -\def\doinsertpages[#1][#2][#3]% -  {\doifassignmentelse{#2} -     {\dodoinsertpages[#1][][#2]} -     {\dodoinsertpages[#1][#2][#3]}} - -\def\dodoinsertpages[#1][#2][#3]% -  {\bgroup -   \dontcomplain -   \getfiguredimensions[#1]% -   \getparameters[\??ip][\c!n=\noffigurepages,\c!width=\zeropoint,#3]% -   \doifinset0{#2}{\emptyhbox\page}% -   \dorecurse\@@ipn -     {\dofilterpage{#1}\recurselevel -      \doifinset\recurselevel{#2}{\emptyhbox\page}}% -   \egroup} - -\def\filterpages -  {\dotripleempty\dofilterpages} - -\def\dofilterpages[#1][#2][#3]% % \noffigurepages not yet supported -  {\bgroup -   \dontcomplain -   \getfiguredimensions[#1]% -   \getparameters[\??ip][\c!n=\noffigurepages,\c!width=\zeropoint,#3]% -   \doifelse{#2}\v!even -     {\dorecurse\@@ipn -        {\ifodd\recurselevel\relax\else\dofilterpage{#1}\recurselevel\fi}} -     {\doifelse{#2}\v!odd -        {\dorecurse\@@ipn -           {\ifodd\recurselevel\relax\dofilterpage{#1}\recurselevel\fi}} -        {\def\dodocommand##1{\ifnum##1>\@@ipn\else\dofilterpage{#1}{##1}\fi}% -         \def\docommand  ##1{\dowithrange{##1}\dodocommand}% -         \processcommalist[#2]\docommand}}% -   \egroup} - -\def\dofilterpage#1#2% -  {\hbox to \textwidth -     {\ifdoublesided\ifdim\@@ipwidth>\zeropoint\relax\ifodd\realpageno\else -        \hfill -        \def\dowithfigure{\hskip-\@@ipwidth}% -      \fi\fi\fi -      \setbox0\hbox -        {\externalfigure[#1][\c!page=#2,\c!height=\textheight]}% -      \wd0\zeropoint -      \box0} -   \page} - -\def\copypages -  {\dodoubleempty\docopypages} - -\def\docopypages[#1][#2]% -  {\bgroup -   \getfiguredimensions[#1]% -   \getparameters[\??ip] -     [\c!n=\noffigurepages, -      \c!marking=\v!off, -      \c!scale=\!!thousand, -      \c!offset=\zeropoint, -      #2]% -   \dorecurse\@@ipn -     {\vbox to \textheight -        {\hsize\textwidth -         \scratchdimen\@@ipoffset -         \centeredbox -           {\doifelse\@@ipmarking\v!on\cuthbox\hbox % only place where cuthbox is used -              {\ifdim\scratchdimen>\zeropoint\relax -                 \advance\vsize -2\scratchdimen -                 \advance\hsize -2\scratchdimen -                 \externalfigure[#1][\c!page=\recurselevel,#2,\c!scale=,\c!factor=\v!max,\c!offset=\v!overlay]% -               \else -                 \externalfigure[#1][\c!page=\recurselevel,#2,\c!offset=\v!overlay]% -               \fi}}} -      \page} -   \egroup} - -%D \macros -%D   {combinepages} -%D -%D Yet another way of postprocessing is handles by \type -%D {\combinepages}. This macro builds a matrix of pages from a -%D file, for example: -%D -%D \starttyping -%D \setuppapersize -%D   [A4][A4] % or [A4,landscape][A4,landscape] -%D -%D \setuplayout -%D   [header=0pt,footer=1cm, -%D    backspace=1cm,topspace=1cm, -%D    width=middle,height=middle] -%D -%D \setupfootertexts -%D   [presentation---\currentdate\space---\space\pagenumber] -%D -%D \starttext -%D   \combinepages[slides][nx=2,ny=3,frame=on] -%D \stoptext -%D \stoptyping -%D -%D One can influence the way the pages are combined. (This -%D will be explained some time.) - -\def\combinepages -  {\dodoubleempty\docombinepages} - -\def\docombinepages[#1][#2]% a=perpag b=free -  {\bgroup -   \dontcomplain -   \getfiguredimensions[#1]% -   \getparameters -     [\??ip] -     [\c!alternative=\v!a, -      \c!n=\noffigurepages,\c!nx=2,\c!ny=2,\c!start=1,\c!stop=\!!maxcard, -      \c!distance=\bodyfontsize, -      \c!bottom=\vfill,\c!top=\vss, -      \c!left=\hss,\c!right=\hss, -      \c!before=\page,\c!after=\page,\c!inbetween=\blank, -      \c!frame=,\c!background=,\c!backgroundcolor=, -      #2]% -   \def\@@ipname{#1}% -   \@@ipbefore -   \expandcheckedcsname{\??ip::\c!alternative:}\@@ipalternative\v!b -   \@@ipafter -   \egroup} - -\setvalue{\??ip::\c!alternative:\v!a}% -  {\global\combinedpagescounter\@@ipstart -   \doloop -     {\vbox to \textheight -        {\hsize\textwidth % ? ? -         \scratchdimen\@@ipdistance -         \!!widtha \dimexpr(\hsize-\@@ipnx\scratchdimen+\scratchdimen)/\@@ipnx\relax -         \!!heighta\dimexpr(\vsize-\@@ipny\scratchdimen+\scratchdimen)/\@@ipny\relax -         \dorecurse\@@ipny -           {\hbox to \hsize -              {\dorecurse\@@ipnx -                 {\vbox to \!!heighta -                    {\hsize\!!widtha -                     \vsize\!!heighta -                     \@@iptop -                     \hbox to \hsize -                       {\@@ipleft -                        \ifnum\combinedpagescounter>\@@ipstop\relax -                          \globallet\@@ipn\!!zerocount -                        \else\ifnum\combinedpagescounter>\@@ipn \else -                          \externalfigure[\@@ipname] -                            [\c!object=\v!no, -                             \c!page=\number\combinedpagescounter, -                             \c!factor=\v!max, -                             \c!background=\@@ipbackground, -                             \c!backgroundcolor=\@@ipbackgroundcolor, -                             \c!frame=\@@ipframe]% -                        \fi\fi -                        \@@ipright} -                     \@@ipbottom}% -                  \global\advance\combinedpagescounter\plusone -                  \hfil}% -               \hfilneg} -            \vfil}% -         \vfilneg}% -         \page -         \ifnum\combinedpagescounter>\@@ipn \exitloop\fi}} - -\setvalue{\??ip::\c!alternative:\v!c}% -  {\global\combinedpagescounter\@@ipstart -   \doloop -     {\vbox to \textheight -        {\hsize\textwidth % ? ? -         \scratchdimen\@@ipdistance -         \!!widtha \dimexpr(\hsize-\@@ipnx\scratchdimen+\scratchdimen)/\@@ipnx\relax -         \!!heighta\dimexpr(\vsize-\@@ipny\scratchdimen+\scratchdimen)/\@@ipny\relax -         \hbox to \hsize -           {\dorecurse\@@ipnx -              {\@@ipleft -               \vbox to \textheight -                 {\hsize\!!widtha -                    {\dorecurse\@@ipny -                       {\@@iptop -                        \hbox to \hsize -                          {\vbox to \!!heighta -                             {\hsize\!!widtha -                              \vsize\!!heighta -                              \ifnum\combinedpagescounter>\@@ipstop\relax -                                \globallet\@@ipn\!!zerocount -                              \else\ifnum\combinedpagescounter>\@@ipn \else -                                \externalfigure[\@@ipname] -                                  [\c!object=\v!no, -                                   \c!page=\number\combinedpagescounter, -                                   \c!factor=\v!max, -                                   \c!background=\@@ipbackground, -                                   \c!backgroundcolor=\@@ipbackgroundcolor, -                                   \c!frame=\@@ipframe]% -                              \fi\fi}} -                         \global\advance\combinedpagescounter\plusone -                         \@@ipbottom}% -                      \vfil}% -                   \vfilneg} -                \hfil}% -            \hfilneg}} -         \page -         \ifnum\combinedpagescounter>\@@ipn \exitloop\fi}} - -\setvalue{\??ip::\c!alternative:\v!horizontal}{\getvalue{\??ip::\c!alternative:\v!a}} -\setvalue{\??ip::\c!alternative:\v!vertical  }{\getvalue{\??ip::\c!alternative:\v!c}} - -\setvalue{\??ip::\c!alternative:\v!b}% -  {\global\combinedpagescounter\@@ipstart -   \doloop -     {\startbaselinecorrection -        \scratchdimen\@@ipdistance -        \!!widtha\dimexpr(\hsize-\@@ipnx\scratchdimen+\scratchdimen)/\@@ipnx\relax -        \hbox to \hsize -          {\dorecurse\@@ipnx -             {\global\advance\combinedpagescounter\plusone -              \ifnum\combinedpagescounter>\@@ipn \else -                 \normalexpanded{\noexpand\externalfigure[\@@ipname] -                   [\c!page=\number\combinedpagescounter, -                    \c!width=\the\!!widtha,% todo \freezedimenmacro -                    \c!background=\@@ipbackground, -                    \c!backgroundcolor=\@@ipbackgroundcolor, -                    \c!frame=\@@ipframe]}% -                 \hfill -              \fi}\hfillneg}% -      \stopbaselinecorrection -      \ifnum\combinedpagescounter<\@@ipn\relax -        \@@ipinbetween -      \else -        \exitloop -      \fi}} - -% This macro cuts a page into n parts that can be pasted -% together. - -\def\slicepages -  {\dotripleempty\doslicepages} - -\def\doslicepages[#1][#2][#3]% -  {\ifthirdargument -     \dodoslicepages[#1][#2][#3]% -   \else -     \dodoslicepages[#1][#2][#2]% -   \fi} - -\newcounter\slicedpagenumber - -\def\dodoslicepages[#1][#2][#3]% -  {\bgroup -   \dontcomplain -   \globallet\slicedpagenumber\!!zerocount -   \getfiguredimensions[#1] -   \getparameters -     [\??ip] -     [\c!n=1, -      \c!offset=\zeropoint, -      \c!hoffset=\zeropoint,\c!voffset=\zeropoint, -      \c!width=\figurewidth,\c!height=\figureheight,#2] -   \ifnum\@@ipn>\zerocount -     \definepapersize -       [\s!dummy][\c!height=\@@ipheight,\c!width=\@@ipwidth] -     \setuppapersize -       [\s!dummy][\s!dummy] -     \setuplayout -       [\c!backspace=\zeropoint,\c!topspace=\zeropoint, -        \c!height=\v!middle,\c!width=\v!middle, -        \c!textdistance=\zeropoint, -        \c!header=\zeropoint,\c!footer=\zeropoint] -   \fi -   \dorecurse\noffigurepages -     {\global\let\slicedpagenumber\recurselevel -      \ifnum\@@ipn>\plusone -        \dorecurse\@@ipn -          {\let\xslice\recurselevel -           \dorecurse\@@ipn -             {\let\yslice\recurselevel -              \clip -                [\c!nx=\@@ipn,\c!ny=\@@ipn,\c!x=\xslice,\c!y=\yslice] -                {\scale -                   [\c!scale=\@@ipn000] -                   {\externalfigure[#1][\c!page=\slicedpagenumber]}} -              \page}} -      \else -        \ifodd\slicedpagenumber\relax -          \getparameters[\??ip][#2] -        \else -          \getparameters[\??ip][#3] -        \fi -        \hskip\@@ipoffset -        \clip -          [\c!hoffset=\@@iphoffset,\c!voffset=\@@ipvoffset, -           \c!height=\@@ipheight,\c!width=\@@ipwidth] -          {\externalfigure[#1][\c!page=\slicedpagenumber]} -        \page -      \fi} -   \egroup} - -% \starttext \slicepages[slice1.pdf][n=3] \stoptext - -\protect \endinput diff --git a/tex/context/base/page-sel.mkvi b/tex/context/base/page-sel.mkvi new file mode 100644 index 000000000..3d0771b48 --- /dev/null +++ b/tex/context/base/page-sel.mkvi @@ -0,0 +1,368 @@ +%D \module +%D   [       file=page-sel, % moved from page-imp +%D        version=1998.01.15, +%D          title=\CONTEXT\ Page Macros, +%D       subtitle=Page Selection, +%D         author=Hans Hagen, +%D           date=\currentdate, +%D      copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] +%C +%C This module is part of the \CONTEXT\ macro||package and is +%C therefore copyrighted by \PRAGMA. See mreadme.pdf for +%C details. + +%D This code relates to old texexec features and one can wonder if it needs +%D to be in the core. So, this could become runtime loaded code. Some of +%D the alternatives need checking. + +\writestatus{loading}{ConTeXt Page Macros / Page Selection} + +\unprotect + +%D One can (mis)use this mechanism to (re)arrange pages of already produced +%D files. +%D +%D \starttyping +%D \insertpages[file.pdf][1,3][n=30,width=18cm] +%D \stoptyping +%D +%D The pages are inserted in the text area, and even pages are repositioned +%D according to the width. In this example empty pages are added after page +%D 1 and 3. +%D +%D Selecting pages can be accomplished by: +%D +%D \starttyping +%D \filterpages[file.pdf][1,3,5][n=30,width=18cm] +%D \stoptyping +%D +%D One may pass \type {odd} or \type {even} instead of a comma separated list. A +%D third alternative is: +%D +%D \starttyping +%D \copypages[file.pdf][n=30,scale=950] +%D \stoptyping +%D +%D This macros inserts the page, according to the settings provided. + +\installcorenamespace{withpages} + +\installsetuponlycommandhandler \??withpages {withpages} +%  \installdirectcommandhandler \??withpages {withpages} + +\newcount\c_page_selectors_n + +\unexpanded\def\insertpages +  {\dotripleempty\page_selectors_insert} + +\def\page_selectors_insert[#filename][#emptylist][#settings]% +  {\doifassignmentelse{#emptylist} +     {\page_selectors_insert_indeed[#filename][][#emptylist]} +     {\page_selectors_insert_indeed[#filename][#emptylist][#settings]}} + +\def\page_selectors_insert_indeed[#filename][#emptylist][#settings]% +  {\bgroup +   \dontcomplain +   \getfiguredimensions[#filename]% +   \global\c_page_selectors_n\noffigurepages\relax +   \setupcurrentwithpages[\c!width=\zeropoint,#settings]% +   \scratchwidth\directwithpagesparameter\c!width\relax +   \doifinset0{#emptylist} +     {\emptyhbox\page}% +   \dorecurse\c_page_selectors_n +     {\page_selectors_filter_a_page{#filename}\recurselevel +      \doifinset\recurselevel{#emptylist} +        {\emptyhbox\page}}% +   \egroup} + +\unexpanded\def\filterpages +  {\dotripleempty\page_selectors_filter} + +\def\page_selectors_filter[#filename][#selection][#settings]% % \noffigurepages not yet supported +  {\bgroup +   \dontcomplain +   \getfiguredimensions[#filename]% +   \global\c_page_selectors_n\noffigurepages\relax +   \setupcurrentwithpages[\c!width=\zeropoint,#settings]% +   \scratchwidth\directwithpagesparameter\c!width\relax +   \edef\p_selection{#selection}% +   \ifx\p_selection\v!even +     \dorecurse\c_page_selectors_n +       {\ifodd\recurselevel\else +          \page_selectors_filter_a_page{#filename}\recurselevel +        \fi}% +   \else\ifx\p_selection\v!odd +     \dorecurse\c_page_selectors_n +       {\ifodd\recurselevel\relax +          \page_selectors_filter_a_page{#filename}\recurselevel +        \fi}% +   \else +     \def\page_selectors_filter_step_indeed#page% +       {\ifnum#page>\c_page_selectors_n\else +          \page_selectors_filter_a_page{#filename}{#page}% +        \fi}% +     \def\page_selectors_filter_step#step% +       {\dowithrange{#step}\page_selectors_filter_step_indeed}% +     \processcommacommand[\p_selection]\page_selectors_filter_step +   \fi +   \egroup} + +\def\page_selectors_filter_a_page#filename#page% +  {\hbox to \textwidth +     {\ifdim\scratchwidth>\zeropoint +        \rightorleftpageaction{\scratchwidth\zeropoint}{\hfill}% +      \fi +      \setbox\scratchbox\hbox +        {\hskip-\scratchwidth +         \externalfigure[#filename][\c!page=#page,\c!height=\textheight]\hss}% +      \wd\scratchbox\zeropoint +      \box\scratchbox} +   \page} + +\unexpanded\def\copypages +  {\dotripleempty\page_selectors_copy} + +\def\page_selectors_copy[#filename][#settings][#figuresettings]% +  {\bgroup +   \getfiguredimensions[#filename]% +   \global\c_page_selectors_n\noffigurepages\relax +   \setupcurrentwithpages[\c!marking=\v!off,\c!offset=\zeropoint,#settings]% +   \scratchoffset\directwithpagesparameter\c!offset\relax +   \dorecurse\c_page_selectors_n +     {\vbox to \textheight +        {\hsize\textwidth +         \centeredbox +           {\doifelse{\directwithpagesparameter\c!marking}\v!on\cuthbox\hbox % only place where cuthbox is used +              {\ifdim\scratchoffset>\zeropoint\relax +                 \advance\vsize -2\scratchoffset +                 \advance\hsize -2\scratchoffset +                 \externalfigure[#filename][\c!page=\recurselevel,#figuresettings,\c!scale=,\c!factor=\v!max,\c!offset=\v!overlay]% +               \else +                 \externalfigurefilename][\c!page=\recurselevel,#figuresettings,\c!offset=\v!overlay]% +               \fi}}} +      \page} +   \egroup} + +%D \macros +%D   {combinepages} +%D +%D Yet another way of postprocessing is handles by \type {\combinepages}. This macro +%D builds a matrix of pages from a file, for example: +%D +%D \starttyping +%D \setuppapersize +%D   [A4][A4] % or [A4,landscape][A4,landscape] +%D +%D \setuplayout +%D   [header=0pt,footer=1cm, +%D    backspace=1cm,topspace=1cm, +%D    width=middle,height=middle] +%D +%D \setupfootertexts +%D   [presentation---\currentdate\space---\space\pagenumber] +%D +%D \starttext +%D   \combinepages[slides][nx=2,ny=3,frame=on] +%D \stoptext +%D \stoptyping +%D +%D One can influence the way the pages are combined. (This will be explained some +%D time.) + +\installcorenamespace{combinepagesalternative} + +\unexpanded\def\combinepages +  {\dodoubleempty\page_selectors_combine} + +\def\page_selectors_combine[#filename][#settings]% a=perpag b=free +  {\bgroup +   \dontcomplain +   \getfiguredimensions[#filename]% +   \global\c_page_selectors_n\noffigurepages\relax +   \setupcurrentwithpages +     [\c!alternative=\v!a, +      \c!nx=\plustwo,\c!ny=\plustwo,\c!start=\plusone,\c!stop=\maxcard, +      \c!distance=\bodyfontsize, +      \c!bottom=\vfill,\c!top=\vss,\c!left=\hss,\c!right=\hss, +      \c!before=\page,\c!after=\page,\c!inbetween=\blank, +      \c!frame=,\c!background=,\c!backgroundcolor=, +      \c!name={#filename}, +      #settings]% +   \directwithpagesparameter\c!before +   \scratchnx\directwithpagesparameter\c!nx +   \scratchny\directwithpagesparameter\c!ny +   \scratchdistance\directwithpagesparameter\c!distance\relax +   \scratchwidth\dimexpr(\textwidth-\scratchnx\scratchdistance+\scratchdistance)/\scratchnx\relax +   \scratchheight\dimexpr(\textheight-\scratchny\scratchdistance+\scratchdistance)/\scratchny\relax +   \expandcheckedcsname{\??combinepagesalternative}{\directwithpagesparameter\c!alternative}\v!b +   \directwithpagesparameter\c!after +   \egroup} + +\setvalue{\??combinepagesalternative\v!a}% +  {\global\combinedpagescounter\directwithpagesparameter\c!start\relax +   \doloop +     {\vbox to \textheight +        {\dorecurse\scratchny +           {\hbox to \textwidth +              {\dorecurse\scratchnx +                 {\vbox to \scratchheight +                    {\hsize\scratchwidth +                     \vsize\scratchheight +                     \directwithpagesparameter\c!top +                     \hbox to \hsize +                       {\directwithpagesparameter\c!left +                        \ifnum\combinedpagescounter>\directwithpagesparameter\c!stop\relax +                          \global\c_page_selectors_n\zerocount +                        \else\ifnum\combinedpagescounter>\c_page_selectors_n \else +                          \externalfigure +                            [\directwithpagesparameter\c!name] +                            [\c!object=\v!no, +                             \c!page=\number\combinedpagescounter, +                             \c!factor=\v!max, +                             \c!background=\directwithpagesparameter\c!background, +                             \c!backgroundcolor=\directwithpagesparameter\c!backgroundcolor, +                             \c!frame=\directwithpagesparameter\c!frame]% +                        \fi\fi +                        \directwithpagesparameter\c!right} +                     \directwithpagesparameter\c!bottom}% +                  \global\advance\combinedpagescounter\plusone +                  \hfil}% +               \hfilneg} +            \vfil}% +         \vfilneg}% +         \page +         \ifnum\combinedpagescounter>\c_page_selectors_n +           \exitloop +         \fi}} + +\setvalue{\??combinepagesalternative\v!c}% +  {\global\combinedpagescounter\directwithpagesparameter\c!start\relax +   \doloop +     {\vbox to \textheight +        {\hbox to \textwidth +           {\dorecurse\scratchnx +              {\directwithpagesparameter\c!left +               \vbox to \textheight +                 {\hsize\scratchwidth +                  \dorecurse\scratchny +                    {\directwithpagesparameter\c!top +                     \hbox to \hsize +                       {\vbox to \scratchheight +                          {\hsize\scratchwidth +                           \vsize\scratchheight +                           \ifnum\combinedpagescounter>\directwithpagesparameter\c!stop\relax +                             \global\c_page_selectors_n\zerocount +                           \else\ifnum\combinedpagescounter>\c_page_selectors_n \else +                             \externalfigure +                               [\directwithpagesparameter\c!name] +                               [\c!object=\v!no, +                                \c!page=\number\combinedpagescounter, +                                \c!factor=\v!max, +                                \c!background=\directwithpagesparameter\c!background, +                                \c!backgroundcolor=\directwithpagesparameter\c!backgroundcolor, +                                \c!frame=\directwithpagesparameter\c!frame]% +                           \fi\fi}} +                      \global\advance\combinedpagescounter\plusone +                      \directwithpagesparameter\c!bottom}}% +                \hfil}% +            \hfilneg}}% +      \page +      \ifnum\combinedpagescounter>\c_page_selectors_n +        \exitloop +      \fi}} + +\setvalue{\??combinepagesalternative\v!horizontal}{\getvalue{\??combinepagesalternative\v!a}} +\setvalue{\??combinepagesalternative\v!vertical  }{\getvalue{\??combinepagesalternative\v!c}} + +\setvalue{\??combinepagesalternative\v!b}% +  {\global\combinedpagescounter\directwithpagesparameter\c!start\relax +   \doloop +     {\startbaselinecorrection +        \hbox to \textwidth +          {\dorecurse\scratchnx +             {\global\advance\combinedpagescounter\plusone +              \ifnum\combinedpagescounter>\c_page_selectors_n \else +                 \normalexpanded{\externalfigure +                   [\directwithpagesparameter\c!name] +                   [\c!page=\number\combinedpagescounter, +                    \c!width=\the\scratchwidth, +                    \c!background=\directwithpagesparameter\c!background, +                    \c!backgroundcolor=\directwithpagesparameter\c!backgroundcolor, +                    \c!frame=\directwithpagesparameter\c!frame]}% +                 \hfill +              \fi}% +              \hfillneg}% +      \stopbaselinecorrection +      \ifnum\combinedpagescounter<\c_page_selectors_n\relax +        \directwithpagesparameter\c!inbetween +      \else +        \exitloop +      \fi}} + +% This macro cuts a page into n parts that can be pasted together. + +\unexpanded\def\slicepages +  {\dotripleempty\page_selectors_slice} + +\def\page_selectors_slice[#filename][#oddsettings][#evensettings]% +  {\ifthirdargument +     \page_selectors_slice_indeed[#filename][#oddsettings][#evensettings]% +   \else +     \page_selectors_slice_indeed[#filename][#oddsettings][#oddsettings]% +   \fi} + +\let\slicedpagenumber\!!zerocount +\let\slicedpagestepx \!!zerocount +\let\slicedpagestepy \!!zerocount + +\def\page_selectors_slice_indeed[#filename][#oddsettings][#evensettings]% +  {\bgroup +   \dontcomplain +   \global\let\slicedpagenumber\!!zerocount +   \getfiguredimensions[#filename]% +   \global\c_page_selectors_n\noffigurepages\relax +   \setupcurrentwithpages +     [\c!offset=\zeropoint,\c!hoffset=\zeropoint,\c!voffset=\zeropoint, +      \c!width=\figurewidth,\c!height=\figureheight,#oddsettings]% +   \ifnum\c_page_selectors_n>\zerocount +     \definepapersize +       [\s!dummy][\c!height=\directwithpagesparameter\c!height,\c!width=\directwithpagesparameter\c!width]% +     \setuppapersize +       [\s!dummy][\s!dummy]% +     \setuplayout +       [\c!backspace=\zeropoint,\c!topspace=\zeropoint, +        \c!height=\v!middle,\c!width=\v!middle, +        \c!textdistance=\zeropoint, +        \c!header=\zeropoint,\c!footer=\zeropoint]% +   \fi +   \dorecurse\noffigurepages +     {\global\let\slicedpagenumber\recurselevel +      \ifnum\c_page_selectors_n>\plusone +        \dorecurse\c_page_selectors_n +          {\let\slicedpagestepx\recurselevel +           \dorecurse\c_page_selectors_n +             {\let\slicedpagestepy\recurselevel +              \clip +                [\c!nx=\c_page_selectors_n,\c!ny=\c_page_selectors_n,\c!x=\slicedpagestepx,\c!y=\slicedpagestepy] +                {\scale +                   [\c!scale=\number\c_page_selectors_n000] +                   {\externalfigure[#filename][\c!page=\slicedpagenumber]}}% +              \page}}% +      \else +        \ifodd\slicedpagenumber\relax +          \setupcurrentwithpages[#oddsettings]% +        \else +          \setupcurrentwithpages[#evensettings]% +        \fi +        \hskip\directwithpagesparameter\c!offset\relax +        \clip +          [\c!hoffset=\directwithpagesparameter\c!hoffset,\c!voffset=\directwithpagesparameter\c!voffset, +           \c!height=\directwithpagesparameter\c!height,\c!width=\directwithpagesparameter\c!width] +          {\externalfigure[#filename][\c!page=\slicedpagenumber]}% +        \page +      \fi} +   \egroup} + +% \starttext \slicepages[slice1.pdf][n=3] \stoptext + +\protect \endinput diff --git a/tex/context/base/page-set.mkiv b/tex/context/base/page-set.mkiv index 99570004c..88382282f 100644 --- a/tex/context/base/page-set.mkiv +++ b/tex/context/base/page-set.mkiv @@ -1264,7 +1264,7 @@     \fi}  \unexpanded\def\page_set_command_check_if_float_fits -  {\global\ifnofloatpermitted\roomforfloatfalse\else\roomforfloattrue\fi} +  {\global\ifconditional\c_page_floats_not_permitted\setfalse\c_page_floats_room\else\settrue\c_page_floats_room\fi}  \def\OTRSETunpreparebox#1%    {\ifhbox#1% spans and so @@ -1279,11 +1279,11 @@  \def\OTRSETsavebox#1% clean up the skips    {\OTRSETunpreparebox{#1}% -   \dofloatssave\s!text} +   \page_floats_save\s!text}  \def\OTRSETresavebox#1% clean up the skips    {\OTRSETunpreparebox{#1}% -   \dofloatsresave\s!text} +   \page_floats_resave\s!text}  \unexpanded\def\page_set_command_flush_float_box    {\iftestfloatbox\ruledhbox\fi{\box\floatbox}} @@ -1292,12 +1292,12 @@    {\bgroup     \def\OTRSETsavebox##1{\!!doneafalse}%     \doloop -     {\ifsomefloatwaiting +     {\ifconditional\c_page_floats_some_waiting          \OTRSETskipstart -        \dofloatsgetinfo\s!text +        \page_floats_get_info\s!text          \ifdim\floatwidth>\zeropoint            \!!doneatrue -          \dofloatsflush\s!text{1}% +          \page_floats_flush\s!text\plusone            \dp\floatbox\zeropoint            \OTRSETstoreincolumnslot{TBLR}\floatbox            \if!!donea @@ -1643,7 +1643,7 @@         \fi       \fi       \global\setfalse\OTRSETfinish -     \ifsomefloatwaiting +     \ifconditional\c_page_floats_some_waiting         \page_otr_command_set_vsize         \pagebreak         \page_otr_command_set_vsize @@ -1991,7 +1991,7 @@     \dp\floatbox\strutdp     \@EA\uppercasestring\floatmethod\to\floatmethod     \OTRSETstoreincolumnslot\floatmethod\floatbox -   \doinsertfloatinfo} +   \page_floats_report_total}  % kind of new, looks much like OTRONE, but not entirely @@ -1999,7 +1999,7 @@  \unexpanded\def\page_set_command_set_top_insertions    {\bgroup -   \ifsomefloatwaiting +   \ifconditional\c_page_floats_some_waiting       \noffloatinserts\zerocount       \let\totaltopinserted\!!zeropoint       \OTRSETdodosettopinserts @@ -2021,7 +2021,7 @@  \def\OTRSETdodosettopinserts    {\ifnum\noffloatinserts<\noftopfloats -     \dogetfloat +     \page_floats_get       \ifdim\topinserted=\zeropoint\relax         \settrue\c_page_set_top_of_insert       \else @@ -2047,15 +2047,15 @@       \else         \xdef\totaltopinserted{\the\topinserted}%         \insert\topins{\forgetall\box\scratchbox}% interlineskip ? -       \ifsomefloatwaiting +       \ifconditional\c_page_floats_some_waiting           \advance\noffloatinserts \plusone         \else           \noffloatinserts\noftopfloats\relax         \fi -       \dofloatflushedinfo +       \page_floats_report_flushed       \fi     \else -     \ifsomefloatwaiting +     \ifconditional\c_page_floats_some_waiting         \showmessage\m!floatblocks6{\the\noftopfloats}%       \fi       \let\OTRSETdodosettopinserts\relax @@ -2064,7 +2064,7 @@  \unexpanded\def\page_set_command_set_bottom_insertions    {\bgroup -   \ifsomefloatwaiting +   \ifconditional\c_page_floats_some_waiting       \noffloatinserts\zerocount       \OTRSETdodosetbotinserts     \fi @@ -2072,7 +2072,7 @@  \def\OTRSETdodosetbotinserts    {\ifnum\noffloatinserts<\nofbotfloats\relax -     \dogetfloat +     \page_floats_get       \global\advance\botinserted \ht\floatbox\relax       \global\advance\botinserted \dp\floatbox\relax       \global\advance\botinserted \floattopskip\relax @@ -2081,19 +2081,19 @@           {\forgetall            \blank[\rootfloatparameter\c!spacebefore]%            \page_otr_command_flush_float_box}% -       \ifsomefloatwaiting +       \ifconditional\c_page_floats_some_waiting           \advance\noffloatinserts \plusone         \else           \noffloatinserts\nofbotfloats         \fi -       \dofloatflushedinfo +       \page_floats_report_flushed       \else         \OTRSETresavebox\floatbox         \noffloatinserts\nofbotfloats\relax       \fi -     \global\nofloatpermittedtrue % vgl topfloats s! +     \global\settrue\c_page_floats_not_permitted % vgl topfloats s!     \else -     \ifsomefloatwaiting +     \ifconditional\c_page_floats_some_waiting         \showmessage\m!floatblocks7{\the\nofbotfloats}%       \fi       \let\OTRSETdodosetbotinserts\relax @@ -2540,10 +2540,10 @@  \unexpanded\def\page_set_command_flush_saved_floats % rather similar to _one_ ut this might change    {\global\topinserted\zeropoint     \global\botinserted\zeropoint -   \ifflushingfloats \else +   \ifconditional\c_page_floats_flushing \else       \page_set_command_set_top_insertions       \page_set_command_set_bottom_insertions -     \ifsomefloatwaiting +     \ifconditional\c_page_floats_some_waiting          \doif{\rootfloatparameter\c!cache}\v!no\page_set_command_flush_floats % could be _otr_       \fi     \fi} diff --git a/tex/context/base/page-sid.mkiv b/tex/context/base/page-sid.mkiv index f4d42a41c..f3b54e430 100644 --- a/tex/context/base/page-sid.mkiv +++ b/tex/context/base/page-sid.mkiv @@ -104,13 +104,12 @@  \let\logsidefloat    \relax -\newif\ifroomforfloat    % shared (will change)  \newif\iftracesidefloats % public (might change)  % end of public variables  \def\page_sides_insert_info -  {\doinsertfloatinfo} +  {\page_floats_report_total}  \def\page_sides_apply_horizontal_shift    {\ifdim\d_page_sides_maximum>\zeropoint @@ -601,7 +600,7 @@     \fi     \relax % really needed ! ! ! !     \ifdim\dimen0>\dimen2 -     \global\roomforfloatfalse +     \global\setfalse\c_page_floats_room     \else       \ifdim\dimexpr\pagegoal-\d_page_sides_vsize\relax<\d_page_sides_bottomskip         \global\advance\d_page_sides_vsize \dimen0 @@ -612,7 +611,7 @@         \global\advance\d_page_sides_vsize \d_page_sides_bottomskip         \global\setfalse\c_page_sides_short       \fi -     \global\roomforfloattrue +     \global\settrue\c_page_floats_room     \fi}  \def\page_sides_prepare_space @@ -633,7 +632,7 @@     \page_sides_relocate_float{#1}%     \page_sides_apply_vertical_shift     \page_sides_analyse_space -   \ifroomforfloat \else +   \ifconditional\c_page_floats_room \else       \page_otr_fill_and_eject_page       \page_sides_analyse_space       \page_sides_inject_dummy_lines diff --git a/tex/context/base/page-spr.mkiv b/tex/context/base/page-spr.mkiv index f4768d4e9..dc1e013d5 100644 --- a/tex/context/base/page-spr.mkiv +++ b/tex/context/base/page-spr.mkiv @@ -17,10 +17,9 @@  \unprotect -\newbox\spreadbox -\newif \ifinspread - -\setnewconstant\showspreadmode\plusone +\newbox        \b_page_spread_content +\newconditional\c_page_spread_busy +\newconditional\c_page_spread_once     % when true only one flush (writes etc)  % beware, ugly overload, to be redone @@ -35,52 +34,81 @@           \noindent             % content can be < \hsize           \page_otr_command_package_contents#2#3}}%     \dp#1\zeropoint -   \setbox#1\hbox to \makeupwidth -     {\ifinspread -        \ifvoid\spreadbox -          \global\setbox\spreadbox\box#1% -          \copy\spreadbox\hss % left page +   \ifconditional\c_page_spread_busy +      \normalsettextpagecontent_spread{#1}% +   \else +      \normalsettextpagecontent_normal{#1}% +   \fi} + +\def\normalsettextpagecontent_normal#1% +  {\setbox#1\hbox to \makeupwidth +     {\hss\box#1\hss}} % never change the \hss's + +\def\normalsettextpagecontent_spread#1% +  {\setbox#1\hbox to \makeupwidth +     {\ifvoid\b_page_spread_content +        \ifconditional\c_page_spread_once +          \box#1%          \else -          % prevent duplicate writes in normal run -          \ifarrangingpages \else \ifcase\showspreadmode -            \global\setbox\spreadbox\emptyhbox -            \wd\spreadbox\makeupwidth -            \ht\spreadbox\textheight -          \fi \fi -          \hss\box\spreadbox % right page +          \global\setbox\b_page_spread_content\box#1% +          \copy\b_page_spread_content          \fi +        \hss % left page        \else -        \hss\box#1\hss % never change the \hss's +        \hss % right page +        \ifarrangingpages +          % writes don't matter anyway +        \else\ifconditional\c_page_spread_once +          \global\setbox\b_page_spread_content\emptyhbox +          \wd\b_page_spread_content\makeupwidth +          \ht\b_page_spread_content\textheight +        \else +          % writes can interfere (todo: write stripper, but how about hyperlinks) +        \fi \fi +        \box\b_page_spread_content        \fi}} -\def\doflushspread -  {\ifinspread \ifvoid\spreadbox\else +\unexpanded\def\page_spread_flush +  {\ifconditional\c_page_spread_busy \ifvoid\b_page_spread_content\else       % this page will be discarded later       \emptyhbox \page     \fi \fi }  \unexpanded\def\startspread -  {\bgroup -   \ifdoublesided -     \page[\v!left]% -    %\setsystemmode{spread}% -     \inspreadtrue -     \expanded{\setuplayout[\c!textwidth=\the\dimexpr2\textwidth+2\backspace\relax]}% -     \unexpanded\def\startspread{\bgroup\let\stopspread\egroup}% -     \let\stopspread\dostopspread +  {\ifdoublesided +     \ifconditional\c_page_spread_busy +       \doubleexpandafter\page_spread_start_nop +     \else +       \doubleexpandafter\page_spread_start_yes +     \fi     \else -     \let\stopspread\egroup +     \expandafter\page_spread_start_nop     \fi}  \let\stopspread\relax -\def\dostopspread -  {\kern\zeropoint\page -   \inspreadfalse +\unexpanded\def\page_spread_start_yes +  {\bgroup +   \page[\v!left]% +  %\setsystemmode{spread}% +   \settrue\c_page_spread_busy +   \expanded{\setuplayout[\c!textwidth=\the\dimexpr2\textwidth+2\backspace\relax]}% +   \let\stopspread\page_spread_stop_yes} + +\unexpanded\def\page_spread_stop_yes +  {\kern\zeropoint +   \page     \setuplayout[\c!textwidth=\textwidth]     \page[\v!left]     \egroup} +\unexpanded\def\page_spread_start_nop +  {\bgroup +   \let\stopspread\page_spread_stop_nop} + +\unexpanded\def\page_spread_stop_nop +  {\egroup} +  \protect \endinput  % texexec --arr --pdf test diff --git a/tex/context/base/page-str.mkiv b/tex/context/base/page-str.mkiv index 47eb5e3bf..200a71377 100644 --- a/tex/context/base/page-str.mkiv +++ b/tex/context/base/page-str.mkiv @@ -36,7 +36,7 @@  \unprotect  \let     \currentoutputstream     \empty -\newif   \ifinoutputstream +\newif   \ifinoutputstream        % will becoem a conditional or mode  \newtoks \everyenableoutputstream  \appendtoks @@ -71,15 +71,13 @@    {\ctxlua{streams.stop()}%     \endgroup} -\let\currentoutputsubstream\empty -  \unexpanded\def\startoutputsubstream[#1]% just push/pop instead -  {\glet\savedcurrentoutputstream\currentoutputstream +  {\globalpushmacro\currentoutputstream     \enableoutputstream[#1]}  \unexpanded\def\stopoutputsubstream -  {\glet\currentoutputstream\savedcurrentoutputstream -   \enableoutputstream[\savedcurrentoutputstream]} +  {\globalpopmacro\currentoutputstream +   \enableoutputstream[\currentoutputstream]}  \def\flushoutputstream  [#1]{\ctxlua{streams.flush("#1")}}  \def\outputstreamcopy   [#1]{\vbox{\ctxlua{streams.flush("#1",true)}}} diff --git a/tex/context/base/page-txt.mkvi b/tex/context/base/page-txt.mkvi index c86597338..241461ec0 100644 --- a/tex/context/base/page-txt.mkvi +++ b/tex/context/base/page-txt.mkvi @@ -430,6 +430,9 @@       \global\setfalse\resyncaftertextline     \fi} +\def\getspecificlayouttext#vertical#horizontal#what% +  {\csname\namedlayoutelementhash{#vertical:#horizontal}#what\endcsname} +  % \settext[header][text][middle][xxx][yyy]  \def\settextcontent @@ -474,8 +477,6 @@  %D macros. These are hooked into the general purpose token  %D list registers mentioned before. -\def\ignoredlinebreak{\unskip\space\ignorespaces} -  \def\page_layouts_place_text_line_indeed#vertical#height%    {\let\currentlayouttextline#vertical%     \ifdim#height>\zeropoint\relax  % prevents pagenumbers when zero height @@ -693,26 +694,26 @@  % associated. This is a rather messy test but better than the MkII  % way where we use states and keep settings. -\let\m_page_layouts_page_number_location_  \relax -\let\m_page_layouts_page_number_location__v\relax -\let\m_page_layouts_page_number_location__h\relax -\let\m_page_layouts_page_number_location__x\relax +\let\m_page_layouts_page_number_location  \relax +\let\m_page_layouts_page_number_location_v\relax +\let\m_page_layouts_page_number_location_h\relax +\let\m_page_layouts_page_number_location_x\relax  \def\page_layouts_place_page_number % also elsewhere .. beware, not \unexpanded else    {\placelocationpagenumber}  % test below fails  \def\page_layouts_reset_page_number_location -  {\ifx\m_page_layouts_page_number_location__v\relax\else -     \edef\currentlayoutelement{\m_page_layouts_page_number_location__v:\m_page_layouts_page_number_location__h}% -     \edef\page_layouts_previous_page_number_locator{\detokenizedlayoutelementparameter\m_page_layouts_page_number_location__x}% +  {\ifx\m_page_layouts_page_number_location_v\relax\else +     \edef\currentlayoutelement{\m_page_layouts_page_number_location_v:\m_page_layouts_page_number_location_h}% +     \edef\page_layouts_previous_page_number_locator{\detokenizedlayoutelementparameter\m_page_layouts_page_number_location_x}%       \doif{\meaning\page_layouts_previous_page_number_locator}{\meaning\page_layouts_place_page_number} -       {\resetlayoutelementparameter\m_page_layouts_page_number_location__x}% +       {\resetlayoutelementparameter\m_page_layouts_page_number_location_x}%     \fi}  \def\page_layouts_set_page_number_location -  {\edef\currentlayoutelement{\m_page_layouts_page_number_location__v:\m_page_layouts_page_number_location__h}% -   \letlayoutelementparameter\m_page_layouts_page_number_location__x\page_layouts_place_page_number -   \ifx\m_page_layouts_page_number_location__x\c!marginedgetext +  {\edef\currentlayoutelement{\m_page_layouts_page_number_location_v:\m_page_layouts_page_number_location_h}% +   \letlayoutelementparameter\m_page_layouts_page_number_location_x\page_layouts_place_page_number +   \ifx\m_page_layouts_page_number_location_x\c!marginedgetext       \let\page_layouts_place_extra_text_left \page_layouts_place_page_number_left       \let\page_layouts_place_extra_text_right\page_layouts_place_page_number_right     \else @@ -721,38 +722,39 @@     \fi}  \def\page_layouts_identify_page_number_location -  {\let\m_page_layouts_page_number_location__v\v!footer -   \let\m_page_layouts_page_number_location__h\v!text -   \let\m_page_layouts_page_number_location__x\c!middletext -   \processallactionsinset[\@@nmlocation] -     [    \v!header=>\let\m_page_layouts_page_number_location__v\v!header, -          \v!footer=>\let\m_page_layouts_page_number_location__v\v!footer, -          \v!middle=>\let\m_page_layouts_page_number_location__h\v!text -                     \let\m_page_layouts_page_number_location__x\c!middletext, -            \v!left=>\let\m_page_layouts_page_number_location__h\v!text -                     \let\m_page_layouts_page_number_location__x\c!lefttext, -           \v!right=>\let\m_page_layouts_page_number_location__h\v!text -                     \let\m_page_layouts_page_number_location__x\c!righttext, -          \v!inleft=>\let\m_page_layouts_page_number_location__h\v!margin -                     \let\m_page_layouts_page_number_location__x\c!lefttext, -         \v!inright=>\let\m_page_layouts_page_number_location__h\v!margin -                     \let\m_page_layouts_page_number_location__x\c!righttext, -        \v!inmargin=>\let\m_page_layouts_page_number_location__h\v!margin -                     \def\m_page_layouts_page_number_location__x{\ifdoublesided\c!margintext\else\c!righttext\fi}, -          \v!margin=>\let\m_page_layouts_page_number_location__h\v!margin -                     \def\m_page_layouts_page_number_location__x{\ifdoublesided\c!margintext\else\c!righttext\fi}, -        \v!atmargin=>\let\m_page_layouts_page_number_location__h\v!text -                     \let\m_page_layouts_page_number_location__x\c!marginedgetext, -      \v!marginedge=>\let\m_page_layouts_page_number_location__h\v!text -                     \let\m_page_layouts_page_number_location__x\c!marginedgetext]} +  {\let\m_page_layouts_page_number_location_v\v!footer +   \let\m_page_layouts_page_number_location_h\v!text +   \let\m_page_layouts_page_number_location_x\c!middletext +   \processallactionsinset[\directpagenumberingparameter\c!location] +     [    \v!header=>\let\m_page_layouts_page_number_location_v\v!header, +          \v!footer=>\let\m_page_layouts_page_number_location_v\v!footer, +          \v!middle=>\let\m_page_layouts_page_number_location_h\v!text +                     \let\m_page_layouts_page_number_location_x\c!middletext, +            \v!left=>\let\m_page_layouts_page_number_location_h\v!text +                     \let\m_page_layouts_page_number_location_x\c!lefttext, +           \v!right=>\let\m_page_layouts_page_number_location_h\v!text +                     \let\m_page_layouts_page_number_location_x\c!righttext, +          \v!inleft=>\let\m_page_layouts_page_number_location_h\v!margin +                     \let\m_page_layouts_page_number_location_x\c!lefttext, +         \v!inright=>\let\m_page_layouts_page_number_location_h\v!margin +                     \let\m_page_layouts_page_number_location_x\c!righttext, +        \v!inmargin=>\let\m_page_layouts_page_number_location_h\v!margin +                     \def\m_page_layouts_page_number_location_x{\ifdoublesided\c!margintext\else\c!righttext\fi}, +          \v!margin=>\let\m_page_layouts_page_number_location_h\v!margin +                     \def\m_page_layouts_page_number_location_x{\ifdoublesided\c!margintext\else\c!righttext\fi}, +        \v!atmargin=>\let\m_page_layouts_page_number_location_h\v!text +                     \let\m_page_layouts_page_number_location_x\c!marginedgetext, +      \v!marginedge=>\let\m_page_layouts_page_number_location_h\v!text +                     \let\m_page_layouts_page_number_location_x\c!marginedgetext]}  \unexpanded\def\dosetpagenumberlocation -  {\ifx\@@nmlocation\m_page_layouts_page_number_location_ +  {\edef\p_page_numbering_location{\directpagenumberingparameter\c!location}% +   \ifx\p_page_numbering_location\m_page_layouts_page_number_location        % unchanged     \else -     \let\m_page_layouts_page_number_location_\@@nmlocation +     \let\m_page_layouts_page_number_location\p_page_numbering_location       \page_layouts_reset_page_number_location -     \ifx\@@nmlocation\empty +     \ifx\p_page_numbering_location\empty         % set otherwise       \else         \page_layouts_identify_page_number_location @@ -764,9 +766,12 @@    {\begingroup     \setbox\scratchbox\hbox{\ignorespaces\layoutelementparameter\c!marginedgetext\removeunwantedspaces}%     \ifzeropt\wd\scratchbox\else -     \doifelsenothing\@@nmwidth -       {\box\scratchbox\tfskip} -       {\hbox to \@@nmwidth{\box\scratchbox\hss}}% +     \edef\p_page_numbering_width{\directpagenumberingparameter\c!width}% +     \ifx\p_page_numbering_width\empty +       \box\scratchbox\tfskip +     \else +       \hbox to \p_page_numbering_width{\box\scratchbox\hss}% +     \fi     \fi     \endgroup} @@ -774,9 +779,12 @@    {\begingroup     \setbox\scratchbox\hbox{\ignorespaces\layoutelementparameter\c!marginedgetext\removeunwantedspaces}%     \ifzeropt\wd\scratchbox\else -     \doifelsenothing\@@nmwidth -       {\tfskip\box\scratchbox} -       {\hbox to \@@nmwidth{\hss\box\scratchbox}}% +     \edef\p_page_numbering_width{\directpagenumberingparameter\c!width}% +     \ifx\p_page_numbering_width\empty +       \tfskip\box\scratchbox +     \else +       \hbox to \p_page_numbering_width{\hss\box\scratchbox}% +     \fi     \fi     \endgroup} diff --git a/tex/context/base/regi-ini.lua b/tex/context/base/regi-ini.lua index ec6f812cc..3440dd52d 100644 --- a/tex/context/base/regi-ini.lua +++ b/tex/context/base/regi-ini.lua @@ -234,6 +234,9 @@ function commands.stopregime()      end  end +commands.pushregime = regimes.push +commands.popregime  = regimes.pop +  -- obsolete:  --  -- function regimes.setsynonym(synonym,target) diff --git a/tex/context/base/scrn-pag.mkvi b/tex/context/base/scrn-pag.mkvi index 66f197ffd..5bbdadda8 100644 --- a/tex/context/base/scrn-pag.mkvi +++ b/tex/context/base/scrn-pag.mkvi @@ -150,12 +150,6 @@        {\global\setfalse\c_scrn_canvas_tight_page}%  \to \everysetupinteractionscreen -\appendtoks -  \doifelse\@@pcstate\v!start -    \scrn_canvas_synchronize_simple -    \scrn_canvas_synchronize_complex -\to \everyshipout -  \setupinteractionscreen    [\c!width=\printpaperwidth,     \c!height=\printpaperheight, diff --git a/tex/context/base/scrn-wid.lua b/tex/context/base/scrn-wid.lua index 6fdc4fca0..14d58a29a 100644 --- a/tex/context/base/scrn-wid.lua +++ b/tex/context/base/scrn-wid.lua @@ -167,11 +167,19 @@ function renderings.rendering(label)      end  end -function renderings.var(label,key) +local function var(label,key)      local rn = renderings[label] -    context(rn and rn[key] or "") +    return rn and rn[key] or ""  end +renderings.var = var + +function commands.renderingvar(label,key) +    context(var(label,key)) +end + +commands.registerrendering = renderings.register +  -- Rendering:  function commands.insertrenderingwindow(specification) diff --git a/tex/context/base/scrn-wid.mkvi b/tex/context/base/scrn-wid.mkvi index 2b75f83cd..610f1e7b9 100644 --- a/tex/context/base/scrn-wid.mkvi +++ b/tex/context/base/scrn-wid.mkvi @@ -483,10 +483,8 @@  % todo: dedicated margin classes -\def\scrn_comment_place -  {\executeifdefined -     {\??commentlocation\commentparameter\c!location}\hbox -     {\hbox{\box\b_scrn_comment_link}}} +\unexpanded\def\scrn_comment_place +  {\hbox{\expandcheckedcsname\??commentlocation{\commentparameter\c!location}\s!unknown}}  \setvalue{\??commentlocation\v!inmargin   }{\inmargin     }  \setvalue{\??commentlocation\v!leftedge   }{\inleftedge   } @@ -495,6 +493,12 @@  \setvalue{\??commentlocation\v!rightmargin}{\inrightmargin}  \setvalue{\??commentlocation\v!high       }{\high}  \setvalue{\??commentlocation\v!none       }{\scrn_comment_collect} +\setvalue{\??commentlocation\s!unknown    }{\scrn_comment_flush_collect} + +\unexpanded\def\scrn_comment_flush_collect +  {\ifvoid\b_scrn_comment_collect\else +     \box\b_scrn_comment_collect +   \fi}  \def\scrn_comment_collect#content%    {\global\setbox\b_scrn_comment_collect\hbox\bgroup @@ -505,10 +509,7 @@       #content%     \egroup} -\unexpanded\def\placecomments -  {\ifvoid\b_scrn_comment_collect\else -     \box\b_scrn_comment_collect -   \fi} +\let\placecomments\scrn_comment_flush_collect  \definecomment[comment] @@ -529,6 +530,13 @@  %D Todo: like external figures, also search on path,  %D although, they need to be present ar viewing time, so ... +\installcorenamespace{externalsoundtracks} + +\installsetuponlycommandhandler \??externalsoundtracks {externalsoundtracks} + +\setupexternalsoundtracks +  [\c!option=] +  \unexpanded\def\useexternalsoundtrack    {\dodoubleargument\scrn_soundtrack_indeed} @@ -541,17 +549,11 @@  \def\checksoundtrack#tag% yet untested in mkiv (also move management to lua)    {\iflocation       \ctxcommand{insertsoundclip{ -       tag    = "#tag", -       repeat = "\@@sdoption", % not entirely ok but works +       tag        = "#tag", +       ["repeat"] = "\directexternalsoundtrackparameter\c!option", % todo: pass option as-is        }}%     \fi} -\unexpanded\def\setupexternalsoundtracks -  {\dodoubleargument\getparameters[\??sd]} - -\setupexternalsoundtracks -  [\c!option=] -  %D Renderings (not yet tested in mkvi):  % Todo: multiple instances and inheritance .. will be done when @@ -568,7 +570,7 @@  \def\setinternalrendering{\dodoubleempty   \scrn_rendering_set}  \def\scrn_rendering_use[#tag][#mime][#file][#option]% -  {\ctxlua{interactions.renderings.register { +  {\ctxcommand{registerrendering{        type     = "external",        label    = "#tag",        mime     = "#mime", @@ -579,7 +581,7 @@  \def\scrn_rendering_set[#tag][#option]% {content}    {\bgroup     \dowithnextbox -     {\ctxlua{interactions.renderings.register { +     {\ctxcommand{registerrendering{           type     = "internal",           label    = "#tag",           mime     = "IRO", % brrr @@ -591,28 +593,24 @@        \egroup}%       \hbox} -\def\renderingtype  #tag{\ctxlua{interactions.renderings.var("#tag","type")}} -\def\renderingoption#tag{\ctxlua{interactions.renderings.var("#tag","option")}} +\def\renderingtype  #tag{\ctxcommand{renderingvar("#tag","type")}} +\def\renderingoption#tag{\ctxcommand{renderingvar("#tag","option")}} -\def\renderingwidth {8cm} % will become private -\def\renderingheight{6cm} % will become private +\newdimen\d_scrn_rendering_width  \d_scrn_rendering_width  8cm +\newdimen\d_scrn_rendering_height \d_scrn_rendering_height 6cm -\unexpanded\def\definerenderingwindow -  {\dodoubleempty\scrn_rendering_define_window} +\let\m_scrn_rendering_page\!!zerocount -\def\scrn_rendering_define_window[#tag][#settings]% -  {\presetlocalframed[\??rw#tag]% -   \getparameters -     [\??rw#tag]% -     [\c!openpageaction=,\c!closepageaction=,% -      \c!width=\renderingwidth,\c!height=\renderingheight,% -      #settings]} +\installcorenamespace{renderingwindow} -\unexpanded\def\setuprenderingwindow -  {\dodoubleargument\scrn_rendering_setup_window} +\installframedcommandhandler \??renderingwindow {renderingwindow} \??renderingwindow -\def\scrn_rendering_setup_window[#tag]% -  {\getparameters[\??rw#tag]} +\appendtoks +    \letrenderingwindowparameter\c!openpageaction \empty +    \letrenderingwindowparameter\c!closepageaction\empty +    \setrenderingwindowparameter\c!width          {\d_scrn_rendering_width }% +    \setrenderingwindowparameter\c!height         {\d_scrn_rendering_height}% +\to \everypresetrenderingwindow  \unexpanded\def\placerenderingwindow    {\dodoubleempty\scrn_rendering_place_window} @@ -622,31 +620,32 @@     \edef\currentrendering{\ifsecondargument#rendering\else#window\fi}%     \doifelse{\renderingtype\currentrendering}{internal} % an object       {\getobjectdimensions{IRO}\currentrendering -      \edef\renderingheight{\the\dimexpr\objectheight+\objectdepth\relax}% -      \edef\renderingwidth{\objectwidth}% -      \dogetobjectreferencepage{IRO}\currentrendering\renderingpage}% -     {\def\renderingheight{\vsize}% -      \def\renderingwidth{\hsize}% -      \def\renderingpage{\realpageno}}% +      \d_scrn_rendering_height\dimexpr\objectheight+\objectdepth\relax +      \d_scrn_rendering_width\objectwidth\relax +      \dogetobjectreferencepage{IRO}\currentrendering\m_scrn_rendering_page}% +     {\d_scrn_rendering_height\vsize +      \d_scrn_rendering_width\hsize +      \let\m_scrn_rendering_page\realpageno}%     % create fall back if needed -   \ifcsname\??rw#window\c!width\endcsname -     \def\currentrenderingwindow{#window}% -   \else +   \edef\currentrenderingwindow{\namedrenderingwindowparameter{#window}\c!width}% stupid test, we need a proper one here +   \ifx\currentrenderingwindow\empty       \let\currentrenderingwindow\s!default -     \definerenderingwindow[\currentrenderingwindow]% +     \definerenderingwindow[\currentrenderingwindow]% why not global +   \else +     \edef\currentrenderingwindow{#window}%     \fi -% todo -%    \handlereferenceactions{\getvalue{\??rw\currentrenderingwindow\c!openpageaction }}\dosetuprenderingopenpageaction -%    \handlereferenceactions{\getvalue{\??rw\currentrenderingwindow\c!closepageaction}}\dosetuprenderingclosepageaction -   \localframed -     [\??rw\currentrenderingwindow][\c!offset=\v!overlay]% + % todo: + % \handlereferenceactions{\renderingwindowparameter\c!openpageaction }\dosetuprenderingopenpageaction + % \handlereferenceactions{\renderingwindowparameter\c!closepageaction}\dosetuprenderingclosepageaction +   \letrenderingwindowparameter\c!offset\v!overlay +   \inheritedrenderingwindowframed       {\vfill        \ctxcommand{insertrenderingwindow {          label  = "\currentrendering", -        width  = \number\dimexpr\renderingwidth\relax, -        height = \number\dimexpr\renderingheight\relax, +        width  = \number\d_scrn_rendering_width, +        height = \number\d_scrn_rendering_height,          option = "\renderingoption\currentrendering", -        page   = \number\renderingpage, +        page   = \number\m_scrn_rendering_page,        }}\hfill}%     \egroup} @@ -662,6 +661,8 @@  % %D \dorecurse{10}{\linkedlistelement[demo]{link \recurselevel} \page}  % %D \stoptyping  % +% \definesystemvariable {lk}   % LinK +%  % \installcommandhandler\??lk{linkedlist}\??lk  %  % \let\setupbutton\setuplinkedlists\setuplinkedlist diff --git a/tex/context/base/spac-def.mkiv b/tex/context/base/spac-def.mkiv index ea537aea7..0e2333045 100644 --- a/tex/context/base/spac-def.mkiv +++ b/tex/context/base/spac-def.mkiv @@ -21,29 +21,37 @@  % maybe \everysynchronizeglobalspacing  % maybe \everysynchronizelocalspacing -\appendtoks \forgetverticalstretch     \to \everybodyfont -\appendtoks \presetnormallineheight    \to \everybodyfont -\appendtoks \setnormalbaselines        \to \everybodyfont % check if redundant (\forgetverticalstretch does it too) -\appendtoks \setstrut                  \to \everybodyfont % check if redundant (\forgetverticalstretch does it too) -\appendtoks \settopskip                \to \everybodyfont % factors set in \forgetverticalstretch -\appendtoks \setmaxdepth               \to \everybodyfont % factors set in \forgetverticalstretch -\appendtoks \synchronizeindenting      \to \everybodyfont -\appendtoks \synchronizeblank          \to \everybodyfont -\appendtoks \synchronizewhitespace     \to \everybodyfont -\appendtoks \synchronizespacecodes     \to \everybodyfont % not needed, frozen factors -\appendtoks \setrelativeinterlinespace \to \everybodyfont +\appendtoks +    \forgetverticalstretch +    \presetnormallineheight +    \setnormalbaselines         % check if redundant (\forgetverticalstretch does it too) +    \setstrut                   % check if redundant (\forgetverticalstretch does it too) +    \settopskip                 % factors set in \forgetverticalstretch +    \setmaxdepth                % factors set in \forgetverticalstretch +    \synchronizeindenting +    \synchronizeblank +    \synchronizewhitespace +    \synchronizespacecodes      % not needed, frozen factors +    \setrelativeinterlinespace +\to \everybodyfont  % why exception -\appendtoks  \updateraggedskips        \to \everyfontswitch     % under test +\appendtoks +    \updateraggedskips          % under test +\to \everyfontswitch  % maybe more -\prependtoks \let\par\normalpar        \to \everybeforepagebody % see \fillinline (was endgraf) +\prependtoks +    \let\par\normalpar +\to \everybeforepagebody % see \fillinline (was endgraf)  % needs checking: -\appendtoks  \synchronizespacecodes    \to \everydefinedfont    % not needed, frozen factors +\appendtoks +    \synchronizespacecodes +\to \everydefinedfont    % not needed, frozen factors  \setupinterlinespace    [\c!minheight=\zeropoint, % only special purpose diff --git a/tex/context/base/spac-grd.mkiv b/tex/context/base/spac-grd.mkiv index cf350fdb6..369c147e3 100644 --- a/tex/context/base/spac-grd.mkiv +++ b/tex/context/base/spac-grd.mkiv @@ -11,7 +11,7 @@  %C therefore copyrighted by \PRAGMA. See mreadme.pdf for  %C details. -%D This module will be merged intio spac-ver.mkiv. +%D This module will be merged into spac-ver.mkiv.  \writestatus{loading}{ConTeXt Spacing Macros / Grid Snapping} @@ -142,7 +142,9 @@  \def\showbaselinecorrection    {\def\dobaselinecorrection % visualization is not watertight!       {\bgroup -\ifdim\prevdepth>\zeropoint\kern-\prevdepth\fi +      \ifdim\prevdepth>\zeropoint +        \kern-\prevdepth +      \fi        \setbox\scratchbox\emptyhbox        \wd\scratchbox\hsize        \dp\scratchbox\strutdp diff --git a/tex/context/base/spac-hor.mkiv b/tex/context/base/spac-hor.mkiv index 49187a6ad..18460b1c6 100644 --- a/tex/context/base/spac-hor.mkiv +++ b/tex/context/base/spac-hor.mkiv @@ -417,7 +417,7 @@  \appendtoks      \let~\space      \let\ \space -\to \simplifiedcommands +\to \everysimplifycommands  \unexpanded\def\removeunwantedspaces    {\ifhmode @@ -987,4 +987,8 @@  \unexpanded\def\medglue  {\spac_glues_text_or_math\medmuskip  \v!medium}  \unexpanded\def\thickglue{\spac_glues_text_or_math\thickmuskip\v!big} +%D For the moment here (used in page-txt): + +\unexpanded\def\ignoredlinebreak{\unskip\space\ignorespaces} +  \protect \endinput diff --git a/tex/context/base/spac-ver.mkiv b/tex/context/base/spac-ver.mkiv index e404dc9ef..f3dd5eafe 100644 --- a/tex/context/base/spac-ver.mkiv +++ b/tex/context/base/spac-ver.mkiv @@ -1259,7 +1259,6 @@  \definesystemattribute[skipcategory] [public]  \definesystemattribute[skippenalty]  [public]  \definesystemattribute[skiporder]    [public] -\definesystemattribute[displaymath]  [public]  \definesystemattribute[snapmethod]   [public]  \definesystemattribute[snapvbox]     [public]  %definesystemattribute[snapcategory] [public] @@ -1868,4 +1867,56 @@       \relax     \fi} +%D Some preliminary code: a simple and fast hanger, for usage in +%D macros (moved from cont-new). + +\installcorenamespace {hanging} + +\installdirectcommandhandler \??hanging {hanging} + +\setuphanging +  [\c!distance=.5em] + +\unexpanded\def\starthanging +  {\noindent\bgroup +   \dowithnextboxcs\spac_hanging_finish\hbox} + +\def\spac_hanging_finish +  {\setbox\nextbox\hbox +    {\box\nextbox +     \hskip\directhangingparameter\c!distance}% +   \hangindent\wd\nextbox +   \hangafter\plusone +   \box\nextbox +   \ignorespaces} + +\unexpanded\def\stophanging +  {\endgraf +   \egroup} + +\unexpanded\def\starthangaround +  {\noindent\bgroup +   \dowithnextboxcs\spac_hanging_around_finish\hbox} + +\def\spac_hanging_around_finish +  {\ifdim\nextboxht>\strutht +     \setbox\nextbox\tbox +       {\box\nextbox}% +   \fi +   \setbox\nextbox\hbox +     {\box\nextbox +      \hskip\directhangingparameter\c!distance}% +   \getboxheight\scratchdimen\of\box\nextbox +   \getnoflines\scratchdimen +   \ht\nextbox\strutht +   \dp\nextbox\strutdp +   \hangindent\wd\nextbox +   \hangafter-\noflines +   \llap{\box\nextbox}% +   \ignorespaces} + +\unexpanded\def\stophangaround +  {\endgraf +   \egroup} +  \protect \endinput diff --git a/tex/context/base/status-files.pdf b/tex/context/base/status-files.pdf Binary files differindex 5c835ba6f..2a6807dc6 100644 --- a/tex/context/base/status-files.pdf +++ b/tex/context/base/status-files.pdf diff --git a/tex/context/base/status-lua.pdf b/tex/context/base/status-lua.pdf Binary files differindex 9a2a5fefd..273b84d23 100644 --- a/tex/context/base/status-lua.pdf +++ b/tex/context/base/status-lua.pdf diff --git a/tex/context/base/status-mkiv.lua b/tex/context/base/status-mkiv.lua index 3da404199..094859290 100644 --- a/tex/context/base/status-mkiv.lua +++ b/tex/context/base/status-mkiv.lua @@ -190,9 +190,9 @@ return {              status   = "okay",          },          { -            filename = "core-var", +            filename = "core-ini",              marktype = "mkiv", -            status   = "unknown", +            status   = "okay",              comment  = "code might move from here",          },          { @@ -279,13 +279,13 @@ return {       -- {       --     filename = "supp-vis",       --     marktype = "mkiv", -     --     status   = "unknown", +     --     status   = "todo",       --     comment  = "will become a module (and part will stay in the core)",       -- },       -- {       --     filename = "supp-fun",       --     marktype = "mkiv", -     --     status   = "unknown", +     --     status   = "todo",       --     comment  = "will be integrated elsewhere",       -- },          { @@ -314,7 +314,8 @@ return {          {              filename = "page-ins",              marktype = "mkiv", -            status   = "unknown", +            status   = "okay", +            comment  = "dealing with insertions might change",          },          {              filename = "file-syn", @@ -468,8 +469,8 @@ return {          {              filename = "pack-mrl",              marktype = "mkiv", -            status   = "todo", -            comment  = "this is something to be done on a rainy day" +            status   = "okay", +            comment  = "endpar experimental code"          },          {              filename = "pack-bck", @@ -509,17 +510,18 @@ return {          {              filename = "strc-doc",              marktype = "mkiv", -            status   = "unknown", +            status   = "todo",          },          {              filename = "strc-num",              marktype = "mkiv", -            status   = "unknown", +            status   = "okay", +            comment  = "still some rough edges",          },          {              filename = "strc-mar",              marktype = "mkiv", -            status   = "unknown", +            status   = "okay",          },          {              filename = "strc-sbe", @@ -534,17 +536,17 @@ return {          {              filename = "strc-sec",              marktype = "mkiv", -            status   = "unknown", +            status   = "todo",          },          {              filename = "strc-pag",              marktype = "mkiv", -            status   = "unknown", +            status   = "todo",          },          {              filename = "strc-ren",              marktype = "mkiv", -            status   = "unknown", +            status   = "todo",          },          {              filename = "strc-xml", @@ -555,7 +557,7 @@ return {          {              filename = "strc-def",              marktype = "mkiv", -            status   = "unknown", +            status   = "todo",          },          {              filename = "strc-ref", @@ -566,7 +568,7 @@ return {          {              filename = "strc-reg",              marktype = "mkiv", -            status   = "unknown", +            status   = "todo",          },          {              filename = "strc-lev", @@ -611,12 +613,12 @@ return {          {              filename = "spac-def",              marktype = "mkiv", -            status   = "unknown", +            status   = "todo",          },          {              filename = "spac-grd",              marktype = "mkiv", -            status   = "unknown", +            status   = "todo",              comment  = "needs thinking and redoing",          },          { @@ -651,27 +653,27 @@ return {          {              filename = "strc-con",              marktype = "mkiv", -            status   = "unknown", +            status   = "todo",          },          {              filename = "strc-des",              marktype = "mkiv", -            status   = "unknown", +            status   = "todo",          },          {              filename = "strc-enu",              marktype = "mkiv", -            status   = "unknown", +            status   = "todo",          },          {              filename = "strc-ind",              marktype = "mkiv", -            status   = "unknown", +            status   = "okay",          },          {              filename = "strc-lab",              marktype = "mkiv", -            status   = "unknown", +            status   = "todo",          },          {              filename = "core-sys", @@ -682,7 +684,7 @@ return {          {              filename = "page-var",              marktype = "mkiv", -            status   = "unknown", +            status   = "okay",          },          {              filename = "page-otr", @@ -698,7 +700,7 @@ return {          {              filename = "page-fac",              marktype = "mkiv", -            status   = "unknown", +            status   = "okay",          },          {              filename = "page-brk", @@ -709,7 +711,8 @@ return {          {              filename = "page-col",              marktype = "mkiv", -            status   = "unknown", +            status   = "okay", +            comment  = "helpers for columns",          },          {              filename = "page-inf", @@ -720,12 +723,13 @@ return {          {              filename = "page-grd",              marktype = "mkiv", -            status   = "unknown", +            status   = "okay",          },          {              filename = "page-flt",              marktype = "mkiv", -            status   = "unknown", +            status   = "okay", +            comment  = "will be extended when columns are redone",          },          {              filename = "page-bck", @@ -735,7 +739,7 @@ return {          {              filename = "page-not",              marktype = "mkiv", -            status   = "unknown", +            status   = "todo",          },          {              filename = "page-one", @@ -757,6 +761,7 @@ return {              filename = "page-txt",              marktype = "mkvi",              status   = "okay", +            comment  = "a few things left",          },          {              filename = "page-sid", @@ -766,12 +771,12 @@ return {          {              filename = "strc-flt",              marktype = "mkvi", -            status   = "unknown", +            status   = "todo",          },          { -            filename = "page-mis", +            filename = "page-pst",              marktype = "mkiv", -            status   = "unknown", +            status   = "okay",          },          {              filename = "page-mbk", @@ -782,12 +787,14 @@ return {          {              filename = "page-mul",              marktype = "mkiv", -            status   = "unknown", +            status   = "todo", +            comment  = "will be reimplemented",          },          {              filename = "page-set",              marktype = "mkiv", -            status   = "unknown", +            status   = "todo", +            comment  = "will be reimplemented",          },          {              filename = "pack-lyr", @@ -807,7 +814,8 @@ return {          {              filename = "page-lin",              marktype = "mkiv", -            status   = "unknown", +            status   = "okay", +            comment  = "will probably be overhauled some day"          },          {              filename = "page-par", @@ -881,17 +889,18 @@ return {          {              filename = "page-imp",              marktype = "mkiv", -            status   = "unknown", +            status   = "okay",          },          {              filename = "page-sel", -            marktype = "mkiv", -            status   = "unknown", +            marktype = "mkvi", +            status   = "okay", +            comment  = "maybe some extensions and maybe delayed loading, needs checking",          },          {              filename = "page-com",              marktype = "mkiv", -            status   = "unknown", +            status   = "okay",          },          {              filename = "scrn-pag", @@ -903,7 +912,7 @@ return {              filename = "scrn-wid",              marktype = "mkvi",              status   = "okay", -            comment  = "namespace needs checking" +            comment  = "functionality needs checking"          },          {              filename = "scrn-but", @@ -937,7 +946,7 @@ return {          {              filename = "tabl-tab",              marktype = "mkiv", -            status   = "unknown", +            status   = "delayed",          },          {              filename = "tabl-tbl", @@ -964,7 +973,7 @@ return {          {              filename = "tabl-ltb",              marktype = "mkiv", -            status   = "unknown", +            status   = "delayed",              comment  = "will be redone when needed",          },          { @@ -1237,22 +1246,24 @@ return {          {              filename = "page-flw",              marktype = "mkiv", -            status   = "unknown", +            status   = "okay",          },          {              filename = "page-spr",              marktype = "mkiv", -            status   = "unknown", +            status   = "okay",          },          {              filename = "page-plg",              marktype = "mkiv", -            status   = "unknown", +            status   = "okay", +            comment  = "will be made better",          },          {              filename = "page-str",              marktype = "mkiv", -            status   = "unknown", +            status   = "okay", +            comment  = "needs more work (and thinking)",          },          {              filename = "anch-pgr", @@ -1269,7 +1280,8 @@ return {          {              filename = "anch-tab",              marktype = "mkiv", -            status   = "unknown", +            status   = "okay", +            comment  = "will stay experimental for a while",          },          {              filename = "anch-bar", @@ -1279,7 +1291,7 @@ return {          {              filename = "anch-snc",              marktype = "mkiv", -            status   = "unknown", +            status   = "delayed",              comment  = "interesting old mechanism to keep around (module?)",          },          { @@ -1296,7 +1308,7 @@ return {          {              filename = "math-for",              marktype = "mkiv", -            status   = "unknown", +            status   = "okay",          },          {              filename = "math-def", @@ -1307,12 +1319,14 @@ return {          {              filename = "math-ali",              marktype = "mkiv", -            status   = "unknown", +            status   = "okay", +            commend  = "will be checked and improved",          },          {              filename = "math-arr",              marktype = "mkiv", -            status   = "unknown", +            status   = "okay", +            comment  = "needs testing",          },          {              filename = "math-frc", @@ -1356,7 +1370,8 @@ return {          {              filename = "strc-mat",              marktype = "mkiv", -            status   = "unknown", +            status   = "okay", +            comment  = "some more functionality will end up here",          },          {              filename = "chem-ini", @@ -1376,7 +1391,7 @@ return {       -- {       --     filename = "core-fnt",       --     marktype = "mkiv", -     --     status   = "unknown", +     --     status   = "todo",       -- },          {              filename = "node-rul", @@ -1393,17 +1408,17 @@ return {          {              filename = "strc-not",              marktype = "mkiv", -            status   = "unknown", +            status   = "todo",          },          {              filename = "strc-lnt",              marktype = "mkiv", -            status   = "unknown", +            status   = "todo",          },       -- {       --     filename = "core-mis",       --     marktype = "mkiv", -     --     status   = "unknown", +     --     status   = "todo",       -- },          {              filename = "pack-com", @@ -1419,7 +1434,6 @@ return {              filename = "grph-trf",              marktype = "mkiv",              status   = "okay", -            comment  = "namespace has to be made consistent"          },          {              filename = "grph-inc", @@ -1465,12 +1479,12 @@ return {          {              filename = "bibl-bib",              marktype = "mkiv", -            status   = "unknown", +            status   = "delayed",          },          {              filename = "bibl-tra",              marktype = "mkiv", -            status   = "unknown", +            status   = "delayed",          },          {              filename = "meta-xml", @@ -1504,14 +1518,10 @@ return {              status   = "okay",          },          { -            filename = "core-ini", -            marktype = "mkiv", -            status   = "unknown", -        }, -        {              filename = "core-def",              marktype = "mkiv", -            status   = "unknown", +            status   = "okay", +            comment  = "will always be messy",          },          {              filename = "back-pdf", diff --git a/tex/context/base/status-mkiv.tex b/tex/context/base/status-mkiv.tex index 99c281c00..b01ba8c86 100644 --- a/tex/context/base/status-mkiv.tex +++ b/tex/context/base/status-mkiv.tex @@ -24,7 +24,7 @@    [\currentdate][MkIV Status / Page \pagenumber]  % \showmakeup -\showallmakeup +% \showallmakeup  \starttext @@ -51,13 +51,14 @@                 name \stopitem      \startitem the message system will be unified \stopitem      \startitem maybe rename dowhatevertexcommand to fromluawhatevertexcommand \stopitem - +    \startitem consider moving setups directly to lua end (e.g. in characterspacing, breakpoint, bitmaps etc.) \stopitem  \stopitemize  \stoptitle -\definehighlight[notabene][color=darkred, style=bold] -\definehighlight[notamark][color=darkblue,style=bold] +\definehighlight[notabenered]   [color=darkred,   style=bold] +\definehighlight[notabeneblue]  [color=darkblue,  style=bold] +\definehighlight[notabeneyellow][color=darkyellow,style=bold]  \startluacode @@ -78,7 +79,8 @@              if loaded then -                local nofunknown = 0 +                local noftodo    = 0 +                local nofdelayed = 0                  local nofloaded  = #loaded                  local categories = { } @@ -90,7 +92,6 @@                      local l = loaded[i]                      l.order = i                      local category = string.match(l.filename,"([^%-]+)%-") or "module" -                    -- print("unknown category",category)                      local c = categories[category]                      c[#c+1] = l                  end @@ -124,14 +125,17 @@                              context.NC() context(module.filename)                              context.NC()                              if marktype == "mkvi" then -                                context.notamark(marktype) +                                context.notabeneblue(marktype)                              else                                  context(marktype)                              end                              context.NC() -                            if status == "unknown" then -                                context.notabene(status) -                                nofunknown = nofunknown + 1 +                            if status == "todo" then +                                context.notabenered(status) +                                noftodo = noftodo + 1 +                            elseif status == "delayed" then +                                context.notabeneyellow(status) +                                nofdelayed = nofdelayed + 1                              else                                  context(status)                              end @@ -151,9 +155,16 @@                  context.starttitle { title = string.format("summary of %s modules",what) } -                    context.starttabulate { "|B|l|" } +                    local nofdone = nofloaded - noftodo - nofdelayed + +                    context.starttabulate { "|B|r|" } +                    context.HL() +                    context.NC() context("done")    context.NC() context(nofdone)    context.NC() context.NR() +                    context.NC() context("todo")    context.NC() context(noftodo)    context.NC() context.NR() +                    context.NC() context("delayed") context.NC() context(nofdelayed) context.NC() context.NR() +                    context.HL()                      context.NC() context("loaded")  context.NC() context(nofloaded)  context.NC() context.NR() -                    context.NC() context("unknown") context.NC() context(nofunknown) context.NC() context.NR() +                    context.HL()                      context.stoptabulate()                  context.stoptitle() diff --git a/tex/context/base/strc-flt.mkvi b/tex/context/base/strc-flt.mkvi index 000b74831..06fd02bdc 100644 --- a/tex/context/base/strc-flt.mkvi +++ b/tex/context/base/strc-flt.mkvi @@ -595,7 +595,7 @@     \splitfloat{\strc_floats_place_next_box_normal}}  \unexpanded\def\strc_floats_place_next_box_normal -  {\ifsomefloatwaiting +  {\ifconditional\c_page_floats_some_waiting       % this was \checkwaitingfloats spread all over       \doifinsetelse\v!always\floatlocation         {\showmessage\m!floatblocks5\empty} @@ -703,19 +703,15 @@  % documenteren in details  \def\strc_floats_analyze_variables_one -  {\doifelse{\floatparameter\c!local}\v!yes % fout keyword -     \globalcenterfloatboxtrue -     \globalcenterfloatboxfalse -   \ifglobalcenterfloatbox -     \localcenterfloatboxtrue +  {\doifelse{\floatparameter\c!local}\v!yes\settrue\setfalse\c_page_floats_center_box_global % fout keyword +   \ifconditional\c_page_floats_center_box_global +     \settrue\c_page_floats_center_box_local     \else -     \doifinsetelse\v!local\floatlocation -       \localcenterfloatboxtrue -       \localcenterfloatboxfalse +     \doifinsetelse\v!local\floatlocation\settrue\setfalse\c_page_floats_center_box_local     \fi     \doifnotcommon{\v!always,\v!here,\v!force}\floatlocation % ! ! ! ! ! ! -     {\globalcenterfloatboxfalse -      \localcenterfloatboxfalse}} +     {\setfalse\c_page_floats_center_box_global +      \setfalse\c_page_floats_center_box_local}}  \let\naturalfloatheight\!!zeropoint  \let\naturalfloatwidth \!!zeropoint @@ -817,7 +813,7 @@     \global\insidefloatfalse}  % \def\strc_floats_set_local_hsize -%   {\iflocalcenterfloatbox +%   {\ifconditional\c_page_floats_center_box_local  %      \seteffectivehsize  %      \hsize\localhsize  %    \else @@ -830,7 +826,7 @@  \newdimen\availablefloatheight  \def\strc_floats_set_local_hsize -  {\iflocalcenterfloatbox +  {\ifconditional\c_page_floats_center_box_local       % also available check here?       \seteffectivehsize       \hsize\localhsize @@ -1171,7 +1167,7 @@     \dostoptagged     \blank[\rootfloatparameter\c!spaceafter]%     \strc_floats_end_text_group -   \doinsertfloatinfo} +   \page_floats_report_total}  \def\borderedfloatbox    {\begingroup @@ -1756,6 +1752,8 @@  %     test \placefigure{\input zapf\relax}{\externalfigure[cow.pdf][frame=on,grid=depth]} test \page  % \stoptext +% This might move to page-flt: +  \newif\ifpostponecolumnfloats \postponecolumnfloatsfalse % don't change  \setnewconstant\postcenterfloatmethod\plusone @@ -1774,9 +1772,9 @@     \global\setbox\floatbox\hbox to \scratchdimen     % {\hfill\box\floatbox\hfill}} % geen \hss, gaat mis in kolommen !     % {\hss  \box\floatbox\hss  }} % wel \hss, anders mis in colset -     {\ifglobalcenterfloatbox +     {\ifconditional\c_page_floats_center_box_global          \donetrue -      \else\iflocalcenterfloatbox +      \else\ifconditional\c_page_floats_center_box_local          \donetrue        \else          \donefalse @@ -1909,7 +1907,7 @@    {\ctxcommand{analysefloatmethod("#1")}}  \def\somesomewherefloat[#1]% -  {\dofloatssavesomewherefloat\s!somewhere{#1}} +  {\page_floats_save_somewhere_float\s!somewhere{#1}}  \def\strc_floats_get_box    {\ifvisible @@ -2072,45 +2070,49 @@  %D Local floats: -\def\setuplocalfloats -  {\getparameters[\??lf]} +\installcorenamespace{localfloats} +\installcorenamespace{localfloatstack} + +\installsetuponlycommandhandler \??localfloats {localfloats}  \setuplocalfloats    [%\c!before=\blank,     %\c!after=\blank,     \c!inbetween=\blank] -\initializeboxstack{localfloats} +\initializeboxstack\??localfloatstack -\newcounter\noflocalfloats +\newcounter\c_strc_localfloats_n -\def\resetlocalfloats -  {\doglobal\newcounter\noflocalfloats -   \initializeboxstack{localfloats}} +\unexpanded\def\resetlocalfloats +  {\global\c_strc_localfloats_n\zerocount +   \initializeboxstack\??localfloatstack} -\def\somelocalfloat -  {\doglobal\increment\noflocalfloats -   \savebox{localfloats}{\noflocalfloats}{\box\floatbox}} +\unexpanded\def\somelocalfloat +  {\global\advance\c_strc_localfloats_n\plusone +   \savebox\??localfloatstack{\number\c_strc_localfloats_n}{\box\floatbox}} -\def\getlocalfloats -  {\dorecurse\noflocalfloats +\unexpanded\def\getlocalfloats +  {\dorecurse\c_strc_localfloats_n       {\ifnum\recurselevel=\plusone % 1\relax -        \getvalue{\??lf\c!before}% +        \directlocalfloatsparameter\c!before        \else -        \getvalue{\??lf\c!inbetween}% +        \directlocalfloatsparameter\c!inbetween        \fi -      \dontleavehmode\hbox{\foundbox{localfloats}\recurselevel}% -      \ifnum\recurselevel=\noflocalfloats\relax -        \getvalue{\??lf\c!after}% +      \dontleavehmode\hbox{\foundbox\??localfloatstack\recurselevel}% +      \ifnum\recurselevel=\c_strc_localfloats_n\relax +        \directlocalfloatsparameter\c!after        \fi}}  \def\flushlocalfloats    {\getlocalfloats     \resetlocalfloats} -\unexpanded\def\getlocalfloat#1{\expanded{\foundbox{localfloats}{\number#1}}} +\unexpanded\def\getlocalfloat#1% +  {\normalexpanded{\foundbox{\??localfloatstack}{\number#1}}} -\def\forcelocalfloats{\let\forcedfloatmethod\v!local} +\unexpanded\def\forcelocalfloats +  {\let\forcedfloatmethod\v!local}  \installfloatmethod \s!singlecolumn \v!local \somelocalfloat  \installfloatmethod \s!multicolumn  \v!local \somelocalfloat diff --git a/tex/context/base/strc-ind.mkiv b/tex/context/base/strc-ind.mkiv index 4b65c7407..0098bff7d 100644 --- a/tex/context/base/strc-ind.mkiv +++ b/tex/context/base/strc-ind.mkiv @@ -57,6 +57,7 @@  \newcount\c_strc_indentedtexts_nesting  \newdimen\d_strc_indentedtexts_width +\newdimen\d_strc_indentedtexts_distance  \appendtoks     \setuevalue    {\e!start\currentindentedtext}{\strc_indentedtexts_start{\currentindentedtext}\c_strc_indentedtexts_nesting}% @@ -67,12 +68,13 @@     \setuevalue{\v!sub\v!sub\currentindentedtext}{\strc_indentedtexts_direct{\currentindentedtext}{2}}%  \to \everydefineindentedtext -\unexpanded\def\strc_indentedtexts_start#1#2% +\unexpanded\def\strc_indentedtexts_start#1#2% we need to get rid of \spr    {\par     \begingroup -   \c_strc_indentedtexts_nesting#2\relax     \edef\currentindentedtext{#1}% +   \c_strc_indentedtexts_nesting#2\relax     \indentedtextparameter\c!before +   \d_strc_indentedtexts_distance\indentedtextparameter\c!distance\relax     \doifnothing{\indentedtextparameter\c!sample}       {\setindentedtextparameter\c!sample{\indentedtextparameter\c!text}}%     \assignwidth @@ -81,15 +83,15 @@       {\useindentedtextstyleandcolor\c!headstyle\c!headcolor        \indentedtextparameter\c!sample        \spr{\indentedtextparameter\c!separator}} -     {\indentedtextparameter\c!distance}% -   \advance\d_strc_indentedtexts_width \indentedtextparameter\c!distance +     {\d_strc_indentedtexts_distance}% +   \advance\d_strc_indentedtexts_width \d_strc_indentedtexts_distance     \setbox\scratchbox\hbox to \d_strc_indentedtexts_width       {\useindentedtextstyleandcolor\c!headstyle\c!headcolor        \strut        \indentedtextparameter\c!text        \hss        \spr{\indentedtextparameter\c!separator}% -      \hskip\indentedtextparameter\c!distance}% +      \hskip\d_strc_indentedtexts_distance}%     \parindent\zeropoint     \hskip\c_strc_indentedtexts_nesting\d_strc_indentedtexts_width     \advance\c_strc_indentedtexts_nesting\plusone diff --git a/tex/context/base/strc-mat.mkiv b/tex/context/base/strc-mat.mkiv index a6763e27e..7cdc68a73 100644 --- a/tex/context/base/strc-mat.mkiv +++ b/tex/context/base/strc-mat.mkiv @@ -54,7 +54,7 @@  \defineconversionset    [\v!formula] -  [numbers,characters] +  [numbers,characters] % no \v! ?  \strc_counter_preset_using_parameter\setupformulas\sharedcounterparameter @@ -68,22 +68,22 @@  \appendtoks      \normalexpanded{\definelist[\currentformula]}% is expansion needed? -    \setuevalue{\e!start\currentformula\v!formula}{\dostartformula{\currentformula}}% -    \setuevalue{\e!stop \currentformula\v!formula}{\dostopformula}% +    \setuevalue{\e!start\currentformula\v!formula}{\strc_formulas_start_formula{\currentformula}}% +    \setuevalue{\e!stop \currentformula\v!formula}{\strc_formulas_stop_formula}%  \to \everydefineformula  \definelist[\v!formula] -\setuvalue{\e!start\v!formula}{\dostartformula{}} -\setuvalue{\e!stop \v!formula}{\dostopformula} +\setuvalue{\e!start\v!formula}{\strc_formulas_start_formula{}} +\setuvalue{\e!stop \v!formula}{\strc_formulas_stop_formula} -\let\dostartformula\relax % defined later -\let\dostopformula \relax % defined later +\let\strc_formulas_start_formula\relax % defined later +\let\strc_formulas_stop_formula \relax % defined later -\unexpanded\def\defineformulaalternative         % this might change ... start and stop can become keys -  {\dotripleargument\dodefineformulaalternative} % to the general define .. s!startcommand +\unexpanded\def\defineformulaalternative               % this might change ... start and stop can become keys +  {\dotripleargument\strc_formulas_define_alternative} % to the general define .. s!startcommand -\def\dodefineformulaalternative[#1][#2][#3]% +\def\strc_formulas_define_alternative[#1][#2][#3]%    {\setvalue{\e!start#1\v!formula}{#2}%     \setvalue{\e!stop #1\v!formula}{#3}} @@ -126,8 +126,8 @@  % implementation -\def\storecurrentformulanumber#1#2#3#4#5% ref, todo:str, \sync % todo: title etc (like float) -  {\settrue\handleformulanumber +\unexpanded\def\strc_formulas_store_number#1#2#3#4#5% ref, todo:str, \sync % todo: title etc (like float) +  {\settrue\c_strc_formulas_handle_number     \strc_counters_register_component       {formula}%       \setupcurrentformula \formulaparameter \detokenizedformulaparameter @@ -143,68 +143,66 @@  % modes: 0=unset, 1=forced, 2=none, 3=reference -\newconstant\placeformulanumbermode -\newconstant\formulasnumbermode -\newconstant\subformulasnumbermode -\newconstant\nestedformulanumbermode +\newconstant\c_strc_formulas_place_number_mode +\newconstant\c_strc_formulas_number_mode +\newconstant\c_strc_formulas_sub_number_mode +\newconstant\c_strc_formulas_nested_number_mode  \appendtoks -    \placeformulanumbermode \zerocount -    \formulasnumbermode     \zerocount -    \subformulasnumbermode  \zerocount -    \nestedformulanumbermode\zerocount +    \c_strc_formulas_place_number_mode \zerocount +    \c_strc_formulas_number_mode       \zerocount +    \c_strc_formulas_sub_number_mode   \zerocount +    \c_strc_formulas_nested_number_mode\zerocount  \to \everyresetformulas -\newconditional\handleformulanumber -\newconditional\incrementformulanumber - -\newconditional\insideplaceformula -\newconditional\insideplacesubformula -\newconditional\insideformulas -\newconditional\insidesubformulas +\newconditional\c_strc_formulas_handle_number +\newconditional\c_strc_formulas_increment +\newconditional\c_strc_formulas_inside_place +\newconditional\c_strc_formulas_inside_place_sub +\newconditional\c_strc_formulas_inside_formulas +\newconditional\c_strc_formulas_inside_formulas_sub  \appendtoks -    \global\setfalse\insideplaceformula -    \global\setfalse\insideplacesubformula +    \global\setfalse\c_strc_formulas_inside_place +    \global\setfalse\c_strc_formulas_inside_place_sub  \to \everyresetformulas -\def\handleplaceformulanumbering % place formula -  {\settrue\handleformulanumber -   \docheckformulareference\placeformulanumbermode\currentplaceformulareference -   \glet\doplaceformulanumber \doplaceformulanumberindeed -   \glet\donestedformulanumber\donestedformulanumberindeed} +\def\strc_formulas_place_numbering % place formula +  {\settrue\c_strc_formulas_handle_number +   \strc_formulas_check_reference\c_strc_formulas_place_number_mode\currentplaceformulareference +   \glet\strc_formulas_place_number\strc_formulas_place_number_indeed +   \glet\strc_formulas_place_number_nested\strc_formulas_place_number_nested_indeed} -\def\handleformulasnumbering % formulas -  {\docheckformulareference\formulasnumbermode\currentformulareference} +\def\strc_formulas_handle_number % formulas +  {\strc_formulas_check_reference\c_strc_formulas_number_mode\currentformulareference} -\def\handlesubformulasnumbering % sub formulas -  {\docheckformulareference\subformulasnumbermode\currentsubformulasreference +\def\strc_formulas_handle_sub_number % sub formulas +  {\strc_formulas_check_reference\c_strc_formulas_sub_number_mode\currentsubformulasreference     \strc_counters_increment\v!formula -   \storecurrentformulanumber +   \strc_formulas_store_number       \currentsubformulasreference       \empty       \currentsubformulasnumber       \currentsubformulassynchronize -     \currentsubformulasattribute -  } +     \currentsubformulasattribute} -\let\dotraceformulareferencestate\relax -\let\doshowformulareferencestate \relax +\let\strc_formulas_reference_trace\relax +\let\strc_formulas_reference_show \relax -% \def\dotraceformulareferencestate +% \def\strc_formulas_reference_trace  %   {\rlap{\hbox{\quad\tt\txx[% -%       \number\placeformulanumbermode,% -%       \number\formulasnumbermode,% -%       \number\subformulasnumbermode,% -%       \number\nestedformulanumbermode +%       \number\c_strc_formulas_place_number_mode,% +%       \number\c_strc_formulas_number_mode,% +%       \number\c_strc_formulas_sub_number_mode,% +%       \number\c_strc_formulas_nested_number_mode  %    ]}}} -% \def\doshowformulareferencestate +% \def\strc_formulas_reference_show  %   {\writestatus{\v!formula}% -%      {place:      \number\placeformulanumbermode,\space -%       formula:    \number\formulasnumbermode,\space -%       subformula: \number\subformulasnumbermode,\space -%       nested:     \number\nestedformulanumbermode]}} +%      {place:      \number\c_strc_formulas_place_number_mode,\space +%       formula:    \number\c_strc_formulas_number_mode,\space +%       subformula: \number\c_strc_formulas_sub_number_mode,\space +%       nested:     \number\c_strc_formulas_nested_number_mode]}}  \unexpanded\def\placecurrentformulanumber    {\rm % nodig ? @@ -216,12 +214,12 @@        \namedtaggedlabeltexts          \t!formulalabel \v!formula          \t!formulanumber\v!formula -        {\ignorespaces\doplacecurrentformulanumber\removeunwantedspaces}% +        {\ignorespaces\strc_formulas_place_current_number\removeunwantedspaces}%        \formulaparameter\c!right}%     \doif{\formulaparameter\c!location}\v!left{\hskip\formulaparameter\c!distance}} -\def\doplacecurrentformulanumber -  {\dohandlecurrentformulareferences +\unexpanded\def\strc_formulas_place_current_number +  {\strc_formulas_handle_current_references     \labeltexts\currentformula{\convertedcounter[\v!formula][]}}  % \def\theboxdestinationattribute#1{\iflocation\ifx#1\relax\else\ifx#1\empty\else attr      \destinationattribute#1\fi\fi\fi} @@ -281,10 +279,10 @@  % currently we do the number, some day we will do the (sub) formula -\def\dohandlecurrentformulareferences -  {\doshowformulareferencestate -   \ifnum\placeformulanumbermode=\plusthree -     \storecurrentformulanumber +\def\strc_formulas_handle_current_references +  {\strc_formulas_reference_show +   \ifnum\c_strc_formulas_place_number_mode=\plusthree +     \strc_formulas_store_number         \currentplaceformulareference         \empty         \currentplaceformulanumber @@ -294,8 +292,8 @@       \glet\currentplaceformulasynchronize\relax       \theformuladestinationattribute\currentplaceformulaattribute     \fi -   \ifnum\formulasnumbermode=\plusthree -     \storecurrentformulanumber +   \ifnum\c_strc_formulas_number_mode=\plusthree +     \strc_formulas_store_number         \currentformulasreference         \empty         \currentformulasnumber @@ -305,12 +303,12 @@       \glet\currentformulassynchronize\relax       \theformuladestinationattribute\currentformulasattribute     \fi -   \ifnum\subformulasnumbermode=\plusthree +   \ifnum\c_strc_formulas_sub_number_mode=\plusthree       \currentsubformulassynchronize       \glet\currentsubformulassynchronize\relax     \fi -   \ifnum\nestedformulanumbermode=\plusthree -     \storecurrentformulanumber +   \ifnum\c_strc_formulas_nested_number_mode=\plusthree +     \strc_formulas_store_number         \currentnestedformulareference         \empty         \currentnestedformulanumber @@ -323,55 +321,55 @@  % needs checking ... too many: -\def\dohandleformulanumbering +\def\strc_formulas_handle_numbering    {\strc_counters_increment\v!formula     \doiftext\currentplaceformulasuffix{\strc_counters_setown_sub\v!formula\plustwo\currentplaceformulasuffix}%     \placecurrentformulanumber} -\def\dohandlesubformulanumbering +\def\strc_formulas_handle_sub_numbering    {\doiftextelse\currentsubformulasuffix       {\strc_counters_setown_sub\v!formula\plustwo\currentsubformulasuffix}       {\strc_counters_increment_sub\v!formula\plustwo}% -    \placecurrentformulanumber} +   \placecurrentformulanumber} -\def\dododoformulanumber -  {\ifconditional\handleformulanumber +\def\strc_formulas_number_indeed +  {\ifconditional\c_strc_formulas_handle_number       \hbox\bgroup         % main counter -       \ifconditional\insidesubformulas +       \ifconditional\c_strc_formulas_inside_formulas_sub           % nothing         \else -         \ifcase\formulasnumbermode -           \ifcase\placeformulanumbermode -             \dohandleformulanumbering +         \ifcase\c_strc_formulas_number_mode +           \ifcase\c_strc_formulas_place_number_mode +             \strc_formulas_handle_numbering             \or -             \dohandleformulanumbering +             \strc_formulas_handle_numbering             \or               % nothing             \or -             \dohandleformulanumbering +             \strc_formulas_handle_numbering             \fi           \or -           \dohandleformulanumbering +           \strc_formulas_handle_numbering           \or             % nothing           \or -           \dohandleformulanumbering +           \strc_formulas_handle_numbering           \fi         \fi         % subcounter -       \ifconditional\insidesubformulas -         \ifcase\subformulasnumbermode +       \ifconditional\c_strc_formulas_inside_formulas_sub +         \ifcase\c_strc_formulas_sub_number_mode             % nothing           \or -           \dohandlesubformulanumbering +           \strc_formulas_handle_sub_numbering           \or             % nothing           \or -           \dohandlesubformulanumbering +           \strc_formulas_handle_sub_numbering           \fi         \fi -      \dotraceformulareferencestate +      \strc_formulas_reference_trace       \egroup     \fi} @@ -393,10 +391,10 @@  %D  %D Otherwise we get a missing \type {$$} error reported. -\def\resetdisplaymatheq +\unexpanded\def\resetdisplaymatheq % when used?    {\let\normalleqno\gobbleoneargument \let\leqno\gobbleoneargument     \let\normalreqno\gobbleoneargument \let\eqno \gobbleoneargument -   \let\doplaceformulanumber\empty} +   \let\strc_formulas_place_number\relax}  %D \macros  %D   {startsubformulas} @@ -431,28 +429,36 @@  % we don't use the skip's -\def\forgetdisplayskips % to do +\unexpanded\def\strc_formulas_forget_display_skips    {\abovedisplayskip     \zeropoint     \belowdisplayskip     \zeropoint     \abovedisplayshortskip\zeropoint     \belowdisplayshortskip\zeropoint} -\def\predisplaysizethreshhold{2em} % was 3em +% \def\predisplaysizethreshhold{2\emwidth} % was 3\emwidth -\def\leftdisplayskip    {\leftskip} -\def\rightdisplayskip   {\rightskip} -\def\leftdisplaymargin  {\formulaparameter\c!leftmargin} -\def\rightdisplaymargin {\formulaparameter\c!rightmargin} +\newdimen\d_strc_formulas_display_skip_left +\newdimen\d_strc_formulas_display_skip_right +\newdimen\d_strc_formulas_display_margin_left +\newdimen\d_strc_formulas_display_margin_right +\newdimen\d_strc_formulas_display_pre_threshold +\newskip \d_strc_formulas_display_skip_par -\def\beforedisplayspace -  {\doifnot{\formulaparameter\c!spacebefore}\v!none{\blank[\formulaparameter\c!spacebefore]}} +\unexpanded\def\beforedisplayspace +  {\edef\p_spacebefore{\formulaparameter\c!spacebefore}% +   \ifx\p_spacebefore\v!none \else +     \blank[\p_spacebefore]% +   \fi} -\def\afterdisplayspace -  {\doifnot{\formulaparameter\c!spaceafter }\v!none{\blank[\formulaparameter\c!spaceafter ]}} +\unexpanded\def\afterdisplayspace +  {\edef\p_spacebefore{\formulaparameter\c!spaceafter}% +   \ifx\p_spaceaftere\v!none \else +     \blank[\p_spaceafter]% +   \fi} -\def\setdisplaydimensions -  {\displayindent\leftdisplayskip -   \advance\displayindent\leftdisplaymargin +\unexpanded\def\setdisplaydimensions +  {\displayindent\d_strc_formulas_display_skip_left +   \advance\displayindent\d_strc_formulas_display_margin_left     \displaywidth\hsize    %\setlocalhsize    %\displaywidth\localhsize @@ -461,15 +467,14 @@     \else       \advance\displaywidth\hangindent     \fi -   \advance\displaywidth\dimexpr-\displayindent-\rightdisplayskip-\rightdisplaymargin\relax +   \advance\displaywidth\dimexpr-\displayindent-\d_strc_formulas_display_skip_right-\d_strc_formulas_display_margin_right\relax     \hsize\displaywidth} % new, else overfull in itemize -\unexpanded\def\dostartformula#1% -  {\dodoubleempty\dodostartformula[#1]} +\unexpanded\def\strc_formulas_start_formula#1% +  {\dodoubleempty\strc_formulas_start_formula_indeed[#1]} -\newskip\formulaparskip -\newskip\formulastrutht -\newskip\formulastrutdp +% \newskip\formulastrutht +% \newskip\formulastrutdp  %D \startbuffer  %D \startformula[9pt] x = 1 \stopformula @@ -478,38 +483,56 @@  %D  %D \typebuffer \getbuffer -\def\dodostartformula[#1][#2]% setting leftskip adaption is slow ! +\unexpanded\def\strc_formulas_start_formula_indeed[#1][#2]% setting leftskip adaption is slow !    {\bgroup % HERE     \def\currentformula{#1}%     \dostarttagged\t!formula\currentformula     \the\everybeforedisplayformula -   \formulaparskip\parskip -   \formulastrutdp\strutdepth -   \formulastrutht\strutheight -   \doifsomething{#2}{\switchtoformulabodyfont[#2]}% -   \parskip\formulaparskip -   % may look better in itemizations -   \doif{\formulaparameter\c!option}\v!middle -     {\def\leftdisplayskip{\zeropoint}% -      \def\rightdisplayskip{\zeropoint}}% -   % this was an experiment -   \doifsomething{\formulaparameter\c!margin}% so we test first -     {\dosetleftskipadaption{\formulaparameter\c!margin}% -      \edef\leftdisplaymargin{\the\leftskipadaption}}% overloaded -   \long\def\dostartformula##1{\bgroup\dostarttagged\t!subformula\def\dostopformula{\dostoptagged\egroup}}% -   \freezedimenmacro\leftdisplayskip -   \freezedimenmacro\rightdisplayskip -   \freezedimenmacro\leftdisplaymargin -   \freezedimenmacro\rightdisplaymargin -   \freezedimenmacro\predisplaysizethreshhold -   \forgetdisplayskips +   \d_strc_formulas_display_skip_par\parskip\relax +  %\formulastrutdp\strutdepth +  %\formulastrutht\strutheight +   \edef\p_option  {\formulaparameter\c!option}% +   \edef\p_margin  {\formulaparameter\c!margin}% +   \edef\p_bodyfont{#2}% +  %\ifx\p_bodyfont\empty +  %  \edef\p_bodyfont{\formulaparameter\c!bodyfont}% +  %\fi +   \ifx\p_bodyfont\empty \else +     \switchtoformulabodyfont[#2]% +   \fi +   \parskip\d_strc_formulas_display_skip_par\relax +   \ifx\p_option\v!middle +     \d_strc_formulas_display_skip_left \zeropoint +     \d_strc_formulas_display_skip_right\zeropoint +   \else +     \d_strc_formulas_display_skip_left \leftskip +     \d_strc_formulas_display_skip_right\rightskip +   \fi +   \d_strc_formulas_display_margin_left \formulaparameter\c!leftmargin \relax +   \d_strc_formulas_display_margin_right\formulaparameter\c!rightmargin\relax +   \ifx\p_margin\empty \else +     \dosetleftskipadaption\p_margin +     \d_strc_formulas_display_margin_left\leftskipadaption +   \fi +   \let\strc_formulas_start_formula\strc_formulas_start_formula_nested +  %\freezedimenmacro\predisplaysizethreshhold +   \strc_formulas_forget_display_skips     \getvalue{\e!start\formulaparameter\c!alternative\v!formula}} +\unexpanded\def\strc_formulas_start_formula_nested#1% +  {\bgroup +   \let\strc_formulas_stop_formula\strc_formulas_stop_formula_nested +   \dostarttagged\t!subformula} + +\unexpanded\def\strc_formulas_stop_formula_nested +  {\dostoptagged +   \egroup} +  % tagging of formulanumbers is not ok (we get two display maths blobs) -\unexpanded\def\dostopformula +\unexpanded\def\strc_formulas_stop_formula    {\dostarttagged\t!formulacaption\empty -   \doplaceformulanumber +   \strc_formulas_place_number     \dostoptagged     \dostarttagged\t!formulacontent\empty     \getvalue{\e!stop\formulaparameter\c!alternative\v!formula}% @@ -520,27 +543,31 @@     \egroup     \hangafter\minusone   % added for side floats     \hangindent\zeropoint % added for side floats -   \setfalse\handleformulanumber +   \setfalse\c_strc_formulas_handle_number     \the\everyresetformulas     \dorechecknextindentation} % here ?  % experiment:  \appendtoks -   \edef\currentformulagrid{\formulaparameter\c!grid}% -   \ifx\currentformulagrid\empty \else -     \spac_grids_snap_value_auto\currentformulagrid +   \edef\p_grid{\formulaparameter\c!grid}% +   \ifx\p_grid\empty \else +     \spac_grids_snap_value_auto\p_grid     \fi  \to \everybeforedisplayformula -\def\switchtoformulabodyfont{\switchtobodyfont} +\unexpanded\def\switchtoformulabodyfont +  {\switchtobodyfont} -\setuvalue{\v!formula}{\dosingleempty\doformula} +\setuvalue{\v!formula}{\dosingleempty\strc_formulas_formula} -\def\doformula[#1]#2% todo: tagged +\def\strc_formulas_formula[#1]#2% todo: tagged    {\begingroup -   \doifsomething{#1}{\switchtoformulabodyfont[#1]}% -   % not : \def\doformula[##1]##2{\mathematics{##2}}% +   \edef\p_bodyfont{#1}% +   \ifx\p_bodyfont\empty \else +     \switchtoformulabodyfont[\p_bodyfont]% +   \fi +   % not : \def\strc_formulas_formula[##1]##2{\mathematics{##2}}%     \mathematics{#2}%     \endgroup} @@ -558,7 +585,7 @@     \beforedisplayspace     \par     \ifvmode -      \prevdepth-\maxdimen % texbook pagina 79-80 +     \prevdepth-\maxdimen % texbook pagina 79-80     \fi     \noindent % else funny hlist with funny baselineskip     $$% \Ustartdisplaymath @@ -601,26 +628,26 @@  % \fakewords{20}{40}  \unexpanded\def\startsubformulas -  {\dosingleempty\dostartsubformulas} +  {\dosingleempty\strc_formulas_start_sub_formulas} -\def\dostartsubformulas[#1]% +\def\strc_formulas_start_sub_formulas[#1]%    {\edef\currentsubformulasreference{#1}% -   \global\settrue\insidesubformulas -   \handlesubformulasnumbering} +   \global\settrue\c_strc_formulas_inside_formulas_sub +   \strc_formulas_handle_sub_number}  \unexpanded\def\stopsubformulas    {\nonoindentation     \useindentnextparameter\subformulaparameter     \the\everyresetformulas % to be checked -   \global\setfalse\insidesubformulas +   \global\setfalse\c_strc_formulas_inside_formulas_sub     \dorechecknextindentation} % here ?  %D Named subformulas (to be redone)  \unexpanded\def\startnamedsubformulas -  {\dosingleempty\dostartnamedsubformulas} +  {\dosingleempty\strc_formulas_start_named_sub_formulas} -\def\dostartnamedsubformulas[#1]#2% +\def\strc_formulas_start_named_sub_formulas[#1]#2%    {\setformulalistentry{#2}%     \startsubformulas[#1]} @@ -639,19 +666,19 @@  %D \typebuffer \getbuffer  \unexpanded\def\startformulas -  {\dosingleempty\dostartformulas} +  {\dosingleempty\strc_formulas_start_formulas} -\def\dostartformulas[#1]#2\stopformulas % new / to be internationalized +\def\strc_formulas_start_formulas[#1]#2\stopformulas % new / to be internationalized    {\bgroup     \dostarttagged\t!formulaset\empty -   \global\settrue\insideformulas +   \global\settrue\c_strc_formulas_inside_formulas     \edef\currentformulasreference{#1}% -   \handleformulasnumbering +   \strc_formulas_handle_number     \let\currentformula\empty -   \forgetdisplayskips +   \strc_formulas_forget_display_skips     \startdisplaymath     \setlocalhsize -   \long\unexpanded\def\startformula##1\stopformula +   \unexpanded\def\startformula##1\stopformula       {\advance\scratchcounter\plusone}%     \scratchcounter\zerocount     #2% preroll @@ -660,122 +687,135 @@     \fi     \hbox to \localhsize \bgroup       \hss -     \def\normalstartformula{\vskip-\strutdepth\Ustartdisplaymath}% i hate this -     \def\normalstopformula {\Ustopdisplaymath}% -     \unexpanded\def\startformula      {\Ustartmath\vcenter\bgroup\normalstartformula}% -     \unexpanded\def\stopformula       {\normalstopformula\egroup\Ustopmath\hss}% +     \let\startformula\strc_formulas_nested_formula_start +     \let\stopformula \strc_formulas_nested_formula_stop       #2%       \egroup     \stopdisplaymath -   \global\setfalse\insideformulas +   \global\setfalse\c_strc_formulas_inside_formulas     \dostoptagged     \egroup     \the\everyresetformulas     \hangafter\minusone    % added for side floats     \hangindent\zeropoint} % added for side floats +\unexpanded\def\strc_formulas_nested_formula_start +  {\Ustartmath +   \vcenter\bgroup +   \vskip-\strutdepth +   \Ustartdisplaymath} + +\unexpanded\def\strc_formulas_nested_formula_stop +  {\Ustopdisplaymath +   \egroup +   \Ustopmath +   \hss} +  % place -\def\inhibitformulanumberflag{-} -\def\forceformulanumberflag  {+} +\def\m_strc_formulas_flag_inhibit{-} +\def\m_strc_formulas_flag_force  {+} -\def\docheckformulareference#1#2% +\def\strc_formulas_check_reference#1#2%    {#1\unless\ifx\namedformulaentry\empty % \relax % new 29/8/2010       \plusthree     \else\ifx#2\empty       \zerocount -   \else\ifx#2\forceformulanumberflag +   \else\ifx#2\m_strc_formulas_flag_force       \plusone -   \else\ifx#2\inhibitformulanumberflag +   \else\ifx#2\m_strc_formulas_flag_inhibit       \plustwo     \else       \plusthree     \fi\fi\fi\fi} -\unexpanded\def\formulanumber{\doformulanumber} % for the moment +\unexpanded\def\formulanumber + {\strc_formulas_number} % for the moment -\def\doformulanumber -  {\dosingleempty\dodoformulanumber} +\def\strc_formulas_number +  {\dosingleempty\strc_formulas_number_again} -\def\dodoformulanumber[#1]% +\def\strc_formulas_number_again[#1]%    {\def\currentformulareference{#1}% -   \dosinglegroupempty\dododoformulanumber} - -\def\redoformulanumber#1% -  {\def\currentformulasuffix{#1}% -   \dododoformulanumber} +   \dosinglegroupempty\strc_formulas_number_indeed}  \unexpanded\def\placeformula -  {\global\settrue\insideplaceformula -   \settrue\incrementformulanumber -   \dosingleempty\doplaceformula} +  {\global\settrue\c_strc_formulas_inside_place +   \settrue\c_strc_formulas_increment +   \dosingleempty\strc_formulas_place}  \unexpanded\def\placesubformula -  {\global\settrue\insideplacesubformula -   \setfalse\incrementformulanumber -   \dosingleempty\doplaceformula} +  {\global\settrue\c_strc_formulas_inside_place_sub +   \setfalse\c_strc_formulas_increment +   \dosingleempty\strc_formulas_place} -\def\doplaceformula[#1]% +\def\strc_formulas_place[#1]%    {\def\currentplaceformulareference{#1}%     \let\currentplaceformulasuffix\empty -   \doifnextbgroupelse\moreplaceformula\redoplaceformula} % [ref]{} +   \doifnextbgroupelse\strc_formulas_place_yes\strc_formulas_place_nop\strc_formulas_place_nop} % [ref]{} -\def\moreplaceformula#1% +\def\strc_formulas_place_yes#1%    {\def\currentplaceformulasuffix{#1}% -   \redoplaceformula} +   \strc_formulas_place_nop} -\def\redoplaceformula -  {\doifnextcharelse$\dispplaceformula\dodoplaceformula} % [ref]$$ [ref]\start +\def\strc_formulas_place_nop +  {\doifnextcharelse$\strc_formulas_place_pickup\strc_formulas_place_indeed} % [ref]$$ [ref]\start -\def\dodoplaceformula -  {\handleplaceformulanumbering} +\def\strc_formulas_place_indeed +  {\strc_formulas_place_numbering} -\def\dispplaceformula$$#1$$% -  {\handleplaceformulanumbering -   \dostartformula{}#1\dostopformula} +\def\strc_formulas_place_pickup$$#1$$% +  {\strc_formulas_place_numbering +   \strc_formulas_start_formula{}#1\strc_formulas_stop_formula}  \let\startplaceformula\placeformula  \let\stopplaceformula \relax  % to be checked -\let\doplaceformulanumber \relax -\let\donestedformulanumber\gobbletwoarguments +\let\strc_formulas_place_number       \relax +\let\strc_formulas_place_number_nested\gobbletwoarguments -\def\donestedformulanumberindeed#1#2% +\def\strc_formulas_place_number_nested_indeed#1#2%    {\def\currentnestedformulareference{#1}%     \def\currentnestedformulasuffix{#2}% -   \glet\doplaceformulanumber\relax -   \docheckformulareference\nestedformulanumbermode\currentnestedformulareference -   \ifcase\nestedformulanumbermode +   \glet\strc_formulas_place_number\relax +   \strc_formulas_check_reference\c_strc_formulas_nested_number_mode\currentnestedformulareference +   \ifcase\c_strc_formulas_nested_number_mode       % nothing     \or -     \doformulanumber +     \strc_formulas_number % hm, looks ahead for []     \or       % nothing     \or -     \doformulanumber +     \strc_formulas_number % hm, looks ahead for []     \fi} -\def\doplaceformulanumberindeed -  {\glet\doplaceformulanumber\relax +\def\strc_formulas_place_number_indeed +  {\glet\strc_formulas_place_number\relax     \doifelse{\formulaparameter\c!location}\v!left -     {\normalleqno{\dododoformulanumber}} -     {\normalreqno{\dododoformulanumber}}} +     {\normalleqno{\strc_formulas_number_indeed}} +     {\normalreqno{\strc_formulas_number_indeed}}}  % todo  \unexpanded\def\placenamedformula -  {\dosingleempty\doplacenamedformula} +  {\dosingleempty\strc_formulase_place_named} -\def\doplacenamedformula[#1]#2% +\def\strc_formulase_place_named[#1]#2%    {\iffirstargument -     \def\next{\placeformula[#1]}% +     \expandafter\strc_formulase_place_named_yes     \else -     \let\next\placeformula -   \fi -   \setformulalistentry{#2}% -   \next} +     \expandafter\strc_formulase_place_named_nop +   \fi} + +\def\strc_formulase_place_named_yes[#1]#2% +  {\setformulalistentry{#2}% +   \placeformula[#1]} + +\def\strc_formulase_place_named_nop[#1]#2% +  {\setformulalistentry{#2}% +   \placeformula}  \let\namedformulaentry\empty % \relax % this will become a key/value so that we can do bookmarks diff --git a/tex/context/base/strc-num.mkiv b/tex/context/base/strc-num.mkiv index 9c08693be..52e4960fa 100644 --- a/tex/context/base/strc-num.mkiv +++ b/tex/context/base/strc-num.mkiv @@ -507,22 +507,18 @@  % \m_strc_counters_last_registered_attribute  % \m_strc_counters_last_registered_synchronize -\newconditional\hascountercaption -\newconditional\hascountertitle -\newconditional\hascounternumber -  \unexpanded\def\strc_counters_register_component#1#2#3#4#5#6#7[#8][#9]% maybe also nolist    {\begingroup     %     #2[\s!haslevel=1,#8]% -   \edef\hascounterlevel  {#3\s!haslevel}% -   \edef\hascountercaption{#3\s!hascaption}% -   \edef\hascountertitle  {#3\s!hastitle}% -   \edef\hascounternumber {#3\s!hasnumber}% +   \edef\p_haslevel  {#3\s!haslevel}% +   \edef\p_hascaption{#3\s!hascaption}% +   \edef\p_hastitle  {#3\s!hastitle}% +   \edef\p_hasnumber {#3\s!hasnumber}%     % -   \edef\askedprefixsegments{#3\c!prefixsegments}% -   \ifx\askedprefixsegments\v!auto -     \edef\askedprefixsegments{\autostructureprefixsegments#3}% +   \edef\p_prefixsegments{#3\c!prefixsegments}% +   \ifx\p_prefixsegments\v!auto +     \edef\p_prefixsegments{\autostructureprefixsegments#3}%     \fi     %     \edef\currentname{#3\c!name}% @@ -534,7 +530,7 @@       \let\currentcounter\currentname     \fi     % -   \ifx\hascountercaption\v!yes +   \ifx\p_hascaption\v!yes       \xdef\currentstructurecomponentname           {#3\c!name}%       \xdef\currentstructurecomponentlevel          {#3\c!level}%       \edef\currentstructurecomponentexpansion      {#3\c!expansion}% @@ -613,7 +609,7 @@            list     = \!!bs\detokenize\expandafter{\currentstructurecomponentlist}\!!es,          \fi          }, -    \ifx\hascounternumber\v!yes +    \ifx\p_hasnumber\v!yes          prefixdata = {              prefix        = "#3\c!prefix",              separatorset  = "#3\c!prefixseparatorset", @@ -621,7 +617,7 @@              conversionset = "#3\c!prefixconversionset",              set           = "#3\c!prefixset",          %   segments      = "#3\c!prefixsegments", -            segments      = "\askedprefixsegments", +            segments      = "\p_prefixsegments",              connector     = \!!bs#3\c!prefixconnector\!!es,          },          numberdata = { @@ -637,7 +633,7 @@          userdata = \!!bs\detokenize{#9}\!!es % will be converted to table at the lua end         }       }}% -     \xdef\m_strc_counters_last_registered_attribute  {\ctxlua        {tex.write(structures.references.setinternalreference(nil,nil,\nextinternalreference))}}% +     \xdef\m_strc_counters_last_registered_attribute  {\ctxcommand    {setinternalreference(nil,nil,\nextinternalreference)}}%       \xdef\m_strc_counters_last_registered_synchronize{\ctxlatecommand{enhancelist(\m_strc_counters_last_registered_index)}}%     \else       \glet\m_strc_counters_last_registered_index      \relax diff --git a/tex/context/base/strc-pag.mkiv b/tex/context/base/strc-pag.mkiv index e3828464c..cb7cd8b23 100644 --- a/tex/context/base/strc-pag.mkiv +++ b/tex/context/base/strc-pag.mkiv @@ -123,8 +123,10 @@      \savecurrentpagestate  \to \everyshipout -\def\pushpagestate{\setxvalue{\??nm:\s!userpage:\c!state}{\counterparameter\s!userpage\c!state}} -\def\poppagestate {\normalexpanded{\setuppagenumber[\c!state=\getvalue{\??nm:\s!userpage:\c!state}]}} +\installcorenamespace{pagestatestack} % no level yet + +\unexpanded\def\pushpagestate{\setxvalue{\??pagestatestack\c!state}{\counterparameter\s!userpage\c!state}} +\unexpanded\def\poppagestate {\normalexpanded{\setuppagenumber[\c!state=\getvalue{\??pagestatestack\c!state}]}}  \setuppagenumber    [\c!way=\v!by\v!text, @@ -249,25 +251,28 @@  % Page numbers: (can move to lua) ... inconsistent names +\installcorenamespace{pagenumberinc} +\installcorenamespace{pagenumberdec} +  \def\dodecrementpagenumber {\global\userpageno\strc_counters_decremented\s!userpage\relax}  \def\doincrementpagenumber {\global\userpageno\strc_counters_incremented\s!userpage\relax}  \def\decrementsubpagenumber{\global\subpageno \strc_counters_decremented\s!subpage \relax}  \def\incrementsubpagenumber{\global\subpageno \strc_counters_incremented\s!subpage \relax} -\def\dosynchronizepagenumber{\global\let\@@pnstate\v!start} +\def\dosynchronizepagenumber{\global\userpagenumberstate\plustwo} % start and visible -\def\decrementpagenumber{\csname\??pn-\counterparameter\s!userpage\c!state\endcsname} -\def\incrementpagenumber{\csname\??pn+\counterparameter\s!userpage\c!state\endcsname} +\def\decrementpagenumber{\csname\??pagenumberdec\counterparameter\s!userpage\c!state\endcsname} +\def\incrementpagenumber{\csname\??pagenumberinc\counterparameter\s!userpage\c!state\endcsname} -\letvalue{\??pn-\v!start}\dodecrementpagenumber -\letvalue{\??pn-\v!none }\dodecrementpagenumber -\letvalue{\??pn-\v!empty}\dodecrementpagenumber +\letvalue{\??pagenumberdec\v!start}\dodecrementpagenumber +\letvalue{\??pagenumberdec\v!none }\dodecrementpagenumber +\letvalue{\??pagenumberdec\v!empty}\dodecrementpagenumber -\letvalue{\??pn+\v!start}\doincrementpagenumber -\letvalue{\??pn+\v!none }\doincrementpagenumber -\setvalue{\??pn+\v!empty}{\doincrementpagenumber\dosynchronizepagenumber} -\letvalue{\??pn+\v!keep }\dosynchronizepagenumber +\letvalue{\??pagenumberinc\v!start}\doincrementpagenumber +\letvalue{\??pagenumberinc\v!none }\doincrementpagenumber +\setvalue{\??pagenumberinc\v!empty}{\doincrementpagenumber\dosynchronizepagenumber} +\letvalue{\??pagenumberinc\v!keep }\dosynchronizepagenumber  % Control: @@ -281,18 +286,14 @@  % Setup general page numbering -\newtoks\everysetuppagenumbering - -\unexpanded\def\setuppagenumbering -  {\dosingleempty\dosetuppagenumbering} +\installcorenamespace{pagenumbering} -\def\dosetuppagenumbering[#1]% -  {\getparameters[\??nm][#1]\the\everysetuppagenumbering} +\installdirectcommandhandler \??pagenumbering {pagenumbering}  \appendtoks     \singlesidedfalse \setfalse\layoutisdoublesided     \doublesidedfalse \setfalse\layoutissinglesided -   \normalexpanded{\noexpand\processallactionsinset[\@@nmalternative]} +   \normalexpanded{\processallactionsinset[\directpagenumberingparameter\c!alternative]}       [ \v!singlesided=>\singlesidedtrue\settrue\layoutissinglesided,         \v!doublesided=>\doublesidedtrue\settrue\layoutisdoublesided]%     \ifdefined\trackingmarginnotestrue @@ -314,8 +315,13 @@      \let\dosetpagenumberlocation\relax  \fi -\def\flushfinallayoutpage -  {\doifsomething\@@nmpage{\doifnot\@@nmpage\v!no{\page[\@@nmpage]}}} +\unexpanded\def\flushfinallayoutpage +  {\edef\p_page_numbering_page{\directpagenumberingparameter\c!page}% +   \ifx\p_page_numbering_page\empty \else +     \ifx\p_page_numbering_page\v!no \else +       \page[\p_page_numbering_page] +     \fi +   \fi}  % The numbered location handler is there because we need to be downward  % compatible. So, in fact there can be multiple handlers active at the @@ -326,11 +332,13 @@  \unexpanded\def\placelocationpagenumber    {\ifnum\userpagenumberstate=\plustwo       \ifnum\overallpagenumberstate=\plusone -        \doif\@@nmstrut\v!yes\strut +        \doif{\directpagenumberingparameter\c!strut}\v!yes\strut          \begingroup -        \dousestyleparameter\@@nmstyle -        \dousecolorparameter\@@nmcolor -        \@@nmcommand{\@@nmleft\labeltexts\v!pagenumber{\prefixedpagenumber}\@@nmright}% +        \usepagenumberingstyleandcolor\c!style\c!color +        \directpagenumberingparameter\c!command +          {\directpagenumberingparameter\c!left +           \labeltexts\v!pagenumber\prefixedpagenumber +           \directpagenumberingparameter\c!right}%          \endgroup       \fi     \fi} @@ -338,7 +346,9 @@  \unexpanded\def\completepagenumber    {\ifnum\userpagenumberstate=\plustwo       \ifnum\overallpagenumberstate=\plusone -        \@@nmleft\labeltexts\v!pagenumber\prefixedpagenumber\@@nmright +        \directpagenumberingparameter\c!left +        \labeltexts\v!pagenumber\prefixedpagenumber +        \directpagenumberingparameter\c!right       \fi     \fi} @@ -382,7 +392,7 @@  \to \everysetupsubpagenumber  \appendtoks % todo: set state: none, start, stop, reset -    \doifelse\@@nmstate\v!start +    \doifelse{\directpagenumberingparameter\c!state}\v!start        {\overallpagenumberstate\plusone  }%        {\overallpagenumberstate\zerocount}%  \to \everysetuppagenumbering diff --git a/tex/context/base/strc-ref.lua b/tex/context/base/strc-ref.lua index 2d6e0a1fe..16cb91373 100644 --- a/tex/context/base/strc-ref.lua +++ b/tex/context/base/strc-ref.lua @@ -1670,7 +1670,6 @@ function references.setandgetattribute(kind,prefix,tag,data,view) -- maybe do in      return attr  end -commands.setinternalreference  = references.setinternalreference  commands.setreferenceattribute = references.setandgetattribute  function references.getinternalreference(n) -- n points into list (todo: registers) diff --git a/tex/context/base/strc-ref.mkvi b/tex/context/base/strc-ref.mkvi index 760a6babb..c11b49bd3 100644 --- a/tex/context/base/strc-ref.mkvi +++ b/tex/context/base/strc-ref.mkvi @@ -118,10 +118,10 @@  %D These are implemented in a low level form as: -\def\strc_references_text_reference          [#labels]{\strc_references_set_named_reference\s!text{#labels}{}} -\def\strc_references_page_reference          [#labels]{\strc_references_set_named_reference\s!page{#labels}{}{}} -\def\strc_references_full_reference          [#labels]{\strc_references_set_named_reference\s!full{#labels}{}} -\def\strc_references_set_reference[#labels][#settings]{\strc_references_set_named_reference\s!user{#labels}{#settings}{}} +\unexpanded\def\strc_references_text_reference          [#labels]{\strc_references_set_named_reference\s!text{#labels}{}} +\unexpanded\def\strc_references_page_reference          [#labels]{\strc_references_set_named_reference\s!page{#labels}{}{}} +\unexpanded\def\strc_references_full_reference          [#labels]{\strc_references_set_named_reference\s!full{#labels}{}} +\unexpanded\def\strc_references_set_reference[#labels][#settings]{\strc_references_set_named_reference\s!user{#labels}{#settings}{}}  %D Actually there is not much difference between a text and a  %D full reference, but it's the concept that counts. The low @@ -138,7 +138,7 @@  \def\dofinishsomereference#kind{\executeifdefined{dofinish#{kind}reference}\gobbletwoarguments} -\def\strc_references_set_named_reference +\unexpanded\def\strc_references_set_named_reference    {\ifreferencing        \expandafter\strc_references_set_named_reference_indeed     \else @@ -1449,14 +1449,18 @@  %D  %D \showsetup{setupurl} -\unexpanded\def\setupurl -  {\dodoubleargument\getparameters[\??ur]} +\installcorenamespace{url} + +\installdirectcommandhandler \??url {url} + +\setupurl +  [\c!style=\v!type, +   \c!color=]  \unexpanded\def\url[#label]% move \hyphenatedurl to lua end (is already lua)    {\dontleavehmode     \begingroup -   \dousestyleparameter\@@urstyle -   \dousecolorparameter\@@urcolor +   \useurlstyleandcolor\c!style\c!color     \hyphenatedurl{\ctxcommand{geturl("#label")}}%     \endgroup} @@ -1526,8 +1530,9 @@  % also lua, like urls and files -\unexpanded\def\setupprograms -  {\dodoubleargument\getparameters[\??pr]} +\installcorenamespace{programs} + +\installdirectcommandhandler \??programs {programs}  \unexpanded\def\defineprogram    {\dotripleargument\strc_references_define_program} @@ -1538,9 +1543,8 @@  \def\program[#name]% incompatible, more consistent, hardy used anyway    {\dontleavehmode     \begingroup -   \dousestyleparameter\@@prstyle -   \dousecolorparameter\@@prcolor -   \ctxcommand{getprogram("#name","\@@pralternative","\@@prspace")}% +   \useprogramsstyleandcolor\c!style\c!color +   \ctxcommand{getprogram("#name","\directprogramsparameter\c!alternative","\directprogramsparameter\c!space")}%     \endgroup}  %D As we can see, we directly use the special reference @@ -1665,10 +1669,6 @@     \c!separator=\nonbreakablespace,     \c!export=\v!no] -\setupurl -  [\c!style=\v!type, -   \c!color=] -  \setupprograms    [\c!directory=,     \c!style=\v!type, diff --git a/tex/context/base/strc-reg.mkiv b/tex/context/base/strc-reg.mkiv index e36556949..7ac21761d 100644 --- a/tex/context/base/strc-reg.mkiv +++ b/tex/context/base/strc-reg.mkiv @@ -47,7 +47,7 @@  %  \index[pageclass::key]{textclass::entry}  %D Parameters ... we set up levels so we need a slightly different command handler here .. okay, we -%D can use the childs for that ... but then we need to tweak the name in order to distinguis: +%D can use the childs for that ... but then we need to tweak the name in order to distinguish:  %D register -> register:1 (i.e. prefix)  \let\currentregister\empty diff --git a/tex/context/base/strc-tag.mkiv b/tex/context/base/strc-tag.mkiv index 84d6fb2d3..b84efc92c 100644 --- a/tex/context/base/strc-tag.mkiv +++ b/tex/context/base/strc-tag.mkiv @@ -332,4 +332,12 @@  \unexpanded\def\settaggedmetadata[#1]%    {\ctxlua{structures.tags.registermetadata(\!!bs#1\!!es)}} +%D An overload: + +\let\strc_tagged_saved_bpar\bpar +\let\strc_tagged_saved_epar\epar + +\unexpanded\def\bpar{\dostarttagged\t!paragraph\empty\strc_tagged_saved_bpar} +\unexpanded\def\epar{\strc_tagged_saved_epar\dostoptagged} +  \protect diff --git a/tex/context/base/supp-mat.mkiv b/tex/context/base/supp-mat.mkiv index 21871e80d..0c2402671 100644 --- a/tex/context/base/supp-mat.mkiv +++ b/tex/context/base/supp-mat.mkiv @@ -91,7 +91,12 @@  %D  %D An example of usage of the following can be found in the MathML module: -\unexpanded\def\displaymathematics#1{\relax\ifmmode#1\else\dostartformula{}#1\dostopformula\fi} +\ifdefined\strc_formulas_start_formula \else +    \def\strc_formulas_start_formula{\normalstartdmath} +    \def\strc_formulas_stop_formula {\normalstopdmath } +\fi + +\unexpanded\def\displaymathematics#1{\relax\ifmmode#1\else\strc_formulas_start_formula{}#1\strc_formulas_stop_formula\fi}  \unexpanded\def\inlinemathematics   {\dontleavehmode\mathematics}  \unexpanded\def\automathematics     {\relax\ifhmode\expandafter\inlinemathematics\else\expandafter\displaymathematics\fi} diff --git a/tex/context/base/syst-aux.mkiv b/tex/context/base/syst-aux.mkiv index 092b5b227..0de742bd3 100644 --- a/tex/context/base/syst-aux.mkiv +++ b/tex/context/base/syst-aux.mkiv @@ -60,12 +60,12 @@  %D As we don't have namespace definers yet, we use a special one: -\newcount\c_syst_helpers_n_of_namespaces +\newcount\c_syst_helpers_n_of_namespaces \c_syst_helpers_n_of_namespaces\pluseight % 1-8 reserved for catcodes  \def\v_interfaces_prefix_template_system{\number    \c_syst_helpers_n_of_namespaces>>}  %def\v_interfaces_prefix_template_system{\characters\c_syst_helpers_n_of_namespaces>>} % no \characters yet -\unexpanded\def\installsystemnamespace#1% +\unexpanded\def\installsystemnamespace#1% maybe move this to syst-ini    {\ifcsname ??#1\endcsname       \writestatus\m!system{duplicate system namespace '#1'}\wait     \else @@ -2428,37 +2428,37 @@       {\syst_helpers_seventuple_empty_one_yes#1}%       {\syst_helpers_seventuple_empty_one_nop#1}} -\def\syst_helpers_seventuple_empty_one#1[#2]% +\def\syst_helpers_seventuple_empty_one_yes#1[#2]%    {\firstargumenttrue     \doifnextoptionalelse       {\syst_helpers_seventuple_empty_two_yes#1{#2}}%       {\syst_helpers_seventuple_empty_two_nop#1{#2}}} -\def\syst_helpers_seventuple_empty_two#1#2[#3]% +\def\syst_helpers_seventuple_empty_two_yes#1#2[#3]%    {\secondargumenttrue     \doifnextoptionalelse       {\syst_helpers_seventuple_empty_three_yes#1{#2}{#3}}%       {\syst_helpers_seventuple_empty_three_nop#1{#2}{#3}}} -\def\syst_helpers_seventuple_empty_three#1#2#3[#4]% +\def\syst_helpers_seventuple_empty_three_yes#1#2#3[#4]%    {\thirdargumenttrue     \doifnextoptionalelse       {\syst_helpers_seventuple_empty_four_yes#1{#2}{#3}{#4}}%       {\syst_helpers_seventuple_empty_four_nop#1{#2}{#3}{#4}}} -\def\syst_helpers_seventupleempty_four#1#2#3#4[#5]% +\def\syst_helpers_seventupleempty_four_yes#1#2#3#4[#5]%    {\fourthargumenttrue     \doifnextoptionalelse       {\syst_helpers_seventuple_empty_five_yes#1{#2}{#3}{#4}{#5}}%       {\syst_helpers_seventuple_empty_five_nop#1{#2}{#3}{#4}{#5}}} -\def\syst_helpers_seventuple_empty_five#1#2#3#4#5[#6]% +\def\syst_helpers_seventuple_empty_five_yes#1#2#3#4#5[#6]%    {\fifthargumenttrue     \doifnextoptionalelse       {\syst_helpers_seventuple_empty_six_yes#1{#2}{#3}{#4}{#5}{#6}}%       {\syst_helpers_seventuple_empty_six_nop#1{#2}{#3}{#4}{#5}{#6}}} -\def\syst_helpers_seventuple_empty_six#1#2#3#4#5#6[#7]% +\def\syst_helpers_seventuple_empty_six_yes#1#2#3#4#5#6[#7]%    {\sixthargumenttrue     \doifnextoptionalelse       {\seventhargumenttrue#1[{#2}][{#3}][{#4}][{#5}][{#6}][{#7}]}% @@ -2537,18 +2537,18 @@       \expandafter\syst_helpers_seventuple_empty_seven_normal     \fi} -\def\syst_helpers_seventuple_empty_spaced_two            #1#2{#1[{#2}][][][][][][] } -\def\syst_helpers_seventuple_empty_normal_two            #1#2{#1[{#2}][][][][][][]} -\def\syst_helpers_seventuple_empty_spaced_three        #1#2#3{#1[{#2}][{#3}][][][][][] } -\def\syst_helpers_seventuple_empty_normal_three        #1#2#3{#1[{#2}][{#3}][][][][][]} -\def\syst_helpers_seventuple_empty_spaced_four       #1#2#3#4{#1[{#2}][{#3}][{#4}][][][][] } -\def\syst_helpers_seventuple_empty_normal_four       #1#2#3#4{#1[{#2}][{#3}][{#4}][][][][]} -\def\syst_helpers_seventuple_empty_spaced_five     #1#2#3#4#5{#1[{#2}][{#3}][{#4}][{#5}][][][] } -\def\syst_helpers_seventuple_empty_normal_five     #1#2#3#4#5{#1[{#2}][{#3}][{#4}][{#5}][][][]} -\def\syst_helpers_seventuple_empty_spaced_six    #1#2#3#4#5#6{#1[{#2}][{#3}][{#4}][{#5}][{#6}][][] } -\def\syst_helpers_seventuple_empty_normal_six    #1#2#3#4#5#6{#1[{#2}][{#3}][{#4}][{#5}][{#6}][][]} -\def\syst_helpers_seventuple_empty_spaced_seven#1#2#3#4#5#6#7{#1[{#2}][{#3}][{#4}][{#5}][{#6}][{#7}][] } -\def\syst_helpers_seventuple_empty_normal_seven#1#2#3#4#5#6#7{#1[{#2}][{#3}][{#4}][{#5}][{#6}][{#7}][]} +\def\syst_helpers_seventuple_empty_two_spaced            #1#2{#1[{#2}][][][][][][] } +\def\syst_helpers_seventuple_empty_two_normal            #1#2{#1[{#2}][][][][][][]} +\def\syst_helpers_seventuple_empty_three_spaced        #1#2#3{#1[{#2}][{#3}][][][][][] } +\def\syst_helpers_seventuple_empty_three_normal        #1#2#3{#1[{#2}][{#3}][][][][][]} +\def\syst_helpers_seventuple_empty_four_spaced       #1#2#3#4{#1[{#2}][{#3}][{#4}][][][][] } +\def\syst_helpers_seventuple_empty_four_normal       #1#2#3#4{#1[{#2}][{#3}][{#4}][][][][]} +\def\syst_helpers_seventuple_empty_five_spaced     #1#2#3#4#5{#1[{#2}][{#3}][{#4}][{#5}][][][] } +\def\syst_helpers_seventuple_empty_five_normal     #1#2#3#4#5{#1[{#2}][{#3}][{#4}][{#5}][][][]} +\def\syst_helpers_seventuple_empty_six_spaced    #1#2#3#4#5#6{#1[{#2}][{#3}][{#4}][{#5}][{#6}][][] } +\def\syst_helpers_seventuple_empty_six_normal    #1#2#3#4#5#6{#1[{#2}][{#3}][{#4}][{#5}][{#6}][][]} +\def\syst_helpers_seventuple_empty_seven_spaced#1#2#3#4#5#6#7{#1[{#2}][{#3}][{#4}][{#5}][{#6}][{#7}][] } +\def\syst_helpers_seventuple_empty_seven_normal#1#2#3#4#5#6#7{#1[{#2}][{#3}][{#4}][{#5}][{#6}][{#7}][]}  %D \macros  %D   {strippedcsname} @@ -6592,6 +6592,39 @@  \unexpanded\def\signalcharacter{\char\zerocount} % \zwj +%D A few secial variants of commands defined here. Some more will be moved here (e.g. +%D from table modules. + +\def\dodirectdoubleempty#1#2% used in math (lookahead issues) +  {\ifx#2[% +     \expandafter\syst_helpers_direct_double_empty_one_yes +   \else +     \expandafter\syst_helpers_direct_double_empty_one_nop +   \fi#1#2} + +\def\syst_helpers_direct_double_empty_one_yes#1[#2]#3% +  {\ifx#3[\else\expandafter\syst_helpers_direct_double_empty_two_nop\fi#1[#2]#3} + +\def\syst_helpers_direct_double_empty_one_nop#1{#1[][]} +\def\syst_helpers_direct_double_empty_two_nop#1[#2]{#1[#2][]} + +%D Used in math definitions (in an type {\edef}): + +%D \startbuffer +%D [\docheckedpair{}] +%D [\docheckedpair{a}] +%D [\docheckedpair{a,b}] +%D [\docheckedpair{a,b,c}] +%D \stopbuffer +%D +%D \typebuffer \startlines \getbuffer \stoplines + +\def\docheckedpair#1% +  {\syst_helpers_checked_pair#1,,\_o_e_p_} + +\def\syst_helpers_checked_pair#1,#2,#3\_o_e_p_ +  {#1,#2} +  %D Here are some nasty helpers. They can be used to fill often expanded token  %D lists efficiently (see tabulate for an example). diff --git a/tex/context/base/syst-ini.mkiv b/tex/context/base/syst-ini.mkiv index b459ffffd..4dcc134ea 100644 --- a/tex/context/base/syst-ini.mkiv +++ b/tex/context/base/syst-ini.mkiv @@ -376,14 +376,16 @@  %D More allocations: -\newskip \zeroskip      \zeroskip      = 0pt plus 0pt minus 0pt -\newdimen\zeropoint     \zeropoint     = 0pt -\newdimen\onepoint      \onepoint      = 1pt -\newdimen\halfapoint    \halfapoint    = 0.5pt -\newdimen\maxdimen      \maxdimen      = 16383.99999pt -\newdimen\onebasepoint  \onebasepoint  = 1bp -\newdimen\scaledpoint   \scaledpoint   = 1sp -\newdimen\thousandpoint \thousandpoint = 1000pt +\newskip  \zeroskip      \zeroskip      = 0pt plus 0pt minus 0pt +\newdimen \zeropoint     \zeropoint     = 0pt +\newdimen \onepoint      \onepoint      = 1pt +\newdimen \halfapoint    \halfapoint    = 0.5pt +\newdimen \maxdimen      \maxdimen      = 16383.99999pt +\newdimen \onebasepoint  \onebasepoint  = 1bp +\newdimen \scaledpoint   \scaledpoint   = 1sp +\newdimen \thousandpoint \thousandpoint = 1000pt +\newmuskip\zeromuskip    \zeromuskip    = 0mu +\newmuskip\onemuskip     \onemuskip     = 1mu  \let\points   \onepoint  \let\halfpoint\halfapoint @@ -822,7 +824,13 @@  \def\begcsname#1\endcsname{\ifcsname#1\endcsname\csname#1\endcsname\fi} -%D Now come a few macros that might be needed in successive loading: +%D Now come a few macros that might be needed in successive loading. We redefine the +%D \type {\par} primitive pretty soon so that we get the equivalents right. + +\newtoks\everyendpar + +\normalprotected\def\endpar{\the\everyendpar\normalpar} +\normalprotected\def\par   {\endpar}  \let\endgraf\par  \let\endline\cr diff --git a/tex/context/base/tabl-ntb.mkiv b/tex/context/base/tabl-ntb.mkiv index 4d2f8cc15..fca724b71 100644 --- a/tex/context/base/tabl-ntb.mkiv +++ b/tex/context/base/tabl-ntb.mkiv @@ -157,7 +157,7 @@  \newcount\c_tabl_level -\def\tabl_ntb_table_push +\unexpanded\def\tabl_ntb_table_push    {\ifnum\m_tabl_tbl_level>\plusone       \tabl_ntb_parameters_reset       % we need a proper count push/pop @@ -167,7 +167,7 @@       \global\intabletrue     \fi} -\def\tabl_ntb_table_pop +\unexpanded\def\tabl_ntb_table_pop    {\ifnum\m_tabl_tbl_level>\plusone       \globalpopmacro\m_tabl_ntb_saved_row\global\c_tabl_ntb_row\m_tabl_ntb_saved_row       \globalpopmacro\m_tabl_ntb_saved_col\global\c_tabl_ntb_col\m_tabl_ntb_saved_col @@ -175,11 +175,11 @@       \global\intablefalse     \fi} -\def\tabl_tnb_next_level +\unexpanded\def\tabl_tnb_next_level    {\advance\c_tabl_level\plusone     \edef\m_tabl_tbl_level{\the\c_tabl_level}} -\def\tabl_tnb_prev_level +\unexpanded\def\tabl_tnb_prev_level    {\advance\c_tabl_level\minusone     \edef\m_tabl_tbl_level{\the\c_tabl_level}} diff --git a/tex/context/base/tabl-tab.mkiv b/tex/context/base/tabl-tab.mkiv index b50be8531..20ea1d766 100644 --- a/tex/context/base/tabl-tab.mkiv +++ b/tex/context/base/tabl-tab.mkiv @@ -854,11 +854,8 @@     \lineskiplimit\zeropoint     \lineskip     \zeropoint     \tabskip      \zeropoint -   \doifelsenothing\@@titextwidth -     {\halign} -     {\doifelse\@@titextwidth\v!max -        {\halign to \hsize} -        {\halign to \@@titextwidth}}% +   \edef\p_tabl_table_textwidth{\directtablesparameter\c!textwidth}% +   \halign \ifx\p_tabl_table_textwidth\empty \else to \ifx\p_tabl_table_textwidth\v!max \hsize \else \p_tabl_table_textwidth \fi\fi  %    \the\!taTableSpread       \bgroup       \span @@ -1330,26 +1327,38 @@  \newconditional\tablerepeathead  \newconditional\tablerepeattail -  \unexpanded\def\starttable    {\bgroup     \dodoubleempty\dostarttable}  \unexpanded\def\dostarttable[#1][#2]% preamble optional-settings    {\ifsecondargument -     \getparameters[\??ti][#2]% +     \setupcurrenttables[#2]%     \fi     \let\stoptable\dostoptable -   \doif\@@tisplit\v!auto -     {\ifinsidesplitfloat\let\@@tisplit\v!yes\fi}% -   \doifinsetelse\@@tisplit{\v!yes,\v!repeat} -     {\unexpanded\def\stoptable{\stoptables\egroup}% -      \starttables} -     {\doifelsenothing\@@tiframe -        {\ifinsidefloat\else\startbaselinecorrection\fi} -        {\startframedcontent[\@@tiframe]}% -      \postponenotes -      \firststagestarttable}% +   \edef\p_tabl_table_split{\directtablesparameter\c!split}% +   \edef\p_tabl_table_frame{\directtablesparameter\c!frame}% +   \ifx\p_tabl_table_split\v!auto +     \ifinsidesplitfloat +       \let\p_tabl_table_split\v!yes +       \lettablesparameter\c!split\v!yes % might be used later, best make a proper mode +     \fi +   \fi +   \ifx\p_tabl_table_split\v!yes +     \unexpanded\def\stoptable{\stoptables\egroup}% +     \starttables +   \else\ifx\p_tabl_table_split\v!repeat +     \unexpanded\def\stoptable{\stoptables\egroup}% +     \starttables +   \else +     \ifx\p_tabl_table_frame\empty +       \ifinsidefloat\else\startbaselinecorrection\fi +     \else +       \startframedcontent[\p_tabl_table_frame]% +     \fi +     \postponenotes +     \firststagestarttable +   \fi\fi     [#1]}  % We cannot define \unexpanded\def\dostoptable a ssomehow lookahead @@ -1365,12 +1374,14 @@       \globalletempty\dotabletail     \stoptablenoalign     \dofinishtable -   \doifelsenothing\@@tiframe -     {\ifinsidefloat\else +   \ifx\p_tabl_table_frame\empty +     \ifinsidefloat\else          \stopbaselinecorrection          \goodbreak % compensates all the nobreaks -      \fi} +     \fi +   \else       \stopframedcontent +   \fi     \egroup}  %D Before we can grab the argument, we have to make sure that @@ -1465,7 +1476,7 @@  % \def\doverysimpletableHL % todo  %   {\starttablenoalign -%      \expandafter\donormaltablefullrule\@@tiHLheight +%      \normalexpanded{\noexpand\donormaltablefullrule\m_tabl_table_HLheight}%  %    \stoptablenoalign}  \def\dorestarttable#1% @@ -1565,9 +1576,14 @@    {\bgroup     \let\stoptables\dostoptables     \splittablestrue -   \doifelse\@@tisplit\v!repeat -     {\settrue \tablerepeathead\settrue \tablerepeattail} -     {\setfalse\tablerepeathead\setfalse\tablerepeattail}% +   \edef\p_tabl_table_split{\directtablesparameter\c!split}% +   \ifx\p_tabl_table_split\v!repeat +     \settrue\tablerepeathead +     \settrue\tablerepeattail +   \else +     \setfalse\tablerepeathead +     \setfalse\tablerepeattail +   \fi     \flushnotes     \setbox\tablecontentbox\vbox\bgroup     \forgetall @@ -1899,7 +1915,7 @@  \def\dotablevrulecommand#1% global assignments    {\doifnumberelse{#1}       {\global\tablevrulethicknessfactor#1\relax -      \global\multiply\tablevrulethicknessfactor\@@tiVLwidth\relax} +      \global\multiply\tablevrulethicknessfactor\m_tabl_table_VLwidth\relax}       {\xdef\tablecurrentvrulecolor{#1}}}  \unexpanded\def\dotableVL @@ -1909,7 +1925,7 @@  \def\dodotableVL[#1]%    {\global\let\tablecurrentvrulecolor\empty -   \global\tablevrulethicknessfactor\@@tiVLwidth\relax +   \global\tablevrulethicknessfactor\m_tabl_table_VLwidth\relax     \iffirstargument       \rawprocesscommalist[#1]\dotablevrulecommand     \fi @@ -1933,7 +1949,7 @@  \def\dotablehrulecommand#1% global assignments    {\doifnumberelse{#1}       {\global\tablehrulethicknessfactor#1\relax -      \global\multiply\tablehrulethicknessfactor\@@tiHLheight\relax} +      \global\multiply\tablehrulethicknessfactor\m_tabl_table_HLheight\relax}       {\xdef\tablecurrenthrulecolor{#1}}}  \unexpanded\def\dotableHL @@ -1953,7 +1969,7 @@         \writestatus\m!TABLE{change \string\MR\space into \string\SR}%       \fi\fi       \bgroup -       \global\tablehrulethicknessfactor\@@tiHLheight\relax +       \global\tablehrulethicknessfactor\m_tabl_table_HLheight\relax         \iffirstargument           \global\let\tablecurrenthrulecolor\empty           \rawprocesscommalist[#1]\dotablehrulecommand @@ -2007,7 +2023,7 @@     \dosingleempty\dotableTB}  \def\dotableTB[#1]% -  {\blank[\iffirstargument#1\else\@@tiNL\fi]% +  {\blank[\iffirstargument#1\else\directtablesparameter\c!NL\fi]%     \nobreak     \stoptablenoalign} @@ -2056,7 +2072,7 @@          \global\tabledrulespan#1\relax        \else          \global\tablehrulethicknessfactor#1\relax -        \global\multiply\tablehrulethicknessfactor\@@tiVLwidth\relax +        \global\multiply\tablehrulethicknessfactor\m_tabl_table_VLwidth\relax        \fi}       {\xdef\tablecurrenthrulecolor{#1}}} @@ -2074,7 +2090,7 @@         \writestatus\m!TABLE{change \string\MR\space into \string\SR}%       \fi\fi       \dosettableaction\tableunknownstate -     \global\tablehrulethicknessfactor\@@tiHLheight\relax +     \global\tablehrulethicknessfactor\m_tabl_table_HLheight\relax       \global\tabledrulespan\zerocount       \iffirstargument         \global\let\tablecurrenthrulecolor\empty @@ -2136,17 +2152,28 @@    \let\REF  \dotablereformat  \to \localtabledefinitions -\setvalue{\??ti:\c!distance:\v!none  }{\dotableOpenUp00\def\LOW{\Lower6 }} -\setvalue{\??ti:\c!distance:\v!small }{\dotableOpenUp00\def\LOW{\Lower6 }} % == baseline -\setvalue{\??ti:\c!distance:\v!medium}{\dotableOpenUp11\def\LOW{\Lower7 }} -\setvalue{\??ti:\c!distance:\v!big   }{\dotableOpenUp22\def\LOW{\Lower8 }} +\installcorenamespace{tables} +\installcorenamespace{tabledistance} +\installcorenamespace{tablealign} + +\installsetuponlycommandhandler \??tables {tables} % some day we can have named tables + +\setvalue{\??tabledistance\v!none  }{\dotableOpenUp00\def\LOW{\Lower6 }} +\setvalue{\??tabledistance\v!small }{\dotableOpenUp00\def\LOW{\Lower6 }} % == baseline +\setvalue{\??tabledistance\v!medium}{\dotableOpenUp11\def\LOW{\Lower7 }} +\setvalue{\??tabledistance\v!big   }{\dotableOpenUp22\def\LOW{\Lower8 }}  \appendtoks -    \getvalue{\??ti:\c!distance:\@@tidistance}% +    \expandcheckedcsname\??tabledistance{\directtablesparameter\c!distance}\v!medium  \to \localtabledefinitions +\setvalue{\??tablealign\v!right  }{\def\dotableparalignment{\raggedright}} +\setvalue{\??tablealign\v!left   }{\def\dotableparalignment{\raggedleft}} +\setvalue{\??tablealign\v!middle }{\def\dotableparalignment{\raggedcenter}} +\setvalue{\??tablealign\s!unknown}{\def\dotableparalignment{\notragged}} +  \appendtoks -  \doifelse\@@tidistance\v!none +  \doifelse{\directtablesparameter\c!distance}\v!none      {\tablerowfactor\zerocount}      {\tablerowfactor\plustwo  }%  \to \localtabledefinitions @@ -2160,31 +2187,28 @@       \@EAEAEA\dotextmodebar     \fi\fi} -\unexpanded\def\setuptables -  {\dosingleargument\dosetuptables} - -\def\dosetuptables[#1]% -  {\getparameters[\??ti][#1]% -   \processaction % we have a command for this -     [\@@tialign] -     [  \v!right=>\def\dotableparalignment{\raggedright}, -         \v!left=>\def\dotableparalignment{\raggedleft}, -       \v!middle=>\def\dotableparalignment{\raggedcenter}, -      \s!default=>\def\dotableparalignment{\notragged}, -      \s!unknown=>\def\dotableparalignment{\notragged}]% -   \assignalfadimension\@@tiVL\@@tiVLwidth 246% -   \assignalfadimension\@@tiHL\@@tiHLheight246} +\appendtoks +   \expandcheckedcsname\??tablealign{\directtablesparameter\c!align}\s!unknown +   \assignalfadimension{\directtablesparameter\c!VL}\m_tabl_table_VLwidth 246% +   \assignalfadimension{\directtablesparameter\c!HL}\m_tabl_table_HLheight246% +\to \everysetuptables  \def\dolocaltablesetup -  {\@@ticommands\relax -   \doifsomething\@@tibodyfont{\switchtobodyfont[\@@tibodyfont]}% -   \tablelinethicknessunit\dimexpr\@@tirulethickness/\tablelinethicknessfactor\relax -   \doifelse\@@tiheight\v!strut -     {\let\tablestrutheightfactor\tablestrutheightfactor} -     {\let\tablestrutheightfactor\@@tiheight}% -   \doifelse\@@tidepth\v!strut -     {\let\tablestrutdepthfactor\tablestrutdepthfactor} -     {\let\tablestrutdepthfactor\@@tidepth}% +  {\directtablesparameter\c!commands\relax +   \doifsomething{\directtablesparameter\c!bodyfont}{\switchtobodyfont[\directtablesparameter\c!bodyfont]}% +   \tablelinethicknessunit\dimexpr\directtablesparameter\c!rulethickness/\tablelinethicknessfactor\relax +   \edef\p_tabl_table_height{\directtablesparameter\c!height}% +   \edef\p_tabl_table_depth{\directtablesparameter\c!depth}% +   \ifx\p_tabl_table_height\v!strut +     \let\tablestrutheightfactor\tablestrutheightfactor +   \else +     \let\tablestrutheightfactor\p_tabl_table_height +   \fi +   \ifx\p_tabl_table_depth\v!strut +     \let\tablestrutdepthfactor\tablestrutdepthfactor +   \else +     \let\tablestrutdepthfactor\p_tabl_table_depth +   \fi     \edef\tablestrutheightfactor{\withoutpt\the\dimexpr10\dimexpr\tablestrutheightfactor\points}%     \edef\tablestrutdepthfactor {\withoutpt\the\dimexpr10\dimexpr\tablestrutdepthfactor \points}%     \tablestrutunit\dimexpr\normalbaselineskip/12\relax % 12 is default bodyfont @@ -2243,9 +2267,9 @@  %D \stopcombination  \setuptables -  [HL=\v!medium, -   VL=\v!medium, -   NL=\v!small, +  [\c!HL=\v!medium, +   \c!VL=\v!medium, +   \c!NL=\v!small,     \c!frame=,     \c!align=\v!right,     \c!depth=.40, % \v!strut @@ -2256,8 +2280,8 @@     \c!distance=\v!medium,     \c!bodyfont=,     \c!commands=, -   \c!background=\v!screen, -   \c!backgroundscreen=\@@rsscreen, +   \c!background=\v!screen, % huh? +   \c!backgroundscreen=\defaultbackgroundscreen,     \c!backgroundcolor=,     \c!split=\v!auto] diff --git a/tex/context/base/tabl-tsp.mkiv b/tex/context/base/tabl-tsp.mkiv index 34d3df780..5777059a5 100644 --- a/tex/context/base/tabl-tsp.mkiv +++ b/tex/context/base/tabl-tsp.mkiv @@ -98,7 +98,7 @@     \def\splitfloatcommand{#2}%     \global\settrue \onlyonesplitofffloat     \global\setfalse\somenextsplitofffloat -   \dopushsavedfloats +   \page_floats_push_saved     \floatsplittingparameter\c!before     \let\next} % \bgroup @@ -156,8 +156,8 @@       \fi     \else       \floatsplittingparameter\c!after -     \dopopsavedfloats -     \doflushsavedfloats +     \page_floats_pop_saved +     \page_floats_flush_saved     \fi     \global\settrue\splitfloatfirstdone} diff --git a/tex/context/base/typo-brk.mkiv b/tex/context/base/typo-brk.mkiv index 029f4402f..62fd72fce 100644 --- a/tex/context/base/typo-brk.mkiv +++ b/tex/context/base/typo-brk.mkiv @@ -38,14 +38,14 @@  \def\typo_breakpoints_define_character[#1][#2][#3]% name char settings    {\begingroup -   \getparameters[\??bp][\c!type=1,\c!nleft=3,\c!nright=3,\s!language=,\c!left=,\c!right=,\c!middle=,#3]% -   \ctxcommand{definebreakpoint("#1", "#2", "\reallanguagetag\@@bplanguage", { -          type =  \@@bptype, -         nleft = "\@@bpnleft", -        nright = "\@@bpnright", -         right = "\@@bpright", -          left = "\@@bpleft", -        middle = "\@@bpmiddle" +   \getdummyparameters[\c!type=1,\c!nleft=3,\c!nright=3,\s!language=,\c!left=,\c!right=,\c!middle=,#3]% +   \ctxcommand{definebreakpoint("#1", "#2", "\reallanguagetag{\directdummyparameter\s!language}", { % maybe deal with #3 at the lua end +          type =  \directdummyparameter\c!type, +         nleft = "\directdummyparameter\c!nleft", +        nright = "\directdummyparameter\c!nright", +         right = "\directdummyparameter\c!right", +          left = "\directdummyparameter\c!left", +        middle = "\directdummyparameter\c!middle"     } )}%     \endgroup} diff --git a/tex/context/base/typo-cap.mkiv b/tex/context/base/typo-cap.mkiv index 28ced7c42..feab6b35d 100644 --- a/tex/context/base/typo-cap.mkiv +++ b/tex/context/base/typo-cap.mkiv @@ -183,21 +183,22 @@  %D  %D \showsetup{setupcapitals} -\let\normalsmallcapped\smallcapped +\installcorenamespace{capitals} -\definesystemvariable{kk} +\installsetuponlycommandhandler \??capitals {capitals} -\unexpanded\def\setupcapitals -  {\dosingleempty\typo_capitals_setup} +\let\normalsmallcapped\smallcapped -\def\typo_capitals_setup[#1]% todo: don't use grouping just a switch -  {\getparameters[\??kk][#1]% -   \doifelse\@@kktitle\v!yes -     {\definealternativestyle[\v!capital  ][\normalsmallcapped][\normalsmallcapped]% -      \definealternativestyle[\v!smallcaps][\sc               ][\sc               ]} -     {\definealternativestyle[\v!capital  ][\normalsmallcapped][\normalWORD       ]% -      \definealternativestyle[\v!smallcaps][\sc               ][\normalWORD       ]}% -   \doifelse\@@kksc\v!yes\userealcaps\usepseudocaps} +\appendtoks +    \doifelse{\directcapitalsparameter\c!title}\v!yes +      {\definealternativestyle[\v!capital  ][\normalsmallcapped][\normalsmallcapped]% +       \definealternativestyle[\v!smallcaps][\sc               ][\sc               ]} +      {\definealternativestyle[\v!capital  ][\normalsmallcapped][\normalWORD       ]% +       \definealternativestyle[\v!smallcaps][\sc               ][\normalWORD       ]}% +    \doifelse{\directcapitalsparameter\s!sc}\v!yes +      \userealcaps +      \usepseudocaps +\to \everysetupcapitals  \let\uppercased\normalWORD  \let\lowercased\normalword diff --git a/tex/context/base/typo-del.mkiv b/tex/context/base/typo-del.mkiv index b2213db65..7c36ef3c8 100644 --- a/tex/context/base/typo-del.mkiv +++ b/tex/context/base/typo-del.mkiv @@ -17,14 +17,19 @@  % THIS IS OBSOLETE: -\unexpanded\def\setuphyphenmark -  {\dodoubleargument\getparameters[\??kp]} +\installcorenamespace{hyphenmarksign} % let's not waste a setuphandler (yet)  \unexpanded\def\setuphyphenmark[#1]% sign=normal|wide -  {\dodoubleargument\getparameters[\??kp][#1]% -   \doifelse\@@kpsign {\v!normal}% was inset? -     {\let\textmodehyphen\normalhyphen  \let\textmodehyphendiscretionary\normalhyphendiscretionary} -     {\let\textmodehyphen\composedhyphen\let\textmodehyphendiscretionary\composedhyphendiscretionary}} +  {\getdummyparameters[#1]% +   \expandcheckedcsname\??hyphenmarksign{\dummyparameter\c!sign}\v!normal} + +\setvalue{\??hyphenmarksign\v!normal}% +  {\let\textmodehyphen\normalhyphen +   \let\textmodehyphendiscretionary\normalhyphendiscretionary} + +\setvalue{\??hyphenmarksign\v!wide}% +  {\let\textmodehyphen\composedhyphen +   \let\textmodehyphendiscretionary\composedhyphendiscretionary}  \setuphyphenmark[\c!sign=\v!wide] @@ -32,19 +37,19 @@  \definesymbol[\c!righthyphen] [\languageparameter\c!righthyphen]  \definesymbol[\c!hyphen]      [\languageparameter\c!hyphen] -\def\normalhyphen +\unexpanded\def\normalhyphen    {\hbox{\directsymbol\empty\c!hyphen}} -\def\composedhyphen +\unexpanded\def\composedhyphen    {\hbox{\directsymbol\empty\c!compoundhyphen}} -\def\normalhyphendiscretionary +\unexpanded\def\normalhyphendiscretionary    {\discretionary       {\hbox{\directsymbol\empty\c!righthyphen}}       {\hbox{\directsymbol\empty\c!lefthyphen}}       {\hbox{\directsymbol\empty\c!hyphen}}} -\def\composedhyphendiscretionary +\unexpanded\def\composedhyphendiscretionary    {\discretionary       {\hbox{\directsymbol\empty\c!rightcompoundhyphen}}       {\hbox{\directsymbol\empty\c!leftcompoundhyphen}} @@ -219,8 +224,10 @@    [\c!middlespeech]    [\leftboundarycharacter\c!middlespeech{speech}] -\appendtoks\def\quotation#1{"#1"}\to\simplifiedcommands -\appendtoks\def\quote    #1{'#1'}\to\simplifiedcommands +\appendtoks +    \def\quotation#1{"#1"}% +    \def\quote    #1{'#1'}% +\to \everysimplifycommands  %D The next features was so desperately needed by Giuseppe  %D Bilotta that he made a module for it. Since this is a diff --git a/tex/context/base/typo-spa.mkiv b/tex/context/base/typo-spa.mkiv index 0cfe44610..df2dab47c 100644 --- a/tex/context/base/typo-spa.mkiv +++ b/tex/context/base/typo-spa.mkiv @@ -25,7 +25,12 @@  \installcorenamespace{characterspacing} -\definesystemvariable{cs} % maybe a dummy namespace +\installsetuponlycommandhandler \??characterspacing {_p_characterspacing} % private + +\setup_p_characterspacing +  [\c!left=0, +   \c!right=0, +   \c!alternative=0]  \unexpanded\def\definecharacterspacing[#1]%    {\ctxcommand{definecharacterspacing("#1")}} @@ -35,11 +40,11 @@  \def\typo_characterspacing_setup[#1][#2][#3]% todo: #2 list    {\begingroup -   \getparameters[\??cs][\c!left=0,\c!right=0,\c!alternative=0,#3]% -   \ctxcommand{setupcharacterspacing("#1",\number#2, { -      left        = \@@csleft, -      right       = \@@csright, -      alternative = \@@csalternative +   \setupcurrent_p_characterspacing[#3]% +   \ctxcommand{setupcharacterspacing("#1",\number#2, { % todo: just pass #3 to the lua end +      left        = \direct_p_characterspacingparameter\c!left, +      right       = \direct_p_characterspacingparameter\c!right, +      alternative = \direct_p_characterspacingparameter\c!alternative      })}%     \endgroup} diff --git a/tex/generic/context/luatex/luatex-fonts-merged.lua b/tex/generic/context/luatex/luatex-fonts-merged.lua index 609b93658..5d05b55fe 100644 --- a/tex/generic/context/luatex/luatex-fonts-merged.lua +++ b/tex/generic/context/luatex/luatex-fonts-merged.lua @@ -1,6 +1,6 @@  -- merged file : luatex-fonts-merged.lua  -- parent file : luatex-fonts.lua --- merge date  : 06/30/12 12:32:51 +-- merge date  : 07/04/12 10:42:10  do -- begin closure to overcome local limits and interference  | 
