1
2
3
4
5
6
7
8
9
10
11
12
13
14\ifcase\contextlmtxmode\else\endinput\fi
15
16
17
18\writestatus{loading}{ConTeXt Support Macros Numbers}
19
20\unprotect
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\chardef\digitoutputmode=1
76\chardef\digitsignmode =0
77
78\unexpanded\def\setdigitmode{\chardef\digitoutputmode}
79\unexpanded\def\setdigitsign{\chardef\digitsignmode}
80
81
82
83
84
85
86
87
88
89
90
91
92\let\collecteddigits \empty \chardef\digitinputmode =1
93\let\saveddigits \empty \chardef\skipdigit =0
94\let\savedpowerdigits\empty \chardef\powerdigits =0
95
96
97
98
99
100\ifdefined\mbox \else \let\mbox\hbox \fi
101
102\unexpanded\def\digits
103 {\bgroup
104 \let@
105 \doifelsenextbgroup\dodigits{\doifelsenextchar\normalmathshift\domathdigits\grabdigit}}
106
107\def\dodigits#1
108 {\grabdigit#1\relax}
109
110\def\domathdigits$#1$
111 {\mbox{\grabdigit#1\relax}}
112
113\def\grabdigit
114 {\futurelet\nexttoken\scandigit}
115
116
117
118
119
120
121\ifx\normalmathshift\undefined \let\normalmathshift=$ \fi
122
123\unexpanded\def\scandigit
124 {\ifx\nexttoken\blankspace
125 \let\next\handledigits
126 \else\ifx\nexttoken\nextobeyedline
127 \let\next\handledigits
128 \else\ifx\nexttoken\bgroup
129 \let\next\handledigits
130 \else\ifx\nexttoken\egroup
131 \let\next\handledigits
132 \else\ifx\nexttoken\normalmathshift
133 \let\next\handledigits
134 \else
135 \let\next\collectdigit
136 \fi\fi\fi\fi\fi
137 \next}
138
139
140
141
142
143
144\unexpanded\def\savedigit#1#2
145 {\edef#1{#1\saveddigits#2}\let\saveddigits\empty}
146
147\unexpanded\def\collectdigit#1
148 {\ifx#1
149 \savedigit\collecteddigits @
150 \else\if#1
151 \savedigit\collecteddigits @
152 \else\if\noexpand#1\relax
153 \let\grabdigit\handledigits
154 \else\ifcase\powerdigits
155 \if#1E
156 \chardef\powerdigits\plusone
157 \else\if#1e
158 \chardef\powerdigits\plusone
159 \else\if#1
160 \chardef\powerdigits\plusone
161 \else
162 \savedigit\collecteddigits#1
163
164
165
166 \fi\fi\fi
167 \else
168 \savedigit\savedpowerdigits#1
169
170
171
172 \fi\fi\fi\fi
173 \grabdigit}
174
175\let\handlemathdigits\firstofoneargument
176\let\handletextdigits\mathematics
177
178\unexpanded\def\handledigits
179 {
180
181
182
183
184 \ifmmode
185 \handlemathdigits{\dohandledigits}
186 \else
187 \dontleavehmode\hbox{\handletextdigits{\dohandledigits}}
188 \fi
189 \egroup}
190
191
192
193
194\def\dohandledigits
195 {\mathcode\,="002C \mathcode\.="002E
196 \expandafter\handletokens\collecteddigits\with\scandigits
197 \ifcase\powerdigits\else\digitpowerseparator{\savedpowerdigits}\fi}
198
199\chardef\mathaxisfontid\zerocount
200
201\def\doscandigit#1
202 {\ifcase\skipdigit\expandafter\hbox\else\expandafter\hphantom\fi\bgroup
203 \mathematics
204 {\ifnum\digitinputmode=#1\relax
205 \ifcase\digitoutputmode
206 \or .
207 \or ,
208 \or \mskip\thinmuskip
209 \or \mskip\thinmuskip
210 \or \mskip\thickmuskip
211 \or \mskip\thickmuskip
212 \fi
213 \else
214 \ifodd\digitoutputmode,\else.\fi
215 \fi}
216 \egroup}
217
218
219
220
221
222
223
224
225
226
227\unexpanded\def\digitzeroamount
228 {\digitsgn\zeroamount
229 \def\digitzeroamount
230 {\hphantom
231 {00\setbox\scratchbox\hbox{$\zeroamount$}
232 \hskip\wd\scratchbox}
233 \let\digitzeroamount\empty}}
234
235\unexpanded\def\scandigits#1
236 {\if#1.\digitsep1\else
237 \if#1,\digitsep2\else
238 \if#1@\digitnop \else
239 \if#1\digitnop \else
240 \if#1\digitsgn{\hphantom{}}\chardef\skipdigit0\else
241 \if#1\ifcase\skipdigit\digitsgn\else
242 \box\digitsepbox\digitzeroamount \fi\chardef\skipdigit0\else
243 \if#1\digitsgn\chardef\skipdigit0\else
244 \if#1=\box\digitsepbox\digitzeroamount \chardef\skipdigit0\else
245 \if#1s\digitsgn{\hphantom{\positive}}\chardef\skipdigit0\else
246 \if#1p\digitsgn\positive\chardef\skipdigit0\else
247 \if#1m\digitsgn\negative\chardef\skipdigit0\else
248 \if#1n\digitsgn\negative\chardef\skipdigit0\else
249 \box\digitsepbox #1\chardef\skipdigit0\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi}
250
251\newbox\digitsepbox \chardef\autodigitmode=1
252
253\unexpanded\def\digitsep#1
254 {\ifcase\autodigitmode
255 \doscandigit#1
256 \else
257 \setbox\digitsepbox\hbox{\doscandigit#1}
258 \fi
259 \chardef\skipdigit0\relax}
260
261
262
263
264
265
266
267
268
269\unexpanded\def\digitnop
270 {\hbox{\hphantom{\box\digitsepbox}}
271 \hphantom{0}\chardef\skipdigit1\relax}
272
273
274
275
276
277
278
279\unexpanded\def\digitsgn#1
280 {\ifcase\digitsignmode#1\else
281 \hbox
282 {\setbox\scratchbox\hbox{0}
283 \scratchdimen\mathaxisheight\textfont\mathaxisfontid
284 \def\digitsgn##1##2
285 {\advance\scratchdimen\mathaxisheight##1\mathaxisfontid
286 \raise\scratchdimen
287 \hbox to \wd\scratchbox{\hss$##2#1$\hss}}
288 \ifcase\digitsignmode\or
289 \digitsgn\textfont \textstyle \or
290 \digitsgn\scriptfont \scriptstyle \or
291 \digitsgn\scriptscriptfont\scriptscriptstyle\fi}
292 \fi}
293
294\ifx\undefined\zeroamount \def\zeroamount{} \fi
295\ifx\undefined\positive \def\positive {} \fi
296\ifx\undefined\negative \def\negative {} \fi
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356\let\Digits\digits
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383\def\digitpowerseparator
384 {\ifx\collecteddigits\empty\else\cdot\fi10}
385
386
387
388
389
390
391
392
393
394
395
396\unexpanded\def\digittemplate #1
397 {\chardef\digitinputmode\zerocount
398 \handletokens#1\with\scandigittemplate}
399
400\unexpanded\def\scandigittemplate#1
401 {\if #1.\ifcase\digitinputmode\chardef\digitinputmode\plusone \fi
402 \else\if#1,\ifcase\digitinputmode\chardef\digitinputmode\plustwo \fi
403 \fi\fi}
404
405\protect \endinput
406 |