summaryrefslogtreecommitdiff
path: root/Master/texmf-dist/tex/context/base/core-spa.tex
diff options
context:
space:
mode:
Diffstat (limited to 'Master/texmf-dist/tex/context/base/core-spa.tex')
-rw-r--r--Master/texmf-dist/tex/context/base/core-spa.tex947
1 files changed, 369 insertions, 578 deletions
diff --git a/Master/texmf-dist/tex/context/base/core-spa.tex b/Master/texmf-dist/tex/context/base/core-spa.tex
index e41f1921536..fae78327f03 100644
--- a/Master/texmf-dist/tex/context/base/core-spa.tex
+++ b/Master/texmf-dist/tex/context/base/core-spa.tex
@@ -13,10 +13,16 @@
\writestatus{loading}{Context Spacing Macros}
-% to be sorted out: dependencies, order of initialization
+% to be sorted out: dependencies, order of initialization / also some dutch code here
\unprotect
+% interfacing mkii/mkiv
+
+\ifx\mksetupgridsnapping \undefined \let\mksetupgridsnapping \relax \fi
+\ifx\mkenablegridsnapping \undefined \let\mkenablegridsnapping \relax \fi
+\ifx\mkdisablegridsnapping\undefined \let\mkdisablegridsnapping\relax \fi
+
% some will move to core-var
\newif \ifgridsnapping
@@ -239,6 +245,8 @@
% \type{\normalskipamount} equals the current baseline
% distance.
+% \lineskiplimit = -\maxdimen -> freezes baselineskip
+
% can be conditionals
\newif\ifblanknowhite \blanknowhitefalse
@@ -290,186 +298,6 @@
\smallskipamount\medskipamount\bigskipamount
\fi}}
-%%%% dus niet weg
-
-% replaced
-%
-% \def\dosingleblanko#1%
-% {\doassignsomeskip#1\to\blankskipamount
-% \global\advance\blankskip \blankskipamount}
-%
-% \def\doblank#1%
-% {\processallactionsinset % is maar een actie
-% [#1]
-% [ \v!groot=>\dosingleblanko\v!groot, % happens often
-% \v!buiten=>\ifvmode\ifinner\blankoutertrue\fi\fi,
-% \v!reset=>\global\blankresettrue,
-% \v!flexibel=>\global\localblankflexibletrue,
-% \v!vast=>\global\localblankfixedtrue,
-% \v!back=>\geenblanko,
-% \v!wit=>\global\advance\blankskip \parskip,
-% \v!formule=>\global\advance\blankskip \medskipamount,
-% \v!geenwit=>\global\blanknowhitetrue,
-% -\v!wit=>\global\advance\blankskip -\parskip,
-% \v!blokkeer=>\global\blankdisabletrue,
-% \v!forceer=>\global\blankforcetrue,
-% \v!regel=>\global\advance\blankskip \lineheight,
-% \v!halveregel=>\ifgridsnapping\global\fuzzyvskiptrue\fi
-% \global\advance\blankskip .5\lineheight,
-% \s!unknown=>\doindirectblanko{#1}]}
-%
-% \def\docomplexdoblank[#1]% pas op \relax's zijn nodig ivm volgende \if
-% {\global\blankresetfalse
-% \global\blankdisablefalse
-% \global\blanknowhitefalse
-% \global\localblankflexiblefalse
-% \global\localblankfixedfalse
-% \global\blankskip\zeropoint
-% \global\blankforcefalse
-% \blankouterfalse
-% \processcommalist[#1]\doblank
-% \ifdim\blankskip=\zeropoint\relax
-% \iflocalblankflexible \dosingleblanko\currentblank \fi
-% \iflocalblankfixed \dosingleblanko\currentblank \fi
-% \fi
-% \ifblankouter
-% \else
-% \par
-% \ifvmode %in pos fonts gaat dit mis
-% \ifblankforce %\ifdim\prevdepth>\zeropoint\else
-% % -1000pt signals top of page or column (\ejectcolumn)
-% \verticalstrut\kern-\struttotal
-% \fi
-% \ifblankdisable
-% \global\blankindeedfalse
-% \edef\oldprevdepth{\the\prevdepth}%
-% \prevdepth=\newprevdepth
-% \else
-% \global\blankindeedtrue
-% \fi
-% \ifblankreset
-% \global\blankindeedtrue
-% \ifdim\prevdepth=\newprevdepth
-% \prevdepth=\oldprevdepth
-% \fi
-% \fi
-% \ifblankindeed
-% \ifdim\lastskip<\blankskip\relax
-% % else when \blanko[2*groot] + \blanko[3*groot] with parskip
-% % equaling 1*groot, gives a groot=\parskip so adding a small
-% % value makes it distinguishable; can also be done at parskip
-% % setting time (better)
-% \global\advance\blankskip by \mindimen\relax % = skip
-% % test this on 2* + 3* and parskip groot
-% \ifblanknowhite
-% \global\advance\blankskip by -\parskip
-% \else
-% \ifdim\lastskip=\parskip
-% \else % force this due to previous comment
-% \ifdim\parskip>\zeropoint\relax
-% \ifdim\blankskip<\parskip\relax
-% \global\blankskip\zeropoint
-% \else
-% \global\advance\blankskip by -\parskip
-% \fi
-% \fi
-% \fi
-% \fi
-% \ifblankflexible \else
-% \blankskip=1\blankskip
-% \fi
-% \iflocalblankfixed
-% \blankskip=1\blankskip
-% \fi
-% \iflocalblankflexible
-% \blankskip=1\blankskip
-% \!!plus\skipgluefactor\blankskip
-% \!!minus\skipgluefactor\blankskip
-% \fi
-% \ifdim\prevdepth=\newprevdepth
-% \else
-% \iffuzzyvskip
-% \removelastfuzzyvskip
-% \fuzzyvskip\blankskip\relax
-% \else
-% \removelastskip
-% \vskip\blankskip\relax
-% \fi
-% \fi
-% \else
-% \iffuzzyvskip
-% \removelastfuzzyvskip
-% \fuzzyvskip\blankskip\relax
-% \fi
-% \fi
-% \fi
-% \fi
-% \fi
-% \global\fuzzyvskipfalse
-% \presetindentation}
-%
-% \def\complexdodoblank[#1]%
-% {\flushnotes
-% \ifopelkaar
-% \ifinpagebody
-% \expanded{\docomplexdoblank[#1]}% \expanded=nieuw
-% \else
-% \par
-% \fi
-% \else
-% \expanded{\docomplexdoblank[#1]}% \expanded = nieuw
-% \fi}
-%
-% % old
-% %
-% % \def\doindirectblanko#1%
-% % {\ifundefined{\??bo#1}% <-etex \expandafter\ifx\csname\??bo#1\endcsname\relax
-% % \expanded{\complexdodoblank[#1]}%
-% % \else
-% % \expandafter\complexdoblank\expandafter[\csname\??bo#1\endcsname]%
-% % \fi}
-% %
-% % \def\complexdoblank[#1]% enables [force,8\bodyfontsize]
-% % {\doifinstringelse{,}{#1}
-% % {\expanded{\complexdodoblank[#1]}}
-% % {\doifnumberelse{#1}
-% % {\expanded{\complexdodoblank[#1]}}
-% % {\doindirectblanko{#1}}}}
-% %
-% % new, more robust
-% %
-% % \def\doindirectblanko#1%
-% % {\edef\ascii{#1}\convertcommand\ascii\to\ascii
-% % \ifundefined{\??bo\ascii}% <-etex \expandafter\ifx\csname\??bo#1\endcsname\rel
-% % \dorepeatwithcommand[#1]\dosingleblanko
-% % \else
-% % \expandafter\complexdoblank\expandafter[\csname\??bo\ascii\endcsname]%
-% % \fi}
-% %
-% % even more robust
-%
-% \def\doindirectblanko#1%
-% {\edef\ascii{#1}\convertcommand\ascii\to\ascii
-% \ifundefined{\??bo\ascii}% <-etex \expandafter\ifx\csname\??bo#1\endcsname
-% \expanded{\dorepeatwithcommand[#1]\noexpand\dosingleblanko}%
-% \else
-% \expandafter\complexdoblank\expandafter[\csname\??bo\ascii\endcsname]%
-% \fi}
-
-% \def\TestBlank[#1]%
-% {blank : {\convertargument#1\to\ascii\tttf\ascii}\blanko[#1]}
-%
-% \defineblank[whatever][2*big,2*big]
-% \TestBlank[]
-% \TestBlank[big]
-% \TestBlank[2*big]
-% \TestBlank[big,big,2*big]
-% \TestBlank[big]
-% \TestBlank[whatever]
-% \TestBlank[2*big,whatever]
-% \TestBlank[3\lineheight]
-
-% this will be replaced/enhanced
\def\addblankskip#1#2#3{\global\advance\blankskip#1\ifgridsnapping#3\else#2\fi}
@@ -501,6 +329,8 @@
\defineblankmethod [\v!none] {\global\blankresettrue}
\defineblankmethod [\v!joinedup] {\ifvmode\nointerlineskip\fi}
+\defineblankmethod [\v!always] {\redowhitespace} % experimental
+
% happens often, so we speed this up:
%
% \defineblankmethod [2*\v!line] {\addblankskip+{2\openlineheight}{2\openlineheight}}
@@ -509,21 +339,17 @@
% no, with 2\whatever we loose the stretch and shrink! Taco's alternative:
\defineblankmethod
- [2*line]
+ [2*\v!line]
{\addblankskip+\openlineheight\openlineheight
\addblankskip+\openlineheight\openlineheight}
\defineblankmethod
- [2*big]
+ [2*\v!big]
{\addblankskip+\bigskipamount\openlineheight
\addblankskip+\bigskipamount\openlineheight}
-% ETEX ! ! !
-
-\beginETEX \ifcsname
-
\def\doblank#1%
- {\edef\ascii{#1}\convertcommand\ascii\to\ascii
+ {\edefconvertedargument\ascii{#1}%
\ifx\ascii\empty\else
\ifcsname\??bo\??bo\ascii\endcsname % internal def
\csname\??bo\??bo\ascii\endcsname
@@ -535,7 +361,7 @@
\fi}
\def\redoblank#1%
- {\edef\ascii{#1}\convertcommand\ascii\to\ascii
+ {\edefconvertedargument\ascii{#1}%
\ifx\ascii\empty\else
\ifcsname\??bo\??bo\ascii\endcsname % internal def
\csname\??bo\??bo\ascii\endcsname
@@ -546,62 +372,9 @@
\fi\fi
\fi}
-\endETEX
-
-\beginTEX
-
-\def\doblank#1%
- {\edef\ascii{#1}\convertcommand\ascii\to\ascii
- \ifx\ascii\empty\else
- \@EA\ifx\csname\??bo\??bo\ascii\endcsname\relax
- \@EA\ifx\csname\??bo\ascii\endcsname\relax
- \dorepeatwithcommand[#1]\redoblank
- \else
- \@EA\rawprocesscommalist\@EA[\csname\??bo\ascii\endcsname]\doblank\relax
- \fi
- \else
- \csname\??bo\??bo\ascii\endcsname
- \fi
- \fi}
-
-\def\redoblank#1%
- {\edef\ascii{#1}\convertcommand\ascii\to\ascii
- \ifx\ascii\empty\else
- \@EA\ifx\csname\??bo\??bo\ascii\endcsname\relax
- \@EA\ifx\csname\??bo\ascii\endcsname\relax
- \global\advance\blankskip#1\relax
- \else
- \@EA\rawprocesscommalist\@EA[\csname\??bo\ascii\endcsname]\doblank\relax
- \fi
- \else
- \csname\??bo\??bo\ascii\endcsname
- \fi
- \fi}
-
-\endTEX
-
\unexpanded\def\blank % the \relax is definitely needed due to the many \if's
{\relax\complexorsimple\doblank}
-% \def\complexdoblank
-% {\flushnotes
-% \ifmmode
-% \let\next\nocomplexdoblank
-% \else
-% \ifopelkaar
-% \ifinpagebody
-% \let\next\docomplexdoblank
-% \else
-% \let\next\nocomplexdoblank
-% \fi
-% \else
-% \let\next\docomplexdoblank
-% \fi
-% \fi
-% \next}
-%
-% with \next removed
-
\def\complexdoblank
{\flushnotes
\ifmmode
@@ -1046,7 +819,7 @@
\medskipamount \bigskipamount \divide\medskipamount \plustwo
\smallskipamount\bigskipamount \divide\smallskipamount\plusfour}%
-\def\complexsetupblank[#1]% more \let's
+\def\complexsetupblank[#1]% more \let's -> this also wil become installable
{\ifgridsnapping
\blankflexiblefalse
\else
@@ -1060,32 +833,24 @@
[ \v!flexible=>\dosetupblank\appliedblankskip,
\v!fixed=>\dosetupblank\appliedblankskip,
\v!line=>\edef\appliedblankskip{\linedistance}%
- \dosetupblank\appliedblankskip
- ,%\let\deblanko\v!big,
+ \dosetupblank\appliedblankskip,
\v!halfline=>\scratchskip.5\linedistance
\edef\appliedblankskip{\the\scratchskip}%
- \dosetupblank\appliedblankskip
- ,%\let\deblanko\v!medium,
+ \dosetupblank\appliedblankskip,
\v!big=>\ifgridsnapping
\edef\appliedblankskip{\linedistance}%
\dosetupblank\appliedblankskip
\fi
- \let\currentblank\v!big % was \def, why ?
- ,%\let\deblanko\v!big,
- \v!medium=>\let\currentblank\v!medium % was \def, why ?
- ,%\let\deblanko\v!medium,
- \v!small=>\let\currentblank\v!small % was \def, why ?
- ,%\let\deblanko\v!small,
- \v!normal=>\dosetupblank\appliedblankskip
- ,%\let\deblanko\v!big,
+ \let\currentblank\v!big,
+ \v!medium=>\let\currentblank\v!medium,
+ \v!small=>\let\currentblank\v!small,
+ \v!global=>\let\currentblank\v!global,
+ \v!normal=>\dosetupblank\appliedblankskip,
\v!standard=>\edef\appliedblankskip{\skipfactor\linedistance}%
- \dosetupblank\appliedblankskip
- ,%\let\deblanko\v!big,
- \s!default=>\dosetupblank\appliedblankskip
- ,%\let\deblanko\v!big,
+ \dosetupblank\appliedblankskip,
+ \s!default=>\dosetupblank\appliedblankskip,
\s!unknown=>\let\appliedblankskip\commalistelement
- \dosetupblank\appliedblankskip
- ]%\let\deblanko\v!big]%
+ \dosetupblank\appliedblankskip]%
\simplesetupwhitespace}
% \definecomplexorsimpleempty\setupblank
@@ -1294,16 +1059,14 @@
\toggleindentation}}
\def\docomplexsetupindentingA#1%
- {\edef\!!stringa{#1}% catch #1=\somedimen
- \convertcommand\!!stringa\to\!!stringa
+ {\edefconvertedargument\!!stringa{#1}%
\doifundefined{\??in:\!!stringa}%
{\edef\currentindentation{#1}%
\let\normalindentation\currentindentation
\simplesetupindenting}}
\def\docomplexsetupindentingB#1%
- {\edef\!!stringa{#1}% catch #1=\somedimen
- \convertcommand\!!stringa\to\!!stringa
+ {\edefconvertedargument\!!stringa{#1}% catch #1=\somedimen
\executeifdefined{\??in:\!!stringa}\donothing}
\def\simplesetupindenting % empty case, a it strange, needed this way?
@@ -1338,7 +1101,7 @@
\fi}
\defineindentingmethod [\v!reset] {\indentfirstparagraphtrue
- \parindent\zerocount
+ \parindent\zeropoint
\chardef\indentingtoggle\zerocount}
\def\noindenting{\indenting[\v!no, \v!next ]}
@@ -1413,6 +1176,16 @@
\def\notoggleindentation
{\gdef\checkindentation{\global\indentationtrue\dotoggleindentation}}
+
+\appendtoks
+ \pushmacro\checkindentation
+ \pushmacro\ifindentation
+\to \everypushsomestate
+
+\appendtoks
+ \popmacro\ifindentation
+ \popmacro\checkindentation
+\to \everypopsomestate
% we need to save the state if we want to adapt behaviour to empty lines
%
@@ -1730,58 +1503,13 @@
\newskip\ctxparskip \ctxparskip\zeropoint
-\newif\ifwitruimteflexibel \witruimteflexibeltrue
+\newconditional \flexiblewhitespace \settrue\flexiblewhitespace
-\def\blankokleinmaat {\smallskipamount}
-\def\blankomiddelmaat {\medskipamount}
-\def\blankogrootmaat {\bigskipamount}
+\def\blankokleinmaat {\smallskipamount}
+\def\blankomiddelmaat {\medskipamount}
+\def\blankogrootmaat {\bigskipamount}
\def\currentwhitespace {\zeropoint}
-% \def\stelwitruimteopnieuwin
-% {\expanded{\setupwhitespace[\currentwhitespace]}}
-%
-% \newif\ifwitruimteflexibel \witruimteflexibeltrue
-%
-% \definecomplexorsimple\setupwhitespace
-%
-% \def\complexsetupwhitespace[#1]%
-% {\expanded{\dosetupwhitespace[#1]}%
-% \dodosetupwhitespace}
-%
-% \def\dosetupwhitespace[#1]%
-% {\processallactionsinset
-% [#1]
-% [\v!herstel=>,
-% \v!vast=>\witruimteflexibelfalse,
-% \v!flexibel=>\witruimteflexibeltrue,
-% \v!regel=>\ctxparskip\baselineskip,
-% \v!halveregel=>\ctxparskip.5\baselineskip,
-% \s!default=>\doifnot\currentwhitespace\v!geen\stelwitruimteopnieuwin,
-% \s!unknown=>\@EA\assigndimension\@EA{\commalistelement} % \@EA is nodig
-% \ctxparskip\blankokleinmaat\blankomiddelmaat\blankogrootmaat]} % te vangen
-%
-% \def\dodosetupwhitespace
-% {\edef\currentwhitespace
-% {\ifdim\ctxparskip=\zeropoint
-% \v!geen
-% \else
-% \ifgridsnapping\the\baselineskip\else\the\ctxparskip\fi
-% \fi}%
-% \ifgridsnapping
-% \witruimteflexibelfalse
-% \ctxparskip1\ctxparskip
-% \ifdim\ctxparskip>\zeropoint
-% \ctxparskip\baselineskip
-% \fi
-% \else
-% \ifwitruimteflexibel \else \ctxparskip1\ctxparskip \fi
-% \fi
-% \parskip\ctxparskip}
-%
-% \def\simplesetupwhitespace% == snelle \setupwhitespace[\s!default]
-% {\doifnot\currentwhitespace\v!geen\stelwitruimteopnieuwin
-% \dodosetupwhitespace}
-
\definecomplexorsimple\setupwhitespace
\def\simplesetupwhitespace
@@ -1797,15 +1525,27 @@
{\processcommacommand[\currentwhitespace]\dowhitespacemethod
\dodosetupwhitespace}
+\chardef\baselinegridmode=0 % option in layout / 1=permit_half_lines
+
\def\dodosetupwhitespace
{\ifgridsnapping
- \witruimteflexibelfalse
+ \setfalse\flexiblewhitespace
\ctxparskip1\ctxparskip
\ifdim\ctxparskip>\zeropoint
- \ctxparskip\baselineskip
+ \ifcase\baselinegridmode
+ \ctxparskip\baselineskip % normal ! ! ! ! !!
+ \or
+ \ifdim\scratchdimen=\baselineskip % maybe range
+ \ctxparskip\baselineskip % normal ! ! ! ! !!
+ \else
+ \ctxparskip\numexpr\ctxparskip/\dimexpr.5\lineheight\relax\relax\dimexpr.5\lineheight\relax
+ \fi
+ \else
+ \ctxparskip\baselineskip % normal ! ! ! ! !!
+ \fi
\fi
\else
- \ifwitruimteflexibel \else \ctxparskip1\ctxparskip \fi
+ \ifconditional\flexiblewhitespace \else \ctxparskip1\ctxparskip \fi
\fi
\parskip\ctxparskip}
@@ -1814,16 +1554,16 @@
\def\definewhitespacemethod[#1]#2{\setvalue{\??ws\??ws#1}{#2}}
\definewhitespacemethod [\v!fix] {}
-\definewhitespacemethod [\v!fixed] {\witruimteflexibelfalse}
-\definewhitespacemethod [\v!flexible] {\witruimteflexibeltrue}
+\definewhitespacemethod [\v!fixed] {\setfalse\flexiblewhitespace}
+\definewhitespacemethod [\v!flexible] {\settrue\flexiblewhitespace}
\definewhitespacemethod [\v!line] {\ctxparskip \baselineskip}
\definewhitespacemethod [\v!halfline] {\ctxparskip.5\baselineskip}
\definewhitespacemethod [\v!none] {\ctxparskip \zeropoint}
-\definewhitespacemethod [\v!big] {\ctxparskip \blankogrootmaat}
-\definewhitespacemethod [\v!medium] {\ctxparskip \blankomiddelmaat}
-\definewhitespacemethod [\v!small] {\ctxparskip \blankokleinmaat}
+\definewhitespacemethod [\v!big] {\ctxparskip \bigskipamount}
+\definewhitespacemethod [\v!medium] {\ctxparskip \medskipamount}
+\definewhitespacemethod [\v!small] {\ctxparskip \smallskipamount}
-\definewhitespacemethod [\s!default] {\stelwitruimteopnieuwin}
+\definewhitespacemethod [\s!default] {\simplesetupwhitespace} % {\stelwitruimteopnieuwin}
\def\dowhitespacemethod#1%
{\executeifdefined{\??ws\??ws#1}{\ctxparskip#1}\relax}
@@ -1836,15 +1576,25 @@
\fi
\fi}
+\def\nowhitespaceunlessskip
+ {\ifdim\lastskip>\zeropoint \else
+ \nowhitespace
+ \fi}
+
+\def\redowhitespace
+ {\ifdim\lastskip>-\parskip \else
+ \vskip\parskip
+ \fi}
+
\def\savecurrentwhitespace
{\edef\restorecurrentwhitespace
{\ctxparskip\the\ctxparskip
\parskip\the\parskip
\noexpand\def\noexpand\currentwhitespace{\currentwhitespace}%
- \ifwitruimteflexibel
- \noexpand\witruimteflexibeltrue
+ \ifconditional\flexiblewhitespace
+ \noexpand\settrue\flexiblewhitespace
\else
- \noexpand\witruimteflexibelfalse
+ \noexpand\setfalse\flexiblewhitespace
\fi}}
% deze variant is nodig binnen \startopelkaar
@@ -2153,13 +1903,14 @@
\endgroup
\fi
\normalbaselineskip\openlineheight
-\ifgridsnapping\else
- \!!plus \baselinegluefactor\openlineheight
- \!!minus\baselinegluefactor\openlineheight
-\fi
+ \ifgridsnapping\else
+ \!!plus \baselinegluefactor\openlineheight
+ \!!minus\baselinegluefactor\openlineheight
+ \fi
\normallineskip\minimumlinedistance\relax % \onepoint\relax
\normallineskiplimit\zeropoint\relax
- \normalbaselines}
+ \normalbaselines
+ \mksetupgridsnapping}
\def\setspacingfactor#1\to#2\by#3\\%
{\strutdimen#2\points
@@ -2193,25 +1944,6 @@
\let\restoreinterlinespace\relax
-\beginTEX
-
-\def\saveinterlinespace
- {\scratchdimen\normallineheight
- \edef\restoreinterlinespace
- {\lineheight \the\lineheight
- \openstrutheight \the\openstrutheight
- \openstrutdepth \the\openstrutdepth
- \openlineheight \the\openlineheight
- \normalbaselineskip \the\normalbaselineskip
- \normallineskip \the\normallineskip
- \normallineskiplimit\the\normallineskiplimit
- \noexpand\def\noexpand\normallineheight{\the\scratchdimen}%
- \noexpand\normalbaselines}}
-
-\endTEX
-
-\beginETEX
-
\def\saveinterlinespace
{\edef\restoreinterlinespace
{\lineheight \the\lineheight
@@ -2224,8 +1956,6 @@
\noexpand\def\noexpand\normallineheight{\the\dimexpr\normallineheight\relax}%
\noexpand\normalbaselines}}
-\endETEX
-
% plain definition:
%
% \def\strut{\relax\ifmmode\copy\strutbox\else\unhcopy\strutbox\fi}
@@ -2348,18 +2078,42 @@
%D Centered looks nicer:
+% \def\dosetstrut
+% {\let\strut\normalstrut
+% \setbox\strutbox\normalhbox
+% {\normalhbox to \zeropoint
+% {% \hss % new, will be option
+% \vrule
+% \!!width \strutwidth
+% \!!height\strutheight
+% \!!depth \strutdepth
+% \hss}}%
+% \struttotal\dimexpr\strutht+\strutdp\relax}
+%
+% because of all the callbacks in mkiv, we avoid unnecessary boxes ...
+% maybe use an attribute so that we can tag boxes that don't need a
+% treatment; tests with using an attribute so far have shown that
+% it's slower because testing the attribute takes time too
+
\def\dosetstrut
{\let\strut\normalstrut
- \setbox\strutbox\normalhbox
- {\normalhbox to \zeropoint
- {% \hss % new, will be option
- \vrule
- \!!width \strutwidth
- \!!height\strutheight
- \!!depth \strutdepth
- \hss}}%
- \struttotal\strutht
- \advance\struttotal\strutdp}
+ \ifdim\strutwidth=\zeropoint
+ \setbox\strutbox\normalhbox
+ {\vrule
+ \!!width \zeropoint
+ \!!height\strutheight
+ \!!depth \strutdepth}%
+ \else
+ \setbox\strutbox\normalhbox
+ {\normalhbox to \zeropoint
+ {% \hss % new, will be option
+ \vrule
+ \!!width \strutwidth
+ \!!height\strutheight
+ \!!depth \strutdepth
+ \hss}}%
+ \fi
+ \struttotal\dimexpr\strutht+\strutdp\relax}
%D The dimen \type {\struttotal} holds the exact size of the
%D strut; occasionally a one scaled point difference can show
@@ -2464,7 +2218,7 @@
\fi
\fi\fi}
-\newbox\nostrutbox \setbox\nostrutbox\normalhbox{\normalhbox{}}
+\newbox\nostrutbox \setbox\nostrutbox\normalhbox{} % {\normalhbox{}}
\def\setnostrut
{\setbox\strutbox\copy\nostrutbox
@@ -2554,73 +2308,27 @@
% \widowpenalty=\defaultwidowpenalty\relax
% \clubpenalty =\defaultclubpenalty \relax
-\beginTEX widowpenalties clubpenalties interlinepenalties
-
- \newcount \widowpenalties
- \newcount \clubpenalties
- \newcount \interlinepenalties
-
-\endTEX
-
-% \setpenalties\widowpenalties2\maxdimen
-%
-% expands to \widowpenalty \maxdimen \maxdimen \zeropoint
-
-\beginTEX
-
- \let\resetpenalties \gobbleoneargument
- \let\setpenalties \gobblethreearguments
- \let\doexpandedrecurse\gobbletwoarguments
-
-\endTEX
-
-\beginETEX \numexpr
-
- \def\resetpenalties#1%
- {\ifx#1\undefined\else
- #1\minusone
- \fi}
-
-% \def\setpenalties#1#2#3%
-% {\ifx#1\undefined\else % space before #3 prevents lookahead problems, needed when #3=text
-% #1\numexpr(#2+1)\space\doexpandedrecurse{\the\numexpr(#2)}{ #3}\zerocount\relax
-% \fi}
-
- \def\setpenalties#1#2#3%
- {\ifx#1\undefined\else % space before #3 prevents lookahead problems, needed when #3=text
- #1\numexpr#2+\plusone\relax\space\doexpandedrecurse{\the\numexpr#2\relax}{ #3}\zerocount\relax
- \fi}
-
-% \def\doexpandedrecurse#1#2%
-% {\ifnum#1>\zerocount#2\@EA\doexpandedrecurse\@EA{\the\numexpr(#1-1)}{#2}\fi}
+\def\resetpenalties#1%
+ {\ifx#1\undefined\else
+ #1\minusone
+ \fi}
- \def\doexpandedrecurse#1#2%
- {\ifnum#1>\zerocount#2\@EA\doexpandedrecurse\@EA{\the\numexpr#1-1\relax}{#2}\fi}
+\def\setpenalties#1#2#3%
+ {\ifx#1\undefined\else % space before #3 prevents lookahead problems, needed when #3=text
+ #1\numexpr#2+\plusone\relax\space\doexpandedrecurse{\the\numexpr#2\relax}{ #3}\zerocount\relax
+ \fi}
-\endETEX
+\def\doexpandedrecurse#1#2%
+ {\ifnum#1>\zerocount#2\@EA\doexpandedrecurse\@EA{\the\numexpr#1-1\relax}{#2}\fi}
%D \macros
%D {keeplinestogether}
%D
%D Dirty hack, needed in margin content that can run of a page.
-\beginETEX
-
- \def\keeplinestogether#1%
- {\xdef\restoreinterlinepenalty{\global\resetpenalties\interlinepenalties}%
- \global\setpenalties\interlinepenalties{#1}\plustenthousand}
-
-\endETEX
-
-\beginTEX
-
- \def\keeplinestogether#1%
- {\xdef\restoreinterlinepenalty
- {\global\let\restoreinterlinepenalty\relax
- \global\interlinepenalty=\the\interlinepenalty}% keep = here
- \global\interlinepenalty\plustenthousand}
-
-\endTEX
+\def\keeplinestogether#1%
+ {\xdef\restoreinterlinepenalty{\global\resetpenalties\interlinepenalties}%
+ \global\setpenalties\interlinepenalties{#1}\plustenthousand}
\newif\ifgridsnapping % to be sure
@@ -2725,6 +2433,8 @@
\def\dotfskip#1{{\tf\hskip#1}}
\def\dotfkern#1{{\tf\kern #1}}
+% needs a proper \definenarrower or installnarrower
+
\newskip\ctxleftskip
\newskip\ctxrightskip
\newskip\ctxmidskip
@@ -2735,7 +2445,10 @@
[ \v!left=>\global\advance\ctxleftskip \@@slleft,
\v!middle=>\global\advance\ctxmidskip \@@slmiddle,
\v!right=>\global\advance\ctxrightskip \@@slright,
- \v!none=>,
+ \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
@@ -2944,6 +2657,11 @@
{\getvalue{\@@ragged@@command\v!left}}
{\getvalue{\@@ragged@@command\v!right}}}
+\setvalue{\@@ragged@@command\v!lesshyphenation}%
+ {\appendtoks\lesshyphens\to\everyraggedcommand}
+\setvalue{\@@ragged@@command\v!morehyphenation}%
+ {\appendtoks\morehyphens\to\everyraggedcommand}
+
% compare:
%
% \framed[width=4cm,align=no] {\hfil xxx}
@@ -2998,7 +2716,7 @@
% \voorkeur … la \blanko
%
% Om ongewenste witruimte te voorkomen kan met \dosomebreak{\break}
-% een \penalty v¢¢r witruimte worden geplaatst.
+% een \penalty voor witruimte worden geplaatst.
\def\removelastskip % a redefinition of plain
{\ifvmode\ifdim\lastskip=\zeropoint\else\vskip-\lastskip\fi\fi}
@@ -3016,18 +2734,18 @@
%
% don't change the next improvement:
-\def\dosomebreak#1%
- {\endgraf % beware, this forces a newline
- \ifvmode
- \ifdim\lastskip=\zeropoint
- #1\relax
- \else
- \scratchskip\lastskip
- \removelastskip
- #1\relax
- \vskip\scratchskip
- \fi
- \fi}
+% \def\dosomebreak#1%
+% {\endgraf % beware, this forces a newline
+% \ifvmode
+% \ifdim\lastskip=\zeropoint
+% #1\relax
+% \else
+% \scratchskip\lastskip
+% \removelastskip
+% #1\relax
+% \vskip\scratchskip
+% \fi
+% \fi}
% beter, vooral in \vbox; nog in \pagina toepassen s!
@@ -3124,26 +2842,6 @@
\let\dostopattributes\relax % in case these commands end up in an edef
-\beginTEX
-
-\unexpanded\def\dostartattributes#1#2#3%
- {\begingroup % geen \bgroup, anders in mathmode lege \hbox
- \@EA\ifx\csname#1#3\endcsname\relax
- \let\dostopattributes\@@nostopattributes
- \else
- \let\dostopattributes\@@dostopattributes
- \startcolor[\csname#1#3\endcsname]%
- \fi
- \@EA\ifx\csname#1#2\endcsname\relax
- \expandafter\gobbleoneargument
- \else
- \expandafter\doconvertfont
- \fi{\csname#1#2\endcsname}}
-
-\endTEX
-
-\beginETEX \ifcsname
-
\unexpanded\def\dostartattributes#1#2#3%
{\begingroup % geen \bgroup, anders in mathmode lege \hbox
\ifcsname#1#3\endcsname
@@ -3158,8 +2856,6 @@
\expandafter\gobbleoneargument
\fi{\csname#1#2\endcsname}}
-\endETEX
-
\newconditional \parbasedattributes
\def\finishparbasedattributes
@@ -3186,35 +2882,12 @@
% An even faster \ETEX\ version:
-\beginETEX
-
-% \unexpanded\def\dostartattributes#1#2#3%
-% {\begingroup % geen \bgroup, anders in mathmode lege \hbox
-% \ifcsname#1#3\endcsname
-% \let\dostopattributes\@@dostopattributes
-% \startcolor[\csname#1#3\endcsname]%
-% \else
-% \let\dostopattributes\@@nostopattributes
-% \fi
-% \ifcsname#1#2\endcsname
-% \@EAEAEA\doconvertfont\@EA\@EA\csname#1#2\endcsname
-% \fi}
-%
-% \unexpanded\def\@@dostopattributes%
-% {\stopcolor
-% \finishparbasedattributes
-% \endgroup}
-%
-% \unexpanded\def\@@nostopattributes%
-% {\finishparbasedattributes
-% \endgroup}
-
\unexpanded\def\dostartattributes#1#2#3%
{\begingroup % geen \bgroup, anders in mathmode lege \hbox
\ifincolor
\ifcsname#1#3\endcsname
- \let\dostopattributes\@@dostopattributes
- \doglobalstartcolor[\csname#1#3\endcsname]%
+ \let\dostopattributes\@@dostopattributes
+ \faststartcolor[\csname#1#3\endcsname]%
\else
\let\dostopattributes\@@nostopattributes
\fi
@@ -3227,7 +2900,7 @@
\fi}
\unexpanded\def\@@dostopattributes
- {\doglobalstopcolor
+ {\faststopcolor
\finishparbasedattributes
\endgroup}
@@ -3235,54 +2908,34 @@
{\finishparbasedattributes
\endgroup}
-\endETEX
-
%D Bonus macro, see core-sec.tex
-\beginTEX
-
-\unexpanded\def\dosetfontattribute#1#2%
- {\@EA\ifx\csname#1#2\endcsname\relax\else
- \@EAEAEA\doconvertfont\@EA\@EA\csname#1#2\endcsname
- \fi\empty}
-
-\endTEX
-
-\beginETEX \ifcsname
-
\unexpanded\def\dosetfontattribute#1#2%
{\ifcsname#1#2\endcsname
- % \@EAEAEA\doconvertfont\@EA\@EA\csname#1#2\endcsname
\@EA\doconvertfont\csname#1#2\@EA\endcsname
\fi\empty}
-\endETEX
-
%D Since this happens a lot, and sometimes large arguments
%D are passed in \type {#4}, we just copy some code:
-\beginETEX \ifcsname
-
\unexpanded\def\doattributes#1#2#3#4%
{\begingroup % geen \bgroup, anders in mathmode lege \hbox
\ifincolor
\ifcsname#1#3\endcsname
\let\dostopattributes\@@dostopattributes
- \doglobalstartcolor[\csname#1#3\endcsname]%
+ \faststartcolor[\csname#1#3\endcsname]%
\else
\let\dostopattributes\endgroup
\fi
- \else
- \let\dostopattributes\endgroup
- \fi
- \ifcsname#1#2\endcsname
- % \@EAEAEA\doconvertfont\@EA\@EA\csname#1#2\endcsname
- \@EA\doconvertfont\csname#1#2\@EA\endcsname
- \fi
- {#4}%
- \dostopattributes}
-
-\endETEX
+ \else
+ \let\dostopattributes\endgroup
+ \fi
+ \ifcsname#1#2\endcsname
+ % \@EAEAEA\doconvertfont\@EA\@EA\csname#1#2\endcsname
+ \@EA\doconvertfont\csname#1#2\@EA\endcsname
+ \fi
+ {#4}%
+ \dostopattributes}
% Kan vaker worden toegepast en moet bovendien sneller!
@@ -3297,32 +2950,6 @@
{\dosetrightskipadaption{#1}%
\advance\rightskip \rightskipadaption}
-\beginTEX
-
-\def\dosetleftskipadaption#1%
- {\leftskipadaption\zeropoint
- \processaction[#1]
- [\v!standard=>\leftskipadaption
- \ifdim\ctxparindent=\zeropoint\@@slleft\else\ctxparindent\fi,
- \v!yes=>\leftskipadaption
- \ifdim\ctxparindent=\zeropoint\@@slleft\else\ctxparindent\fi,
- \v!no=>,
- \s!unknown=>\leftskipadaption#1]}
-
-\def\dosetrightskipadaption#1%
- {\rightskipadaption\zeropoint
- \processaction[#1]
- [\v!standard=>\rightskipadaption\@@slright,
- \v!yes=>\rightskipadaption\@@slright,
- \v!no=>,
- \s!unknown=>\rightskipadaption#1]}
-
-\endTEX
-
-\beginETEX
-
-% installation
-
\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
@@ -3344,8 +2971,7 @@
% \relax}
\def\dosetleftskipadaption#1%
- {\edef\ascii{@lsa@#1}%
- \convertcommand\ascii\to\ascii
+ {\edefconvertedargument\ascii{@lsa@#1}%
\leftskipadaption
\ifcsname\ascii\endcsname
\csname\ascii\endcsname
@@ -3355,8 +2981,7 @@
\relax}
\def\dosetrightskipadaption#1%
- {\edef\ascii{@rsa@#1}%
- \convertcommand\ascii\to\ascii
+ {\edefconvertedargument\ascii{@rsa@#1}%
\rightskipadaption
\ifcsname\ascii\endcsname
\csname\ascii\endcsname
@@ -3364,13 +2989,11 @@
#1%
\fi
\relax}
-
-\endETEX
-\newcounter \noftrackedpagestates
-\newif \ifpagestatemismatch
-\let \realpagestateno \realfolio
-\chardef \frozenpagestate \zerocount
+\newcount \noftrackedpagestates
+\newif \ifpagestatemismatch
+\newcount \realpagestateno
+\chardef \frozenpagestate \zerocount
\def\dotrackpagestate#1#2%
{\ifdoublesided \ifinpagebody \else
@@ -3379,16 +3002,16 @@
\def\doforcedtrackpagestate#1#2%
{\ifcase\frozenpagestate
- \doglobal\increment\noftrackedpagestates\relax
- \doglobal\increment#2\relax
- \lazysavetaggedtwopassdata{#1}{\noftrackedpagestates}{#2}{\noexpand\realfolio}%
- %\llap{\infofont\noftrackedpagestates/#2}% tracing
+ \global\advance\noftrackedpagestates\plusone
+ \global\advance#2\plusone
+ \lazysavetaggedtwopassdata{#1}{\number\noftrackedpagestates}{\number#2}{\noexpand\realfolio}%
+ %\llap{\infofont\number\noftrackedpagestates/\number#2}% tracing
\fi}
\def\doifrightpagestateelse#1#2%
{\ifcase\frozenpagestate
\pagestatemismatchfalse
- \let\realpagestateno\realfolio
+ \realpagestateno\realfolio
\ifinpagebody
\ifdoublesided
\ifodd\realpageno\relax
@@ -3398,9 +3021,9 @@
\twopassdatafoundtrue
\fi
\else\ifdoublesided
- \findtwopassdata{#1}{#2}%
+ \findtwopassdata{#1}{\number#2}%
\iftwopassdatafound
- \let\realpagestateno\twopassdata
+ \realpagestateno\twopassdata\relax
\ifnum\twopassdata=\realpageno \else
\pagestatemismatchtrue
\fi
@@ -3429,10 +3052,10 @@
\def\doifforcedrightpagestateelse#1#2%
{\ifcase\frozenpagestate
\pagestatemismatchfalse
- \let\realpagestateno\realfolio
- \findtwopassdata{#1}{#2}%
+ \realpagestateno\realfolio
+ \findtwopassdata{#1}{\number#2}%
\iftwopassdatafound
- \let\realpagestateno\twopassdata
+ \realpagestateno\twopassdata\relax
\ifnum\twopassdata=\realpageno \else
\pagestatemismatchtrue
\fi
@@ -3460,15 +3083,15 @@
% we can make more of these on top, but how to deal with mixed frozen states
-\definetwopasslist\s!paragraph \newcounter\nofraggedparagraphs
+\definetwopasslist\s!paragraph \newcount \nofraggedparagraphs
\def\signalrightpage {\dotrackpagestate \s!paragraph\nofraggedparagraphs}
\def\doifrightpageelse{\doifrightpagestateelse\s!paragraph\nofraggedparagraphs}
-\newcounter\pagesignallevel
+\newcount\pagesignallevel
\def\startsignalrightpage % one may do a \postsignalrightplace
- {\increment\pagesignallevel
+ {\advance\pagesignallevel\plusone
\presignalrightpage
\let\signalrightpage\relax
\let\presignalrightpage\relax
@@ -3478,7 +3101,7 @@
\def\stopsignalrightpage
{\ifcase\pagesignallevel\or\postsignalrightpage\fi
- \decrement\pagesignallevel}
+ \advance\pagesignallevel\minusone}
\def\setraggedparagraphmode
{\signalrightpage\doifrightpageelse} % move it there
@@ -3519,7 +3142,7 @@
\def\docheckpagestatechange#1#2#3%
{\pagechangedfalse
\doforcedtrackpagestate{#2}{#3}%
- \findtwopassdata{#2}{#3}%
+ \findtwopassdata{#2}{\number#3}%
\iftwopassdatafound
\ifnum\twopassdata>0\getvalue{#2:p:#1}\relax
\pagechangedtrue
@@ -3870,6 +3493,26 @@
\installalign \v!verytolerant {\tolerance4500 \relax}
\installalign \v!stretch {\emergencystretch\bodyfontsize}
+\installalign \v!grid {\mkenablegridsnapping } % only mkiv
+\installalign \v!nogrid {\mkdisablegridsnapping} % only mkiv
+
+\newcount\hyphenminoffset
+
+\ifx\sethyphenationvariables\undefined \let\sethyphenationvariables\relax \fi
+
+\def\lesshyphens
+ {\advance\hyphenminoffset\plusone
+ \sethyphenationvariables}
+
+\def\morehyphens
+ {\ifcase\hyphenminoffset \else
+ \advance\hyphenminoffset\minusone
+ \fi
+ \sethyphenationvariables}
+
+\installalign \v!lesshyphenation {\lesshyphens}
+\installalign \v!morehyphenation {\morehyphens}
+
\def\dodosetupalign#1{\csname @@align@@#1\endcsname}
\def\dodosetupngila#1{\csname @@ngila@@#1\endcsname}
@@ -3906,14 +3549,36 @@
\newtoks \everyleftofalignedline
\newtoks \everyrightofalignedline
+\def\shiftalignedline#1#2#3#4% left, right, inner, outer
+ {\rightorleftpageaction
+ {\everyleftofalignedline {\hskip\dimexpr#1+#3\relax}%
+ \everyrightofalignedline{\hskip\dimexpr#2+#4\relax}}
+ {\everyleftofalignedline {\hskip\dimexpr#1+#4\relax}%
+ \everyrightofalignedline{\hskip\dimexpr#2+#3\relax}}}
+
+% \def\doalignline#1#2% \\ == newline
+% {\begingroup
+% \setlocalhsize % new
+% \def\\{\egroup\par\doalignline{#1}{#2}\bgroup}%
+% \dowithnextbox
+% {\noindentation % was \noindent
+% \dontleavehmode % added in marrakesch at TUG 2006
+% \hbox to \localhsize
+% {\ifcase\alignstrutmode\or\strut\fi
+% \the\everyleftofalignedline
+% #1\unhbox\nextbox#2\relax
+% \the\everyrightofalignedline}%
+% \endgroup}
+% \hbox}
+
\def\doalignline#1#2% \\ == newline
- {\begingroup
+ {\noindentation % was \noindent
+ \dontleavehmode % added in marrakesch at TUG 2006\begingroup
+ \begingroup
\setlocalhsize % new
\def\\{\egroup\par\doalignline{#1}{#2}\bgroup}%
\dowithnextbox
- {\noindentation % was \ noindent
- \dontleavehmode % added in marrakesch at TUG 2006
- \hbox to \localhsize
+ {\hbox to \localhsize
{\ifcase\alignstrutmode\or\strut\fi
\the\everyleftofalignedline
#1\unhbox\nextbox#2\relax
@@ -3962,11 +3627,13 @@
% more extensive:
\def\doxalignline#1#2#3#4#5#6%
- {\bgroup
+ {\noindentation % was \noindent
+ \dontleavehmode % added in marrakesch at TUG 2006\begingroup
+ \begingroup
\setlocalhsize
\def\\{\egroup\par\doxalignline#1#2#3#4#5#6\bgroup}% inefficient
\dowithnextbox
- {\noindent
+ {%\noindent moved up
\hbox to \localhsize
{#1\hskip\ifdone#2\else#3\fi#4%
\hbox to \localhsize
@@ -3975,7 +3642,7 @@
\ifdone#5\unhbox\nextbox#6\else#6\unhbox\nextbox#5\fi
\the\everyrightofalignedline}%
\hss}%
- \egroup}
+ \endgroup}
\hbox}
\def\doxcheckline
@@ -4052,6 +3719,7 @@
\hbox}
{\doifelse{#1}\v!right{\kern-\rightskip}{\doifsomething{#1}{\kern-#1}}%
\parfillskip\zeropoint
+ %\finalhyphendemerits\zerocount % yes or no
\par}}
\def\wordright
@@ -4067,6 +3735,16 @@
%
% \wordright[\rightskip]{whatever}
+% \simplealignedbox{2cm}{right}{x}
+
+\setvalue{\s!simple\c!align\v!right }#1#2{\hbox to #1{#2\hss}}
+\setvalue{\s!simple\c!align\v!left }#1#2{\hbox to #1{\hss#2}}
+\setvalue{\s!simple\c!align\v!flushright }#1#2{\hbox to #1{\hss#2}}
+\setvalue{\s!simple\c!align\v!flushleft }#1#2{\hbox to #1{#2\hss}}
+\setvalue{\s!simple\c!align\v!middle }#1#2{\hbox to #1{\hss#2\hss}}
+
+\def\simplealignedbox#1{\executeifdefined{\s!simple\c!align#1}{\getvalue{\s!simple\c!align\v!right}}}
+
%D \macros
%D {pushindentation,popindentation}
%D
@@ -4257,21 +3935,26 @@
\unexpanded\def\textormathspace#1#2#3%
{\ifmmode\mskip#1#2\else\kern#1\hspaceamount\empty{#3}\fi\relax}
+\newmuskip\hairmuskip \hairmuskip=.15mu
+
+\def\hairspace {\textormathspace+\hairmuskip{.5}}
\def\thinspace {\textormathspace+\thinmuskip 1}
\def\medspace {\textormathspace+\medmuskip 2}
\def\thickspace {\textormathspace+\thickmuskip3}
+\def\neghairspace {\textormathspace-\thinmuskip{.5}}
\def\negthinspace {\textormathspace-\thinmuskip 1}
\def\negmedspace {\textormathspace-\medmuskip 2}
\def\negthickspace{\textormathspace-\thickmuskip3}
+\definehspace[.5][.1250\emspaceamount] % could also be [.1250\spaceamount]
+\definehspace[1] [.1667\emspaceamount]
+\definehspace[2] [.2222\emspaceamount]
+\definehspace[3] [.2777\emspaceamount]
+
\let \, \thinspace
\let \: \medspace
\let \; \thickspace
\let \! \negthinspace
-
-\definehspace[1][.1667em]
-\definehspace[2][.2222em]
-\definehspace[3][.2777em]
% this will become an alternative bunch of \blank settings
%
@@ -4629,10 +4312,118 @@
\space
\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi}
+% moved from page-lin
+
+\def\installspacehandler#1#2% needs to set \obeyedspace
+ {\setvalue{\??sr#1}{#2}}
+
+\installspacehandler \v!on
+ {\obeyspaces
+ \def\obeyedspace{\mathortext\normalspace{\dontleavehmode{\tt\controlspace}}}%
+ \let\ =\obeyedspace}
+
+\installspacehandler \v!yes
+ {\obeyspaces
+ \def\obeyedspace{\mathortext\normalspace{\dontleavehmode \normalspace }}%
+ \let\ =\obeyedspace}
+
+\installspacehandler \v!off
+ {\normalspaces
+ \let\obeyedspace\normalspace
+ \let\ =\normalspace}
+
+\installspacehandler \v!fixed
+ {\obeyspaces
+ \def\obeyedspace{\mathortext\normalspace{\dontleavehmode\fixedspace}}%
+ \let\ =\obeyedspace}
+
+\def\activatespacehandler#1%
+ {\executeifdefined{\??sr#1}{\activatespacehandler\v!off}}
+
+% moved from page-lin
+
+%D When spacing is active we need to handle commands in
+%D a special way:
+%D
+%D \starttyping
+%D \setuplines[space=on]
+%D
+%D \startlines
+%D Let's talk about this{\ttsl\gobbleoneargument or}that.
+%D \stoplines
+%D
+%D \startlines
+%D Let's talk about this{\getvalue{ttsl}or}that.
+%D \stoplines
+%D \stoptyping
+%D
+%D One can indent in several ways:
+%D
+%D \starttyping
+%D \setupindenting[medium] \setuplines[indenting=odd] % no yes odd even
+%D
+%D \startlines
+%D first
+%D second
+%D third
+%D fourth
+%D \stoplines
+%D \stoptyping
+
+\def\setuplines
+ {\dodoubleargument\getparameters[\??rg]}
+
+\def\startlines
+ {\@@rgbefore
+ \pushmacro\checkindentation
+ \whitespace
+ %\page[\v!preference]} gaat mis na koppen, nieuw: later \nobreak
+ \begingroup
+ \setupindenting[\@@rgindenting]%
+ \typesettinglinestrue
+ \setupwhitespace[\v!none]%
+ \obeylines
+ \ignorespaces
+ \gdef\afterfirstobeyedline % tzt two pass, net als opsomming
+ {\gdef\afterfirstobeyedline
+ {\nobreak
+ \global\let\afterfirstobeyedline\relax}}%
+ \def\obeyedline
+ {\par
+ \afterfirstobeyedline
+ \futurelet\next\dobetweenthelines}%
+ \activatespacehandler\@@rgspace
+ \GotoPar}
+
+\def\stoplines
+ {\endgroup
+ \popmacro\checkindentation
+ \@@rgafter}
+
+\def\dobetweenthelines
+ {\doifmeaningelse\next\obeyedline\@@rginbetween\donothing}
+
+\setuplines
+ [\c!before=\blank,
+ \c!after=\blank,
+ \c!inbetween=\blank,
+ \c!indenting=\v!no,
+ \c!space=\v!default]
+
+\def\emptylines
+ {\dosingleempty\doemptylines}
+
+\def\doemptylines[#1]%
+ {\endgraf\dorecurse{\iffirstargument#1\else3\fi}\crlf}
+
+% plugins
+
+\loadmarkfile{core-spa}
+
\setupwhitespace
[\v!none]
-% still old-fachioned
+% still old-fashioned
\indenting
[\v!never]