%% This is part of the 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.
