3 <!DOCTYPE MODE SYSTEM "xmode.dtd">
5 <!-- Extension of c.xml to add C++ specific syntax. -->
6 <!-- With some Qt keywords added -->
9 <PROPERTY NAME="commentStart" VALUE="/*" />
10 <PROPERTY NAME="commentEnd" VALUE="*/" />
11 <PROPERTY NAME="lineComment" VALUE="//" />
12 <PROPERTY NAME="wordBreakChars" VALUE=",+-=<>/?^&*" />
15 <PROPERTY NAME="indentOpenBrackets" VALUE="{" />
16 <PROPERTY NAME="indentCloseBrackets" VALUE="}" />
17 <PROPERTY NAME="unalignedOpenBrackets" VALUE="(" />
18 <PROPERTY NAME="unalignedCloseBrackets" VALUE=")" />
19 <PROPERTY NAME="indentNextLine"
20 VALUE="(?!^\s*(#|//)).*(\b(if|while|for)\s*\(.*\)|\b(else|do)\b)[^{;]*$" />
21 <PROPERTY NAME="unindentThisLine"
22 VALUE="^\s*((.*case\b.*|[\p{Alpha}_][\p{Alnum}_]*)\s*(slots)?:(?!:)).*$" />
23 <PROPERTY NAME="electricKeys" VALUE=":" />
28 HIGHLIGHT_DIGITS="TRUE" DIGIT_RE="[0-9][0-9a-zA-Z]*">
29 <EOL_SPAN TYPE="KEYWORD2" AT_WHITESPACE_END="TRUE" DELEGATE="CPP">#</EOL_SPAN>
31 <IMPORT DELEGATE="LEX"/>
32 <IMPORT DELEGATE="CORE"/>
35 <!-- Core C++ language -->
38 HIGHLIGHT_DIGITS="TRUE" DIGIT_RE="[0-9][0-9a-zA-Z]*">
40 <!-- A hack not to mark namespace qualification like "std::"
42 <SEQ TYPE="OPERATOR">::</SEQ>
44 <IMPORT DELEGATE="c::COMMENTS" /> <!-- import from C mode -->
46 <IMPORT DELEGATE="LEXER" />
47 <IMPORT DELEGATE="c::C_LEXER" /> <!-- import from C mode -->
53 <!-- String/char literals -->
54 <SPAN_REGEXP TYPE="LITERAL1" NO_LINE_BREAK="TRUE" ESCAPE="\">
55 <BEGIN>(?:u8|u|U)("|')</BEGIN>
58 <SPAN_REGEXP TYPE="LITERAL1">
59 <BEGIN>(?:L|u8|u|U)?R"([^()\\\s]*)\(</BEGIN>
64 <!-- Core C++ language -->
67 HIGHLIGHT_DIGITS="TRUE" DIGIT_RE="[0-9][0-9a-zA-Z]*">
69 <IMPORT DELEGATE="c::CORE"/> <!-- import from C mode -->
72 <KEYWORD3>catch</KEYWORD3>
73 <KEYWORD3>class</KEYWORD3>
74 <KEYWORD3>const_cast</KEYWORD3>
75 <KEYWORD1>delete</KEYWORD1>
76 <KEYWORD3>dynamic_cast</KEYWORD3>
77 <KEYWORD1>explicit</KEYWORD1>
78 <KEYWORD2>export</KEYWORD2>
79 <KEYWORD1>friend</KEYWORD1>
80 <KEYWORD3>mutable</KEYWORD3>
81 <KEYWORD2>namespace</KEYWORD2>
82 <KEYWORD1>new</KEYWORD1>
83 <KEYWORD3>operator</KEYWORD3>
84 <KEYWORD1>private</KEYWORD1>
85 <KEYWORD1>protected</KEYWORD1>
86 <KEYWORD1>public</KEYWORD1>
87 <KEYWORD1>signals</KEYWORD1>
88 <KEYWORD1>slots</KEYWORD1>
89 <KEYWORD3>reinterpret_cast</KEYWORD3>
90 <KEYWORD3>static_assert</KEYWORD3>
91 <KEYWORD3>static_cast</KEYWORD3>
92 <KEYWORD3>template</KEYWORD3>
93 <LITERAL2>this</LITERAL2>
94 <KEYWORD1>throw</KEYWORD1>
95 <KEYWORD1>try</KEYWORD1>
96 <KEYWORD3>typeid</KEYWORD3>
97 <KEYWORD3>typename</KEYWORD3>
98 <KEYWORD2>using</KEYWORD2>
99 <KEYWORD1>virtual</KEYWORD1>
100 <KEYWORD3>wchar_t</KEYWORD3> <!-- type, kw3 -->
103 <KEYWORD1>atomic_cancel</KEYWORD1> <!-- block, kw1 -->
104 <KEYWORD1>atomic_commit</KEYWORD1> <!-- block, kw1 -->
105 <KEYWORD1>atomic_noexcept</KEYWORD1> <!-- block, kw1 -->
106 <KEYWORD1>synchronized</KEYWORD1> <!-- block, kw1 -->
107 <KEYWORD1>transaction_safe</KEYWORD1> <!-- block, kw1 -->
108 <KEYWORD1>transaction_safe_dynamic</KEYWORD1> <!-- block, kw1 -->
111 <KEYWORD1>co_await</KEYWORD1> <!-- statement, kw1 -->
112 <KEYWORD1>co_return</KEYWORD1> <!-- statement, kw1 -->
113 <KEYWORD1>co_yield</KEYWORD1> <!-- statement, kw1 -->
116 <KEYWORD2>import</KEYWORD2> <!-- declaration, kw2 -->
117 <KEYWORD2>module</KEYWORD2> <!-- declaration, kw2 -->
120 <KEYWORD1>alignas</KEYWORD1> <!-- specifier, kw1 -->
121 <KEYWORD1>alignof</KEYWORD1> <!-- operator, kw1 -->
122 <KEYWORD3>char16_t</KEYWORD3> <!-- type, kw 3 -->
123 <KEYWORD3>char32_t</KEYWORD3> <!-- type, kw 3 -->
124 <KEYWORD1>constexpr</KEYWORD1> <!-- kw1 -->
125 <KEYWORD3>decltype</KEYWORD3> <!-- kw3 -->
126 <KEYWORD1>final</KEYWORD1> <!-- kw1 -->
127 <KEYWORD2>noexcept</KEYWORD2> <!-- kw2 as decl, ?? as func -->
128 <LITERAL2>nullptr</LITERAL2> <!-- value, literal 2 -->
129 <KEYWORD1>override</KEYWORD1> <!-- kw1 -->
130 <KEYWORD2>thread_local</KEYWORD2> <!-- declaration, kw2 -->
133 <KEYWORD1>concept</KEYWORD1> <!-- kw1 -->
134 <KEYWORD1>requires</KEYWORD1> <!-- kw1 -->
139 <!-- Preprocessor specific rules -->
142 HIGHLIGHT_DIGITS="TRUE" DIGIT_RE="[0-9][0-9a-zA-Z]*">
144 <EOL_SPAN_REGEXP HASH_CHAR="include" TYPE="MARKUP" DELEGATE="c::INCLUDE">include\b</EOL_SPAN_REGEXP> <!-- import from C mode -->
145 <EOL_SPAN_REGEXP HASH_CHAR="define" TYPE="MARKUP" DELEGATE="DEFINE">define\b</EOL_SPAN_REGEXP>
146 <EOL_SPAN_REGEXP HASH_CHAR="endif" TYPE="MARKUP" DELEGATE="c::LEX">endif\b</EOL_SPAN_REGEXP> <!-- import from C mode -->
147 <EOL_SPAN_REGEXP HASH_CHAR="elif" TYPE="MARKUP" DELEGATE="c::CONDITION">elif\b</EOL_SPAN_REGEXP> <!-- import from C mode -->
148 <EOL_SPAN_REGEXP HASH_CHAR="if" TYPE="MARKUP" DELEGATE="c::CONDITION">if\b</EOL_SPAN_REGEXP> <!-- import from C mode -->
150 <IMPORT DELEGATE="LEX"/>
154 <MARKUP>ifdef</MARKUP>
155 <MARKUP>ifndef</MARKUP>
156 <MARKUP>else</MARKUP>
157 <MARKUP>error</MARKUP>
158 <MARKUP>line</MARKUP>
159 <MARKUP>pragma</MARKUP>
160 <MARKUP>undef</MARKUP>
161 <MARKUP>warning</MARKUP>
165 <!-- After #define directive -->
166 <!-- Almost same as the normal code,
167 except two additional operators # and ##. -->
170 HIGHLIGHT_DIGITS="TRUE" DIGIT_RE="[0-9][0-9a-zA-Z]*">
171 <SEQ TYPE="OPERATOR">#</SEQ>
172 <IMPORT DELEGATE="LEX"/>
173 <IMPORT DELEGATE="CORE"/>