1 <?xml version="1.0"?>
\r
3 <!DOCTYPE MODE SYSTEM "xmode.dtd">
\r
5 <!-- Extension of c.xml to add C++ specific syntax. -->
\r
8 <PROPERTY NAME="commentStart" VALUE="/*" />
\r
9 <PROPERTY NAME="commentEnd" VALUE="*/" />
\r
10 <PROPERTY NAME="lineComment" VALUE="//" />
\r
11 <PROPERTY NAME="wordBreakChars" VALUE=",+-=<>/?^&*" />
\r
14 <!-- Auto indent -->
\r
15 <PROPERTY NAME="indentOpenBrackets" VALUE="{" />
\r
16 <PROPERTY NAME="indentCloseBrackets" VALUE="}" />
\r
17 <PROPERTY NAME="unalignedOpenBrackets" VALUE="(" />
\r
18 <PROPERTY NAME="unalignedCloseBrackets" VALUE=")" />
\r
19 <PROPERTY NAME="indentNextLine"
\r
20 VALUE="(?!^\s*(#|//)).*(\b(if|while|for)\s*\(.*\)|\b(else|do)\b)[^{;]*$" />
\r
21 <PROPERTY NAME="unindentThisLine"
\r
22 VALUE="^\s*((case\b.*|[\p{Alpha}_][\p{Alnum}_]*)\s*:(?!:)).*$" />
\r
23 <PROPERTY NAME="electricKeys" VALUE=":" />
\r
27 ESCAPE="\" IGNORE_CASE="FALSE"
\r
28 HIGHLIGHT_DIGITS="TRUE" DIGIT_RE="[0-9][0-9a-zA-Z]*">
\r
29 <EOL_SPAN TYPE="KEYWORD2" AT_WHITESPACE_END="TRUE" DELEGATE="CPP">#</EOL_SPAN>
\r
31 <IMPORT DELEGATE="LEX"/>
\r
32 <IMPORT DELEGATE="CORE"/>
\r
35 <!-- Core C++ language -->
\r
37 ESCAPE="\" IGNORE_CASE="FALSE"
\r
38 HIGHLIGHT_DIGITS="TRUE" DIGIT_RE="[0-9][0-9a-zA-Z]*">
\r
40 <!-- A hack not to mark namespace qualification like "std::"
\r
42 <SEQ TYPE="OPERATOR">::</SEQ>
\r
44 <IMPORT DELEGATE="c::LEX"/>
\r
47 <!-- Core C++ language -->
\r
49 ESCAPE="\" IGNORE_CASE="FALSE"
\r
50 HIGHLIGHT_DIGITS="TRUE" DIGIT_RE="[0-9][0-9a-zA-Z]*">
\r
52 <IMPORT DELEGATE="c::CORE"/>
\r
55 <KEYWORD3>catch</KEYWORD3>
\r
56 <KEYWORD3>class</KEYWORD3>
\r
57 <KEYWORD3>const_cast</KEYWORD3>
\r
58 <KEYWORD1>delete</KEYWORD1>
\r
59 <KEYWORD3>dynamic_cast</KEYWORD3>
\r
60 <KEYWORD1>explicit</KEYWORD1>
\r
61 <KEYWORD2>export</KEYWORD2>
\r
62 <KEYWORD1>friend</KEYWORD1>
\r
63 <KEYWORD3>mutable</KEYWORD3>
\r
64 <KEYWORD2>namespace</KEYWORD2>
\r
65 <KEYWORD1>new</KEYWORD1>
\r
66 <KEYWORD3>operator</KEYWORD3>
\r
67 <KEYWORD1>private</KEYWORD1>
\r
68 <KEYWORD1>protected</KEYWORD1>
\r
69 <KEYWORD1>public</KEYWORD1>
\r
70 <KEYWORD3>reinterpret_cast</KEYWORD3>
\r
71 <KEYWORD3>static_assert</KEYWORD3>
\r
72 <KEYWORD3>static_cast</KEYWORD3>
\r
73 <KEYWORD3>template</KEYWORD3>
\r
74 <LITERAL2>this</LITERAL2>
\r
75 <KEYWORD1>throw</KEYWORD1>
\r
76 <KEYWORD1>try</KEYWORD1>
\r
77 <KEYWORD3>typeid</KEYWORD3>
\r
78 <KEYWORD3>typename</KEYWORD3>
\r
79 <KEYWORD2>using</KEYWORD2>
\r
80 <KEYWORD1>virtual</KEYWORD1>
\r
84 <!-- Preprocessor specific rules -->
\r
86 ESCAPE="\" IGNORE_CASE="FALSE"
\r
87 HIGHLIGHT_DIGITS="TRUE" DIGIT_RE="[0-9][0-9a-zA-Z]*">
\r
89 <EOL_SPAN_REGEXP HASH_CHAR="include" TYPE="MARKUP" DELEGATE="c::INCLUDE">include\b</EOL_SPAN_REGEXP>
\r
90 <EOL_SPAN_REGEXP HASH_CHAR="define" TYPE="MARKUP" DELEGATE="DEFINE">define\b</EOL_SPAN_REGEXP>
\r
91 <EOL_SPAN_REGEXP HASH_CHAR="endif" TYPE="MARKUP" DELEGATE="c::LEX">endif\b</EOL_SPAN_REGEXP>
\r
92 <EOL_SPAN_REGEXP HASH_CHAR="elif" TYPE="MARKUP" DELEGATE="c::CONDITION">elif\b</EOL_SPAN_REGEXP>
\r
93 <EOL_SPAN_REGEXP HASH_CHAR="if" TYPE="MARKUP" DELEGATE="c::CONDITION">if\b</EOL_SPAN_REGEXP>
\r
95 <IMPORT DELEGATE="LEX"/>
\r
99 <MARKUP>ifdef</MARKUP>
\r
100 <MARKUP>ifndef</MARKUP>
\r
101 <MARKUP>else</MARKUP>
\r
102 <MARKUP>error</MARKUP>
\r
103 <MARKUP>line</MARKUP>
\r
104 <MARKUP>pragma</MARKUP>
\r
105 <MARKUP>undef</MARKUP>
\r
106 <MARKUP>warning</MARKUP>
\r
110 <!-- After #define directive -->
\r
111 <!-- Almost same as the normal code,
\r
112 except two additional operators # and ##. -->
\r
113 <RULES SET="DEFINE"
\r
114 ESCAPE="\" IGNORE_CASE="FALSE"
\r
115 HIGHLIGHT_DIGITS="TRUE" DIGIT_RE="[0-9][0-9a-zA-Z]*">
\r
116 <SEQ TYPE="OPERATOR">#</SEQ>
\r
117 <IMPORT DELEGATE="LEX"/>
\r
118 <IMPORT DELEGATE="CORE"/>
\r