summaryrefslogtreecommitdiff
path: root/tex/context/base/typo-tal.mkiv
diff options
context:
space:
mode:
Diffstat (limited to 'tex/context/base/typo-tal.mkiv')
-rw-r--r--tex/context/base/typo-tal.mkiv112
1 files changed, 112 insertions, 0 deletions
diff --git a/tex/context/base/typo-tal.mkiv b/tex/context/base/typo-tal.mkiv
new file mode 100644
index 000000000..f67eadc49
--- /dev/null
+++ b/tex/context/base/typo-tal.mkiv
@@ -0,0 +1,112 @@
+%D \module
+%D [ file=typo-tal, % spac-cha (2012.06.08) supp-ali (2000.04.17)
+%D version=2013.10.04,
+%D title=\CONTEXT\ Typesetting 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.
+
+\writestatus{loading}{ConTeXt Typesetting Macros / Character Alignment}
+
+%D This module replaces the \MKII\ character alignment code which hooked into
+%D table mechanisms but used parsing. In fact, this might be one of these cases
+%D where a \TEX\ based solution is faster, but a \LUA\ one a bit more robust.
+%D Anyway, as I had to fix something (to fit the newer table mechanisms) I
+%D decided to go the mixed route, a rather easy going effort in the aftermath of
+%D the 2013 \CONTEXT\ meeting.
+
+\unprotect
+
+\registerctxluafile{typo-tal}{1.001}
+
+\definesystemattribute[characteralign][public]
+
+%D This mechanism is mostly meant for tables:
+%D
+%D \startbuffer
+%D \starttabulate[|l|g{,}|r|]
+%D \NC test \NC 1.234.456,99 \NC \NC test \NR
+%D \NC test \NC 234.456,9 \NC \NC test \NR
+%D \NC test \NC 234.456 \NC \NC test \NR
+%D \NC test \NC 456 \NC \NC test \NR
+%D \NC test \NC \bf whatever \NC \NC test \NR
+%D \stoptabulate
+%D \stopbuffer
+%D
+%D \typebuffer \blank \getbuffer \blank
+
+%D \startbuffer
+%D \bTABLE
+%D \bTR \bTD[aligncharacter=yes] € 1,1 \eTD \eTR
+%D \bTR \bTD[aligncharacter=yes] € 11,11 \eTD \eTR
+%D \bTR \bTD[aligncharacter=yes] € 12\punctuationspace111,11 \eTD \eTR
+%D \bTR \bTD[aligncharacter=yes] € 12 111,11 \eTD \eTR
+%D \bTR \bTD[aligncharacter=yes] € 1.234.451,22222 \eTD \eTR
+%D \bTR \bTD[aligncharacter=yes] € 234.451,2 \eTD \eTR
+%D \bTR \bTD[aligncharacter=yes] € 234.451 \eTD \eTR
+%D \bTR \bTD[aligncharacter=yes] € 451 \eTD \eTR
+%D \bTR \bTD \bf some text \eTD \eTR
+%D \eTABLE
+%D \stopbuffer
+%D
+%D \typebuffer \blank \getbuffer \blank
+
+\unexpanded\def\signalcharacteralign#1#2{\attribute\characteralignattribute=\numexpr#1*\plushundred+#2\relax}
+\unexpanded\def\setcharacteralign #1#2{\ctxcommand{setcharacteralign(\number#1,"#2")}}
+\unexpanded\def\resetcharacteralign {\ctxcommand{resetcharacteralign()}}
+
+%D Mostly downward compatible:
+%D
+%D \startbuffer
+%D \startcharacteralign
+%D \checkcharacteralign{123.456,78}
+%D \checkcharacteralign{456}
+%D \checkcharacteralign{23.456}
+%D \checkcharacteralign{78,9}
+%D \stopcharacteralign
+%D \stopbuffer
+%D
+%D \typebuffer \blank \getbuffer \blank
+
+\def\alignmentcharacter{,}
+
+\unexpanded\def\typo_charalign_pass_one
+ {\advance\scratchcounter\plusone
+ \setbox\scratchbox\typo_charalign_pass}
+
+\unexpanded\def\typo_charalign_pass_two
+ {\advance\scratchcounter\plusone
+ \typo_charalign_pass}
+
+\def\typo_charalign_pass
+ {\hbox\bgroup\signalcharacteralign\plusone\scratchcounter\let\next}
+
+\unexpanded\def\startcharacteralign#1\stopcharacteralign
+ {\bgroup
+ \setcharacteralign\plusone\alignmentcharacter
+ \begingroup
+ \scratchcounter\zerocount
+ \let\checkcharacteralign\typo_charalign_pass_one
+ \settrialtypesetting
+ #1\relax
+ \endgroup
+ \begingroup
+ \scratchcounter\zerocount
+ \let\checkcharacteralign\typo_charalign_pass_two
+ #1\relax
+ \endgroup
+ \resetcharacteralign
+ \egroup}
+
+\let\stopcharacteralign \relax
+\let\checkcharacteralign\gobbleoneargument
+
+\def\setfirstpasscharacteralign {\let\checkcharacteralign\gobbleoneargument}
+\def\setsecondpasscharacteralign{\let\checkcharacteralign\firstofoneargument}
+
+\endinput