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