commit 770c085f3614b37e446791da65ab5c0cd52608a8
parent 044dacbb2f40c3fbb9a23f9cf667ca9a4b53b454
Author: robert <robertrussell.72001@gmail.com>
Date: Sat, 15 Jan 2022 21:46:42 -0800
Simplify and move event and hook macros
Diffstat:
2 files changed, 21 insertions(+), 25 deletions(-)
diff --git a/font.tex b/font.tex
@@ -12,28 +12,3 @@ An "M font set" is a tuple of three H font sets.
easily confusable with \textfont.)
\protected\def\rm{\rminit \rmtext \rmmath}
-
-% \defevent defines an "event". Hooks can be attached to events with \addhook,
-% and all hooks are run in order when the event is triggered with \event.
-% Events can have parameters like macros, and hooks have access to these
-% parameters. For example,
-% \defevent#1#2[myevent]
-% \addhook[myevent]{Hello from my 1st hook! (\#1 = #1)}
-% \addhook[myevent]{Hello from my 2nd hook! (\#2 = #2)}
-% \event[myevent]{abc}{xyz}
-% produces
-% Hello from my 1st hook! (#1 = abc)Hello from my 2nd hook! (#2 = xyz)
-\protected\def\defevent#1[#2]{%
- \ea\newtoks\begcs param:#2\endcs \cs{param:#2}={#1}%
- \ea\newtoks\begcs hooks:#2\endcs \cs{hooks:#2}={}%
-}
-
-\protected\def\event[#1]{%
- % Put start of \@hooks definition in \csA, so we can \expandafter over it
- % to expand the hooks token list.
- \edef\csA{\def\noexpand\@hooks\the\cs{param:#1}}%
- \ea\csA\ea{\the\cs{hooks:#1}}%
- \@hooks
-}
-
-\protected\def\addhook[#1]#2{\cs{hooks:#1}\ea{\the\cs{hooks:#1}#2}}
diff --git a/util.tex b/util.tex
@@ -54,6 +54,27 @@
\protected\def\csletcs#1#2{\ea\let\begcs#1\ea\endcs\begcs#2\endcs}
\protected\def\gcsletcs#1#2{\ea\glet\begcs#1\ea\endcs\begcs#2\endcs}
+% \defevent defines an "event". Hooks can be attached to events with \addhook,
+% and all hooks are run in order when the event is triggered with \event.
+% Events can have parameters like macros, and hooks have access to these
+% parameters. For example,
+% \defevent#1#2[myevent]
+% \addhook[myevent]{Hello from my 1st hook! (\#1 = #1)}
+% \addhook[myevent]{Hello from my 2nd hook! (\#2 = #2)}
+% \event[myevent]{abc}{xyz}
+% produces
+% Hello from my 1st hook! (#1 = abc)Hello from my 2nd hook! (#2 = xyz)
+\protected\def\defevent#1[#2]{%
+ \toksA={#1}% Double hashes
+ \ecsdef{event:#2}{\def\noexpand\@hooks\the\toksA}%
+ \ea\newtoks\begcs hooks:#2\endcs \cs{hooks:#2}={}%
+}
+\protected\def\event[#1]{%
+ \begcs event:#1\ea\endcs\ea{\the\cs{hooks:#1}}%
+ \@hooks
+}
+\protected\def\addhook[#1]#2{\cs{hooks:#1}\ea{\the\cs{hooks:#1}#2}}
+
\def\selectx#1{} % \gobble
\def\selectO#1{#1}
\def\selectxx#1#2{} % \gobbletwo