1<lexer>
  2  <config>
  3    <name>Go HTML Template</name>
  4    <alias>go-html-template</alias>
  5  </config>
  6  <rules>
  7    <state name="template">
  8      <rule pattern="[-]?}}">
  9        <token type="CommentPreproc"/>
 10        <pop depth="1"/>
 11      </rule>
 12      <rule pattern="(?=}})">
 13        <token type="CommentPreproc"/>
 14        <pop depth="1"/>
 15      </rule>
 16      <rule pattern="\(">
 17        <token type="Operator"/>
 18        <push state="subexpression"/>
 19      </rule>
 20      <rule pattern="&#34;(\\\\|\\&#34;|[^&#34;])*&#34;">
 21        <token type="LiteralString"/>
 22      </rule>
 23      <rule>
 24        <include state="expression"/>
 25      </rule>
 26    </state>
 27    <state name="subexpression">
 28      <rule pattern="\)">
 29        <token type="Operator"/>
 30        <pop depth="1"/>
 31      </rule>
 32      <rule>
 33        <include state="expression"/>
 34      </rule>
 35    </state>
 36    <state name="expression">
 37      <rule pattern="\s+">
 38        <token type="TextWhitespace"/>
 39      </rule>
 40      <rule pattern="\(">
 41        <token type="Operator"/>
 42        <push state="subexpression"/>
 43      </rule>
 44      <rule pattern="(range|if|else|while|with|template|end|true|false|nil|and|call|html|index|js|len|not|or|print|printf|println|urlquery|eq|ne|lt|le|gt|ge)\b">
 45        <token type="Keyword"/>
 46      </rule>
 47      <rule pattern="\||:?=|,">
 48        <token type="Operator"/>
 49      </rule>
 50      <rule pattern="[$]?[^\W\d]\w*">
 51        <token type="NameOther"/>
 52      </rule>
 53      <rule pattern="\$|[$]?\.(?:[^\W\d]\w*)?">
 54        <token type="NameAttribute"/>
 55      </rule>
 56      <rule pattern="&#34;(\\\\|\\&#34;|[^&#34;])*&#34;">
 57        <token type="LiteralString"/>
 58      </rule>
 59      <rule pattern="-?\d+i">
 60        <token type="LiteralNumber"/>
 61      </rule>
 62      <rule pattern="-?\d+\.\d*([Ee][-+]\d+)?i">
 63        <token type="LiteralNumber"/>
 64      </rule>
 65      <rule pattern="\.\d+([Ee][-+]\d+)?i">
 66        <token type="LiteralNumber"/>
 67      </rule>
 68      <rule pattern="-?\d+[Ee][-+]\d+i">
 69        <token type="LiteralNumber"/>
 70      </rule>
 71      <rule pattern="-?\d+(\.\d+[eE][+\-]?\d+|\.\d*|[eE][+\-]?\d+)">
 72        <token type="LiteralNumberFloat"/>
 73      </rule>
 74      <rule pattern="-?\.\d+([eE][+\-]?\d+)?">
 75        <token type="LiteralNumberFloat"/>
 76      </rule>
 77      <rule pattern="-?0[0-7]+">
 78        <token type="LiteralNumberOct"/>
 79      </rule>
 80      <rule pattern="-?0[xX][0-9a-fA-F]+">
 81        <token type="LiteralNumberHex"/>
 82      </rule>
 83      <rule pattern="-?0b[01_]+">
 84        <token type="LiteralNumberBin"/>
 85      </rule>
 86      <rule pattern="-?(0|[1-9][0-9]*)">
 87        <token type="LiteralNumberInteger"/>
 88      </rule>
 89      <rule pattern="&#39;(\\[&#39;&#34;\\abfnrtv]|\\x[0-9a-fA-F]{2}|\\[0-7]{1,3}|\\u[0-9a-fA-F]{4}|\\U[0-9a-fA-F]{8}|[^\\])&#39;">
 90        <token type="LiteralStringChar"/>
 91      </rule>
 92      <rule pattern="`[^`]*`">
 93        <token type="LiteralString"/>
 94      </rule>
 95    </state>
 96    <state name="root">
 97      <rule pattern="{{(- )?/\*(.|\n)*?\*/( -)?}}">
 98        <token type="CommentMultiline"/>
 99      </rule>
100      <rule pattern="{{[-]?">
101        <token type="CommentPreproc"/>
102        <push state="template"/>
103      </rule>
104      <rule pattern="[^{]+">
105        <token type="Other"/>
106      </rule>
107      <rule pattern="{">
108        <token type="Other"/>
109      </rule>
110    </state>
111  </rules>
112</lexer>