summaryrefslogtreecommitdiff
path: root/macros/luatex/optex/base/hisyntax-tex.opm
diff options
context:
space:
mode:
Diffstat (limited to 'macros/luatex/optex/base/hisyntax-tex.opm')
-rw-r--r--macros/luatex/optex/base/hisyntax-tex.opm38
1 files changed, 38 insertions, 0 deletions
diff --git a/macros/luatex/optex/base/hisyntax-tex.opm b/macros/luatex/optex/base/hisyntax-tex.opm
new file mode 100644
index 0000000000..2aaaa323fd
--- /dev/null
+++ b/macros/luatex/optex/base/hisyntax-tex.opm
@@ -0,0 +1,38 @@
+%% This is part of OpTeX project, see http://petr.olsak.net/optex
+
+\_codedecl\_hisyntaxtex {Syntax highlighting for TeX sources <2020-04-03>}
+
+\_newtoks\_hisyntaxtex \_newtoks\_hicolorstex
+
+\_global\_hicolorstex={% colors in TeX codes
+ \_hicolor S \Blue % control sequences
+ \_hicolor B \Magenta % {, }, $
+ \_hicolor C \Green % comments
+}
+\_global\_hisyntaxtex={
+ \_the\_hicolorstex
+ \_replthis{\_string\%}{\y{_createcs}{\_csstring\%}}
+ \_replfromto{\_csstring\%}{^^J}{\x C{\_csstring\%#1}^^J}
+ \_replthis{\_string\\}{\y{_createcs}{\_csstring\\}}
+ \_replthis{\_string\{}{\y{_createcs}{\_csstring\{}}
+ \_replthis{\_string\}}{\y{_createcs}{\_csstring\}}}
+ \_replthis{\_string\$}{\y{_createcs}{\_csstring\$}}
+ \_replthis{\_csstring\\}{\y{_createcs}}
+ \_replthis{\_csstring\{}{\x B{\_csstring\{}}
+ \_replthis{\_csstring\}}{\x B{\_csstring\}}}
+ \_replthis{\_csstring\$}{\x B{\_csstring\$}}
+}
+\_gdef\_createcs#1{\_def\_csletters{#1}%
+ \_ifcat a\_noexpand#1\_afterfi{\_futurelet\_next\_createcsA}%
+ \_else \_ea\_createcsF \_fi
+}
+\_gdef\_createcsA{\_ifcat a\_noexpand\_next \_ea\_createcsB \_else \_ea\_createcsF \_fi}
+\_gdef\_createcsB#1{\_addto\_csletters{#1}\_futurelet\_next\_createcsA}
+\_gdef\_createcsF{\z S{\_csstring\\\_csletters}}
+\_gdef\_createbb{\_ea\_createcs\_csstring\\}
+
+\_endcode %------------------------------------------------
+
+The `\_createcs` reads next tokens as the tokenizer does it until the name
+of a control sequence is read. It is saved to the `\_csletters` macro and
+the macro \_createcsF prints it.