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:
| M | ideas.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]