%D \module %D [ file=scrp-ini, %D version=2009.02.06, %D title=\CONTEXT\ Script 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. %D The script handler has been upgraded mid June 2020 so there might be issues as I %D didn't test everything (yet). It should all be a bit more efficient now in %D \LUAMETATEX, although not spectacular. We use no attributes in \LUAMETATEX\ and %D only one in \LUATEX\ now. %D %D A glyph can have (an dget) all kind of properties. Except from the state, these %D are assigned within \TEX's grouping model! %D %D \startitemize %D \startitem font \stopitem %D \startitem character \stopitem %D \startitem language (4 properties packed in an unsigned integer) \stopitem %D \startitem data (used for dynamics) \stopitem %D \startitem script (used for special script processing) \stopitem %D \startitem state (used for analyzing, related to font features) \stopitem %D \stopitemize %D %D Additional properties are set via node list handlers. The state is stored in the %D glyph, but additional properties are stored in a node's property table. In the %D future the state might get used for something else, in which case we will stire %D the state in the property table too. On the other hand, we can now (if we want) %D influence the state at the\TEX\ end (not that we do that yet). %D Todo: as in bidi mode we need a way to globally keep the setting. \registerctxluafile{scrp-ini}{} \registerctxluafile{scrp-cjk}{} \registerctxluafile{scrp-eth}{} \registerctxluafile{scrp-tha}{} \registerctxluafile{scrp-tib}{} \ifcase \contextlmtxmode \definesystemattribute[script][public,pickup] \fi %D Since scripts need specific \LUA\ code we use hard coded attribute values, but we %D might have more tricks at some time, so we use a proper define macro too. \unprotect \installcorenamespace{script} \installcommandhandler \??script {script} \??script \let\setupscripts\setupscript % be nice % presets are global and are currently defined in lua \appendtoks \setuevalue\currentscript{\setscript[\currentscript]}% \to \everydefinescript \unexpanded\def\scripts_basics_set {\clf_setscript{\currentscript}{\scriptparameter\c!method}{\scriptparameter\c!preset}} \unexpanded\def\setglobalscript[#1]% {\edef\currentscript{#1}% \scripts_basics_set \pickupscriptattribute} \unexpanded\def\setlocalscript[#1]% {\edef\currentscript{#1}% \scripts_basics_set} \let\setscript\setlocalscript \unexpanded\def\resetscript {\clf_resetscript} \unexpanded\def\startscript[#1]% {\begingroup \edef\currentscript{#1}% \scripts_basics_set} \unexpanded\def\stopscript {\endgroup} % % todo: % % \unexpanded\def\setscriptsplitterlist % {\dodoubleargument\scripts_basics_set_splitter_list} % % \def\scripts_basics_set_splitter_list[#1][#2]% % {\ctxcommand{setscriptsplitterlist("#1","#2")} % \setscript[hangul] \hangul \startscript[hangul] \definescript [hangul] [\c!method=hangul] \definescript [hanzi] [\c!method=hanzi] \definescript [nihongo] [\c!method=nihongo] \definescript [ethiopic] [\c!method=ethiopic] \definescript [thai] [\c!method=thai] \definescript [tibetan] [\c!method=tibetan] \definescript [latin] [\c!method=] % resets the attribute (also currentscript) \definescript [test] [\c!method=test] % a new trick (at some point we will predefine more scripts and consider a link with the above) \appendtoks \ifx\currentscript\empty \doifelse{\scriptparameter\s!features}\v!auto\enableautofontscript\disableautofontscript \fi \to \everysetupscript \unexpanded\def\enableautofontscript {\clf_enableautofontscript } \unexpanded\def\disableautofontscript{\clf_disableautofontscript} \definefontfeature[latn][script=latn] \definefontfeature[grek][script=grek] \protect \endinput