mcfunction.xml

  1
  2<lexer>
  3  <config>
  4    <name>MCFunction</name>
  5    <alias>mcfunction</alias>
  6    <alias>mcf</alias>
  7    <filename>*.mcfunction</filename>
  8    <mime_type>text/mcfunction</mime_type>
  9  </config>
 10  <rules>
 11    <state name="root">
 12      <rule><include state="names"/></rule>
 13      <rule><include state="comments"/></rule>
 14      <rule><include state="literals"/></rule>
 15      <rule><include state="whitespace"/></rule>
 16      <rule><include state="property"/></rule>
 17      <rule><include state="operators"/></rule>
 18      <rule><include state="selectors"/></rule>
 19    </state>
 20    <state name="names">
 21      <rule pattern="^(\s*)([a-z_]+)"><bygroups><token type="TextWhitespace"/><token type="NameBuiltin"/></bygroups></rule>
 22      <rule pattern="(?&lt;=run)\s+[a-z_]+"><token type="NameBuiltin"/></rule>
 23      <rule pattern="\b[0-9a-fA-F]+(?:-[0-9a-fA-F]+){4}\b"><token type="NameVariable"/></rule>
 24      <rule><include state="resource-name"/></rule>
 25      <rule pattern="[A-Za-z_][\w.#%$]+"><token type="KeywordConstant"/></rule>
 26      <rule pattern="[#%$][\w.#%$]+"><token type="NameVariableMagic"/></rule>
 27    </state>
 28    <state name="resource-name">
 29      <rule pattern="#?[a-z_][a-z_.-]*:[a-z0-9_./-]+"><token type="NameFunction"/></rule>
 30      <rule pattern="#?[a-z0-9_\.\-]+\/[a-z0-9_\.\-\/]+"><token type="NameFunction"/></rule>
 31    </state>
 32    <state name="whitespace">
 33      <rule pattern="\s+"><token type="TextWhitespace"/></rule>
 34    </state>
 35    <state name="comments">
 36      <rule pattern="^\s*(#[&gt;!])"><token type="CommentMultiline"/><push state="comments.block" state="comments.block.emphasized"/></rule>
 37      <rule pattern="#.*$"><token type="CommentSingle"/></rule>
 38    </state>
 39    <state name="comments.block">
 40      <rule pattern="^\s*#[&gt;!]"><token type="CommentMultiline"/><push state="comments.block.emphasized"/></rule>
 41      <rule pattern="^\s*#"><token type="CommentMultiline"/><push state="comments.block.normal"/></rule>
 42      <rule><pop depth="1"/></rule>
 43    </state>
 44    <state name="comments.block.normal">
 45      <rule><include state="comments.block.special"/></rule>
 46      <rule pattern="\S+"><token type="CommentMultiline"/></rule>
 47      <rule pattern="\n"><token type="Text"/><pop depth="1"/></rule>
 48      <rule><include state="whitespace"/></rule>
 49    </state>
 50    <state name="comments.block.emphasized">
 51      <rule><include state="comments.block.special"/></rule>
 52      <rule pattern="\S+"><token type="LiteralStringDoc"/></rule>
 53      <rule pattern="\n"><token type="Text"/><pop depth="1"/></rule>
 54      <rule><include state="whitespace"/></rule>
 55    </state>
 56    <state name="comments.block.special">
 57      <rule pattern="@\S+"><token type="NameDecorator"/></rule>
 58      <rule><include state="resource-name"/></rule>
 59      <rule pattern="[#%$][\w.#%$]+"><token type="NameVariableMagic"/></rule>
 60    </state>
 61    <state name="operators">
 62      <rule pattern="[\-~%^?!+*&lt;&gt;\\/|&amp;=.]"><token type="Operator"/></rule>
 63    </state>
 64    <state name="literals">
 65      <rule pattern="\.\."><token type="Literal"/></rule>
 66      <rule pattern="(true|false)"><token type="KeywordPseudo"/></rule>
 67      <rule pattern="[A-Za-z_]+"><token type="NameVariableClass"/></rule>
 68      <rule pattern="[0-7]b"><token type="LiteralNumberByte"/></rule>
 69      <rule pattern="[+-]?\d*\.?\d+([eE]?[+-]?\d+)?[df]?\b"><token type="LiteralNumberFloat"/></rule>
 70      <rule pattern="[+-]?\d+\b"><token type="LiteralNumberInteger"/></rule>
 71      <rule pattern="&quot;"><token type="LiteralStringDouble"/><push state="literals.string-double"/></rule>
 72      <rule pattern="&#x27;"><token type="LiteralStringSingle"/><push state="literals.string-single"/></rule>
 73    </state>
 74    <state name="literals.string-double">
 75      <rule pattern="\\."><token type="LiteralStringEscape"/></rule>
 76      <rule pattern="[^\\&quot;\n]+"><token type="LiteralStringDouble"/></rule>
 77      <rule pattern="&quot;"><token type="LiteralStringDouble"/><pop depth="1"/></rule>
 78    </state>
 79    <state name="literals.string-single">
 80      <rule pattern="\\."><token type="LiteralStringEscape"/></rule>
 81      <rule pattern="[^\\&#x27;\n]+"><token type="LiteralStringSingle"/></rule>
 82      <rule pattern="&#x27;"><token type="LiteralStringSingle"/><pop depth="1"/></rule>
 83    </state>
 84    <state name="selectors">
 85      <rule pattern="@[a-z]"><token type="NameVariable"/></rule>
 86    </state>
 87    <state name="property">
 88      <rule pattern="\{"><token type="Punctuation"/><push state="property.curly" state="property.key"/></rule>
 89      <rule pattern="\["><token type="Punctuation"/><push state="property.square" state="property.key"/></rule>
 90    </state>
 91    <state name="property.curly">
 92      <rule><include state="whitespace"/></rule>
 93      <rule><include state="property"/></rule>
 94      <rule pattern="\}"><token type="Punctuation"/><pop depth="1"/></rule>
 95    </state>
 96    <state name="property.square">
 97      <rule><include state="whitespace"/></rule>
 98      <rule><include state="property"/></rule>
 99      <rule pattern="\]"><token type="Punctuation"/><pop depth="1"/></rule>
100      <rule pattern=","><token type="Punctuation"/></rule>
101    </state>
102    <state name="property.key">
103      <rule><include state="whitespace"/></rule>
104      <rule pattern="#?[a-z_][a-z_\.\-]*\:[a-z0-9_\.\-/]+(?=\s*\=)"><token type="NameAttribute"/><push state="property.delimiter"/></rule>
105      <rule pattern="#?[a-z_][a-z0-9_\.\-/]+"><token type="NameAttribute"/><push state="property.delimiter"/></rule>
106      <rule pattern="[A-Za-z_\-\+]+"><token type="NameAttribute"/><push state="property.delimiter"/></rule>
107      <rule pattern="&quot;"><token type="NameAttribute"/><push state="property.delimiter"/></rule>
108      <rule pattern="&#x27;"><token type="NameAttribute"/><push state="property.delimiter"/></rule>
109      <rule pattern="-?\d+"><token type="LiteralNumberInteger"/><push state="property.delimiter"/></rule>
110      <rule><pop depth="1"/></rule>
111    </state>
112    <state name="property.key.string-double">
113      <rule pattern="\\."><token type="LiteralStringEscape"/></rule>
114      <rule pattern="[^\\&quot;\n]+"><token type="NameAttribute"/></rule>
115      <rule pattern="&quot;"><token type="NameAttribute"/><pop depth="1"/></rule>
116    </state>
117    <state name="property.key.string-single">
118      <rule pattern="\\."><token type="LiteralStringEscape"/></rule>
119      <rule pattern="[^\\&#x27;\n]+"><token type="NameAttribute"/></rule>
120      <rule pattern="&#x27;"><token type="NameAttribute"/><pop depth="1"/></rule>
121    </state>
122    <state name="property.delimiter">
123      <rule><include state="whitespace"/></rule>
124      <rule pattern="[:=]!?"><token type="Punctuation"/><push state="property.value"/></rule>
125      <rule pattern=","><token type="Punctuation"/></rule>
126      <rule><pop depth="1"/></rule>
127    </state>
128    <state name="property.value">
129      <rule><include state="whitespace"/></rule>
130      <rule pattern="#?[a-z_][a-z_\.\-]*\:[a-z0-9_\.\-/]+"><token type="NameTag"/></rule>
131      <rule pattern="#?[a-z_][a-z0-9_\.\-/]+"><token type="NameTag"/></rule>
132      <rule><include state="literals"/></rule>
133      <rule><include state="property"/></rule>
134      <rule><pop depth="1"/></rule>
135    </state>
136  </rules>
137</lexer>
138