holyc.xml

  1<lexer>
  2  <config>
  3    <name>HolyC</name>
  4    <alias>holyc</alias>
  5    <filename>*.HC</filename>
  6    <filename>*.hc</filename>
  7    <filename>*.HH</filename>
  8    <filename>*.hh</filename>
  9    <filename>*.hc.z</filename>
 10    <filename>*.HC.Z</filename>
 11    <mime_type>text/x-chdr</mime_type>
 12    <mime_type>text/x-csrc</mime_type>
 13    <mime_type>image/x-xbitmap</mime_type>
 14    <mime_type>image/x-xpixmap</mime_type>
 15    <ensure_nl>true</ensure_nl>
 16  </config>
 17  <rules>
 18    <state name="statement">
 19      <rule>
 20        <include state="whitespace"/>
 21      </rule>
 22      <rule>
 23        <include state="statements"/>
 24      </rule>
 25      <rule pattern="[{}]">
 26        <token type="Punctuation"/>
 27      </rule>
 28      <rule pattern=";">
 29        <token type="Punctuation"/>
 30        <pop depth="1"/>
 31      </rule>
 32    </state>
 33    <state name="function">
 34      <rule>
 35        <include state="whitespace"/>
 36      </rule>
 37      <rule>
 38        <include state="statements"/>
 39      </rule>
 40      <rule pattern=";">
 41        <token type="Punctuation"/>
 42      </rule>
 43      <rule pattern="\{">
 44        <token type="Punctuation"/>
 45        <push/>
 46      </rule>
 47      <rule pattern="\}">
 48        <token type="Punctuation"/>
 49        <pop depth="1"/>
 50      </rule>
 51    </state>
 52    <state name="string">
 53      <rule pattern="&#34;">
 54        <token type="LiteralString"/>
 55        <pop depth="1"/>
 56      </rule>
 57      <rule pattern="\\([\\abfnrtv&#34;\&#39;]|x[a-fA-F0-9]{2,4}|u[a-fA-F0-9]{4}|U[a-fA-F0-9]{8}|[0-7]{1,3})">
 58        <token type="LiteralStringEscape"/>
 59      </rule>
 60      <rule pattern="[^\\&#34;\n]+">
 61        <token type="LiteralString"/>
 62      </rule>
 63      <rule pattern="\\\n">
 64        <token type="LiteralString"/>
 65      </rule>
 66      <rule pattern="\\">
 67        <token type="LiteralString"/>
 68      </rule>
 69    </state>
 70    <state name="macro">
 71      <rule pattern="(include)(\s*(?:/[*].*?[*]/\s*)?)([^\n]+)">
 72        <bygroups>
 73          <token type="CommentPreproc"/>
 74          <token type="Text"/>
 75          <token type="CommentPreprocFile"/>
 76        </bygroups>
 77      </rule>
 78      <rule pattern="[^/\n]+">
 79        <token type="CommentPreproc"/>
 80      </rule>
 81      <rule pattern="/[*](.|\n)*?[*]/">
 82        <token type="CommentMultiline"/>
 83      </rule>
 84      <rule pattern="//.*?\n">
 85        <token type="CommentSingle"/>
 86        <pop depth="1"/>
 87      </rule>
 88      <rule pattern="/">
 89        <token type="CommentPreproc"/>
 90      </rule>
 91      <rule pattern="(?&lt;=\\)\n">
 92        <token type="CommentPreproc"/>
 93      </rule>
 94      <rule pattern="\n">
 95        <token type="CommentPreproc"/>
 96        <pop depth="1"/>
 97      </rule>
 98    </state>
 99    <state name="if0">
100      <rule pattern="^\s*#if.*?(?&lt;!\\)\n">
101        <token type="CommentPreproc"/>
102        <push/>
103      </rule>
104      <rule pattern="^\s*#el(?:se|if).*\n">
105        <token type="CommentPreproc"/>
106        <pop depth="1"/>
107      </rule>
108      <rule pattern="^\s*#endif.*?(?&lt;!\\)\n">
109        <token type="CommentPreproc"/>
110        <pop depth="1"/>
111      </rule>
112      <rule pattern=".*?\n">
113        <token type="Comment"/>
114      </rule>
115    </state>
116    <state name="whitespace">
117      <rule pattern="^#if\s+0">
118        <token type="CommentPreproc"/>
119        <push state="if0"/>
120      </rule>
121      <rule pattern="^#">
122        <token type="CommentPreproc"/>
123        <push state="macro"/>
124      </rule>
125      <rule pattern="^(\s*(?:/[*].*?[*]/\s*)?)(#if\s+0)">
126        <bygroups>
127          <usingself state="root"/>
128          <token type="CommentPreproc"/>
129        </bygroups>
130        <push state="if0"/>
131      </rule>
132      <rule pattern="^(\s*(?:/[*].*?[*]/\s*)?)(#)">
133        <bygroups>
134          <usingself state="root"/>
135          <token type="CommentPreproc"/>
136        </bygroups>
137        <push state="macro"/>
138      </rule>
139      <rule pattern="\n">
140        <token type="Text"/>
141      </rule>
142      <rule pattern="\s+">
143        <token type="Text"/>
144      </rule>
145      <rule pattern="\\\n">
146        <token type="Text"/>
147      </rule>
148      <rule pattern="//(\n|[\w\W]*?[^\\]\n)">
149        <token type="CommentSingle"/>
150      </rule>
151      <rule pattern="/(\\\n)?[*][\w\W]*?[*](\\\n)?/">
152        <token type="CommentMultiline"/>
153      </rule>
154      <rule pattern="/(\\\n)?[*][\w\W]*">
155        <token type="CommentMultiline"/>
156      </rule>
157    </state>
158    <state name="statements">
159      <rule pattern="(L?)(&#34;)">
160        <bygroups>
161          <token type="LiteralStringAffix"/>
162          <token type="LiteralString"/>
163        </bygroups>
164        <push state="string"/>
165      </rule>
166      <rule pattern="(L?)(&#39;)(\\.|\\[0-7]{1,3}|\\x[a-fA-F0-9]{1,2}|[^\\\&#39;\n])(&#39;)">
167        <bygroups>
168          <token type="LiteralStringAffix"/>
169          <token type="LiteralStringChar"/>
170          <token type="LiteralStringChar"/>
171          <token type="LiteralStringChar"/>
172        </bygroups>
173      </rule>
174      <rule pattern="(\d+\.\d*|\.\d+|\d+)[eE][+-]?\d+[LlUu]*">
175        <token type="LiteralNumberFloat"/>
176      </rule>
177      <rule pattern="(\d+\.\d*|\.\d+|\d+[fF])[fF]?">
178        <token type="LiteralNumberFloat"/>
179      </rule>
180      <rule pattern="0x[0-9a-fA-F]+[LlUu]*">
181        <token type="LiteralNumberHex"/>
182      </rule>
183      <rule pattern="0[0-7]+[LlUu]*">
184        <token type="LiteralNumberOct"/>
185      </rule>
186      <rule pattern="\d+[LlUu]*">
187        <token type="LiteralNumberInteger"/>
188      </rule>
189      <rule pattern="\*/">
190        <token type="Error"/>
191      </rule>
192      <rule pattern="[~!%^&amp;*+=|?:&lt;&gt;/-]">
193        <token type="Operator"/>
194      </rule>
195      <rule pattern="[()\[\],.]">
196        <token type="Punctuation"/>
197      </rule>
198      <rule pattern="(break|case|continue|default|do|else|for|goto|if|return|switch|while|throw|try|catch|extern|MOV|CALL|PUSH|LEAVE|RET|SUB|SHR|ADD|RETF|CMP|JNE|BTS|INT|XOR|JC|JZ|LOOP|POP|TEST|SHL|ADC|SBB|JMP|INC)\b">
199        <token type="Keyword"/>
200      </rule>
201      <rule pattern="(U0|I8|U8|I16|U16|I32|U32|I64|U64|F64|Bool|class|union|DU8|DU16|DU32|DU64|RAX|RCX|RDX|RBX|RSP|RBP|RSI|RDI|EAX|ECX|EDX|EBX|ESP|EBP|ESI|EDI|AX|CX|DX|BX|SP|BP|SI|DI|SS|CS|DS|ES|FS|GS|CH|asm|const|extern|register|restrict|static|volatile|inline|_extern|_import|IMPORT|public)\b">
202        <token type="KeywordType"/>
203      </rule>
204      <rule pattern="__()\b">
205        <token type="KeywordReserved"/>
206      </rule>
207      <rule pattern="(NULL|TRUE|FALSE|ON|OFF)\b">
208        <token type="NameBuiltin"/>
209      </rule>
210      <rule pattern="([a-zA-Z_]\w*)(\s*)(:)(?!:)">
211        <bygroups>
212          <token type="NameLabel"/>
213          <token type="Text"/>
214          <token type="Punctuation"/>
215        </bygroups>
216      </rule>
217      <rule pattern="\b[A-Za-z_]\w*(?=\s*\()">
218          <token type="NameFunction"/>
219      </rule>
220      <rule pattern="[a-zA-Z_]\w*">
221        <token type="Name"/>
222      </rule>
223    </state>
224    <state name="root">
225      <rule>
226        <include state="whitespace"/>
227      </rule>
228      <rule pattern="((?:[\w*\s])+?(?:\s|[*]))([a-zA-Z_]\w*)(\s*\([^;]*?\))([^;{]*)(\{)">
229        <bygroups>
230          <usingself state="root"/>
231          <token type="NameFunction"/>
232          <usingself state="root"/>
233          <usingself state="root"/>
234          <token type="Punctuation"/>
235        </bygroups>
236        <push state="function"/>
237      </rule>
238      <rule pattern="((?:[\w*\s])+?(?:\s|[*]))([a-zA-Z_]\w*)(\s*\([^;]*?\))([^;]*)(;)">
239        <bygroups>
240          <usingself state="root"/>
241          <token type="NameFunction"/>
242          <usingself state="root"/>
243          <usingself state="root"/>
244          <token type="Punctuation"/>
245        </bygroups>
246      </rule>
247      <rule>
248        <push state="statement"/>
249      </rule>
250    </state>
251  </rules>
252</lexer>