diff options
Diffstat (limited to 'Master/texmf-dist/tex/context/base/mkii/sort-ini.mkii')
-rw-r--r-- | Master/texmf-dist/tex/context/base/mkii/sort-ini.mkii | 161 |
1 files changed, 161 insertions, 0 deletions
diff --git a/Master/texmf-dist/tex/context/base/mkii/sort-ini.mkii b/Master/texmf-dist/tex/context/base/mkii/sort-ini.mkii new file mode 100644 index 00000000000..8114f82c8eb --- /dev/null +++ b/Master/texmf-dist/tex/context/base/mkii/sort-ini.mkii @@ -0,0 +1,161 @@ +%D \module +%D [ file=sort-ini, +%D version=2005.08.08, +%D title=\CONTEXT\ Sorting Macros, +%D subtitle=Initialization, +%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. + +% todo: autokeyexpansion => igv utf: \setupregister[index][keyexpansion=yes] + +%D This module replaces existing sort key handling and is meant to be +%D used with the new texutil functionality. This module defines a few +%D auxiliary macros. + +\writestatus{loading}{ConTeXt Sorting Macros / Initialization} + +%D This module replaces existing sort key handling and is meant to be +%D used with the new texutil functionality. This module defines a few +%D auxiliary macros. + +\ifx\exportsortaction\undefined \else \endinput \fi + +%D The sorting method is largely bases on the one used in the old version +%D of texutil but i've changed the interface a bit. It all boils down to +%D a bunch of substitutions. The reimplementation makes it easier to extend +%D the rules. Currently we have multipass substitution and onepass sorting, +%D but we may change this some day. Since there is a plugin mechanism, using +%D an external sorter is also possible. + +% test file: +% +% \mainlanguage[sl] \readfile{sort-ini}{}{} +% +% \starttext +% test \index {aa1} test \index {ab1} test \index {aa2} +% test \index {ab2} test \index {aa10} test \index {aa8} +% test \index {aa9} test \index {aa11} test \index {aa10} +% test \index {cccc} test \index {\ccaron ccc} test \index {\cacute ccc} +% test \index {caaa} test \index {\ccaron aaa} test \index {\cacute aaa} +% \placeindex +% \stoptext + +% definitions: +% +% \exportsortshortcut{\\\'\\i}{iacute} +% \exportsortshortcut{\\\'i} {iacute} +% \exportsortshortcut{\\\"e} {ediaeresis} +% \exportsortshortcut{\\\'o} {oacute} +% +% \exportsortexpansion{aeligature}{ae} +% \exportsortexpansion{ijligature}{y} +% \exportsortexpansion{oacute} {oz} +% \exportsortexpansion{eacute} {ezzz} % or e3 +% \exportsortexpansion{egrave} {ezz} % or e2 +% \exportsortexpansion{ediaeresis}{ez} % or e1 +% \exportsortexpansion{adiaeresis}{az} +% \exportsortreduction{ch} {c} +% \exportsortreduction{ij} {y} +% +% \exportsortexpansion{ccaron} {cz} +% \exportsortexpansion{cacute} {czz} +% \exportsortexpansion{dstroke} {dz} +% \exportsortexpansion{scaron} {sz} +% \exportsortexpansion{zcaron} {zz} +% +% \exportsortreduction{ch}{c} +% \exportsortreduction{ij}{y} +% +% \exportsortexpansion {ccaron} {c+1} +% \exportsortdivision {c+1} {ccaron} +% == +% \exportsortrule {ccaron} {c+1} + +\unprotect + +\def\savesortkeys + {\ifproductionrun + \the\everysavesortkeys + \global\everysavesortkeys\emptytoks + \fi} + +\appendtoks \savesortkeys \to \everyshipout + +\let\currentexportclass\empty + +\def\exportsortaction#1#2#3% + {\defconvertedargument\asciia{#2}% + \defconvertedargument\asciib{#3}% + \immediatewriteutility{x #1 {\currentexportclass} {\asciia} {\asciib}}} + +\def\exportsortshortcut {\exportsortaction s} +\def\exportsortexpansion{\exportsortaction e} +\def\exportsortreduction{\exportsortaction r} +\def\exportsortdivision {\exportsortaction d} + +\def\exportsortrule#1#2% + {\exportsortexpansion{#1}{#2}% + \exportsortdivision {#2}{#1}} + +\def\exportutfsortexpansion#1#2#3% + {\bgroup + \edef\utfsorta{\string\unknownchar}% + \dostepwiserecurse{#2}{#3}\plusone + {\edef\utfsortb{\@EA\string\csname\doutfunihash{#1}{\recurselevel}\endcsname}% + \ifx\utfsortb\utfsorta \else + \edef\utfsortc{\numbertoutf{\numexpr#1*256+\recurselevel\relax}}% + \expanded{\exportsortshortcut{\utfsortc}{\utfsortb\space}}% space is really needed + \fi}% + \egroup} + +\def\savesortdefinitions + {\bgroup + \doifelse \currentregime {utf} + {\exportutfsortexpansion{0}{128}{255}% + \exportutfsortexpansion{1}{0}{255}} + {\def\defineactivecharacter##1 ##2% mkii code ! + {\doifnumberelse{##1} + {\expanded{\exportsortshortcut{\rawcharacter{##1}}}{##2}}% + {\expanded{\exportsortshortcut{\rawcharacter{\number`##1}}}{##2}}}% + \doifelsenothing\currentregime + {\doifnot\characterencoding\nocharacterencoding % to be sure, autoregime + {\dowalkregime\characterencoding}}% + {\dowalkregime\characterencoding}}% + \egroup + \startnointerference + \setcatcodetable\ctxcatcodes + \readsysfile{\f!sortprefix def.mkii}\donothing\donothing % default + \stopnointerference + \global\let\savesortdefinitions\relax} + +\def\savesortlanguage#1% language specifics + {\doifsomething{#1} + {\doifundefined{\f!sortprefix::#1}% + {\startnointerference + \global\letvalue{\f!sortprefix::#1}\empty + \def\currentexportclass{#1}% + \enablemode[sortorder-#1]% + \setcatcodetable\ctxcatcodes + \readsysfile{\f!sortprefix lan.mkii}\donothing\donothing + \stopnointerference}}} + +\prependtoks + \savesortdefinitions +\to \everysavesortkeys + +% \defineregister[one] +% \defineregister[two] \setupregister[two][language=cz] +% +% \starttext +% test \one{one} test \one{two} test \one {\aacute} test \one{alpha} test \one{chow} +% test \two{one} test \two{two} test \two {\aacute} test \two{alpha} test \two{chow} +% \blank[3*big] \placeregister[one] +% \blank[3*big] \placeregister[two] +% \stoptext + +\protect \endinput |