1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
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}
\protect \endinput
|