summaryrefslogtreecommitdiff
path: root/tex/context/base/mult-aux.mkiv
diff options
context:
space:
mode:
Diffstat (limited to 'tex/context/base/mult-aux.mkiv')
-rw-r--r--tex/context/base/mult-aux.mkiv165
1 files changed, 165 insertions, 0 deletions
diff --git a/tex/context/base/mult-aux.mkiv b/tex/context/base/mult-aux.mkiv
new file mode 100644
index 000000000..c364c3507
--- /dev/null
+++ b/tex/context/base/mult-aux.mkiv
@@ -0,0 +1,165 @@
+%D \module
+%D [ file=mult-aux,
+%D version=2010.08.2,
+%D title=\CONTEXT\ Multilingual Macros,
+%D subtitle=Definitions,
+%D author=Hans Hagen,
+%D date=\currentdate,
+%D copyright=PRAGMA]
+%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 A generalization of \MKIV-like inheritance. Just something to play
+%D with (interface might change).
+
+\unprotect
+
+%D \starttyping
+%D \unprotect
+%D \def\????aa{@@@@aa}
+%D
+%D \installparameterhandler \????aa {whatever}
+%D \installsetuphandler \????aa {whatever}
+%D \installdefinehandler \????aa {whatever} \????aa % #3 == defaultroot
+%D \installattributehandler \????aa {whatever}
+%D
+%D % \installcommandhandler \????aa {whatever} \????aa
+%D \protect
+%D
+%D % \whateverparameter \c!test
+%D % \whateverparameterhash \c!test
+%D % \namedwhateverparameter \mycurrentwhatever \c!test
+%D % \dosetwhateverattributes \c!style \c!color
+%D % \everydefinewhatever (sets \currentwhatever)
+%D % \everypresetwhatever (can be used to reset parameters as we can redefine)
+%D % \everysetupwhatever (sets \currentwhatever)
+%D
+%D \starttext
+%D \definewhatever[first] \definewhatever[second][first]
+%D test: \def\currentwhatever{first} \whateverparameter{method} \par
+%D \setupwhatever [method=unset] test: \def\currentwhatever{first} \whateverparameter{method} \par
+%D \setupwhatever[first] [method=first] test: \def\currentwhatever{first} \whateverparameter{method} \par
+%D test: \def\currentwhatever{second} \whateverparameter{method} \par
+%D \setupwhatever[second][method=second] test: \def\currentwhatever{second} \whateverparameter{method} \par
+%D \stoptext
+%D \stoptyping
+
+% problem: every* could clash
+
+% faster but assumes \c!always
+%
+% \unexpanded\def\doinstallparameterhandler#1#2#3#4#5#6#7#8#9% \??aa {whatever} \current..
+% {\def#3##1{\csname#6{#1#2}##1\endcsname}%
+% \def#4##1{#7{#1#2}##1}%
+% \def#5##1##2{\csname#6{#1##2}##1\endcsname}%
+% \def#6##1##2{\ifcsname##1##2\endcsname##1##2\else\expandafter#8\csname##1\s!parent\endcsname##2\fi}%
+% \def#7##1##2{\ifcsname##1##2\endcsname ##1\else\expandafter#9\csname##1\s!parent\endcsname##2\fi}%
+% \def#8##1##2{\ifx##1\relax\s!empty\else#6{##1}##2\fi}%
+% \def#9##1##2{\ifx##1\relax \else#7{##1}##2\fi}}
+
+\unexpanded\def\doinstallparameterhandler#1#2#3#4#5#6#7#8#9% \??aa {whatever} \current..
+ {\def#3##1{\csname#6{#1#2}{##1}\endcsname}%
+ \def#4##1{#7{#1#2}{##1}}%
+ \def#5##1##2{\csname#6{#1##1}{##2}\endcsname}%
+ \def#6##1##2{\ifcsname##1##2\endcsname##1##2\else\expandafter#8\csname##1\s!parent\endcsname{##2}\fi}%
+ \def#7##1##2{\ifcsname##1##2\endcsname ##1\else\expandafter#9\csname##1\s!parent\endcsname{##2}\fi}%
+ \def#8##1##2{\ifx##1\relax\s!empty\else#6{##1}{##2}\fi}%
+ \def#9##1##2{\ifx##1\relax \else#7{##1}{##2}\fi}}
+
+% todo: \def\detokenized...parameter#1{\detokenize\expandafter\expandafter\expandafter{\csname#1#2\endcsname}} % always root
+
+\def\installparameterhandler#1#2%
+ {\normalexpanded
+ {\doinstallparameterhandler
+ {\noexpand#1}% \??aa
+ \expandafter\noexpand\csname current#2\endcsname
+ \expandafter\noexpand\csname #2parameter\endcsname % can move
+ \expandafter\noexpand\csname #2parameterhash\endcsname % can move
+ \expandafter\noexpand\csname named#2parameter\endcsname % can move
+ \expandafter\noexpand\csname do#2parameter\endcsname
+ \expandafter\noexpand\csname do#2parameterhash\endcsname
+ \expandafter\noexpand\csname do#2parentparameter\endcsname
+ \expandafter\noexpand\csname do#2parentparameterhash\endcsname}}
+
+% faster but assumes \c!always
+%
+% \unexpanded\def\doinstallattributehandler#1#2#3% #1 not used here
+% {\expandafter\def\csname doset#2attributes\endcsname##1##2% style color
+% {\edef\fontattributehash {#3##1}%
+% \edef\colorattributehash{#3##2}%
+% \ifx\fontattributehash \empty\else\dosetfontattribute \fontattributehash ##1\fi
+% \ifx\colorattributehash\empty\else\dosetcolorattribute\colorattributehash##2\fi}}
+
+\unexpanded\def\doinstallattributehandler#1#2#3% #1 not used here
+ {\expandafter\def\csname doset#2attributes\endcsname##1##2% style color
+ {\edef\fontattributehash {#3{##1}}%
+ \edef\colorattributehash{#3{##2}}%
+ \ifx\fontattributehash \empty\else\dosetfontattribute \fontattributehash {##1}\fi
+ \ifx\colorattributehash\empty\else\dosetcolorattribute\colorattributehash{##2}\fi}}
+
+\def\installattributehandler#1#2%
+ {\normalexpanded
+ {\doinstallattributehandler
+ {\noexpand#1}% \??aa
+ {\noexpand#2}% whatever
+ \expandafter\noexpand\csname #2parameterhash\endcsname}}
+
+\unexpanded\def\doinstalldefinehandler#1#2#3#4#5#6#7%
+ {\unexpanded\expandafter\def\csname define#2\endcsname{\dodoubleempty#5}%
+ \expandafter\newtoks\csname everydefine#2\endcsname
+ \def#5[##1][##2]%
+ {\edef#4{##1}%
+ \the#6% predefine
+ \ifsecondargument
+ \getparameters[#1#4][\s!parent=#1,##2]%
+ \else
+ \getparameters[#1#4][\s!parent=#3]%
+ \fi
+ \the#7}}
+
+\def\installdefinehandler#1#2#3%
+ {\normalexpanded
+ {\doinstalldefinehandler
+ {\noexpand#1}% \??aa
+ {#2}% whatever
+ {#3}% root
+ \expandafter\noexpand\csname current#2\endcsname
+ \expandafter\noexpand\csname dodefine#2\endcsname
+ \expandafter\noexpand\csname everypreset#2\endcsname
+ \expandafter\noexpand\csname everydefine#2\endcsname}}
+
+\unexpanded\def\doinstallsetuphandler#1#2#3#4#5%
+ {\unexpanded\expandafter\def\csname setup#2\endcsname{\dodoubleempty#4}%
+ \expandafter\newtoks\csname everysetup#2\endcsname
+ \def#4[##1][##2]%
+ {\ifsecondargument
+ \def\docommand####1% we will have a simple one as well
+ {\edef#3{##1#1}%
+ \getparameters[#1#3][##2]%
+ \the#5}%
+ \processcommalist[##1]\docommand
+ \else
+ \let#3\empty
+ \getparameters[#1][##1]%
+ \the#5%
+ \fi}}
+
+\def\installsetuphandler#1#2%
+ {\normalexpanded
+ {\doinstallsetuphandler
+ {\noexpand#1}% \??aa
+ {#2}% whatever
+ \expandafter\noexpand\csname current#2\endcsname
+ \expandafter\noexpand\csname dosetup#2\endcsname
+ \expandafter\noexpand\csname everysetup#2\endcsname}}
+
+\def\installcommandhandler#1#2#3% \??self name \??parent (can be \??self)
+ {\installparameterhandler{#1}{#2}%
+ \installdefinehandler {#1}{#2}#3%
+ \installsetuphandler {#1}{#2}%
+ \installattributehandler{#1}{#2}}
+
+\protect
+