diff options
Diffstat (limited to 'Master/texmf-dist/tex/context/base/spac-cha.mkiv')
-rw-r--r-- | Master/texmf-dist/tex/context/base/spac-cha.mkiv | 191 |
1 files changed, 191 insertions, 0 deletions
diff --git a/Master/texmf-dist/tex/context/base/spac-cha.mkiv b/Master/texmf-dist/tex/context/base/spac-cha.mkiv new file mode 100644 index 00000000000..a07c8f198aa --- /dev/null +++ b/Master/texmf-dist/tex/context/base/spac-cha.mkiv @@ -0,0 +1,191 @@ +%D \module +%D [ file=spac-cha, % was supp-ali, +%D version=2012.06.08, % 2000.04.17, +%D title=\CONTEXT\ Spacing Macros, +%D subtitle=Character Alignment, +%D author=Hans Hagen, +%D date=\currentdate, +%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 +%C details. + +%D Yet undocumented but nevertheless used. + +% 0 = centered +% 1 = left in before +% 2 = right in before +% 3 = left in after +% 4 = right in after + +\unprotect + +% \starttabulate[|cg{.}|cg{,}|cg{,}|] +% \NC period \NC comma \NC comma \NC\NR +% \NG 100.000,00 \NG 100.000,00 \NG 100,00 \NC\NR +% \NG 10.000,00 \NG 10.000,00 \NG 1000,00 \NC\NR +% \NG 100,00 \NG 100,00 \NG 10,00 \NC\NR +% \NG 100,00 \NG 100,00 \NG 10,00 \NC\NR +% \NG 10\\ \NG 10\\ \NG 0,00 \NC\NR +% \NG 10 \NG 10 \NG 0,00 \NC\NR +% \NG 10 \NG 10 \NG 0,00 \NC\NR +% \stoptabulate + +% We gain not much by luafication and actually make things worse. + +\chardef\characteralignmentmode\plusfour +\chardef\characteralignmentslot\plusone + +\let\afterassignwidth \!!zeropoint +\let\beforeassignwidth\!!zeropoint + +\def\alignmentcharacter{.} + +\newdimen\d_supp_charalign_width +\newtoks \t_supp_charalign_list + +\let\alignmentclass\s!default % can be used to handle multiple mixed ones + +\installcorenamespace{characteralign} + +\unexpanded\def\supp_charalign_push + {\ifcsname\??characteralign\alignmentclass\endcsname\else + \normalexpanded{\global\t_supp_charalign_list{\the\t_supp_charalign_list\supp_charalign_do{\alignmentclass}}}% + \fi + \setxvalue{\??characteralign\alignmentclass}{\supp_charalign_do + {\afterassignwidth}{\beforeassignwidth}{\alignmentcharacter}}} + +\unexpanded\def\supp_charalign_pop_do#1#2#3% + {\def\afterassignwidth {#1}% + \def\beforeassignwidth {#2}% + \def\alignmentcharacter{#3}} + +\unexpanded\def\supp_charalign_pop + {\let\supp_charalign_do\supp_charalign_pop_do + \executeifdefined{\??characteralign\alignmentclass}\donothing} + +\unexpanded\def\supp_charalign_reset_do#1% + {\global\letbeundefined{\??characteralign#1}} % global ! + +\unexpanded\def\resetcharacteralign + {\let\supp_charalign_do\supp_charalign_reset_do + \the\t_supp_charalign_list + \global\t_supp_charalign_list\emptytoks} + +\unexpanded\def\supp_charalign_firstpass_one#1#2% + {\supp_charalign_pop + \let\\\empty + \setbox\scratchbox\hbox{#1}% + \d_supp_charalign_width\wd\scratchbox + \setbox\scratchbox\emptyhbox + \supp_charalign_check#2#1\relax\relax + \scratchdimen-\wd\scratchbox + \setbox\scratchbox\hbox{\ignorespaces#2\unskip}% + \advance\scratchdimen \wd\scratchbox + \ifdim\scratchdimen>\beforeassignwidth\relax + \edef\beforeassignwidth{\the\scratchdimen}% + \fi + \ifdim\scratchdimen=\zeropoint + \setbox\scratchbox\hbox{\ignorespaces#2\unskip}% + \scratchdimen\wd\scratchbox + \ifcase\characteralignmentmode + % do nothing + \else\ifnum\characteralignmentmode<\plusthree + \advance\scratchdimen\d_supp_charalign_width\relax + \ifdim\scratchdimen>\beforeassignwidth\relax + \edef\beforeassignwidth{\the\scratchdimen}% + \fi + \else + \ifdim\scratchdimen>\afterassignwidth\relax + \edef\afterassignwidth{\the\scratchdimen}% + \fi + \fi\fi + \fi + \supp_charalign_push} + +\unexpanded\def\supp_charalign_firstpass_two#1#2#3% + {\ifx#2\relax + \setbox\scratchbox\hbox{\ignorespaces#1\unskip}% + \ifdim\wd\scratchbox>\afterassignwidth + \edef\afterassignwidth{\the\wd\scratchbox}% + \fi + \else + \supp_charalign_check#2#3\relax\relax + \fi} + +\unexpanded\def\supp_charalign_secondpass_one#1#2% + {\supp_charalign_pop + \let\\\empty % beware, no grouping + \setbox\scratchbox\hbox{#1}% + \d_supp_charalign_width\wd\scratchbox + \setbox\scratchbox\emptyhbox + % new 12,34 vs 10\\ where 10 aligns on 12 if #1 = , + \ifcase\characteralignmentslot + \supp_charalign_check#2#1\relax\relax + \scratchdimen\wd\scratchbox + \setbox\scratchbox\hbox{\ignorespaces##1\unskip}% + \else + \def\\{#1}% + \normalexpanded{\supp_charalign_check#2#1\relax\relax}% + \scratchdimen\wd\scratchbox + \setbox\scratchbox\hbox{\def\\{\hphantom{#1}}\ignorespaces#2\unskip}% + \fi + \noindent + \ifdim\scratchdimen=\wd\scratchbox + \ifcase\characteralignmentmode + \box\scratchbox + \else + \hbox + {\dontcomplain + \hbox to \beforeassignwidth + {\ifcase\characteralignmentmode\or + \box\scratchbox\hss + \or + \hss\box\scratchbox\hskip\d_supp_charalign_width + \or + \hss\rlap{\box\scratchbox}% + \or + \hss\rlap{\hbox to \afterassignwidth{\hss\box\scratchbox}}% + \fi}% + \hskip\afterassignwidth}% + \fi + \else + \hbox + {\hbox to \beforeassignwidth + {\hss\box\scratchbox\hskip-\scratchdimen}% + \hskip\afterassignwidth}% + \fi} + +\unexpanded\def\supp_charalign_secondpass_two#1#2#3% + {\ifx#2\relax + \setbox\scratchbox\hbox{\ignorespaces#1\unskip}% + \else + \supp_charalign_check#2#3\relax\relax + \fi} + +\unexpanded\def\supp_charalign_firstpass#1% + {\unexpanded\def\checkalignment ##1{\supp_charalign_firstpass_one{#1}{##1}}% + \unexpanded\def\supp_charalign_check##1#1##2##3\relax{\supp_charalign_firstpass_two{##1}{##2}{##3}}} + +\unexpanded\def\supp_charalign_secondpass#1% + {\unexpanded\def\checkalignment ##1{\supp_charalign_secondpass_one{#1}{##1}}% + \unexpanded\def\supp_charalign_check##1#1##2##3\relax{\supp_charalign_secondpass_two{##1}{##2}{##3}}} + +\unexpanded\def\setfirstpasscharacteralign + {\supp_charalign_pop + \normalexpanded{\supp_charalign_firstpass{\alignmentcharacter}}} + +\unexpanded\def\setsecondpasscharacteralign + {\supp_charalign_pop + \normalexpanded{\supp_charalign_secondpass{\alignmentcharacter}}} + +\unexpanded\def\startcharacteralign#1\stopcharacteralign + {\bgroup + \setfirstpasscharacteralign #1% + \setsecondpasscharacteralign#1% + \egroup} + +\let\stopcharacteralign\relax + +\protect \endinput |