r3tex

custom LuaTeX format
git clone git://git.rr3.xyz/r3tex
Log | Files | Refs | README | LICENSE

commit 0619b1c8567fd27c6617da93821c3e5b3a04bf7b
parent 974e6b3c77139747c6caf0d231243361732b7fb3
Author: robert <robertrussell.72001@gmail.com>
Date:   Fri, 14 Jan 2022 10:45:29 -0800

Add namespaces to ideas.tex

Diffstat:
Mideas.tex | 63+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
1 file changed, 63 insertions(+), 0 deletions(-)

diff --git a/ideas.tex b/ideas.tex @@ -13,3 +13,66 @@ % } % \def\@macargsundelim#1{#########1\@macargs\@macargsundelim} % \def\@macargsbrace#1{{###1}\@macargs\@macargsbrace} + + +%%% Namespaces + +% Primitives that define control sequences. (I may be missing some.) +\chardef +\mathchardef + +\countdef +\dimendef +\muskipdef +\skipdef +\toksdef +\attrdef + +\def +\edef +\gdef +\xdef + +\let +\glet +\futurelet + +\read +\font + +% Idea: redefine {,g,e,x}def, {,g}let, {count,dimen,...}def, and other ways of +% define control sequences to respect namespaces. This way we can track +% shadowing by users and other namespaces and appropriately return control +% sequences to their former definitions when namespaces are exited. +\def\newns[#1]{\ea\newtoks\begcs members:#1\endcs} +\def\@addns#1{% + \if!#1!\else + \gcslet{\@ns.\csstring#1}#1% + \global\begcs members:\@ns\endcs\ea{\the\begcs members:\@ns\endcs\\#1}% + \ea\@addns + \fi +} +\def\addns[#1]#2{\def\@ns{#1}\@addns#2{}} +\def\usens[#1]{% + \def\\##1{\letcs##1{#1.\csstring##1}}% + \the\begcs members:#1\endcs +} +\def\enterns[#1]{% + \def\\##1{\gletcs##1{#1.\csstring##1}}% + \the\begcs members:#1\endcs +} +\def\exitns[#1]{% + \def\\##1{\ea\ifx\begcs#1.\csstring##1\endcs##1\gundef##1\fi}% + \the\begcs members:#1\endcs +} + +% \newns[myns] +% { + % \def\x{xxx} + % \def\y{yyy} + % \def\z{zzz} + % \addns[myns]{\x\y\z} +% } +% \enterns[myns] +% \x\y\z +% \exitns[myns]