%D \module %D [ file=supp-ali, %D version=2000.04.17, %D title=\CONTEXT\ Support Macros, %D subtitle=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. % 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 \chardef\characteralignmentmode=4 \chardef\characteralignmentslot=1 \newtoks\@@characteralignlst \let\afterassignwidth \!!zeropoint \let\beforeassignwidth\!!zeropoint \def\alignmentcharacter{.} \let\alignmentclass\s!default % can be used to handle multiple mixed ones \def\setfirstpasscharacteralign {\popcharacteralign \expanded{\dosetfirstpasscharacteralign{\alignmentcharacter}}} \def\dosetfirstpasscharacteralign#1% {\def\checkalignment##1% {\popcharacteralign \let\\\empty \setbox\scratchbox\hbox{#1}% \edef\characterassignwidth{\the\wd\scratchbox}% \setbox\scratchbox\null \docheckalignment##1#1\relax\relax \scratchdimen-\wd\scratchbox \setbox\scratchbox\hbox{\ignorespaces##1\unskip}% \advance\scratchdimen \wd\scratchbox \ifdim\scratchdimen>\beforeassignwidth\relax \edef\beforeassignwidth{\the\scratchdimen}% \fi \ifdim\scratchdimen=\zeropoint \setbox\scratchbox\hbox{\ignorespaces##1\unskip}% \scratchdimen\wd\scratchbox \ifcase\characteralignmentmode % do nothing \else\ifnum\characteralignmentmode<\plusthree \advance\scratchdimen \characterassignwidth \ifdim\scratchdimen>\beforeassignwidth\relax \edef\beforeassignwidth{\the\scratchdimen}% \fi \else \ifdim\scratchdimen>\afterassignwidth\relax \edef\afterassignwidth{\the\scratchdimen}% \fi \fi\fi \fi \pushcharacteralign}% \def\docheckalignment##1#1##2##3\relax {\ifx##2\relax \setbox\scratchbox\hbox{\ignorespaces##1\unskip}% \ifdim\wd\scratchbox>\afterassignwidth \edef\afterassignwidth{\the\wd\scratchbox}% \fi \else \docheckalignment##2##3\relax\relax \fi}} \def\setsecondpasscharacteralign {\popcharacteralign \expanded{\dosetsecondpasscharacteralign{\alignmentcharacter}}} \def\dosetsecondpasscharacteralign#1% {\def\checkalignment##1% {\popcharacteralign \let\\\empty % beware, no grouping \setbox\scratchbox\hbox{#1}% \edef\characterassignwidth{\the\wd\scratchbox}% \setbox\scratchbox\null % new 12,34 vs 10\\ where 10 aligns on 12 if #1 = , \ifcase\characteralignmentslot \docheckalignment##1#1\relax\relax \scratchdimen\wd\scratchbox \setbox\scratchbox\hbox{\ignorespaces##1\unskip}% \else \def\\{#1}% \expanded{\docheckalignment##1#1\relax\relax}% \scratchdimen\wd\scratchbox \setbox\scratchbox\hbox{\def\\{\hphantom{#1}}\ignorespaces##1\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\characterassignwidth \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}% \def\docheckalignment##1#1##2##3\relax {\ifx##2\relax \setbox\scratchbox\hbox{\ignorespaces##1\unskip}% \else \docheckalignment##2##3\relax\relax \fi}} % provide a means to use multiple alignments mixed \def\pushcharacteralign {\ifundefined{@cac@\alignmentclass}% \doglobal\appendetoks\noexpand\do{\alignmentclass}\to\@@characteralignlst \fi \setxvalue{@cac@\alignmentclass}{\noexpand\do {\afterassignwidth}{\beforeassignwidth}{\alignmentcharacter}}} \def\popcharacteralign {\def\do##1##2##3% {\def\afterassignwidth {##1}% \def\beforeassignwidth {##2}% \def\alignmentcharacter{##3}}% \executeifdefined{@cac@\alignmentclass}\donothing} \def\resetcharacteralign % does not work well nested {\def\do##1{\global\letbeundefined{@cac@##1}}% global ! \the\@@characteralignlst \global\@@characteralignlst\emptytoks} \long\def\startcharacteralign#1\stopcharacteralign {\bgroup \setfirstpasscharacteralign #1% \setsecondpasscharacteralign#1% \egroup} \protect \endinput