%% This is part of the OpTeX project, see http://petr.olsak.net/optex

\_codedecl \_hisyntaxlua {Syntax highlighting for Lua sources <2021-06-29>}

\_newtoks \_hisyntaxlua  \_newtoks \_hicolorslua

\_global\_hicolorslua={%     colors for the Lua language
   \_hicolor K \Red      % Keywords
   \_hicolor S \Magenta  % Strings
   \_hicolor C \Green    % Comments
   \_hicolor N \Cyan     % Numbers
   \_hicolor P \Blue     % Preprocessor
   \_hicolor O \Blue     % Other tokens
}
\_global\_hisyntaxlua={%
   \_the\_hicolorslua
   \_let\c=\_relax \_let\e=\_relax \_let\o=\_relax
   \_replfromto {--[}{--]}   {\x C{--[#1--]}}%  multi line comment --[...--]
   \_replfromto {--}{^^J}    {\z C{--#1}^^J}%   single line comment --...
   \_replthis   {\_string\"} {{\_string\"}}%   \" protected inside strings
   \_replthis   {\_string\'} {{\_string\'}}%   \' protected inside strings
   \_replfromto {"}{"}       {\x S{"#1"}}%     "..."
   \_replfromto {'}{'}       {\x S{'#1'}}%     "..."
   % missing: [[, [=[, [==[ strings, " ' in string of other kind
   \_edef\_tmpa {{<<}{>>}{//}{==}{\_string~=}{<=}{>=}{::}{...}{..}%
      +-*/\_pcent^\_csstring\#\_string&\_string~|%
      <>=()]\_string{\_string}[];:,.}% other tokens
   \_ea \_foreach \_tmpa
      \_do {\_replthis{#1}{\n\o{#1}\n}}%
   \_foreach                                                              % keywords
      {and}{break}{do}{else}{elseif}{end}{false}{for}{function}{goto}%
      {if}{in}{local}{nil}{not}{or}{repeat}{return}{then}{true}{until}{while}%
      \_do {\_replthis{\n#1\n}{\z K{#1}}}%
   \_replthis{.}{\n.\n}                                                   % numbers
   \_foreach 0123456789
      \_do {\_replfromto{\n#1}{\n}{\c#1##1\e}}%
   \_replthis{\e.\c}{.}%
   \_replthis{\e.\n}{.\e}%
   \_replthis{\n.\c}{\c.}%
   \_replthis{e\e\o+\c}{e+}\_replthis{e\e\o-\c}{e-}%
   \_replthis{E\e\o+\c}{E+}\_replthis{E\e\o-\c}{E-}%
   \_def\o#1{\z O{#1}}%
   \_def\c#1\e{\z N{#1}}%
}

\_endcode %------------------------------------------------

The list of keywords and special symbols comes from the Lua 5.3 Reference
Manual\fnote{\url{https://www.lua.org/manual/5.3/manual.html\#3}}, otherwise
this is mostly a port of `hisyntax-c.opm`.


\begtt \hisyntax{lua}
and       break     do        else      elseif    end
false     for       function  goto      if        in
local     nil       not       or        repeat    return
then      true      until     while

     +     -     *     /     %     ^     #
     &     ~     |     <<    >>    //
     ==    ~=    <=    >=    <     >     =
     (     )     {     }     [     ]     ::
     ;     :     ,     .     ..    ...

a = 'alo\n123"'
a = "alo\n123\""
a = '\97lo\10\04923"'
a = [[alo
123"]]
a = [==[
alo
123"]==]

3   345   0xff   0xBEBADA

3.0     3.1416     314.16e-2     0.31416E1     34e1
0x0.1E  0xA23p-4   0X1.921FB54442D18P+1

1+1 2+a


--[ multi line
comment
--]
print(1+1)
\endtt
