diff options
Diffstat (limited to 'tex/context/base/spac-hor.mkiv')
-rw-r--r-- | tex/context/base/spac-hor.mkiv | 499 |
1 files changed, 240 insertions, 259 deletions
diff --git a/tex/context/base/spac-hor.mkiv b/tex/context/base/spac-hor.mkiv index 4ef39b67a..1e2f07465 100644 --- a/tex/context/base/spac-hor.mkiv +++ b/tex/context/base/spac-hor.mkiv @@ -17,11 +17,10 @@ \registerctxluafile{spac-hor}{1.001} -\let\currentindentation\empty % amount/keyword -\let\currentindenting \empty % method +\let\v_spac_indentation_current\empty % amount/keyword -\newdimen \ctxparindent -\parindent\ctxparindent % for the show +\newdimen \d_spac_indentation_par +\parindent\d_spac_indentation_par % for the show \newconditional\c_spac_indentation_indent_first \settrue\c_spac_indentation_indent_first \newconstant \c_spac_indentation_toggle_state @@ -29,29 +28,31 @@ %D After a blank or comparable situation (left side floats) we %D need to check if the next paragraph has to be indented. -\def\presetindentation +\unexpanded\def\presetindentation {\doifoutervmode{\ifconditional\c_spac_indentation_indent_first\else\spac_indentation_variant_no\fi}} \unexpanded\def\setupindenting {\doifnextoptionalelse\spac_indentation_setup_options\spac_indentation_setup_size} \def\spac_indentation_setup_size - {\assigndimension\currentindentation\ctxparindent{1\emwidth}{1.5\emwidth}{2\emwidth}} + {\assigndimension\v_spac_indentation_current\d_spac_indentation_par{1\emwidth}{1.5\emwidth}{2\emwidth}} \let\synchronizeindenting\spac_indentation_setup_size +\let\m_spac_indentation_options\empty + \def\spac_indentation_setup_options[#1]% - {\edef\currentindenting{#1}% comma separated list - \ifx\currentindenting\empty \else + {\edef\m_spac_indentation_options{#1}% comma separated list + \ifx\m_spac_indentation_options\empty \else \spac_indentation_setup_indeed \fi} \def\spac_indentation_setup_indeed {% not here: \settrue\c_spac_indentation_indent_first - % not here: \parindent\ctxparindent + % not here: \parindent\d_spac_indentation_par % not here: \c_spac_indentation_toggle_state\zerocount - \processcommacommand[\currentindenting]\spac_indentation_apply_step_one % catch small, medium, etc - \processcommacommand[\currentindenting]\spac_indentation_apply_step_two % catch rest + \processcommacommand[\m_spac_indentation_options]\spac_indentation_apply_step_one % catch small, medium, etc + \processcommacommand[\m_spac_indentation_options]\spac_indentation_apply_step_two % catch rest \ifzeropt\parindent\else \doifemptytoks\everypar\spac_indentation_set_everypar \fi @@ -64,17 +65,17 @@ {\everypar{\checkindentation}} \def\spac_indentation_apply_step_one#1% - {\ifcsname\??indenting#1\endcsname + {\ifcsname\??indentingmethod#1\endcsname % case two \else - \edef\currentindentation{#1}% single entry in list - \let\normalindentation\currentindentation + \edef\v_spac_indentation_current{#1}% single entry in list + \let\normalindentation\v_spac_indentation_current \spac_indentation_setup_size \fi} \def\spac_indentation_apply_step_two#1% - {\ifcsname\??indenting#1\endcsname - \csname\??indenting#1\endcsname + {\ifcsname\??indentingmethod#1\endcsname + \csname\??indentingmethod#1\endcsname \else % case one \fi} @@ -84,47 +85,47 @@ % use \noindentation to suppress next indentation -\installcorenamespace{indenting} +\installcorenamespace{indentingmethod} -\unexpanded\def\defineindentingmethod[#1]#2% - {\setvalue{\??indenting#1}{#2}} +\unexpanded\def\installindentingmethod#1#2% + {\setvalue{\??indentingmethod#1}{#2}} -\defineindentingmethod [\v!no] {\parindent\zeropoint}% was: \ctxparindent\noindent} -\defineindentingmethod [\v!not] {\parindent\zeropoint}% was: \ctxparindent\noindent} +\installindentingmethod \v!no {\parindent\zeropoint} +\installindentingmethod \v!not {\parindent\zeropoint} -\defineindentingmethod [\v!first] {\settrue\c_spac_indentation_indent_first} -\defineindentingmethod [\v!next] {\setfalse\c_spac_indentation_indent_first} +\installindentingmethod \v!first {\settrue\c_spac_indentation_indent_first} +\installindentingmethod \v!next {\setfalse\c_spac_indentation_indent_first} -\defineindentingmethod [\v!yes] {\parindent\ctxparindent\relax} % no \indent ! -\defineindentingmethod [\v!always] {\parindent\ctxparindent\relax} % no \indent ! +\installindentingmethod \v!yes {\parindent\d_spac_indentation_par\relax} % not \indent ! +\installindentingmethod \v!always{\parindent\d_spac_indentation_par\relax} % not \indent ! -\defineindentingmethod [\v!never] {\parindent\zeropoint\relax % no \indent ! - \c_spac_indentation_toggle_state\zerocount} +\installindentingmethod \v!never {\parindent\zeropoint\relax % no \indent ! + \c_spac_indentation_toggle_state\zerocount} -\defineindentingmethod [\v!odd] {\c_spac_indentation_toggle_state\plusone} -\defineindentingmethod [\v!even] {\c_spac_indentation_toggle_state\plustwo} +\installindentingmethod \v!odd {\c_spac_indentation_toggle_state\plusone} +\installindentingmethod \v!even {\c_spac_indentation_toggle_state\plustwo} -\defineindentingmethod [\v!normal] {\ifx\normalindentation\empty\else - \let\currentindentation\normalindentation - \simplesetupindenting - \fi} +\installindentingmethod \v!normal{\ifx\normalindentation\empty\else + \let\v_spac_indentation_current\normalindentation + \simplesetupindenting + \fi} -\defineindentingmethod [\v!reset] {\settrue\c_spac_indentation_indent_first - \parindent\zeropoint - \c_spac_indentation_toggle_state\zerocount} +\installindentingmethod \v!reset {\settrue\c_spac_indentation_indent_first + \parindent\zeropoint + \c_spac_indentation_toggle_state\zerocount} -\defineindentingmethod [\v!toggle] {\parindent\ifdim\parindent=\zeropoint - \ctxparindent - \else - \zeropoint - \fi\relax} +\installindentingmethod \v!toggle{\parindent\ifdim\parindent=\zeropoint + \d_spac_indentation_par + \else + \zeropoint + \fi\relax} \unexpanded\def\noindenting{\indenting[\v!no, \v!next ]} \unexpanded\def\doindenting{\indenting[\v!yes,\v!first]} %D Here come the handlers (still rather messy ... we need states). -\newif\ifindentation \indentationtrue % documenteren, naar buiten +\newif\ifindentation \indentationtrue % will become a mode \let\checkindentation\relax @@ -277,7 +278,17 @@ %D \input tufte \startformula a = b \stopformula %D \stoptyping -\def\softbreak +% maybe an everyforgetparindent + +\unexpanded\def\forgetparindent + {\settrue\c_spac_indentation_indent_first % recently added + \d_spac_indentation_par\zeropoint + \parindent\zeropoint + \let\v_spac_indentation_current\v!none} + +%D Helper: + +\unexpanded\def\softbreak {\relax\ifhmode\hskip\parfillskip\break\fi} %D \macros @@ -289,7 +300,7 @@ %D Hm ... todo: -\installcorenamespace{spacecodemethods} +\installcorenamespace{spacecodemethod} \sfcode`\)=\zerocount \sfcode`\'=\zerocount @@ -309,18 +320,18 @@ \unexpanded\def\newfrenchspacing{\spac_spacecodes_set_fixed{1050}} \unexpanded\def\nonfrenchspacing{\spac_spacecodes_set_stretch} -\unexpanded\def\definespacingmethod[#1]#2{\setvalue{\??spacecodemethods#1}{#2}} +\unexpanded\def\installspacingmethod#1#2{\setvalue{\??spacecodemethod#1}{#2}} -\definespacingmethod[\empty] {} % keep values -\definespacingmethod[\v!fixed] {\frenchspacing } % equal spaces everywhere -\definespacingmethod[\v!packed]{\newfrenchspacing} % slighly more after punctuation -\definespacingmethod[\v!broad ]{\nonfrenchspacing} % more depending on what punctuation +\installspacingmethod \empty {} % keep values +\installspacingmethod \v!fixed {\frenchspacing } % equal spaces everywhere +\installspacingmethod \v!packed {\newfrenchspacing} % slighly more after punctuation +\installspacingmethod \v!broad {\nonfrenchspacing} % more depending on what punctuation \unexpanded\def\setupspacing {\doifnextoptionalelse\spac_spacecodes_setup_yes\spac_spacecodes_setup_nop} \def\spac_spacecodes_setup_yes[#1]% - {\csname\??spacecodemethods#1\endcsname + {\csname\??spacecodemethod#1\endcsname \updateraggedskips} % not needed, as sf codes are static \def\spac_spacecodes_setup_nop @@ -370,9 +381,9 @@ \letcatcodecommand \ctxcatcodes \tildeasciicode \nonbreakablespace % overloaded later -\def\space { } -\def\removelastspace{\ifhmode\unskip\fi} -\def\nospace {\removelastspace\ignorespaces} + \def\space { } +\unexpanded\def\removelastspace{\ifhmode\unskip\fi} +\unexpanded\def\nospace {\removelastspace\ignorespaces} \ifdefined\softhyphen \else \let\softhyphen\- \fi @@ -389,7 +400,7 @@ {\setbox\scratchbox\hbox{\mathortext{0}{0}}% \hskip\wd\scratchbox\relax} -\def\fixedspaces +\unexpanded\def\fixedspaces {\letcatcodecommand \ctxcatcodes \tildeasciicode \fixedspace} \appendtoks @@ -406,7 +417,7 @@ {\ifnum\lastnodetype=\gluenodecode \unskip \expandafter\spac_helpers_remove_unwantedspace \fi} - + % \startbuffer % \startlines \tt \fixedspaces % 0~1~~2~~~3~~~~4~~~~~5 @@ -431,7 +442,7 @@ %D A couple of plain macros: -\ifx\thinspace\undefined +\ifdefined\thinspace \else \def\thinspace {\kern .16667\emwidth} \def\negthinspace{\kern-.16667\emwidth} @@ -439,7 +450,7 @@ \fi -\ifx\quad\undefined +\ifdefined\quad \else \def\enskip{\hskip.5\emwidth} \def\quad {\hskip \emwidth} @@ -455,242 +466,210 @@ % Bovendien definieren we enkele extra \fill's: -\def\hfilll{\hskip\zeropoint\!!plus1filll\relax} -\def\vfilll{\vskip\zeropoint\!!plus1filll\relax} - -% De onderstaande hulpmacro's moeten nog eens instelbaar worden -% gemaakt. +\unexpanded\def\hfilll{\hskip\zeropoint\!!plus1filll\relax} +\unexpanded\def\vfilll{\vskip\zeropoint\!!plus1filll\relax} -\def\tfskipsize{1em\relax} -\def\tfkernsize{1ex\relax} +\unexpanded\def\tfskip {\begingroup\tf\hskip\emwidth\endgroup} +\unexpanded\def\dotfskip#1{\begingroup\tf\hskip #1\endgroup} % used elsewhere -\def\tfskip{\dotfskip\tfskipsize} -\def\tfkern{\dotfkern\tfkernsize} - -\def\dotfskip#1{{\tf\hskip#1}} -\def\dotfkern#1{{\tf\kern #1}} - % needs a proper \definenarrower or installnarrower - -\newskip\ctxleftskip -\newskip\ctxrightskip -\newskip\ctxmidskip - -% \def\dosinglenarrower#1% -% {\processaction -% [#1] -% [ \v!left=>\global\advance\ctxleftskip \@@slleft, -% \v!middle=>\global\advance\ctxmidskip \@@slmiddle, -% \v!right=>\global\advance\ctxrightskip \@@slright, -% \v!reset=>\global\ctxleftskip \zeropoint -% \global\ctxmidskip \zeropoint -% \global\ctxrightskip\zeropoint, -% \v!none=>, -% \s!unknown=>\global\advance\ctxmidskip \commalistelement]} - -\def\donarrower[#1]% hm, can be dorepeat directly - {\dorepeatwithcommand[#1]\donarrowermethod} - -\unexpanded\def\definenarrowermethod[#1]#2% - {\setvalue{\??sl:#1}{#2}} - -\def\donarrowermethod#1% - {\ifcsname\??sl:#1\endcsname\csname\??sl:#1\endcsname\else\global\advance\ctxmidskip#1\relax\fi} - -\definenarrowermethod[\v!left ]{\global\advance\ctxleftskip \@@slleft \relax} -\definenarrowermethod[\v!middle ]{\global\advance\ctxmidskip \@@slmiddle\relax} -\definenarrowermethod[\v!right ]{\global\advance\ctxrightskip \@@slright \relax} -\definenarrowermethod[-\v!left ]{\global\advance\ctxleftskip -\@@slleft \relax} -\definenarrowermethod[-\v!middle]{\global\advance\ctxmidskip -\@@slmiddle\relax} -\definenarrowermethod[-\v!right ]{\global\advance\ctxrightskip-\@@slright \relax} -\definenarrowermethod[\v!reset ]{\global\ctxleftskip \zeropoint - \global\ctxmidskip \zeropoint - \global\ctxrightskip\zeropoint\relax} -\definenarrowermethod[\v!none ]{} - -% todo: definenarrower -% -% \definecomplexorsimple\startnarrower -% -% \def\simplestartnarrower -% {\startnarrower[\v!middle]} -% -% \def\complexstartnarrower[#1]% -% {\@@slbefore % was hard coded \par -% \bgroup -% \global\ctxleftskip \zeropoint -% \global\ctxrightskip\zeropoint -% \global\ctxmidskip \zeropoint -% \processcommalistwithparameters[#1]\donarrower -% \advance\leftskip \dimexpr\ctxleftskip +\ctxmidskip\relax -% \advance\rightskip \dimexpr\ctxrightskip+\ctxmidskip\relax -% \seteffectivehsize} -% -% \unexpanded\def\stopnarrower -% {\@@slafter % was hard coded \par / needed, else skips forgotten -% \egroup} % -% \unexpanded\def\setupnarrower -% {\dodoubleargument\getparameters[\??sl]} +% maybe we should hash the analysis -%D Contrary to \MKII\ we can now define classes of narrower (generalized -%D by Wolfgang). This environment will be enhanced for bidi. +\installcorenamespace{narrower} +\installcorenamespace{narrowermethod} -\def\narrowerparameter #1{\csname\donarrowerparameter{\??sl\@@narrower}#1\endcsname} -\def\donarrowerparameter #1#2{\ifcsname#1#2\endcsname#1#2\else\expandafter\donarrowerparentparameter\csname#1\s!parent\endcsname#2\fi} -\def\donarrowerparentparameter#1#2{\ifx#1\relax\s!empty\else\donarrowerparameter#1#2\fi} +\newskip\s_spac_narrower_left +\newskip\s_spac_narrower_right +\newskip\s_spac_narrower_mid -\getparameters - [\??sl] +\installcommandhandler \??narrower {narrower} \??narrower + +\setupnarrower [\c!before=\endgraf, \c!after=\endgraf, - \c!left=1.5em, - \c!right=1.5em, - \c!middle=1.5em] - -\unexpanded\def\definenarrower - {\dodoubleempty\dodefinenarrower} - -\def\dodefinenarrower[#1][#2]% - {\getparameters[\??sl#1][\s!parent=\??sl,#2]% - \unexpanded\setvalue{\e!start#1}{\dodoubleempty\dostartnarrower[#1]}% - \unexpanded\setvalue{\e!stop #1}{\dostopnarrower}} - -\unexpanded\def\setupnarrower - {\dodoubleempty\dosetupnarrower} - -\def\dosetupnarrower[#1][#2]% - {\doifelsenothing{#2} - {\getparameters[\??sl][#1]} - {\def\docommand##1{\getparameters[\??sl##1][#2]}% - \processcommacommand[#1]\docommand}} - -\definenarrowermethod[\v!left ]{\global\advance\ctxleftskip \narrowerparameter\c!left \relax} -\definenarrowermethod[\v!middle ]{\global\advance\ctxmidskip \narrowerparameter\c!middle\relax} -\definenarrowermethod[\v!right ]{\global\advance\ctxrightskip \narrowerparameter\c!right \relax} -\definenarrowermethod[-\v!left ]{\global\advance\ctxleftskip -\narrowerparameter\c!left \relax} -\definenarrowermethod[-\v!middle]{\global\advance\ctxmidskip -\narrowerparameter\c!middle\relax} -\definenarrowermethod[-\v!right ]{\global\advance\ctxrightskip-\narrowerparameter\c!right \relax} -\definenarrowermethod[\v!reset ]{\global\ctxleftskip \zeropoint - \global\ctxmidskip \zeropoint - \global\ctxrightskip\zeropoint\relax} -\definenarrowermethod[\v!none ]{} - -\def\dostartnarrower[#1][#2]% - {\bgroup - \ifsecondargument % \doifsomethingelse{#2}? - \dodostartnarrower[#1][#2]% + \c!left=1.5\emwidth, + \c!right=1.5\emwidth, + \c!middle=1.5\emwidth, + \c!default=\v!middle] + +\appendtoks + \setuevalue{\e!start\currentnarrower}{\spac_narrower_start{\currentnarrower}}% + \setuevalue{\e!stop \currentnarrower}{\spac_narrower_stop}% +\to \everydefinenarrower + +\unexpanded\def\installnarrowermethod#1#2% + {\setvalue{\??narrowermethod#1}{#2}} + +\unexpanded\def\spac_narrower_method_analyze#1% + {\ifcsname\??narrowermethod#1\endcsname + \csname\??narrowermethod#1\endcsname + \else + \global\advance\s_spac_narrower_mid#1\relax + \fi} + +\def\spac_narrower_initialize[#1]% hm, can be dorepeat directly + {\dorepeatwithcommand[#1]\spac_narrower_method_analyze} + +\installnarrowermethod \v!left {\global\advance\s_spac_narrower_left \narrowerparameter\c!left \relax} +\installnarrowermethod \v!middle{\global\advance\s_spac_narrower_mid \narrowerparameter\c!middle\relax} +\installnarrowermethod \v!right {\global\advance\s_spac_narrower_right \narrowerparameter\c!right \relax} +\installnarrowermethod-\v!left {\global\advance\s_spac_narrower_left -\narrowerparameter\c!left \relax} +\installnarrowermethod-\v!middle{\global\advance\s_spac_narrower_mid -\narrowerparameter\c!middle\relax} +\installnarrowermethod-\v!right {\global\advance\s_spac_narrower_right-\narrowerparameter\c!right \relax} +\installnarrowermethod \v!reset {\global \s_spac_narrower_left \zeropoint + \global \s_spac_narrower_mid \zeropoint + \global \s_spac_narrower_right \zeropoint\relax} +\installnarrowermethod\v!none {} + +\unexpanded\def\spac_narrower_start#1% + {\begingroup + \edef\currentnarrower{#1}% + \dosingleempty\spac_narrower_start_indeed} + +\unexpanded\def\spac_narrower_start_indeed[#1]% + {\iffirstargument + \spac_narrower_start_apply{#1}% \else - \dodostartnarrower[#1][\v!middle]% + \spac_narrower_start_apply{\narrowerparameter\v!default}% \fi} -\def\dodostartnarrower[#1][#2]% - {\edef\@@narrower{#1}% - \narrowerparameter\c!before - \global\ctxleftskip \zeropoint - \global\ctxrightskip\zeropoint - \global\ctxmidskip \zeropoint - \processcommalistwithparameters[#2]\donarrower - \advance\leftskip \dimexpr\ctxleftskip +\ctxmidskip\relax - \advance\rightskip\dimexpr\ctxrightskip+\ctxmidskip\relax +\def\spac_narrower_start_apply#1% + {\narrowerparameter\c!before + \global\s_spac_narrower_left \zeropoint + \global\s_spac_narrower_right\zeropoint + \global\s_spac_narrower_mid \zeropoint + \processcommalistwithparameters[#1]\spac_narrower_initialize + \advance\leftskip \dimexpr\s_spac_narrower_left +\s_spac_narrower_mid\relax + \advance\rightskip\dimexpr\s_spac_narrower_right+\s_spac_narrower_mid\relax \seteffectivehsize} -\def\dostopnarrower +\unexpanded\def\spac_narrower_stop {\narrowerparameter\c!after - \egroup} + \endgroup} -\def\v!narrower{narrower} +\unexpanded\def\startnarrower + {\dosingleempty\spac_narrower_start_basic} -\definenarrower[\v!narrower] - -\newdimen\@@effectivehsize \def\effectivehsize {\hsize} -\newdimen\@@effectiveleftskip \def\effectiveleftskip {\leftskip} -\newdimen\@@effectiverightskip \def\effectiverightskip{\rightskip} +\unexpanded\def\spac_narrower_start_basic[#1]% + {\begingroup + \let\currentnarrower\empty + \iffirstargument + \spac_narrower_start_apply{#1}% + \else + \spac_narrower_start_apply{\narrowerparameter\v!default}% + \fi} + +\let\stopnarrower\spac_narrower_stop + +\unexpanded\def\startnarrow % current how + {\begingroup + \dodoubleempty\spac_narrower_start_named} + +\def\spac_narrower_start_named[#1][#2]% + {\edef\currentnarrower{#1}% + \ifsecondargument + \spac_narrower_start_apply{#2}% + \else + \spac_narrower_start_apply{\narrowerparameter\v!default}% + \fi} + +\let\stopnarrow\spac_narrower_stop -\def\seteffectivehsize +% \def\v!narrower{narrower} +% \definenarrower[\v!narrower] + +\newdimen\d_spac_effective_hsize \def\effectivehsize {\hsize} +\newdimen\d_spac_effective_leftskip \def\effectiveleftskip {\leftskip} +\newdimen\d_spac_effective_rightskip \def\effectiverightskip{\rightskip} + +\unexpanded\def\seteffectivehsize {\setlocalhsize - \@@effectivehsize \localhsize - \@@effectiveleftskip \leftskip - \@@effectiverightskip \rightskip - \let\effectivehsize \@@effectivehsize - \let\effectiveleftskip \@@effectiveleftskip - \let\effectiverightskip\@@effectiverightskip} + \d_spac_effective_hsize \localhsize + \d_spac_effective_leftskip \leftskip + \d_spac_effective_rightskip\rightskip + \let\effectivehsize \d_spac_effective_hsize + \let\effectiveleftskip \d_spac_effective_leftskip + \let\effectiverightskip\d_spac_effective_rightskip} + +\installcorenamespace{skipadaptionleft} +\installcorenamespace{skipadaptionright} \newskip\leftskipadaption \newskip\rightskipadaption -\setvalue{@lsa@\v!standard}{\ifdim\ctxparindent=\zeropoint\@@slleft\else\ctxparindent\fi} -\setvalue{@lsa@\v!yes }{\ifdim\ctxparindent=\zeropoint\@@slleft\else\ctxparindent\fi} -\letvalue{@lsa@\v!no }\zeropoint -\letvalue{@lsa@\empty }\zeropoint -\setvalue{@rsa@\v!standard}{\@@slright} -\setvalue{@rsa@\v!yes }{\@@slright} -\letvalue{@rsa@\v!no }\zeropoint -\letvalue{@rsa@\empty }\zeropoint +\setvalue{\??skipadaptionleft \v!standard}{\ifdim\d_spac_indentation_par=\zeropoint\narrowerparameter\c!left\else\d_spac_indentation_par\fi} +\setvalue{\??skipadaptionleft \v!yes }{\ifdim\d_spac_indentation_par=\zeropoint\narrowerparameter\c!left\else\d_spac_indentation_par\fi} +\letvalue{\??skipadaptionleft \v!no }\zeropoint +\letvalue{\??skipadaptionleft \empty }\zeropoint +\setvalue{\??skipadaptionright\v!standard}{\narrowerparameter\c!right} +\setvalue{\??skipadaptionright\v!yes }{\narrowerparameter\c!right} +\letvalue{\??skipadaptionright\v!no }\zeropoint +\letvalue{\??skipadaptionright\empty }\zeropoint -\def\dosetleftskipadaption #1{\leftskipadaption \ifcsname @lsa@#1\endcsname\csname @lsa@#1\endcsname\else#1\fi\relax} -\def\dosetrightskipadaption#1{\rightskipadaption\ifcsname @rsa@#1\endcsname\csname @rsa@#1\endcsname\else#1\fi\relax} +\unexpanded\def\dosetleftskipadaption #1{\leftskipadaption \ifcsname\??skipadaptionleft #1\endcsname\csname\??skipadaptionleft #1\endcsname\else#1\fi\relax} +\unexpanded\def\dosetrightskipadaption#1{\rightskipadaption\ifcsname\??skipadaptionright#1\endcsname\csname\??skipadaptionright#1\endcsname\else#1\fi\relax} -\def\doadaptleftskip #1{\dosetleftskipadaption {#1}\advance\leftskip \leftskipadaption } -\def\doadaptrightskip#1{\dosetrightskipadaption{#1}\advance\rightskip\rightskipadaption} +\unexpanded\def\doadaptleftskip #1{\dosetleftskipadaption {#1}\advance\leftskip \leftskipadaption } +\unexpanded\def\doadaptrightskip#1{\dosetrightskipadaption{#1}\advance\rightskip\rightskipadaption} -%D Tolerance: +%D Tolerance (can also be set with align): -\unexpanded\def\definetolerancemethod - {\dodoubleargument\dodefinetolerancemethod} +\installcorenamespace{tolerancemethods} -\def\dodefinetolerancemethod[#1][#2]#3% - {\setvalue{\??to:#1:#2}{#3}} +\unexpanded\def\installtolerancemethod#1#2#3% + {\setvalue{\??tolerancemethods#1:#2}{#3}} -\definetolerancemethod [\v!vertical] [\v!verystrict ] {\let\bottomtolerance\empty} -\definetolerancemethod [\v!vertical] [\v!strict ] {\def\bottomtolerance{.050}} -\definetolerancemethod [\v!vertical] [\v!tolerant ] {\def\bottomtolerance{.075}} -\definetolerancemethod [\v!vertical] [\v!verytolerant] {\def\bottomtolerance{.100}} +\installtolerancemethod \v!vertical \v!verystrict {\let\bottomtolerance\empty} +\installtolerancemethod \v!vertical \v!strict {\def\bottomtolerance{.050}} +\installtolerancemethod \v!vertical \v!tolerant {\def\bottomtolerance{.075}} +\installtolerancemethod \v!vertical \v!verytolerant {\def\bottomtolerance{.100}} -\definetolerancemethod [\v!horizontal] [\v!stretch ] {\emergencystretch\bodyfontsize} -\definetolerancemethod [\v!horizontal] [\v!space ] {\spaceskip.5em\!!plus.25em\!!minus.25em\relax} -\definetolerancemethod [\v!horizontal] [\v!verystrict ] {\tolerance 200 } -\definetolerancemethod [\v!horizontal] [\v!strict ] {\tolerance1500 } -\definetolerancemethod [\v!horizontal] [\v!tolerant ] {\tolerance3000 } -\definetolerancemethod [\v!horizontal] [\v!verytolerant] {\tolerance4500 } +\installtolerancemethod \v!horizontal \v!stretch {\emergencystretch\bodyfontsize} +\installtolerancemethod \v!horizontal \v!space {\spaceskip.5em\!!plus.25em\!!minus.25em\relax} +\installtolerancemethod \v!horizontal \v!verystrict {\tolerance 200 } +\installtolerancemethod \v!horizontal \v!strict {\tolerance1500 } +\installtolerancemethod \v!horizontal \v!tolerant {\tolerance3000 } +\installtolerancemethod \v!horizontal \v!verytolerant {\tolerance4500 } -\def\dotolerancencemethodvertical #1{\csname\??to:\v!vertical :#1\endcsname} -\def\dotolerancencemethodhorizontal#1{\csname\??to:\v!horizontal:#1\endcsname} - -\def\dosetuptolerance[#1]% - {\doifinsetelse\v!vertical{#1}% - {\processcommacommand[#1]\dotolerancencemethodvertical} - {\processcommacommand[#1]\dotolerancencemethodhorizontal}} +\def\spac_tolerances_step_vertical #1{\csname\??tolerancemethods\v!vertical :#1\endcsname} +\def\spac_tolerances_step_horizontal#1{\csname\??tolerancemethods\v!horizontal:#1\endcsname} \unexpanded\def\setuptolerance - {\dosingleargument\dosetuptolerance} + {\dosingleargument\spac_tolerances_setup} + +\def\spac_tolerances_setup[#1]% + {\doifinsetelse\v!vertical{#1}% + {\processcommacommand[#1]\spac_tolerances_step_vertical } + {\processcommacommand[#1]\spac_tolerances_step_horizontal}} %D \macros %D {pushindentation,popindentation} %D %D The pushing and popping is done by: -\newbox\indentationboxA -\newbox\indentationboxB +\newbox\b_spac_indentations_a +\newbox\b_spac_indentations_b -\def\pushindentation - {\bgroup +\unexpanded\def\pushindentation + {\begingroup \ifhmode \unskip - \setbox\indentationboxA\lastbox % get \strut if present + \setbox\b_spac_indentations_a\lastbox % get \strut if present \unskip - \setbox\indentationboxB\lastbox % get \indent generated box + \setbox\b_spac_indentations_b\lastbox % get \indent generated box \unskip \else - \hskip\zeropoint % switch to horizontal mode + \dontleavehmode % was \hskip\zeropoint % switch to horizontal mode \unskip - \setbox\indentationboxA\lastbox % get \indent generated box - \setbox\indentationboxB\emptybox + \setbox\b_spac_indentations_a\lastbox % get \indent generated box + \setbox\b_spac_indentations_b\emptybox \fi} -\def\popindentation - {\box\indentationboxB\box\indentationboxA % put back the boxes - \egroup} +\unexpanded\def\popindentation + {\box\b_spac_indentations_b + \box\b_spac_indentations_a + \endgroup} %D The only complication lays in \type{\strut}. In \PLAIN\ %D \TEX\ a \type{\strut} is defined as: @@ -736,7 +715,7 @@ % \unexpanded \def\crlf % {\ifhmode\unskip\else\strut\fi\ifcase\raggedstatus\hfil\fi\break} -\unexpanded \def\crlf +\unexpanded\def\crlf {\ifhmode \unskip \prewordbreak\crlfplaceholder @@ -747,11 +726,11 @@ \endgraf \fi} -\def\crlfplaceholder +\unexpanded\def\crlfplaceholder {\strut} -\def\settestcrlf - {\def\crlfplaceholder +\unexpanded\def\settestcrlf + {\unexpanded\def\crlfplaceholder {\hbox to \zeropoint {\strut{\infofont\kern.25em}\lohi{\infofont CR}{\infofont LF}\hss}}} @@ -822,6 +801,8 @@ \ifcsname\??hspace#1:#2\endcsname#1:#2\else:\v!none\fi \endcsname} +% no installhspace here (this is already an old command) + \definehspace [\v!small] [.25\emspaceamount] \definehspace [\v!medium] [.5\emspaceamount] \definehspace [\v!big] [1\emspaceamount] @@ -887,38 +868,38 @@ % % do we need \normalspaceprimitive here? -\installcorenamespace{spaces} +\installcorenamespace{spacemethods} + +\unexpanded\def\installspacemethod#1#2% needs to set \obeyedspace + {\setvalue{\??spacemethods#1}{#2}} -\def\installspacehandler#1#2% needs to set \obeyedspace - {\setvalue{\??spaces#1}{#2}} +\def\activatespacehandler#1% + {\csname\??spacemethods\ifcsname\??spacemethods#1\endcsname#1\else\v!off\fi\endcsname} \unexpanded\def\spac_spaces_checked_control{\mathortext\normalspace{\dontleavehmode{\tt\controlspace}}}% \unexpanded\def\spac_spaces_checked_normal {\mathortext\normalspace{\dontleavehmode\normalspace}}% \unexpanded\def\spac_spaces_checked_fixed {\mathortext\normalspace{\dontleavehmode\fixedspace}}% -\installspacehandler \v!on +\installspacemethod \v!on {\obeyspaces \let\obeyedspace\spac_spaces_checked_control \let\ =\obeyedspace} -\installspacehandler \v!yes +\installspacemethod \v!yes {\obeyspaces \let\obeyedspace\spac_spaces_checked_normal \let\ =\obeyedspace} -\installspacehandler \v!off % == default +\installspacemethod \v!off % == default {\normalspaces \let\obeyedspace\normalspace \let\ =\normalspaceprimitive} % was \normalspace -\installspacehandler \v!fixed +\installspacemethod \v!fixed {\obeyspaces \let\obeyedspace\spac_spaces_checked_fixed \let\ =\obeyedspace} -\def\activatespacehandler#1% - {\csname\??spaces\ifcsname\??spaces#1\endcsname#1\else\v!off\fi\endcsname} - \appendtoks \normalspaces % to be sure \to \everybeforeoutput |