diff options
Diffstat (limited to 'tex/context/base/spac-ali.mkiv')
| -rw-r--r-- | tex/context/base/spac-ali.mkiv | 653 | 
1 files changed, 653 insertions, 0 deletions
| diff --git a/tex/context/base/spac-ali.mkiv b/tex/context/base/spac-ali.mkiv new file mode 100644 index 000000000..47d44e24b --- /dev/null +++ b/tex/context/base/spac-ali.mkiv @@ -0,0 +1,653 @@ +%D \module +%D   [       file=spac-ali, +%D        version=2009.10.16, % 1997.03.31, was core-spa.tex +%D          title=\CONTEXT\ Spacing Macros, +%D       subtitle=Alignments, +%D         author=Hans Hagen, +%D           date=\currentdate, +%D      copyright={PRAGMA / Hans Hagen \& Ton Otten}] +%C +%C This module is part of the \CONTEXT\ macro||package and is +%C therefore copyrighted by \PRAGMA. See mreadme.pdf for +%C details. + +\writestatus{loading}{ConTeXt Spacing Macros / Alignments} + +\unprotect + +% We will not use bodydir and pagedir so we disable them. That way we get +% normal hyperlink support. + +\let\@@bodydir\normalbodydir +\let\@@pagedir\normalpagedir + +\unexpanded\def\bodydir{\afterassignment\do@@bodydir\@@bodydir} \let\normalbodydir\bodydir +\unexpanded\def\pagedir{\afterassignment\do@@pagedir\@@pagedir} \let\normalpagedir\pagedir + +\def\do@@bodydir{\@@bodydir TLT\relax} +\def\do@@pagedir{\@@pagedir TLT\relax} + +% This will become a more advanced layout controller soon: + +\unexpanded\def\lefttoright{\textdir TLT\pardir TLT\relax} +\unexpanded\def\righttoleft{\textdir TRT\pardir TRT\relax} + +\def\dodefinehbox[#1][#2]% +  {\setvalue{hbox#1}##1% +     {\hbox to #2{\begstrut##1\endstrut\hss}}} + +\def\definehbox +  {\dodoubleargument\dodefinehbox} + +\def\iobox#1#2#3#% here #3# is not really needed +  {\vbox\bgroup  % we want to return a vbox like the others +     \hbox\bgroup% we need to pack the signal with the box +       \signalrightpage +       \dowithnextboxcontent +         {\let\\=\endgraf\forgetall\doifrightpageelse#1#2} +         {\box\nextbox\egroup\egroup} +       \vbox#3} + +\def\obox{\iobox\raggedleft \raggedright} % outerbox +\def\ibox{\iobox\raggedright\raggedleft}  % innerbox + +\def\dosetraggedvbox#1% +  {\let\raggedbox\vbox +   \processfirstactioninset +     [#1] +     [   \v!left=>\let\raggedbox\lbox, +        \v!right=>\let\raggedbox\rbox, +       \v!middle=>\let\raggedbox\cbox, +        \v!inner=>\let\raggedbox\ibox, +        \v!outer=>\let\raggedbox\obox, +    \v!flushleft=>\let\raggedbox\rbox, +   \v!flushright=>\let\raggedbox\lbox, +       \v!center=>\let\raggedbox\cbox, +           \v!no=>\def\raggedbox{\vbox\bgroup\raggedright\let\next=}]} + +\def\dosetraggedhbox#1% +  {\let\raggedbox\hbox +   \processaction % slow +     [#1] +     [   \v!left=>\def\raggedbox{\doalignedline\v!left  }, +        \v!right=>\def\raggedbox{\doalignedline\v!right }, +       \v!middle=>\def\raggedbox{\doalignedline\v!middle}, +        \v!inner=>\def\raggedbox{\doalignedline\v!inner }, +        \v!outer=>\def\raggedbox{\doalignedline\v!outer }, +    \v!flushleft=>\def\raggedbox{\doalignedline\v!right }, +   \v!flushright=>\def\raggedbox{\doalignedline\v!left  }, +       \v!center=>\def\raggedbox{\doalignedline\v!middle}]} + +\def\dosetraggedcommand#1% +  {\normalexpanded{\noexpand\dodosetraggedcommand{#1}}} + +\newtoks\everyraggedcommand + +\def\raggedcommand{\the\everyraggedcommand} + +\def\dodosetraggedcommand#1% beware: #1=empty is ignored, keep that! +  {\everyraggedcommand     \emptytoks +   \let\raggedtopcommand   \empty +   \let\raggedbottomcommand\empty +   \chardef\raggedoneliner\zerocount +   \doifsomething{#1} +     {\doifinsetelse\v!broad{#1}\!!doneatrue\!!doneafalse +      \doifinsetelse\v!wide {#1}\!!donebtrue\!!donebfalse +      \!!donectrue +      \rawprocesscommalist[#1]\dododosetraggedcommand}} + +\def\dododosetraggedcommand#1% +  {\executeifdefined{\@@ragged@@command\string#1}\relax} + +\def\@@ragged@@command{@@raggedcommand} + +\setvalue{\@@ragged@@command\v!hanging      }{\appendtoks\enableprotruding    \to\everyraggedcommand} +\setvalue{\@@ragged@@command\v!nothanging   }{\appendtoks\disableprotruding   \to\everyraggedcommand} +\setvalue{\@@ragged@@command\v!hz           }{\appendtoks\enableadjusting     \to\everyraggedcommand} +\setvalue{\@@ragged@@command\v!nohz         }{\appendtoks\disableadjusting    \to\everyraggedcommand} +\setvalue{\@@ragged@@command\v!spacing      }{\appendtoks\enablespacehandling +                                                         \enablekernhandling  \to\everyraggedcommand} +\setvalue{\@@ragged@@command\v!nospacing    }{\appendtoks\disablespacehandling +                                                         \disablekernhandling \to\everyraggedcommand} +\setvalue{\@@ragged@@command\v!hyphenated   }{\appendtoks\dohyphens           \to\everyraggedcommand} +\setvalue{\@@ragged@@command\v!nothyphenated}{\appendtoks\nohyphens           \to\everyraggedcommand} + +\setvalue{\@@ragged@@command\v!tolerant    }{\appendtoks\tolerance3000\relax  \to\everyraggedcommand} +\setvalue{\@@ragged@@command\v!verytolerant}{\appendtoks\tolerance4500\relax  \to\everyraggedcommand} +\setvalue{\@@ragged@@command\v!stretch     }{\appendtoks\emergencystretch\bodyfontsize\to\everyraggedcommand} + +\setvalue{\@@ragged@@command\v!left}% +  {\if!!donea \appendtoks\veryraggedleft\to\everyraggedcommand +   \else      \appendtoks\raggedleft    \to\everyraggedcommand +   \fi +   \!!donecfalse} + +\setvalue{\@@ragged@@command\v!right}% +  {\if!!donea \appendtoks\veryraggedright\to\everyraggedcommand +   \else      \appendtoks\raggedright    \to\everyraggedcommand +   \fi +   \!!donecfalse} + +\setvalue{\@@ragged@@command\v!middle}% +  {\if!!donec +     \if!!doneb      \appendtoks\raggedwidecenter\to\everyraggedcommand +     \else\if!!donea \appendtoks\veryraggedcenter\to\everyraggedcommand +     \else           \appendtoks\raggedcenter    \to\everyraggedcommand +     \fi\fi +     \!!donecfalse +   \else +     \let\raggedbottomcommand\vfilll % bonus, pretty strong +     \let\raggedtopcommand   \vfilll % used with \framed for +   \fi}                              % instance in tables + +\setvalue{\@@ragged@@command\v!flushleft }{\getvalue{\@@ragged@@command\v!right }} +\setvalue{\@@ragged@@command\v!flushright}{\getvalue{\@@ragged@@command\v!left  }} +\setvalue{\@@ragged@@command\v!center    }{\getvalue{\@@ragged@@command\v!middle}} + +\setvalue{\@@ragged@@command\v!high}% +  {\let\raggedbottomcommand\vfilll}  % and since we lack a + +\setvalue{\@@ragged@@command\v!low}% +  {\let\raggedtopcommand\vfilll}     % proper keyword, but + +\setvalue{\@@ragged@@command\v!lohi}% +  {\let\raggedbottomcommand\vfilll   % we do support the +   \let\raggedtopcommand\vfilll}     % ugly laho (lohi) + +\setvalue{\@@ragged@@command\v!no}% +  {\appendtoks\raggedright\to\everyraggedcommand} + +\setvalue{\@@ragged@@command\v!yes}% +  {\appendtoks\notragged\to\everyraggedcommand} + +\setvalue{\@@ragged@@command\v!normal}% +  {\appendtoks\notragged\to\everyraggedcommand} + +\setvalue{\@@ragged@@command\v!inner}% not yet perfect +  {\signalrightpage % may interfere +   \doifrightpageelse +     {\getvalue{\@@ragged@@command\v!right}} +     {\getvalue{\@@ragged@@command\v!left}}} + +\setvalue{\@@ragged@@command\v!outer}% not yet perfect +  {\signalrightpage % may interfere +   \doifrightpageelse +     {\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} + +\setvalue{\@@ragged@@command\v!lefttoright}{\appendtoks\lefttoright\to\everyraggedcommand} +\setvalue{\@@ragged@@command\v!righttoleft}{\appendtoks\righttoleft\to\everyraggedcommand} +\setvalue{\@@ragged@@command           l2r}{\appendtoks\lefttoright\to\everyraggedcommand} +\setvalue{\@@ragged@@command           r2l}{\appendtoks\righttoleft\to\everyraggedcommand} + +% compare: +% +% \framed[width=4cm,align=no]     {\hfil xxx} +% \framed[width=4cm,align=disable]{\hfil xxx} + +\setvalue{\@@ragged@@command\v!disable}% for one liners +  {\appendtoks\raggedright\parfillskip\zeropoint\to\everyraggedcommand} + +\chardef\raggedoneliner\zerocount + +\setvalue{\@@ragged@@command\v!line}% +  {\chardef\raggedoneliner\plusone} + +% More alignments: + +% \hyphenpenalty  = ( 2.5 * \hsize ) / \raggedness +% \tolerance     >= 1500 % was 200 +% \raggedness     = 2 .. 6\bodyfontsize + +\chardef\raggedstatus=0 % normal left center right + +\def\leftraggedness   {2\bodyfontsize} +\def\rightraggedness  {2\bodyfontsize} +\def\middleraggedness {6\bodyfontsize} + +\def\middleraggedness {.5\hsize} % was: 6\bodyfontsize, fails on: \placefigure{x $x=x$ x}{} + +% oeps, hsize can be 0pt in which case we get a strange division + +\def\middleraggedness {\ifdim\hsize=\zeropoint6\bodyfontsize\else.5\hsize\fi} % was: 6\bodyfontsize, fails on: \placefigure{x $x=x$ x}{} + +%D More hyphenation control, will be combined with align +%D setup. + +\def\nohyphens +  {\ifx\dohyphens\relax +     \edef\dohyphens +       {\hyphenpenalty\the\hyphenpenalty +        \exhyphenpenalty\the\exhyphenpenalty\relax}% +   \fi +   \hyphenpenalty\plustenthousand +   \exhyphenpenalty\plustenthousand} + +\let\dohyphens\relax + +%D To prevent unwanted side effects, we also have to check +%D for hyphens here: + +\newskip\@@raggedskipa +\newskip\@@raggedskipb + +\def\setraggedness#1% +  {\ifnum\tolerance<1500\relax    % small values have +     \tolerance1500\relax         % unwanted side effects +   \fi +   \ifx\dohyphens\relax +     % this code will be reconsidered / kind of fuzzy (and old) +     \@@raggedskipa 2.5\hsize +     \@@raggedskipb  #1\relax +     \divide\@@raggedskipa \@@raggedskipb +     \hyphenpenalty\@@raggedskipa +   \fi} + +\let\updateraggedskips\relax + +\def\setraggedskips#1#2#3#4#5#6#7% never change this name +  {\def\updateraggedskips{\dosetraggedskips{#1}{#2}{#3}{#4}{#5}{#6}{#7}}% +   \updateraggedskips} + +\def\dosetraggedskips#1#2#3#4#5#6#7% +  {\chardef    \raggedstatus#1\relax +   \leftskip   1\leftskip \!!plus#2\relax % zie: Tex By Topic 8.1.3 +   \rightskip  1\rightskip\!!plus#3\relax % zie: Tex By Topic 8.1.3 +   \spaceskip  #4\relax +   \xspaceskip #5\relax +   \parfillskip\zeropoint\!!plus#6\relax +   \parindent  #7\relax} + +% \def\notragged% +%   {\setraggedskips{0}{0em}{0em}{0em}{0em}{1fil}{\parindent}} + +% older (context) names: + +\let\spaceamount  \interwordspace +\let\emspaceamount\emwidth + +% tracing: + +\def\doshowpardata#1% +  {\ifx#1\relax\else +     \hbox{\string#1: \the#1}\endgraf +     \expandafter\doshowpardata +   \fi} + +\def\showpardata +  {\edef\thepardata +     {\hbox{font: \fontname\font}\endgraf +      \doshowpardata +        \interwordspace \interwordstretch \interwordshrink \emwidth \exheight \extraspace +        \hsize     \vsize +        \leftskip  \rightskip +        \spaceskip \xspaceskip +        \parindent \parfillskip +        \hyphenpenalty \exhyphenpenalty +        \displaywidowpenalty \widowpenalty \clubpenalty \brokenpenalty +        \doublehyphendemerits \finalhyphendemerits \adjdemerits +      \relax}% +   \begingroup +   \dontshowcomposition +   \inleftmargin{\vsmash +     {\switchtobodyfont[7pt,tt]% +      \framed[\c!align=\v!right]{\thepardata}}}% +   \endgroup} + +\def\startshowpardata +  {\begingroup +   \showcomposition +   \showstruts\tracepositionstrue \tracingparagraphs\maxdimen +   \appendtoksonce\showpardata\let\showpardata\relax\to\everypar} + +\def\stopshowpardata +  {\endgraf +   \endgroup} + +% \defineXMLenvironment[showpardata] \startshowpardata \stopshowpardata +% \defineXMLsingular   [showpardata] \showpardata + +% defaults + +\def\raggedfillamount    {1fil} +\def\raggedhalffillamount{.5fil} +\def\raggedspaceamount   {\interwordspace} % {.3333em} +\def\raggedxspaceamount  {.5em} + +\def\notragged +  {\chardef\raggedstatus\zerocount +   \leftskip  1\leftskip +   \rightskip 1\rightskip +   \spaceskip  \zeropoint +   \xspaceskip \zeropoint +   \parfillskip\zeropoint\!!plus\raggedfillamount\relax +   \let\updateraggedskips\relax} % new + +\let\forgetragged\notragged + +\def\raggedleft +  {\setraggedness\leftraggedness +   \setraggedskips1\leftraggedness\zeropoint\raggedspaceamount +     \raggedxspaceamount\zeropoint\zeropoint} + +\def\raggedcenter +  {\setraggedness\middleraggedness +   \setraggedskips2\middleraggedness\middleraggedness\raggedspaceamount +     \raggedxspaceamount\zeropoint\zeropoint} + +%D We used to have: +%D +%D \starttyping +%D \def\raggedright +%D   {\setraggedness\rightraggedness +%D    \setraggedskips{3}{0em}{\rightraggedness}{.3333em}{.5em}{0em}{\parindent}} +%D \stoptyping +%D +%D However, the next alternative, suggested by Taco, is better. + +\def\raggedright +  {\setraggedness\rightraggedness +   \setraggedskips3\zeropoint\rightraggedness\raggedspaceamount +     \raggedxspaceamount\raggedfillamount\parindent} + +\def\veryraggedleft +  {\setraggedskips1\raggedfillamount\zeropoint\raggedspaceamount +     \raggedxspaceamount\zeropoint\zeropoint} + +%D When we want the last line to have a natural width: +%D +%D \starttyping +%D \def\veryraggedleft% +%D   {\setraggedskips{1}{1fil}{0em}{.3333em}{.5em}{0em}{-1fil}} +%D \stoptyping +%D +%D but this one is not accepted by the macros. + +\def\veryraggedcenter +  {\setraggedskips2\raggedfillamount\raggedfillamount\raggedspaceamount +     \raggedxspaceamount\zeropoint\zeropoint} + +\def\veryraggedright +  {\setraggedskips3\zeropoint\raggedfillamount\raggedspaceamount +     \raggedxspaceamount\zeropoint\parindent} + +\def\ttraggedright +  {\tttf +   \setraggedskips3\zeropoint\rightraggedness +     \zeropoint\zeropoint\zeropoint\parindent} % \ctxparindent + +%D A bonus one: + +\def\raggedwidecenter +  {\setraggedness\middleraggedness +   \setraggedskips2\raggedhalffillamount\raggedhalffillamount +     \raggedspaceamount\raggedxspaceamount\zeropoint\zeropoint} + +\newif\if@@asragged \@@asraggedtrue % old method + +% todo +% +% \setuplayout[grid=yes,lines=44] \showgrid +% \starttext +% test \vfill test \endgraf \strut \endgraf \vskip-\lineheight \removedepth \pagina test +% \stoptext + +% \setupalign[reset,new,right,old] + +\def\@@align@@rl{\if!!donea\veryraggedleft  \else\raggedleft  \fi} +\def\@@align@@rr{\if!!donea\veryraggedright \else\raggedright \fi} +\def\@@align@@rc{\if!!donea\veryraggedcenter\else\raggedcenter\fi} + +\setvalue{@@ngila@@\v!broad    }{\!!doneatrue} +\setvalue{@@ngila@@\v!wide     }{\!!donebtrue} + +\def\installalign#1#2{\setvalue{@@align@@#1}{#2}} % can be used for overloads + +\installalign \v!new           {\@@asraggedfalse} +\installalign \v!old           {\@@asraggedtrue} +\installalign \empty           {} + +\installalign \v!line          {\baselinebottom} +\installalign \v!bottom        {\raggedbottom} +\installalign \v!height        {\normalbottom} +\installalign \v!width         {\notragged} +\installalign \v!normal        {\notragged} +\installalign \v!yes           {\notragged} +\installalign \v!no            {\raggedright} +\installalign \v!inner         {\if@@asragged \setraggedparagraphmode\@@align@@rl\@@align@@rr \else +                                              \setraggedparagraphmode\@@align@@rr\@@align@@rl \fi} +\installalign \v!outer         {\if@@asragged \setraggedparagraphmode\@@align@@rr\@@align@@rl \else +                                \setraggedparagraphmode\@@align@@rl\@@align@@rr \fi} +\installalign \v!left          {\if@@asragged\@@align@@rl\else\@@align@@rr\fi} +\installalign \v!right         {\if@@asragged\@@align@@rr\else\@@align@@rl\fi} +\installalign \v!middle        {\if!!doneb\raggedwidecenter\else\@@align@@rc\fi} +\installalign \v!flushleft     {\if!!donea\veryraggedright \else\raggedright\fi} +\installalign \v!flushright    {\if!!donea\veryraggedleft  \else\raggedleft \fi} +\installalign \v!flushouter    {\setraggedparagraphmode\raggedleft\raggedright} +\installalign \v!flushinner    {\setraggedparagraphmode\raggedright\raggedleft} +\installalign \v!center        {\if!!doneb\raggedwidecenter\else\@@align@@rc\fi} +\installalign \v!hanging       {\enableprotruding} +\installalign \v!nothanging    {\disableprotruding} +\installalign \v!hz            {\enableadjusting} +\installalign \v!nohz          {\disableadjusting} +\installalign \v!spacing       {\enablespacehandling \enablekernhandling} +\installalign \v!nospacing     {\disablespacehandling\disablekernhandling} +\installalign \v!hyphenated    {\dohyphens} +\installalign \v!nothyphenated {\nohyphens} +\installalign \v!new           {\@@asraggedfalse} % so new will give you consistency +\installalign \v!reset         {\notragged\normalbottom} + +\installalign \v!tolerant      {\tolerance3000   \relax} +\installalign \v!verytolerant  {\tolerance4500   \relax} +\installalign \v!stretch       {\emergencystretch\bodyfontsize} + +\installalign \v!grid          {\doenablegridsnapping } % only mkiv +\installalign \v!nogrid        {\dodisablegridsnapping} % only mkiv + +\installalign \v!righttoleft   {\lefttoright} +\installalign \v!lefttoright   {\righttoleft} +\installalign {l2r}            {\lefttoright} +\installalign {r2l}            {\righttoleft} + +\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} + +\def\setupalign +  {\dosingleargument\dosetupalign} + +\def\dosetupalign[#1]% can be made faster by checking for defined #1 +  {\!!doneafalse +   \!!donebfalse +   \processcommacommand[#1]\dodosetupngila +   \processcommacommand[#1]\dodosetupalign} + +% \setupalign[flushleft]  \input ward \par % lijnlinks +% \setupalign[right]      \input ward \par + +% \setupalign[flushright] \input ward \par % lijnrechts +% \setupalign[left]       \input ward \par + +% \setupalign[middle]     \input ward \par % centreer +% \setupalign[center]     \input ward \par + +\def\startalignment +  {\bgroup +   \setupalign} + +\def\stopalignment +  {\par +   \egroup} + +\chardef\alignstrutmode=1 + +% see later for the real definition, which in the simple case is: + +\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 +  {\noindentation  % was \noindent +   \dontleavehmode % added in marrakesch at TUG 2006\begingroup +   \begingroup +   \setlocalhsize % new +   \def\\{\egroup\par\doalignline{#1}{#2}\bgroup}% +   \dowithnextbox +     {\hbox to \localhsize +        {\ifcase\alignstrutmode\or\strut\fi +         \the\everyleftofalignedline +         #1\unhbox\nextbox#2\relax +         \the\everyrightofalignedline}% +      \endgroup} +     \hbox} + +% plain commands + +\ifx\undefined\line       \def\line        {\hbox to\hsize}    \fi +\ifx\undefined\leftline   \def\leftline  #1{\line{#1\hss}}     \fi +\ifx\undefined\rightline  \def\rightline #1{\line{\hss#1}}     \fi +\ifx\undefined\centerline \def\centerline#1{\line{\hss#1\hss}} \fi + +% directe commando's + +\def\leftaligned {\doalignline \relax \hss  } +\def\midaligned  {\doalignline \hss   \hss  } +\def\rightaligned{\doalignline \hss   \relax} + +\let\centeraligned\midaligned + +\def\regelbegrensd#1{\limitatetext{#1}{\hsize}{\unknown}} % to be translated + +% indirecte commando's + +\letvalue{\s!do\v!line\v!left      }\leftaligned +\letvalue{\s!do\v!line\v!right     }\rightaligned +\letvalue{\s!do\v!line\v!middle    }\midaligned +\letvalue{\s!do\v!line\v!flushleft }\rightaligned +\letvalue{\s!do\v!line\v!flushright}\leftaligned +\letvalue{\s!do\v!line\v!center    }\midaligned + +\def\doalignedline#1{\csname\s!do\v!line#1\endcsname} + +%D Experimental: + +\def\doxalignline#1#2#3#4#5#6% +  {\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 moved up +      \hbox to \localhsize +        {#1\hskip\ifdone#2\else#3\fi#4% +         \hbox to \localhsize +           {\the\everyleftofalignedline +            \ifcase\alignstrutmode\or\strut\fi +            \ifdone#5\unhbox\nextbox#6\else#6\unhbox\nextbox#5\fi +            \the\everyrightofalignedline}% +         \hss}% +        \endgroup} +     \hbox} + +\def\doxcheckline +  {\signalrightpage\doifrightpageelse\donetrue\donefalse} + +\setvalue{\s!do\v!line\v!inner      }{\doxalignline\doxcheckline++\zeropoint       \relax\hss  } +\setvalue{\s!do\v!line\v!outer      }{\doxalignline\doxcheckline++\zeropoint       \hss  \relax} +\setvalue{\s!do\v!line\v!innermargin}{\doxalignline\doxcheckline-+\innermargintotal\relax\hss  } +\setvalue{\s!do\v!line\v!outermargin}{\doxalignline\doxcheckline+-\outermargintotal\hss  \relax} +\setvalue{\s!do\v!line\v!inneredge  }{\doxalignline\doxcheckline-+\inneredgetotal  \relax\hss  } +\setvalue{\s!do\v!line\v!outeredge  }{\doxalignline\doxcheckline+-\outeredgetotal  \hss  \relax} +\setvalue{\s!do\v!line\v!backspace  }{\doxalignline\doxcheckline-+\backspace       \relax\hss  } +\setvalue{\s!do\v!line\v!cutspace   }{\doxalignline\doxcheckline+-\cutspace        \hss  \relax} + +\setvalue{\s!do\v!line\v!leftmargin }{\doxalignline\donefalse   --\leftmargintotal \hss  \relax} +\setvalue{\s!do\v!line\v!rightmargin}{\doxalignline\donefalse   ++\rightmargintotal\relax\hss  } +\setvalue{\s!do\v!line\v!leftedge   }{\doxalignline\donefalse   --\leftedgetotal   \hss  \relax} +\setvalue{\s!do\v!line\v!rightedge  }{\doxalignline\donefalse   ++\rightedgetotal  \relax\hss  } + +% ! ! ! beware, redefining \doalignline gives the wrong results ! ! ! +% +% \def\doalignline{\doxalignline\donefalse++\zeropoint} + +%D Better: + +\def\doalignedline#1{\csname\s!do\v!line#1\endcsname} + +\def\alignedline#1#2% setting default +  {\csname\s!do\v!line\ifcsname\s!do\v!line#1\endcsname#1\else#2\fi\endcsname} + +% \def\woordrechts +%   {\groupedcommand{\hfill\hbox}{\parfillskip\zeropoint}} + +% beware: \wordright{whatever\kern-\rightskip} should work! +% so, no funny boxing here + +\def\dowordright[#1]% +  {% don't change +   \groupedcommand +     {\removeunwantedspaces +      \hfill +      \allowbreak % changed back from \hskip\zeropoint +      \strut +      \hfill +      \quad % decent spacing +      \hbox} +     {\doifelse{#1}\v!right{\kern-\rightskip}{\doifsomething{#1}{\kern-#1}}% +      \parfillskip\zeropoint +     %\finalhyphendemerits\zerocount % yes or no +      \par}} + +\def\wordright +  {\dosingleempty\dowordright} + +% \dorecurse{5}{something } \wordright{--someone} \endgraf +% \dorecurse{6}{something } \wordright{--someone} \endgraf +% \dorecurse{7}{something } \wordright{--someone} \endgraf +% +% \dorecurse{5}{something } \wordright{--someone else entirely} \endgraf +% \dorecurse{6}{something } \wordright{--someone else entirely} \endgraf +% \dorecurse{7}{something } \wordright{--someone else entirely} \endgraf +% +% \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}}} + +\protect \endinput | 
