vue.xml

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