diff options
Diffstat (limited to 'Master/texmf-dist/tex/context/base/typo-tal.mkiv')
-rw-r--r-- | Master/texmf-dist/tex/context/base/typo-tal.mkiv | 160 |
1 files changed, 160 insertions, 0 deletions
diff --git a/Master/texmf-dist/tex/context/base/typo-tal.mkiv b/Master/texmf-dist/tex/context/base/typo-tal.mkiv new file mode 100644 index 00000000000..7de10a6ec1d --- /dev/null +++ b/Master/texmf-dist/tex/context/base/typo-tal.mkiv @@ -0,0 +1,160 @@ +%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} + +%D We need fonts to provide tabular digits that is, the digits need to have the same +%D width. +%D +%D \startbuffer +%D \startbuffer[demo] +%D \switchtobodyfont[pagella] +%D \setupTABLE[column][1][alignmentcharacter=.,aligncharacter=yes] +%D \bTABLE +%D \bTR \bTD 11.111 \eTD \bTD 11.111 \eTD \eTR +%D \bTR \bTD 2.2 \eTD \bTD 2.2 \eTD \eTR +%D \bTR \bTD 444.444 \eTD \bTD 444.444 \eTD \eTR +%D \eTABLE +%D \stopbuffer +%D +%D \start inlinenumbers: \crlf \addfeature[inlinenumbers] \getbuffer \stop +%D \start tabularnumbers: \crlf \addfeature[tabularnumbers] \getbuffer \stop +%D \start oldstylenumbers:\crlf \addfeature[oldstylenumbers] \getbuffer \stop +%D \stopbuffer +%D +%D \enabledirectives[typesetters.characteralign.autofont] +%D \typebuffer \blank \getbuffer \blank +%D \disabledirectives[typesetters.characteralign.autofont] +%D \typebuffer \blank \getbuffer \blank +%D \enabledirectives[typesetters.characteralign.autofont] + +\definefontfeature + [system:tabnum] + [tnum=yes, + lnum=no] + +\newconditional\c_tabl_ntb_char_align_auto_font \settrue\c_tabl_ntb_char_align_auto_font + +\installtexdirective % yes or no ? + {typesetters.characteralign.autofont} + {\settrue \c_tabl_ntb_char_align_auto_font} + {\setfalse\c_tabl_ntb_char_align_auto_font} + +\def\m_font_feature_auto_tabnum{system:tabnum} + +\unexpanded\def\typo_charalign_adapt_font_indeed + {\let\m_font_feature_asked\m_font_feature_auto_tabnum + \font_feature_reset_add_indeed} + +\def\typo_charalign_adapt_font % slow but seldom used (expanded in preamble) + {\ifconditional\c_tabl_ntb_char_align_auto_font + \typo_charalign_adapt_font_indeed + \fi} + +\protect \endinput |