javascript.xml

  1<lexer>
  2  <config>
  3    <name>JavaScript</name>
  4    <alias>js</alias>
  5    <alias>javascript</alias>
  6    <filename>*.js</filename>
  7    <filename>*.jsm</filename>
  8    <filename>*.mjs</filename>
  9    <filename>*.cjs</filename>
 10    <mime_type>application/javascript</mime_type>
 11    <mime_type>application/x-javascript</mime_type>
 12    <mime_type>text/x-javascript</mime_type>
 13    <mime_type>text/javascript</mime_type>
 14    <dot_all>true</dot_all>
 15    <ensure_nl>true</ensure_nl>
 16  </config>
 17  <rules>
 18    <state name="interp">
 19      <rule pattern="`">
 20        <token type="LiteralStringBacktick"/>
 21        <pop depth="1"/>
 22      </rule>
 23      <rule pattern="\\\\">
 24        <token type="LiteralStringBacktick"/>
 25      </rule>
 26      <rule pattern="\\`">
 27        <token type="LiteralStringBacktick"/>
 28      </rule>
 29      <rule pattern="\\[^`\\]">
 30        <token type="LiteralStringBacktick"/>
 31      </rule>
 32      <rule pattern="\$\{">
 33        <token type="LiteralStringInterpol"/>
 34        <push state="interp-inside"/>
 35      </rule>
 36      <rule pattern="\$">
 37        <token type="LiteralStringBacktick"/>
 38      </rule>
 39      <rule pattern="[^`\\$]+">
 40        <token type="LiteralStringBacktick"/>
 41      </rule>
 42    </state>
 43    <state name="interp-inside">
 44      <rule pattern="\}">
 45        <token type="LiteralStringInterpol"/>
 46        <pop depth="1"/>
 47      </rule>
 48      <rule>
 49        <include state="root"/>
 50      </rule>
 51    </state>
 52    <state name="commentsandwhitespace">
 53      <rule pattern="\s+">
 54        <token type="Text"/>
 55      </rule>
 56      <rule pattern="&lt;!--">
 57        <token type="Comment"/>
 58      </rule>
 59      <rule pattern="//.*?\n">
 60        <token type="CommentSingle"/>
 61      </rule>
 62      <rule pattern="/\*.*?\*/">
 63        <token type="CommentMultiline"/>
 64      </rule>
 65    </state>
 66    <state name="slashstartsregex">
 67      <rule>
 68        <include state="commentsandwhitespace"/>
 69      </rule>
 70      <rule pattern="/(\\.|[^[/\\\n]|\[(\\.|[^\]\\\n])*])+/([gimuy]+\b|\B)">
 71        <token type="LiteralStringRegex"/>
 72        <pop depth="1"/>
 73      </rule>
 74      <rule pattern="(?=/)">
 75        <token type="Text"/>
 76        <push state="#pop" state="badregex"/>
 77      </rule>
 78      <rule>
 79        <pop depth="1"/>
 80      </rule>
 81    </state>
 82    <state name="badregex">
 83      <rule pattern="\n">
 84        <token type="Text"/>
 85        <pop depth="1"/>
 86      </rule>
 87    </state>
 88    <state name="root">
 89      <rule pattern="\A#! ?/.*?\n">
 90        <token type="CommentHashbang"/>
 91      </rule>
 92      <rule pattern="^(?=\s|/|&lt;!--)">
 93        <token type="Text"/>
 94        <push state="slashstartsregex"/>
 95      </rule>
 96      <rule>
 97        <include state="commentsandwhitespace"/>
 98      </rule>
 99      <rule pattern="\d+(\.\d*|[eE][+\-]?\d+)">
100        <token type="LiteralNumberFloat"/>
101      </rule>
102      <rule pattern="0[bB][01]+">
103        <token type="LiteralNumberBin"/>
104      </rule>
105      <rule pattern="0[oO][0-7]+">
106        <token type="LiteralNumberOct"/>
107      </rule>
108      <rule pattern="0[xX][0-9a-fA-F]+">
109        <token type="LiteralNumberHex"/>
110      </rule>
111      <rule pattern="[0-9][0-9_]*">
112        <token type="LiteralNumberInteger"/>
113      </rule>
114      <rule pattern="\.\.\.|=&gt;">
115        <token type="Punctuation"/>
116      </rule>
117      <rule pattern="\+\+|--|~|&amp;&amp;|\?|:|\|\||\\(?=\n)|(&lt;&lt;|&gt;&gt;&gt;?|==?|!=?|[-&lt;&gt;+*%&amp;|^/])=?">
118        <token type="Operator"/>
119        <push state="slashstartsregex"/>
120      </rule>
121      <rule pattern="[{(\[;,]">
122        <token type="Punctuation"/>
123        <push state="slashstartsregex"/>
124      </rule>
125      <rule pattern="[})\].]">
126        <token type="Punctuation"/>
127      </rule>
128      <rule pattern="(for|in|while|do|break|return|continue|switch|case|default|if|else|throw|try|catch|finally|new|delete|typeof|instanceof|void|yield|this|of)\b">
129        <token type="Keyword"/>
130        <push state="slashstartsregex"/>
131      </rule>
132      <rule pattern="(var|let|with|function)\b">
133        <token type="KeywordDeclaration"/>
134        <push state="slashstartsregex"/>
135      </rule>
136      <rule pattern="(abstract|async|await|boolean|byte|char|class|const|debugger|double|enum|export|extends|final|float|goto|implements|import|int|interface|long|native|package|private|protected|public|short|static|super|synchronized|throws|transient|volatile)\b">
137        <token type="KeywordReserved"/>
138      </rule>
139      <rule pattern="(true|false|null|NaN|Infinity|undefined)\b">
140        <token type="KeywordConstant"/>
141      </rule>
142      <rule pattern="(Array|Boolean|Date|Error|Function|Math|netscape|Number|Object|Packages|RegExp|String|Promise|Proxy|sun|decodeURI|decodeURIComponent|encodeURI|encodeURIComponent|Error|eval|isFinite|isNaN|isSafeInteger|parseFloat|parseInt|document|this|window)\b">
143        <token type="NameBuiltin"/>
144      </rule>
145      <rule pattern="(?:[$_\p{L}\p{N}]|\\u[a-fA-F0-9]{4})(?:(?:[$\p{L}\p{N}]|\\u[a-fA-F0-9]{4}))*">
146        <token type="NameOther"/>
147      </rule>
148      <rule pattern="&#34;(\\\\|\\&#34;|[^&#34;])*&#34;">
149        <token type="LiteralStringDouble"/>
150      </rule>
151      <rule pattern="&#39;(\\\\|\\&#39;|[^&#39;])*&#39;">
152        <token type="LiteralStringSingle"/>
153      </rule>
154      <rule pattern="`">
155        <token type="LiteralStringBacktick"/>
156        <push state="interp"/>
157      </rule>
158    </state>
159  </rules>
160</lexer>