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