diff options
author | Mojca Miklavec <mojca.miklavec@gmail.com> | 2012-05-14 17:38:55 +0000 |
---|---|---|
committer | Mojca Miklavec <mojca.miklavec@gmail.com> | 2012-05-14 17:38:55 +0000 |
commit | 15995e10bfc68edf79970c4ea4fbb6678566c46e (patch) | |
tree | 2de7ca2a83f2d37ef043ad7429a5cb945bb79ddb /Master/texmf-dist/tex/context/base/spac-hor.mkiv | |
parent | c9a39f716f1e5ec820ed3aab2c9aef25c5a9d730 (diff) |
ConTeXt 2012.05.14 16:00
git-svn-id: svn://tug.org/texlive/trunk@26371 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Master/texmf-dist/tex/context/base/spac-hor.mkiv')
-rw-r--r-- | Master/texmf-dist/tex/context/base/spac-hor.mkiv | 876 |
1 files changed, 447 insertions, 429 deletions
diff --git a/Master/texmf-dist/tex/context/base/spac-hor.mkiv b/Master/texmf-dist/tex/context/base/spac-hor.mkiv index 39edaa2ff00..eeb5cadfd5b 100644 --- a/Master/texmf-dist/tex/context/base/spac-hor.mkiv +++ b/Master/texmf-dist/tex/context/base/spac-hor.mkiv @@ -5,7 +5,7 @@ %D subtitle=Horizontal, %D author=Hans Hagen, %D date=\currentdate, -%D copyright={PRAGMA / Hans Hagen \& Ton Otten}] +%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 @@ -17,152 +17,176 @@ \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 -\newif\ifindentfirstparagraph \indentfirstparagraphtrue - -\newconstant\indentingtogglestate +\newconditional\c_spac_indentation_indent_first \settrue\c_spac_indentation_indent_first +\newconstant \c_spac_indentation_toggle_state %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 - {\doifoutervmode{\ifindentfirstparagraph\else\noindentation\fi}} +\unexpanded\def\presetindentation + {\doifoutervmode{\ifconditional\c_spac_indentation_indent_first\else\spac_indentation_variant_no\fi}} -% we need a better everypar model: for each option a switch, which we -% set to false with \forgetall and can enable when needed (context 4); -% that way we can control the order of execution of options +\unexpanded\def\setupindenting + {\doifnextoptionalelse\spac_indentation_setup_options\spac_indentation_setup_size} -\def\checkeverypar % currently a hack - {\ifzeropt\parindent\else - \doifsometokselse\everypar\donothing\docheckupcomingindentation - \fi} +\def\spac_indentation_setup_size + {\assigndimension\v_spac_indentation_current\d_spac_indentation_par{1\emwidth}{1.5\emwidth}{2\emwidth}} -\def\docheckupcomingindentation - {\appendtoks\checkindentation\to\everypar} +\let\synchronizeindenting\spac_indentation_setup_size -\definecomplexorsimple\setupindenting +\let\m_spac_indentation_options\empty -\def\complexsetupindenting[#1]% - {\edef\currentindenting{#1}% - \ifx\currentindenting\empty \else - \doapplycurrentindenting +\def\spac_indentation_setup_options[#1]% + {\edef\m_spac_indentation_options{#1}% comma separated list + \ifx\m_spac_indentation_options\empty \else + \spac_indentation_setup_indeed \fi} -\def\doapplycurrentindenting - {% not here: \indentfirstparagraphtrue - % not here: \parindent\ctxparindent - % not here: \indentingtogglestate\zerocount - % we use commacommand in order to catch #1 being a command (expanded parameter) - \processcommacommand[\currentindenting]\docomplexsetupindentingA % catch small, medium, etc - \processcommacommand[\currentindenting]\docomplexsetupindentingB % catch rest - \checkeverypar % only when non-empty #1 - \ifindentfirstparagraph\else\noindentation\fi % added - \toggleindentation} - -\def\docomplexsetupindentingA#1% - {\ifcsname\??in:#1\endcsname - % case b +\def\spac_indentation_setup_indeed + {% not here: \settrue\c_spac_indentation_indent_first + % not here: \parindent\d_spac_indentation_par + % not here: \c_spac_indentation_toggle_state\zerocount + \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 + \ifconditional\c_spac_indentation_indent_first\else + \spac_indentation_variant_no + \fi + \spac_indentation_check_toggle} + +\def\spac_indentation_set_everypar + {\everypar{\checkindentation}} + +\def\spac_indentation_apply_step_one#1% + {\ifcsname\??indentingmethod#1\endcsname + % case two \else - \edef\currentindentation{#1}% - \let\normalindentation\currentindentation - \simplesetupindenting + \edef\v_spac_indentation_current{#1}% single entry in list + \let\normalindentation\v_spac_indentation_current + \spac_indentation_setup_size \fi} -\def\docomplexsetupindentingB#1% - {\ifcsname\??in:#1\endcsname - \csname\??in:#1\endcsname +\def\spac_indentation_apply_step_two#1% + {\ifcsname\??indentingmethod#1\endcsname + \csname\??indentingmethod#1\endcsname \else - % case a + % case one \fi} -\def\simplesetupindenting % empty case, a it strange, needed this way? - {\assigndimension\currentindentation\ctxparindent{1em}{1.5em}{2em}} - -\def\indenting % kind of obsolete - {\dosingleargument\complexsetupindenting} +\unexpanded\def\indenting % kind of obsolete + {\doifnextoptionalelse\spac_indentation_setup_options\relax} % use \noindentation to suppress next indentation -\unexpanded\def\defineindentingmethod[#1]#2% - {\setvalue{\??in:#1}{#2}} +\installcorenamespace{indentingmethod} -\defineindentingmethod [\v!no] {\parindent\zeropoint}% was: \ctxparindent\noindent} -\defineindentingmethod [\v!not] {\parindent\zeropoint}% was: \ctxparindent\noindent} +\unexpanded\def\installindentingmethod#1#2% + {\setvalue{\??indentingmethod#1}{#2}} -\defineindentingmethod [\v!first] {\indentfirstparagraphtrue} -\defineindentingmethod [\v!next] {\indentfirstparagraphfalse} +\installindentingmethod \v!no {\parindent\zeropoint} +\installindentingmethod \v!not {\parindent\zeropoint} -\defineindentingmethod [\v!yes] {\parindent\ctxparindent\relax} % no \indent ! -\defineindentingmethod [\v!always] {\parindent\ctxparindent\relax} % no \indent ! +\installindentingmethod \v!first {\settrue\c_spac_indentation_indent_first} +\installindentingmethod \v!next {\setfalse\c_spac_indentation_indent_first} -\defineindentingmethod [\v!never] {\parindent\zeropoint\relax % no \indent ! - \indentingtogglestate\zerocount} +\installindentingmethod \v!yes {\parindent\d_spac_indentation_par\relax} % not \indent ! +\installindentingmethod \v!always{\parindent\d_spac_indentation_par\relax} % not \indent ! -\defineindentingmethod [\v!odd] {\indentingtogglestate\plusone} -\defineindentingmethod [\v!even] {\indentingtogglestate\plustwo} +\installindentingmethod \v!never {\parindent\zeropoint\relax % no \indent ! + \c_spac_indentation_toggle_state\zerocount} -\defineindentingmethod [\v!normal] {\ifx\normalindentation\empty\else - \let\currentindentation\normalindentation - \simplesetupindenting - \fi} +\installindentingmethod \v!odd {\c_spac_indentation_toggle_state\plusone} +\installindentingmethod \v!even {\c_spac_indentation_toggle_state\plustwo} -\defineindentingmethod [\v!reset] {\indentfirstparagraphtrue - \parindent\zeropoint - \indentingtogglestate\zerocount} +\installindentingmethod \v!normal{\ifx\normalindentation\empty\else + \let\v_spac_indentation_current\normalindentation + \simplesetupindenting + \fi} -\def\noindenting{\indenting[\v!no, \v!next ]} -\def\doindenting{\indenting[\v!yes,\v!first]} +\installindentingmethod \v!reset {\settrue\c_spac_indentation_indent_first + \parindent\zeropoint + \c_spac_indentation_toggle_state\zerocount} -%D This one sets up the local indentation behaviour (i.e. either or not -%D a next paragraph will be indented). +\installindentingmethod \v!toggle{\parindent\ifdim\parindent=\zeropoint + \d_spac_indentation_par + \else + \zeropoint + \fi\relax} -\def\dochecknextindentation#1% internal one - {\checknextindentation[\csname#1\c!indentnext\endcsname]} +\unexpanded\def\noindenting{\indenting[\v!no, \v!next ]} +\unexpanded\def\doindenting{\indenting[\v!yes,\v!first]} -\setvalue{\??in->\s!empty}{} -\setvalue{\??in->\v!yes }{\doindentation} -\setvalue{\??in->\v!no }{\noindentation} -\setvalue{\??in->\v!auto }{\autoindentation} +%D Here come the handlers (still rather messy ... we need states). -\unexpanded\def\checknextindentation[#1]% - {\csname\??in->\ifcsname\??in->#1\endcsname#1\else\s!empty\fi\endcsname} +\newif\ifindentation \indentationtrue % will become a mode + +\let\checkindentation\relax + +\def\spac_indentation_remove + {\ifdim\parindent=\zeropoint \else + \begingroup + \setbox\scratchbox\lastbox + \endgroup + \fi} -%D Here come the handlers. +\def\spac_indentation_kill_indeed + {\global\indentationfalse + \spac_indentation_remove} -\newif\ifindentation \indentationtrue % documenteren, naar buiten +\def\spac_indentation_do_toggle_indeed + {\global\indentationfalse + \global\let\checkindentation\spac_indentation_no_toggle_indeed + \spac_indentation_remove} -\let\checkindentation\relax +\def\spac_indentation_no_toggle_indeed + {\global\indentationtrue + \global\let\checkindentation\spac_indentation_do_toggle_indeed} + +\def\spac_indentation_do_indeed + {\global\indentationtrue} -\ifx\autoindentation\undefined \let\autoindentation\relax \fi % hook +\def\spac_indentation_do_toggle + {\global\let\checkindentation\spac_indentation_do_toggle_indeed} -\def\doindentation - {\gdef\checkindentation{\global\indentationtrue}} +\def\spac_indentation_no_toggle + {\global\let\checkindentation\spac_indentation_no_toggle_indeed} -\def\noindentation % made global +\def\spac_indentation_check_toggle + {\ifcase\c_spac_indentation_toggle_state + % nothing + \or + \spac_indentation_no_toggle + \or + \spac_indentation_do_toggle + \fi} + +\def\spac_indentation_variant_yes + {\global\let\checkindentation\spac_indentation_do_indeed} + +\def\spac_indentation_no_next_check + {\spac_indentation_remove + \global\let\checkindentation\spac_indentation_do_indeed} + +\def\spac_indentation_variant_no % made global {\ifinpagebody \else \global\indentationfalse - \gdef\checkindentation - {\donoindentation - \gdef\checkindentation{\global\indentationtrue}}% + \global\let\checkindentation\spac_indentation_no_next_check \fi} \def\nonoindentation % bv bij floats {\ifinpagebody \else \global\indentationtrue - \gdef\checkindentation{\global\indentationtrue}% - \fi} - -\def\donoindentation - {\ifdim\parindent=\zeropoint \else - \bgroup \setbox\scratchbox\lastbox \egroup + \global\let\checkindentation\spac_indentation_do_indeed \fi} -\def\indentation +\def\spac_indentation_variant_force {\ifvmode \ifdim\parindent=\zeropoint \else % was : \hskip\parindent % can be: \indent @@ -170,52 +194,52 @@ \noindent\hskip\parindent \fi \fi} -\def\toggleindentation % does not play well with noindentation - {\ifcase\indentingtogglestate - % nothing - \or - \notoggleindentation - \or - \dotoggleindentation - \fi} - -\def\dokillindentation - {\gdef\checkindentation{\global\indentationfalse\donoindentation}} - -\def\dotoggleindentation - {\gdef\checkindentation{\global\indentationfalse\notoggleindentation\donoindentation}} - -\def\notoggleindentation - {\gdef\checkindentation{\global\indentationtrue\dotoggleindentation}} - \appendtoks - \pushmacro\checkindentation - \pushmacro\ifindentation + \pushmacro\checkindentation + \pushmacro\ifindentation \to \everypushsomestate \appendtoks - \popmacro\ifindentation - \popmacro\checkindentation + \popmacro\ifindentation + \popmacro\checkindentation \to \everypopsomestate - -% This is a user requested hack (using the auto-hook). -\newconditional\recheckindentationmode +% public: -\def\dontrechecknextindentation - {\global\setfalse\recheckindentationmode} +\let\indentation \spac_indentation_variant_force +\let\noindentation\spac_indentation_variant_no % public +\let\doindentation\spac_indentation_variant_yes % public -\def\dorechecknextindentation - {\ifconditional\recheckindentationmode - \dontrechecknextindentation - \expandafter\doautoindentation - \fi} +\def\dontrechecknextindentation % public (in macros) + {\global\let\dorechecknextindentation\relax} + +\let\dorechecknextindentation\relax % public (in macros) + +\def\spac_indentation_check_next_indentation + {\global\let\dorechecknextindentation\relax + \doifnextcharelse\par\donothing\spac_indentation_variant_no} % messy check as next is seldom \par + +\def\spac_indentation_variant_auto + {\global\let\dorechecknextindentation\spac_indentation_check_next_indentation} -\def\doautoindentation - {\doifnextcharelse\par\donothing\noindentation} +%D This one sets up the local indentation behaviour (i.e. either or not +%D a next paragraph will be indented). + +\installcorenamespace{indentnext} + +\unexpanded\def\checknextindentation[#1]% + {\csname\??indentnext\ifcsname\??indentnext#1\endcsname#1\fi\endcsname} + +\unexpanded\def\useindentnextparameter#1% new, the more efficient variant + {\edef\p_indentnext{#1\c!indentnext}% + \ifx\p_indentnext\empty\else + \csname\??indentnext\ifcsname\??indentnext\p_indentnext\endcsname\p_indentnext\fi\endcsname + \fi} -\def\autoindentation - {\global\settrue\recheckindentationmode} +\letvalue{\??indentnext }\donothing +\letvalue{\??indentnext\v!yes }\spac_indentation_variant_yes +\letvalue{\??indentnext\v!no }\spac_indentation_variant_no +\letvalue{\??indentnext\v!auto}\spac_indentation_variant_auto %D An example of usage: %D @@ -254,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 @@ -266,40 +300,46 @@ %D Hm ... todo: -\sfcode`\)=0 -\sfcode`\'=0 -\sfcode`\]=0 +\installcorenamespace{spacecodemethod} -\def\setfrenchspacing#1% - {\sfcode`\.#1 \sfcode`\,#1\relax - \sfcode`\?#1 \sfcode`\!#1\relax - \sfcode`\:#1 \sfcode`\;#1\relax} +\sfcode`\)=\zerocount +\sfcode`\'=\zerocount +\sfcode`\]=\zerocount -\def\frenchspacing - {\setfrenchspacing{1000}} +\def\spac_spacecodes_set_fixed#1% + {\sfcode`\.#1\relax \sfcode`\,#1\relax + \sfcode`\?#1\relax \sfcode`\!#1\relax + \sfcode`\:#1\relax \sfcode`\;#1\relax} -\def\resetfrenchspacing +\def\spac_spacecodes_set_stretch {\sfcode`\.3000 \sfcode`\,1250 \sfcode`\?3000 \sfcode`\!3000 \sfcode`\:2000 \sfcode`\;1500 } -\def\frenchspacing {\setfrenchspacing{1000}} -\def\newfrenchspacing{\setfrenchspacing{1050}} -\def\nonfrenchspacing{\resetfrenchspacing} +\unexpanded\def\frenchspacing {\spac_spacecodes_set_fixed\plusthousand} +\unexpanded\def\newfrenchspacing{\spac_spacecodes_set_fixed{1050}} +\unexpanded\def\nonfrenchspacing{\spac_spacecodes_set_stretch} -\unexpanded\def\definespacingmethod[#1]#2{\setvalue{\??sg\??sg#1}{#2}} +\unexpanded\def\installspacingmethod#1#2{\setvalue{\??spacecodemethod#1}{#2}} -\definespacingmethod[\v!packed]{\newfrenchspacing} -\definespacingmethod[\v!broad ]{\nonfrenchspacing} +\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 -\def\complexsetupspacing[#1]% - {\executeifdefined{\??sg\??sg#1}\relax - \updateraggedskips} +\unexpanded\def\setupspacing + {\doifnextoptionalelse\spac_spacecodes_setup_yes\spac_spacecodes_setup_nop} -\def\simplesetupspacing - {\updateraggedskips} +\def\spac_spacecodes_setup_yes[#1]% + {\csname\??spacecodemethod#1\endcsname + \updateraggedskips} % not needed, as sf codes are static -\definecomplexorsimple\setupspacing +\def\spac_spacecodes_setup_nop + {\updateraggedskips} % not needed, as sf codes are static + +% This is not needed, as \updateraggedskips is taking care of it: + +\let\synchronizespacecodes\spac_spacecodes_setup_nop % \relax % \dorecurse{100}{\recurselevel\spacefactor 800 \space} \par % \dorecurse{100}{\recurselevel\spacefactor1200 \space} \par @@ -341,14 +381,14 @@ \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 -\ctxsprint{"\string\\unexpanded\string\\def\string\\\string\n{\string\\space}"} -%ctxsprint{"\string\\let\string\\\string\n=\string\\space"} +\cldcontext{"\string\\unexpanded\string\\def\string\\\string\n{\string\\space}"} +%cldcontext{"\string\\let\string\\\string\n=\string\\space"} % in tables we need: % @@ -357,27 +397,27 @@ % but, since not all fonts have .5em digits: \unexpanded\def\fixedspace - {\setbox\scratchbox\normalhbox{\mathortext{0}{0}}% + {\setbox\scratchbox\hbox{\mathortext{0}{0}}% \hskip\wd\scratchbox\relax} -\def\fixedspaces +\unexpanded\def\fixedspaces {\letcatcodecommand \ctxcatcodes \tildeasciicode \fixedspace} \appendtoks - \let~\space - \let\ \space -\to\simplifiedcommands + \let~\space + \let\ \space +\to \simplifiedcommands \unexpanded\def\removeunwantedspaces {\ifhmode - \expandafter \doremoveunwantedspace + \expandafter \spac_helpers_remove_unwantedspace \fi} -\def\doremoveunwantedspace - {\ifnum\lastnodetype=\@@gluenode - \unskip \expandafter\doremoveunwantedspace +\def\spac_helpers_remove_unwantedspace + {\ifnum\lastnodetype=\gluenodecode + \unskip \expandafter\spac_helpers_remove_unwantedspace \fi} - + % \startbuffer % \startlines \tt \fixedspaces % 0~1~~2~~~3~~~~4~~~~~5 @@ -402,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} @@ -410,7 +450,7 @@ \fi -\ifx\quad\undefined +\ifdefined\quad \else \def\enskip{\hskip.5\emwidth} \def\quad {\hskip \emwidth} @@ -426,242 +466,210 @@ % Bovendien definieren we enkele extra \fill's: -\def\hfilll{\hskip\zeropoint\!!plus1filll\relax} -\def\vfilll{\vskip\zeropoint\!!plus1filll\relax} +\unexpanded\def\hfilll{\hskip\zeropoint\!!plus1filll\relax} +\unexpanded\def\vfilll{\vskip\zeropoint\!!plus1filll\relax} -% De onderstaande hulpmacro's moeten nog eens instelbaar worden -% gemaakt. +\unexpanded\def\tfskip {\begingroup\tf\hskip\emwidth\endgroup} +\unexpanded\def\dotfskip#1{\begingroup\tf\hskip #1\endgroup} % used elsewhere -\def\tfskipsize{1em\relax} -\def\tfkernsize{1ex\relax} - -\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]% - \setvalue{\e!start#1}{\dodoubleempty\dostartnarrower[#1]}% - \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\seteffectivehsize +\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\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 - -\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} +\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\doadaptleftskip #1{\dosetleftskipadaption {#1}\advance\leftskip \leftskipadaption } -\def\doadaptrightskip#1{\dosetrightskipadaption{#1}\advance\rightskip\rightskipadaption} +\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} -%D Tolerance: +\unexpanded\def\doadaptleftskip #1{\dosetleftskipadaption {#1}\advance\leftskip \leftskipadaption } +\unexpanded\def\doadaptrightskip#1{\dosetrightskipadaption{#1}\advance\rightskip\rightskipadaption} -\unexpanded\def\definetolerancemethod - {\dodoubleargument\dodefinetolerancemethod} +%D Tolerance (can also be set with align): -\def\dodefinetolerancemethod[#1][#2]#3% - {\setvalue{\??to:#1:#2}{#3}} +\installcorenamespace{tolerancemethods} -\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}} +\unexpanded\def\installtolerancemethod#1#2#3% + {\setvalue{\??tolerancemethods#1:#2}{#3}} -\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!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}} -\def\dotolerancencemethodvertical #1{\csname\??to:\v!vertical :#1\endcsname} -\def\dotolerancencemethodhorizontal#1{\csname\??to:\v!horizontal:#1\endcsname} +\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\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: @@ -694,7 +702,7 @@ %D {\relax\ifmmode %D \copy\strutbox %D \else -%D \bgroup\setbox\strutbox=\normalhbox{\box\strutbox}\unhcopy\strutbox\egroup +%D \bgroup\setbox\strutbox=\hbox{\box\strutbox}\unhcopy\strutbox\egroup %D \fi} %D \stoptyping %D @@ -707,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 @@ -718,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}}} @@ -756,46 +764,51 @@ %unexpanded\def\justaperiod {\removeunwantedspaces.} %unexpanded\def\justacomma {\removeunwantedspaces,} -\def\ignorecrlf +\installcorenamespace{hspace} + +\unexpanded\def\ignorecrlf {\let\crlf\justonespace\let\\\crlf} \unexpanded\def\definehspace - {\dotripleempty\dodefinehspace} + {\dotripleempty\spac_hspaces_define} -\def\dodefinehspace[#1][#2][#3]% #1 = optional namespace +\def\spac_hspaces_define[#1][#2][#3]% #1 = optional namespace {\ifthirdargument - \setvalue{\??hs#1:#2}{#3}% + \setvalue{\??hspace#1:#2}{#3}% \else - \setvalue{\??hs:#1}{#2}% + \setvalue{\??hspace:#1}{#2}% \fi} \unexpanded\def\hspace - {\dodoubleempty\dohspace} + {\dodoubleempty\spac_hspaces_insert} -\def\dohspace[#1][#2]% - {\ifsecondargument - \dodohspace[#1][#2]% - \else\iffirstargument - \hspace[][#1]% - \else - \hspace[][\s!default]% - \fi\fi} - -\def\dodohspace[#1][#2]% +\def\spac_hspaces_insert[#1][#2]% {\ifhmode \removeunwantedspaces - \hskip\hspaceamount{#1}{#2}% + \hskip % always a skip even when 0pt + \ifsecondargument + \hspaceamount{#1}{#2}% + \else\iffirstargument + \hspaceamount\empty{#1}% + \else + \hspaceamount\empty\s!default + \fi\fi \expandafter\ignorespaces - \fi} + \fi} \def\hspaceamount#1#2% - {\executeifdefined{\??hs#1:#2}{\executeifdefined{\??hs:#2}\zeropoint}} + {\csname\??hspace + \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] \definehspace [\v!normal] [1\spaceamount] \definehspace [\v!default] [\spaceamount] +\definehspace [\v!none] [\zeropoint] %D Taken from Taco's math module (cq. \AMS\ macros), but %D adapted to \type {\hspace}: @@ -816,23 +829,20 @@ % needed for unicode: -\unexpanded\def\breakablethinspace {\breakabletextormathspace+\thinmuskip 1} - -\unexpanded\def\twoperemspace {\hskip\dimexpr\emwidth/2\relax} % == \enspace -\unexpanded\def\threeperemspace {\hskip\dimexpr\emwidth/3\relax} -\unexpanded\def\fourperemspace {\hskip\dimexpr\emwidth/4\relax} -\unexpanded\def\fiveperemspace {\hskip\dimexpr\emwidth/5\relax} % goodie -\unexpanded\def\sixperemspace {\hskip\dimexpr\emwidth/6\relax} -\unexpanded\def\figurespace {\begingroup\setbox\scratchbox\hbox{0}\hskip\wd\scratchbox\endgroup} % there is a command for this -\unexpanded\def\punctuationspace {\begingroup\setbox\scratchbox\hbox{.}\hskip\wd\scratchbox\endgroup} -\unexpanded\def\ideographicspace {\hskip\dimexpr\emwidth/1\relax} -\unexpanded\def\ideographichalffillspace{\hskip\dimexpr\emwidth/2\relax} -%unexpanded\def\nobreakspace {\penalty\plustenthousand\space} -\unexpanded\def\nobreakspace {\penalty\plustenthousand\kern\interwordspace} -\unexpanded\def\narrownobreakspace {\penalty\plustenthousand\thinspace} -%unexpanded\def\zerowidthnobreakspace {\penalty\plustenthousand\hskip\zeropoint} -\unexpanded\def\zerowidthnobreakspace {\penalty\plustenthousand\kern\zeropoint} -\unexpanded\def\zerowidthspace {\hskip\zeropoint} +%unexpanded\def\breakablethinspace {\breakabletextormathspace+\thinmuskip1} +%unexpanded\def\twoperemspace {\hskip\dimexpr\emwidth/2\relax} % == \enspace +%unexpanded\def\threeperemspace {\hskip\dimexpr\emwidth/3\relax} +%unexpanded\def\fourperemspace {\hskip\dimexpr\emwidth/4\relax} +%unexpanded\def\fiveperemspace {\hskip\dimexpr\emwidth/5\relax} % goodie +%unexpanded\def\sixperemspace {\hskip\dimexpr\emwidth/6\relax} +%unexpanded\def\figurespace {\begingroup\setbox\scratchbox\hbox{0}\hskip\wd\scratchbox\endgroup} % there is a command for this +%unexpanded\def\punctuationspace {\begingroup\setbox\scratchbox\hbox{.}\hskip\wd\scratchbox\endgroup} +%unexpanded\def\ideographicspace {\hskip\dimexpr\emwidth/1\relax} +%unexpanded\def\ideographichalffillspace{\hskip\dimexpr\emwidth/2\relax} +%unexpanded\def\nobreakspace {\penalty\plustenthousand\kern\interwordspace} +%unexpanded\def\narrownobreakspace {\penalty\plustenthousand\thinspace} +%unexpanded\def\zerowidthnobreakspace {\penalty\plustenthousand\kern\zeropoint} +%unexpanded\def\zerowidthspace {\hskip\zeropoint} \definehspace[.5][.1250\emspaceamount] % could also be [.1250\spaceamount] \definehspace[1] [.1667\emspaceamount] @@ -844,6 +854,11 @@ \let \; \thickspace \let \! \negthinspace +% plain ... +% +% \ifdefined\> \else \unexpanded\def\>{\mskip \medmuskip } \fi +% \ifdefined\* \else \unexpanded\def\*{\discretionary{\thinspace\the\textfont2\char2}{}{}} \fi + \def\flexiblespaceamount#1#2#3% {#1\interwordspace \!!plus#2\interwordstretch @@ -858,32 +873,38 @@ % % do we need \normalspaceprimitive here? -\def\installspacehandler#1#2% needs to set \obeyedspace - {\setvalue{\??sr#1}{#2}} +\installcorenamespace{spacemethods} + +\unexpanded\def\installspacemethod#1#2% needs to set \obeyedspace + {\setvalue{\??spacemethods#1}{#2}} -\installspacehandler \v!on +\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}}% + +\installspacemethod \v!on {\obeyspaces - \unexpanded\def\obeyedspace{\mathortext\normalspace{\dontleavehmode{\tt\controlspace}}}% + \let\obeyedspace\spac_spaces_checked_control \let\ =\obeyedspace} -\installspacehandler \v!yes +\installspacemethod \v!yes {\obeyspaces - \unexpanded\def\obeyedspace{\mathortext\normalspace{\dontleavehmode\normalspace}}% + \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 - \unexpanded\def\obeyedspace{\mathortext\normalspace{\dontleavehmode\fixedspace}}% + \let\obeyedspace\spac_spaces_checked_fixed \let\ =\obeyedspace} -\def\activatespacehandler#1% - {\executeifdefined{\??sr#1}{\activatespacehandler\v!off}} - \appendtoks \normalspaces % to be sure \to \everybeforeoutput @@ -899,18 +920,15 @@ %D %D \typebuffer \getbuffer -% unexpanded is important here as it prevents premature expansion in -% e.g. \normalexpanded{\egroup\sortingparameter\c!next} - \unexpanded\def\autoinsertnextspace - {\futurelet\nexttoken\doautoinsertnextspace} + {\futurelet\nexttoken\spac_spaces_auto_insert_next} -\def\doautoinsertnextspace +\def\spac_spaces_auto_insert_next {\ctxcommand{autonextspace("\meaning\nexttoken")}} % todo, just consult nexttoken at the lua end %D Moved from bib module: -\def\outdented#1% +\unexpanded\def\outdented#1% {\hskip-\hangindent#1\relax} %D Beware: due to char-def this becomes an active character but that @@ -918,24 +936,24 @@ %D node insertions. We might even expand it to utf then as it then %D can be used in string comparison (not that much needed anyway). -\chardef\zwnj="200C -\chardef\zwj ="200D +% \chardef\zwnj="200C +% \chardef\zwj ="200D % TODO (but used in languages): -\unexpanded\def\textormathglue#1#2#3% cleaned up one +\unexpanded\def\spac_glues_text_or_math#1#2% {\begingroup \ifmmode - \mskip#1#2% + \mskip#1% \else - \scratchdimen#1\hspaceamount\empty{#3}% + \scratchdimen#1\hspaceamount\empty{#2}% \scratchskip\scratchdimen\!!plus.5\scratchdimen\!!minus.3\scratchdimen \hskip\scratchskip \fi \endgroup} -\def\thinglue {\textormathglue+\thinmuskip 1} -\def\medglue {\textormathglue+\medmuskip 2} -\def\thickglue{\textormathglue+\thickmuskip3} +\unexpanded\def\thinglue {\spac_glues_text_or_math\thinmuskip \v!small} +\unexpanded\def\medglue {\spac_glues_text_or_math\medmuskip \v!medium} +\unexpanded\def\thickglue{\spac_glues_text_or_math\thickmuskip\v!big} \protect \endinput |