ucode.xml

  1<lexer>
  2  <config>
  3    <name>ucode</name>
  4    <filename>*.uc</filename>
  5    <mime_type>application/x.ucode</mime_type>
  6    <mime_type>text/x.ucode</mime_type>
  7    <dot_all>true</dot_all>
  8    <ensure_nl>true</ensure_nl>
  9  </config>
 10  <rules>
 11    <state name="interp">
 12      <rule pattern="`">
 13        <token type="LiteralStringBacktick"/>
 14        <pop depth="1"/>
 15      </rule>
 16      <rule pattern="\\\\">
 17        <token type="LiteralStringBacktick"/>
 18      </rule>
 19      <rule pattern="\\`">
 20        <token type="LiteralStringBacktick"/>
 21      </rule>
 22      <rule pattern="\\[^`\\]">
 23        <token type="LiteralStringBacktick"/>
 24      </rule>
 25      <rule pattern="\$\{">
 26        <token type="LiteralStringInterpol"/>
 27        <push state="interp-inside"/>
 28      </rule>
 29      <rule pattern="\$">
 30        <token type="LiteralStringBacktick"/>
 31      </rule>
 32      <rule pattern="[^`\\$]+">
 33        <token type="LiteralStringBacktick"/>
 34      </rule>
 35    </state>
 36    <state name="interp-inside">
 37      <rule pattern="\}">
 38        <token type="LiteralStringInterpol"/>
 39        <pop depth="1"/>
 40      </rule>
 41      <rule>
 42        <include state="root"/>
 43      </rule>
 44    </state>
 45    <state name="commentsandwhitespace">
 46      <rule pattern="\s+">
 47        <token type="Text"/>
 48      </rule>
 49      <rule pattern="&lt;!--">
 50        <token type="Comment"/>
 51      </rule>
 52      <rule pattern="//.*?\n">
 53        <token type="CommentSingle"/>
 54      </rule>
 55      <rule pattern="/\*.*?\*/">
 56        <token type="CommentMultiline"/>
 57      </rule>
 58    </state>
 59    <state name="slashstartsregex">
 60      <rule>
 61        <include state="commentsandwhitespace"/>
 62      </rule>
 63      <rule pattern="/(\\.|[^[/\\\n]|\[(\\.|[^\]\\\n])*])+/([gimuy]+\b|\B)">
 64        <token type="LiteralStringRegex"/>
 65        <pop depth="1"/>
 66      </rule>
 67      <rule pattern="(?=/)">
 68        <token type="Text"/>
 69        <push state="#pop" state="badregex"/>
 70      </rule>
 71      <rule>
 72        <pop depth="1"/>
 73      </rule>
 74    </state>
 75    <state name="badregex">
 76      <rule pattern="\n">
 77        <token type="Text"/>
 78        <pop depth="1"/>
 79      </rule>
 80    </state>
 81    <state name="root">
 82      <rule pattern="\A#! ?/.*?\n">
 83        <token type="CommentHashbang"/>
 84      </rule>
 85      <rule pattern="^(?=\s|/|&lt;!--)">
 86        <token type="Text"/>
 87        <push state="slashstartsregex"/>
 88      </rule>
 89      <rule>
 90        <include state="commentsandwhitespace"/>
 91      </rule>
 92      <rule pattern="\d+(\.\d*|[eE][+\-]?\d+)">
 93        <token type="LiteralNumberFloat"/>
 94      </rule>
 95      <rule pattern="0[bB][01]+">
 96        <token type="LiteralNumberBin"/>
 97      </rule>
 98      <rule pattern="0[oO][0-7]+">
 99        <token type="LiteralNumberOct"/>
100      </rule>
101      <rule pattern="0[xX][0-9a-fA-F]+">
102        <token type="LiteralNumberHex"/>
103      </rule>
104      <rule pattern="[0-9][0-9_]*">
105        <token type="LiteralNumberInteger"/>
106      </rule>
107      <rule pattern="\.\.\.|=&gt;">
108        <token type="Punctuation"/>
109      </rule>
110      <rule pattern="\+\+|--|~|&amp;&amp;|\?|:|\|\||\\(?=\n)|(&lt;&lt;|&gt;&gt;&gt;?|==?|!=?|[-&lt;&gt;+*%&amp;|^/])=?">
111        <token type="Operator"/>
112        <push state="slashstartsregex"/>
113      </rule>
114      <rule pattern="[{(\[;,]">
115        <token type="Punctuation"/>
116        <push state="slashstartsregex"/>
117      </rule>
118      <rule pattern="[})\].]">
119        <token type="Punctuation"/>
120      </rule>
121      <rule pattern="(import|export|from|as|for|in|while|break|return|continue|switch|case|default|if|else|try|catch|delete|this)\b">
122        <token type="Keyword"/>
123        <push state="slashstartsregex"/>
124      </rule>
125      <rule pattern="(const|let|function)\b">
126        <token type="KeywordDeclaration"/>
127        <push state="slashstartsregex"/>
128      </rule>
129      <rule pattern="(true|false|null|NaN|Infinity)\b">
130        <token type="KeywordConstant"/>
131      </rule>
132      <rule pattern="(?:[$_\p{L}\p{N}]|\\u[a-fA-F0-9]{4})(?:(?:[$\p{L}\p{N}]|\\u[a-fA-F0-9]{4}))*">
133        <token type="NameOther"/>
134      </rule>
135      <rule pattern="&#34;(\\\\|\\&#34;|[^&#34;])*&#34;">
136        <token type="LiteralStringDouble"/>
137      </rule>
138      <rule pattern="&#39;(\\\\|\\&#39;|[^&#39;])*&#39;">
139        <token type="LiteralStringSingle"/>
140      </rule>
141      <rule pattern="`">
142        <token type="LiteralStringBacktick"/>
143        <push state="interp"/>
144      </rule>
145    </state>
146  </rules>
147</lexer>