1<lexer>
  2  <config>
  3    <name>JSON</name>
  4    <alias>json</alias>
  5    <filename>*.json</filename>
  6    <filename>*.jsonc</filename>
  7    <filename>*.json5</filename>
  8    <filename>*.avsc</filename>
  9    <filename>.luaurc</filename>
 10    <mime_type>application/json</mime_type>
 11    <dot_all>true</dot_all>
 12    <not_multiline>true</not_multiline>
 13  </config>
 14  <rules>
 15    <state name="root">
 16      <rule>
 17        <include state="value"/>
 18      </rule>
 19    </state>
 20    <state name="whitespace">
 21      <rule pattern="\s+">
 22        <token type="Text"/>
 23      </rule>
 24    </state>
 25    <state name="comment">
 26      <rule pattern="//.*?\n">
 27        <token type="CommentSingle"/>
 28      </rule>
 29    </state>
 30    <state name="simplevalue">
 31      <rule pattern="(true|false|null)\b">
 32        <token type="KeywordConstant"/>
 33      </rule>
 34      <rule pattern="-?(0|[1-9]\d*)(\.\d+[eE](\+|-)?\d+|[eE](\+|-)?\d+|\.\d+)">
 35        <token type="LiteralNumberFloat"/>
 36      </rule>
 37      <rule pattern="-?(0|[1-9]\d*)">
 38        <token type="LiteralNumberInteger"/>
 39      </rule>
 40      <rule pattern="&#34;(\\\\|\\&#34;|[^&#34;])*&#34;">
 41        <token type="LiteralStringDouble"/>
 42      </rule>
 43    </state>
 44    <state name="objectattribute">
 45      <rule>
 46        <include state="value"/>
 47      </rule>
 48      <rule pattern=":">
 49        <token type="Punctuation"/>
 50      </rule>
 51      <rule pattern=",">
 52        <token type="Punctuation"/>
 53        <pop depth="1"/>
 54      </rule>
 55      <rule pattern="\}">
 56        <token type="Punctuation"/>
 57        <pop depth="2"/>
 58      </rule>
 59    </state>
 60    <state name="objectvalue">
 61      <rule>
 62        <include state="whitespace"/>
 63      </rule>
 64      <rule>
 65        <include state="comment"/>
 66      </rule>
 67      <rule pattern="&#34;(\\\\|\\&#34;|[^&#34;])*&#34;">
 68        <token type="NameTag"/>
 69        <push state="objectattribute"/>
 70      </rule>
 71      <rule pattern="\}">
 72        <token type="Punctuation"/>
 73        <pop depth="1"/>
 74      </rule>
 75    </state>
 76    <state name="arrayvalue">
 77      <rule>
 78        <include state="whitespace"/>
 79      </rule>
 80      <rule>
 81        <include state="value"/>
 82      </rule>
 83      <rule>
 84        <include state="comment"/>
 85      </rule>
 86      <rule pattern=",">
 87        <token type="Punctuation"/>
 88      </rule>
 89      <rule pattern="\]">
 90        <token type="Punctuation"/>
 91        <pop depth="1"/>
 92      </rule>
 93    </state>
 94    <state name="value">
 95      <rule>
 96        <include state="whitespace"/>
 97      </rule>
 98      <rule>
 99        <include state="simplevalue"/>
100      </rule>
101      <rule>
102        <include state="comment"/>
103      </rule>
104      <rule pattern="\{">
105        <token type="Punctuation"/>
106        <push state="objectvalue"/>
107      </rule>
108      <rule pattern="\[">
109        <token type="Punctuation"/>
110        <push state="arrayvalue"/>
111      </rule>
112    </state>
113  </rules>
114</lexer>