1<lexer>
  2  <config>
  3    <name>vue</name>
  4    <alias>vue</alias>
  5    <alias>vuejs</alias>
  6    <filename>*.vue</filename>
  7    <mime_type>text/x-vue</mime_type>
  8    <mime_type>application/x-vue</mime_type>
  9    <dot_all>true</dot_all>
 10  </config>
 11  <rules>
 12    <state name="interp-inside">
 13      <rule pattern="\}">
 14        <token type="LiteralStringInterpol"/>
 15        <pop depth="1"/>
 16      </rule>
 17      <rule>
 18        <include state="root"/>
 19      </rule>
 20    </state>
 21    <state name="attr">
 22      <rule pattern="{">
 23        <token type="Punctuation"/>
 24        <push state="expression"/>
 25      </rule>
 26      <rule pattern="&#34;.*?&#34;">
 27        <token type="LiteralString"/>
 28        <pop depth="1"/>
 29      </rule>
 30      <rule pattern="&#39;.*?&#39;">
 31        <token type="LiteralString"/>
 32        <pop depth="1"/>
 33      </rule>
 34      <rule>
 35        <pop depth="1"/>
 36      </rule>
 37    </state>
 38    <state name="interp">
 39      <rule pattern="`">
 40        <token type="LiteralStringBacktick"/>
 41        <pop depth="1"/>
 42      </rule>
 43      <rule pattern="\\\\">
 44        <token type="LiteralStringBacktick"/>
 45      </rule>
 46      <rule pattern="\\`">
 47        <token type="LiteralStringBacktick"/>
 48      </rule>
 49      <rule pattern="\$\{">
 50        <token type="LiteralStringInterpol"/>
 51        <push state="interp-inside"/>
 52      </rule>
 53      <rule pattern="\$">
 54        <token type="LiteralStringBacktick"/>
 55      </rule>
 56      <rule pattern="[^`\\$]+">
 57        <token type="LiteralStringBacktick"/>
 58      </rule>
 59    </state>
 60    <state name="tag">
 61      <rule pattern="\s+">
 62        <token type="Text"/>
 63      </rule>
 64      <rule pattern="(-)([\w]+)">
 65        <token type="NameTag"/>
 66      </rule>
 67      <rule pattern="(@[\w]+)(=&#34;[\S]+&#34;)(&gt;)">
 68        <bygroups>
 69          <token type="NameTag"/>
 70          <token type="LiteralString"/>
 71          <token type="Punctuation"/>
 72        </bygroups>
 73      </rule>
 74      <rule pattern="(@[\w]+)(=&#34;[\S]+&#34;)">
 75        <bygroups>
 76          <token type="NameTag"/>
 77          <token type="LiteralString"/>
 78        </bygroups>
 79      </rule>
 80      <rule pattern="(@[\S]+)(=&#34;[\S]+&#34;)">
 81        <bygroups>
 82          <token type="NameTag"/>
 83          <token type="LiteralString"/>
 84        </bygroups>
 85      </rule>
 86      <rule pattern="(:[\S]+)(=&#34;[\S]+&#34;)">
 87        <bygroups>
 88          <token type="NameTag"/>
 89          <token type="LiteralString"/>
 90        </bygroups>
 91      </rule>
 92      <rule pattern="(:)">
 93        <token type="Operator"/>
 94      </rule>
 95      <rule pattern="(v-b-[\S]+)">
 96        <token type="NameTag"/>
 97      </rule>
 98      <rule pattern="(v-[\w]+)(=&#34;.+)([:][\w]+)(=&#34;[\w]+&#34;)(&gt;)">
 99        <bygroups>
100          <token type="NameTag"/>
101          <token type="LiteralString"/>
102          <token type="NameTag"/>
103          <token type="LiteralString"/>
104          <token type="Punctuation"/>
105        </bygroups>
106      </rule>
107      <rule pattern="(v-[\w]+)(=&#34;[\S]+&#34;)(&gt;)">
108        <bygroups>
109          <token type="NameTag"/>
110          <token type="LiteralString"/>
111          <token type="Punctuation"/>
112        </bygroups>
113      </rule>
114      <rule pattern="(v-[\w]+)(&gt;)">
115        <bygroups>
116          <token type="NameTag"/>
117          <token type="Punctuation"/>
118        </bygroups>
119      </rule>
120      <rule pattern="(v-[\w]+)(=&#34;.+&#34;)(&gt;)">
121        <bygroups>
122          <token type="NameTag"/>
123          <token type="LiteralString"/>
124          <token type="Punctuation"/>
125        </bygroups>
126      </rule>
127      <rule pattern="(&lt;)([\w]+)">
128        <bygroups>
129          <token type="Punctuation"/>
130          <token type="NameTag"/>
131        </bygroups>
132      </rule>
133      <rule pattern="(&lt;)(/)([\w]+)(&gt;)">
134        <bygroups>
135          <token type="Punctuation"/>
136          <token type="Punctuation"/>
137          <token type="NameTag"/>
138          <token type="Punctuation"/>
139        </bygroups>
140      </rule>
141      <rule pattern="([\w]+\s*)(=)(\s*)">
142        <bygroups>
143          <token type="NameAttribute"/>
144          <token type="Operator"/>
145          <token type="Text"/>
146        </bygroups>
147        <push state="attr"/>
148      </rule>
149      <rule pattern="[{}]+">
150        <token type="Punctuation"/>
151      </rule>
152      <rule pattern="[\w\.]+">
153        <token type="NameAttribute"/>
154      </rule>
155      <rule pattern="(/?)(\s*)(&gt;)">
156        <bygroups>
157          <token type="Punctuation"/>
158          <token type="Text"/>
159          <token type="Punctuation"/>
160        </bygroups>
161        <pop depth="1"/>
162      </rule>
163    </state>
164    <state name="slashstartsregex">
165      <rule>
166        <include state="commentsandwhitespace"/>
167      </rule>
168      <rule pattern="/(\\.|[^[/\\\n]|\[(\\.|[^\]\\\n])*])+/([gimuy]+\b|\B)">
169        <token type="LiteralStringRegex"/>
170        <pop depth="1"/>
171      </rule>
172      <rule pattern="(?=/)">
173        <token type="Text"/>
174        <push state="#pop" state="badregex"/>
175      </rule>
176      <rule>
177        <pop depth="1"/>
178      </rule>
179    </state>
180    <state name="root">
181      <rule>
182        <include state="vue"/>
183      </rule>
184      <rule pattern="\A#! ?/.*?\n">
185        <token type="CommentHashbang"/>
186      </rule>
187      <rule pattern="^(?=\s|/|&lt;!--)">
188        <token type="Text"/>
189        <push state="slashstartsregex"/>
190      </rule>
191      <rule>
192        <include state="commentsandwhitespace"/>
193      </rule>
194      <rule pattern="(\.\d+|[0-9]+\.[0-9]*)([eE][-+]?[0-9]+)?">
195        <token type="LiteralNumberFloat"/>
196      </rule>
197      <rule pattern="0[bB][01]+">
198        <token type="LiteralNumberBin"/>
199      </rule>
200      <rule pattern="0[oO][0-7]+">
201        <token type="LiteralNumberOct"/>
202      </rule>
203      <rule pattern="0[xX][0-9a-fA-F]+">
204        <token type="LiteralNumberHex"/>
205      </rule>
206      <rule pattern="[0-9]+">
207        <token type="LiteralNumberInteger"/>
208      </rule>
209      <rule pattern="\.\.\.|=&gt;">
210        <token type="Punctuation"/>
211      </rule>
212      <rule pattern="\+\+|--|~|&amp;&amp;|\?|:|\|\||\\(?=\n)|(&lt;&lt;|&gt;&gt;&gt;?|==?|!=?|[-&lt;&gt;+*%&amp;|^/])=?">
213        <token type="Operator"/>
214        <push state="slashstartsregex"/>
215      </rule>
216      <rule pattern="[{(\[;,]">
217        <token type="Punctuation"/>
218        <push state="slashstartsregex"/>
219      </rule>
220      <rule pattern="[})\].]">
221        <token type="Punctuation"/>
222      </rule>
223      <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">
224        <token type="Keyword"/>
225        <push state="slashstartsregex"/>
226      </rule>
227      <rule pattern="(var|let|with|function)\b">
228        <token type="KeywordDeclaration"/>
229        <push state="slashstartsregex"/>
230      </rule>
231      <rule pattern="(abstract|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">
232        <token type="KeywordReserved"/>
233      </rule>
234      <rule pattern="(true|false|null|NaN|Infinity|undefined)\b">
235        <token type="KeywordConstant"/>
236      </rule>
237      <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">
238        <token type="NameBuiltin"/>
239      </rule>
240      <rule pattern="(?:[$_\p{L}\p{N}]|\\u[a-fA-F0-9]{4})(?:(?:[$\p{L}\p{N}]|\\u[a-fA-F0-9]{4}))*">
241        <token type="NameOther"/>
242      </rule>
243      <rule pattern="&#34;(\\\\|\\&#34;|[^&#34;])*&#34;">
244        <token type="LiteralStringDouble"/>
245      </rule>
246      <rule pattern="&#39;(\\\\|\\&#39;|[^&#39;])*&#39;">
247        <token type="LiteralStringSingle"/>
248      </rule>
249      <rule pattern="`">
250        <token type="LiteralStringBacktick"/>
251        <push state="interp"/>
252      </rule>
253    </state>
254    <state name="badregex">
255      <rule pattern="\n">
256        <token type="Text"/>
257        <pop depth="1"/>
258      </rule>
259    </state>
260    <state name="vue">
261      <rule pattern="(&lt;)([\w]+)">
262        <bygroups>
263          <token type="Punctuation"/>
264          <token type="NameTag"/>
265        </bygroups>
266        <push state="tag"/>
267      </rule>
268      <rule pattern="(&lt;)(/)([\w]+)(&gt;)">
269        <bygroups>
270          <token type="Punctuation"/>
271          <token type="Punctuation"/>
272          <token type="NameTag"/>
273          <token type="Punctuation"/>
274        </bygroups>
275      </rule>
276    </state>
277    <state name="expression">
278      <rule pattern="{">
279        <token type="Punctuation"/>
280        <push/>
281      </rule>
282      <rule pattern="}">
283        <token type="Punctuation"/>
284        <pop depth="1"/>
285      </rule>
286      <rule>
287        <include state="root"/>
288      </rule>
289    </state>
290    <state name="commentsandwhitespace">
291      <rule pattern="\s+">
292        <token type="Text"/>
293      </rule>
294      <rule pattern="&lt;!--">
295        <token type="Comment"/>
296      </rule>
297      <rule pattern="//.*?\n">
298        <token type="CommentSingle"/>
299      </rule>
300      <rule pattern="/\*.*?\*/">
301        <token type="CommentMultiline"/>
302      </rule>
303    </state>
304  </rules>
305</lexer>