diff options
author | Hans Hagen <pragma@wxs.nl> | 1999-02-17 00:00:00 +0100 |
---|---|---|
committer | Hans Hagen <pragma@wxs.nl> | 1999-02-17 00:00:00 +0100 |
commit | 9ca92159ee8e762e295fc06fcb22dcb1006707cd (patch) | |
tree | 0c42902fe34cde08f4badaa27ed924fbf9d905c6 /tex/context/base/supp-num.tex | |
parent | f7ce2124ddf34c4a7c785e1500003921d70118ba (diff) | |
download | context-9ca92159ee8e762e295fc06fcb22dcb1006707cd.tar.gz |
stable 1999.02.17
Diffstat (limited to 'tex/context/base/supp-num.tex')
-rw-r--r-- | tex/context/base/supp-num.tex | 201 |
1 files changed, 201 insertions, 0 deletions
diff --git a/tex/context/base/supp-num.tex b/tex/context/base/supp-num.tex new file mode 100644 index 000000000..48b560d67 --- /dev/null +++ b/tex/context/base/supp-num.tex @@ -0,0 +1,201 @@ +%D \module +%D [ file=supp-lan, +%D version=1998.05.15, +%D title=\CONTEXT\ Support Macros, +%D subtitle=Number (Digit) Handling, +%D author=Hans Hagen, +%D date=\currentdate, +%D copyright={PRAGMA / Hans Hagen \& Ton Otten}] +%C +%C This module is part of the \CONTEXT\ macro||package and is +%C therefore copyrighted by \PRAGMA. Non||commercial use is +%C granted. + +\writestatus{loading}{Context Support Macros / Number (Digit) Handling} + +\unprotect + +%D \macros +%D {digitmode, digits} +%D +%D Depending on \type{\digitmode} the command \type{\digits} +%D normalizes number patterns depending on the language set. +%D +%D \starttypen +%D This will never be a \digits{1.000.000} seller. +%D \stoptypen +%D +%D or +%D +%D \starttypen +%D I will never grow longer than \digits 1.86 \Meter. +%D \stoptypen +%D +%D The different modes are shown in: +%D +%D \startbuffer +%D / \setdigitmode 1 / \digits 12.345,90 / \digits 12.345.000 / \digits 1,23 / +%D / \setdigitmode 2 / \digits 12.345,90 / \digits 12.345.000 / \digits 1,23 / +%D / \setdigitmode 3 / \digits 12.345,90 / \digits 12.345.000 / \digits 1,23 / +%D / \setdigitmode 4 / \digits 12.345,90 / \digits 12.345.000 / \digits 1,23 / +%D / \setdigitmode 5 / \digits 12.345,90 / \digits 12.345.000 / \digits 1,23 / +%D / \setdigitmode 6 / \digits 12.345,90 / \digits 12.345.000 / \digits 1,23 / +%D \stopbuffer +%D +%D \typebuffer +%D +%D This is typset as: +%D +%D \startregels +%D \haalbuffer +%D \stopregels + +\chardef\digitinputmode =1 +\chardef\digitoutputmode=1 + +\def\setdigitmode#1% + {\chardef\digitoutputmode#1} + +%D The digit modes are: +%D +%D \startopsomming[opelkaar] +%D \som periods \& comma +%D \som commas \& period +%D \som thinmuskips \& comma +%D \som thinmuskips \& period +%D \som thickmuskips \& comma +%D \som thickmuskips \& period +%D \stopopsomming + +\let\collecteddigits \empty +\let\saveddigits \empty +\let\savedpowerdigits\empty +\chardef\powerdigits=0 + +\def\digits% + {\bgroup\grabdigit} + +\def\grabdigit% + {\futurelet\next\scandigit} + +\let\normalmath$ + +\def\scandigit% + {\ifx\next\blankspace + \let\next\handledigits + \else\ifx\next\bgroup + \let\next\handledigits + \else\ifx\next\egroup + \let\next\handledigits + \else\ifx\next\normalmath + \let\next\handledigits + \else + \let\next\collectdigit + \fi\fi\fi\fi + \next} + +\long\def\collectdigit#1% + {\if\noexpand#1\relax + \let\grabdigit\handledigits + \else\ifcase\powerdigits + \if#1^% + \chardef\powerdigits=1 + \else + \doifnumberelse{#1} + {\edef\collecteddigits{\collecteddigits\saveddigits#1}% + \let\saveddigits\empty} + {\def\saveddigits{#1}}% + \fi + \else + \doifnumberelse{#1} + {\edef\savedpowerdigits{\savedpowerdigits\saveddigits#1}% + \let\saveddigits\empty} + {\def\saveddigits{#1}}% + \fi\fi + \grabdigit} + +\def\handledigits% + {\ifmmode + \dohandledigits + \else + \dontleavehmode\hbox{$\dohandledigits$}% + \fi + \saveddigits + \egroup} + +\def\dohandledigits% + {\mathcode`\,="013B + \mathcode`\.="013A + \expandafter\handletokens\collecteddigits\with\scandigits + \ifcase\powerdigits\else\digitpowerseperator^{\savedpowerdigits}\fi} + +\def\scandigits#1% + {\if#1.\doscandigit1\else + \if#1,\doscandigit2\else + #1\fi\fi} + +\def\doscandigit#1% + {\ifnum\digitinputmode=#1\relax + \ifcase\digitoutputmode + \or .% + \or ,% + \or \mskip\thinmuskip + \or \mskip\thinmuskip + \or \mskip\thickmuskip + \or \mskip\thickmuskip + \fi + \else + \ifodd\digitoutputmode,\else.\fi + \fi} + +%D We also permit: + +\let\Digits=\digits + +%D These macros are complicated by the fact that we also +%D have to support cases like: +%D +%D \starttypen +%D {\digits1234} +%D \digits{1234} +%D \digits 1234\whatever +%D $\digits 123.222,00$ +%D \digits 123.222,00. +%D \stoptypen +%D +%D The latter case shows us that trailing non digits are to +%D be passed untreated. +%D +%D Another interesting case is: +%D +%D \starttypen +%D \digits 123.222,00^10 +%D \stoptypen +%D +%D The seperator is defined as: + +\def\digitpowerseperator% + {\cdot10} + +%D \macros +%D {digittemplate} +%D +%D Users can specify the way they enter those digits by sayon +%D something like: +%D +%D \starttypen +%D \digittemplate 12.000.000,00 % \digittemplate ., +%D \stoptypen + +\def\digittemplate #1 % + {\chardef\digitinputmode=0 + \handletokens#1\with\scandigittemplate} + +\def\scandigittemplate#1% + {\if #1.\ifcase\digitinputmode\chardef\digitinputmode=1 \fi% period + \else\if#1,\ifcase\digitinputmode\chardef\digitinputmode=2 \fi% comma + \fi\fi} + +\protect + +\endinput |