%D \module %D [ file=filt-ini, %D version=2000.09.19, %D title=\CONTEXT\ Filter 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. \writestatus{loading}{ConTeXt Filter Macros / Initialization} % \ifx\OmegaVersion\undefined % \let\definefiltersynonym \gobbledoubleempty % \let\definefiltersequence \gobbledoubleempty % \unexpanded\def\usefiltersequence {\gobblesingleempty} % \let\usefilter \gobblesingleempty % \let\truefiltername \gobbleoneargument % \expandafter \endinput % \fi \unprotect %D The real work starts here. % We need the {\??ot::#1} check because otherwise aleph will crash. Taco's % torture test: % % \ocp\ArabicContext = contextual % % \dorecurse {5000} { % \message{[\recurselevel]} % \ocplist\Arabic=\addbeforeocplist 1 \ArabicContext \nullocplist % } %D \macros %D {definefiltersynonym} \def\definefiltersynonym {\dodoubleargument\dodefinefiltersynonym} \def\dodefinefiltersynonym[#1][#2]% {\setvalue{\??or#1}{#2}} %D \macros %D {truefiltername} \def\truefiltername#1% {\ifundefined{\??or#1}#1\else\truefiltername{\getvalue{\??or#1}}\fi} %D \macros %D {definefiltersequence} \def\definefiltersequence {\dodoubleargument\dodefinefiltersequence} % \def\dodefinefiltersequence[#1][#2]% % {\setvalue{\??ot#1}{#2}} \def\dodefinefiltersequence[#1][#2]% {\setxvalue{\??ot#1}{#2}% \letgvalue{\??ot::#1}\v!stop} %D \macros %D {usefiltersequence} %D \def\magicocpnumber{1} % one can do: % % \definefiltersequence % [farsi] % [utf8 to unicode16=>5, % persian fix, % arabic analysis=>3, % arabic glyphs] % % so, => is used to signal a priority \def\dodousefiltersequence#1% {\expandafter\ocp\csname\??or:#1\endcsname=\truefiltername{#1}\relax \splitstring#1\at=>\to\!!stringa\and\!!stringb \edef\!!stringb{\number\ifx\!!stringb\empty\magicocpnumber\else\!!stringb\fi}% \appendetoks \noexpand\addbeforeocplist \!!stringb\space \expandafter\noexpand\csname\??or:\!!stringa\endcsname \to \scratchtoks} \unexpanded\def\usefiltersequence[#1]% {\doifdefined{\??ot::#1}% {\doifvalue{\??ot::#1}\v!stop {\scratchtoks\emptytoks \expanded{\processcommalist[\getvalue{\??ot#1}]}\dodousefiltersequence \expanded{\global\ocplist\csname\??ot:#1\endcsname=\the\scratchtoks}\nullocplist \letgvalue{\??ot::#1}\v!start}% \expanded{\pushocplist\csname\??ot:#1\endcsname}\relax}} %D \macros %D {usefilter} \def\dousefilter#1% {\doifundefined{\c!file\f!filterprefix#1}% {\letvalue{\c!file\f!filterprefix#1}\empty \makeshortfilename[\truefilename{\f!filterprefix#1}]% \startreadingfile \readsysfile{\shortfilename.mkii} {\showmessage\m!filters1{#1}} {\showmessage\m!filters2{#1}}% \stopreadingfile}} \def\usefilter[#1]% {\processcommalist[#1]\dousefilter} \protect \endinput