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="(?<=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*(#[>!])"><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*#[>!]"><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="[\-~%^?!+*<>\\/|&=.]"><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="""><token type="LiteralStringDouble"/><push state="literals.string-double"/></rule>
72 <rule pattern="'"><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="[^\\"\n]+"><token type="LiteralStringDouble"/></rule>
77 <rule pattern="""><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="[^\\'\n]+"><token type="LiteralStringSingle"/></rule>
82 <rule pattern="'"><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="""><token type="NameAttribute"/><push state="property.delimiter"/></rule>
108 <rule pattern="'"><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="[^\\"\n]+"><token type="NameAttribute"/></rule>
115 <rule pattern="""><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="[^\\'\n]+"><token type="NameAttribute"/></rule>
120 <rule pattern="'"><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