diff options
Diffstat (limited to 'tex/context/base/spac-hor.mkiv')
-rw-r--r-- | tex/context/base/spac-hor.mkiv | 160 |
1 files changed, 87 insertions, 73 deletions
diff --git a/tex/context/base/spac-hor.mkiv b/tex/context/base/spac-hor.mkiv index 2e5884325..3d5424229 100644 --- a/tex/context/base/spac-hor.mkiv +++ b/tex/context/base/spac-hor.mkiv @@ -31,7 +31,7 @@ %D need to check if the next paragraph has to be indented. \def\presetindentation - {\doifoutervmode{\ifindentfirstparagraph\else\noindentation\fi}} + {\doifoutervmode{\ifindentfirstparagraph\else\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); @@ -42,7 +42,7 @@ \doifsometokselse\everypar\donothing\docheckupcomingindentation \fi} -\def\docheckupcomingindentation +\def\docheckupcomingindentation % brr {\appendtoks\checkindentation\to\everypar} \definecomplexorsimple\setupindenting @@ -61,8 +61,8 @@ \processcommacommand[\currentindenting]\docomplexsetupindentingA % catch small, medium, etc \processcommacommand[\currentindenting]\docomplexsetupindentingB % catch rest \checkeverypar % only when non-empty #1 - \ifindentfirstparagraph\else\noindentation\fi % added - \toggleindentation} + \ifindentfirstparagraph\else\indentation_variant_no\fi + \indentation_check_toggle} \def\docomplexsetupindentingA#1% {\ifcsname\??in:#1\endcsname @@ -124,51 +124,70 @@ \unexpanded\def\noindenting{\indenting[\v!no, \v!next ]} \unexpanded\def\doindenting{\indenting[\v!yes,\v!first]} -%D This one sets up the local indentation behaviour (i.e. either or not -%D a next paragraph will be indented). +%D Here come the handlers (still rather messy ... we need states). -\def\dochecknextindentation#1% internal one - {\checknextindentation[\csname#1\c!indentnext\endcsname]} +\newif\ifindentation \indentationtrue % documenteren, naar buiten -\setvalue{\??in->\s!empty}{} -\setvalue{\??in->\v!yes }{\doindentation} -\setvalue{\??in->\v!no }{\noindentation} -\setvalue{\??in->\v!auto }{\autoindentation} +\let\checkindentation\relax -\unexpanded\def\checknextindentation[#1]% - {\csname\??in->\ifcsname\??in->#1\endcsname#1\else\s!empty\fi\endcsname} +\def\indentation_remove + {\ifdim\parindent=\zeropoint \else + \begingroup + \setbox\scratchbox\lastbox + \endgroup + \fi} -%D Here come the handlers. +\def\indentation_kill_indeed + {\global\indentationfalse + \indentation_remove} -\newif\ifindentation \indentationtrue % documenteren, naar buiten +\def\indentation_do_toggle_indeed + {\global\indentationfalse + \global\let\checkindentation\indentation_no_toggle_indeed + \indentation_remove} -\let\checkindentation\relax +\def\indentation_no_toggle_indeed + {\global\indentationtrue + \global\let\checkindentation\indentation_do_toggle_indeed} + +\def\indentation_do_indeed + {\global\indentationtrue} -\ifx\autoindentation\undefined \let\autoindentation\relax \fi % hook +\def\indentation_do_toggle + {\global\let\checkindentation\indentation_do_toggle_indeed} -\def\doindentation - {\gdef\checkindentation{\global\indentationtrue}} +\def\indentation_no_toggle + {\global\let\checkindentation\indentation_no_toggle_indeed} -\def\noindentation % made global +\def\indentation_check_toggle + {\ifcase\indentingtogglestate + % nothing + \or + \indentation_no_toggle + \or + \indentation_do_toggle + \fi} + +\def\indentation_variant_yes + {\global\let\checkindentation\indentation_do_indeed} + +\def\indentation_no_next_check + {\indentation_remove + \global\let\checkindentation\indentation_do_indeed} + +\def\indentation_variant_no % made global {\ifinpagebody \else \global\indentationfalse - \gdef\checkindentation - {\donoindentation - \gdef\checkindentation{\global\indentationtrue}}% + \global\let\checkindentation\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\indentation_do_indeed \fi} -\def\indentation +\def\indentation_variant_force {\ifvmode \ifdim\parindent=\zeropoint \else % was : \hskip\parindent % can be: \indent @@ -176,52 +195,47 @@ \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 \indentation_variant_force +\let\noindentation\indentation_variant_no % public +\let\doindentation\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\indentation_check_next_indentation + {\global\let\dorechecknextindentation\relax + \doifnextcharelse\par\donothing\indentation_variant_no} + +\def\indentation_variant_auto + {\global\let\dorechecknextindentation\indentation_check_next_indentation} + +%D This one sets up the local indentation behaviour (i.e. either or not +%D a next paragraph will be indented). -\def\doautoindentation - {\doifnextcharelse\par\donothing\noindentation} +\def\dochecknextindentation#1% obsolete + {\checknextindentation[\csname#1\c!indentnext\endcsname]} + +\unexpanded\def\checknextindentation[#1]% + {\csname\??in:c:\ifcsname\??in:c:#1\endcsname#1\else\s!empty\fi\endcsname} -\def\autoindentation - {\global\settrue\recheckindentationmode} +\letvalue{\??in:c:\s!empty}\donothing +\letvalue{\??in:c:\v!yes }\indentation_variant_yes +\letvalue{\??in:c:\v!no }\indentation_variant_no +\letvalue{\??in:c:\v!auto }\indentation_variant_auto %D An example of usage: %D @@ -276,22 +290,22 @@ \sfcode`\'=0 \sfcode`\]=0 -\def\setfrenchspacing#1% +\unexpanded\def\setfrenchspacing#1% {\sfcode`\.#1 \sfcode`\,#1\relax \sfcode`\?#1 \sfcode`\!#1\relax \sfcode`\:#1 \sfcode`\;#1\relax} -\def\frenchspacing +\unexpanded\def\frenchspacing {\setfrenchspacing{1000}} -\def\resetfrenchspacing +\unexpanded\def\resetfrenchspacing {\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 {\setfrenchspacing{1000}} +\unexpanded\def\newfrenchspacing{\setfrenchspacing{1050}} +\unexpanded\def\nonfrenchspacing{\resetfrenchspacing} \unexpanded\def\definespacingmethod[#1]#2{\setvalue{\??sg\??sg#1}{#2}} |