Warning, /frameworks/syntax-highlighting/data/syntax/isocpp.xml is written in an unsupported language. File is not indexed.

0001 <?xml version="1.0" encoding="UTF-8"?>
0002 <!DOCTYPE language
0003 [
0004     <!ENTITY int "(?:[0-9](?:'?[0-9]++)*+)">
0005     <!ENTITY hex_int "(?:[0-9A-Fa-f](?:'?[0-9A-Fa-f]++)*+)">
0006     <!ENTITY exp_float "(?:[eE][+-]?&int;)">
0007     <!ENTITY exp_hexfloat "(?:[pP][-+]?&int;)">
0008 
0009     <!ENTITY separators ",;">
0010     <!ENTITY ns_punctuators "(){}[].+-/*&#37;=&lt;&gt;!|&amp;?~^">
0011     <!ENTITY punctuators ":&ns_punctuators;">
0012 
0013     <!-- printf-like format strings conversion specifiers -->
0014     <!ENTITY printf_like "&#37;[-+ #0]*+(?:[0-9]++|\*)?(?:\.(?:[0-9]++|\*))?(?:(?:hh|ll|[hljzt]|wf?(?:8|16|32|64))?[dioxXubn]|(?:DD|[lLHD])?[fFeEaAgG]|l?[cs]|[p&#37;])">
0015     <!-- https://en.cppreference.com/w/cpp/utility/format/formatter#Standard_format_specification -->
0016     <!ENTITY format_like "\{\{|\}\}|\{[0-9]*(?::(?:[^{}]?[&lt;&gt;^])?[-+ #0]*(?:[0-9]+|\{[0-9]*\})?(?:\.(?:[0-9]+|\{[0-9]*\}))?L?[sbBcdoxXaAeEfFgGp]?)?\}">
0017 
0018     <!ENTITY ispphash "(?:#|&#37;\:|\?\?=)">
0019     <!ENTITY pphash "&ispphash;\s*">
0020     <!ENTITY ppemptypp "($|(?=(/\*([^*]|\*[^/])*\*/\s*)?(//.*)?$))">
0021     <!ENTITY ppcond0 "\s+(?:0|false)\s*&ppemptypp;">
0022     <!ENTITY ppcond1 "\s+(?:1|true)\s*(\|\|([^/]|/[^*/])+)?&ppemptypp;">
0023 
0024     <!ENTITY ident_internal1  "_[a-zA-Z0-9_]+">
0025     <!ENTITY ident_internal2  "[a-zA-Z][a-zA-Z0-9_]*__\b">
0026     <!ENTITY ident_internal   "(?:&ident_internal1;|&ident_internal2;)">
0027     <!ENTITY ident_member1    "m_[a-zA-Z0-9_]+">
0028     <!ENTITY ident_member2    "[a-z][a-zA-Z0-9_]*_\b">
0029     <!ENTITY ident_member     "(?:&ident_member1;|&ident_member2;)">
0030     <!ENTITY ident_CONST      "[A-Z][A-Z0-9_]{2,}\b">
0031     <!ENTITY ident_type       "[a-zA-Z][a-zA-Z0-9_]*_t(?:ype)?\b">
0032     <!ENTITY ident_global     "g_[a-zA-Z0-9_]+">
0033     <!ENTITY ident_static_prefix  "s_[a-zA-Z0-9_]">
0034 ]>
0035 <language
0036     name="ISO C++"
0037     section="Sources"
0038     version="28"
0039     kateversion="5.79"
0040     indenter="cstyle"
0041     style="C++"
0042     mimetype="text/x-c++src;text/x-c++hdr;text/x-chdr"
0043     extensions="*.c++;*.cxx;*.cpp;*.cc;*.C;*.h;*.hh;*.H;*.h++;*.hxx;*.hpp;*.hcc;*.moc"
0044     author="Alex Turbov (i.zaufi@gmail.com)"
0045     license="LGPL"
0046     priority="6"
0047   >
0048   <!--
0049     Complete list of changes by Alex Turbov (I.zaufi@gmail.com)
0050     can be found at:
0051     http://kde-files.org/content/show.php?content=90660
0052   -->
0053   <highlighting>
0054     <!-- https://en.cppreference.com/w/cpp/keyword -->
0055     <list name="controlflow">
0056       <item>break</item>
0057       <item>case</item>
0058       <item>catch</item>
0059       <item>continue</item>
0060       <item>default</item>
0061       <item>do</item>
0062       <item>else</item>
0063       <item>for</item>
0064       <item>goto</item>
0065       <item>if</item>
0066       <item>return</item>
0067       <item>switch</item>
0068       <item>throw</item>
0069       <item>try</item>
0070       <item>while</item>
0071       <!-- coroutine -->
0072       <item>co_await</item>
0073       <item>co_return</item>
0074       <item>co_yield</item>
0075     </list>
0076 
0077     <!-- https://en.cppreference.com/w/cpp/keyword -->
0078     <list name="keywords">
0079       <item>alignof</item>
0080       <item>alignas</item>
0081       <item>asm</item>
0082       <item>auto</item>
0083       <item>class</item>
0084       <item>consteval</item> <!-- C++20 -->
0085       <item>constinit</item> <!-- C++20 -->
0086       <item>constexpr</item> <!-- C++11 -->
0087       <item>const_cast</item>
0088       <item>decltype</item>
0089       <item>delete</item>
0090       <item>dynamic_cast</item>
0091       <item>enum</item>
0092       <item>explicit</item>
0093       <item>false</item>
0094       <item>final</item> <!-- C++11 -->
0095       <item>friend</item>
0096       <item>inline</item>
0097       <item>namespace</item>
0098       <item>new</item>
0099       <item>noexcept</item>
0100       <item>nullptr</item>
0101       <item>operator</item>
0102       <item>override</item> <!-- C++11 -->
0103       <item>private</item>
0104       <item>protected</item>
0105       <item>public</item>
0106       <item>reinterpret_cast</item>
0107       <item>sizeof</item>
0108       <item>static_assert</item>
0109       <item>static_cast</item>
0110       <item>struct</item>
0111       <item>template</item>
0112       <item>this</item>
0113       <item>true</item>
0114       <item>typedef</item>
0115       <item>typeid</item>
0116       <item>typename</item>
0117       <item>union</item>
0118       <item>using</item>
0119       <item>virtual</item>
0120       <!-- Alternative operators (see 2.12) -->
0121       <item>and</item>
0122       <item>and_eq</item>
0123       <item>bitand</item>
0124       <item>bitor</item>
0125       <item>compl</item>
0126       <item>not</item>
0127       <item>not_eq</item>
0128       <item>or</item>
0129       <item>or_eq</item>
0130       <item>xor</item>
0131       <item>xor_eq</item>
0132       <!-- Concept -->
0133       <item>concept</item>
0134       <item>requires</item>
0135       <!-- TM TS -->
0136       <!-- <item>atomic_cancel</item>
0137       <item>atomic_commit</item>
0138       <item>atomic_noexcept</item>
0139       <item>synchronized</item>
0140       <item>transaction_safe</item>
0141       <item>transaction_safe_dynamic</item> -->
0142       <!-- module -->
0143       <item>import</item>
0144       <item>module</item>
0145       <item>export</item> <!-- Unused but reserved, keyword since c++20 -->
0146       <!-- reflexion TS -->
0147       <!-- <item>reflexpr</item> -->
0148     </list>
0149 
0150     <!-- 7.6 Attributes -->
0151     <!-- http://en.cppreference.com/w/cpp/language/attributes -->
0152     <list name="attributes">
0153       <!-- C++11 -->
0154       <item>noreturn</item>
0155       <item>carries_dependency</item>
0156       <!-- C++14 -->
0157       <item>deprecated</item>
0158       <!-- C++17 -->
0159       <item>fallthrough</item>
0160       <item>nodiscard</item>
0161       <item>maybe_unused</item>
0162       <!-- C++20 -->
0163       <item>likely</item>
0164       <item>unlikely</item>
0165       <item>no_unique_address</item>
0166       <!-- C++23 -->
0167       <item>assume</item>
0168       <!-- TM TS -->
0169       <!-- <item>optimize_for_synchronized</item> -->
0170     </list>
0171 
0172     <!-- https://en.cppreference.com/w/cpp/keyword -->
0173     <!-- https://en.cppreference.com/w/cpp/types/integer -->
0174     <list name="types">
0175       <item>bool</item>
0176       <item>char</item>
0177       <item>char8_t</item> <!-- C++20 -->
0178       <item>char16_t</item>
0179       <item>char32_t</item>
0180       <item>double</item>
0181       <item>float</item>
0182       <item>int</item>
0183       <item>long</item>
0184       <item>short</item>
0185       <item>signed</item>
0186       <item>unsigned</item>
0187       <item>void</item>
0188       <item>int8_t</item>
0189       <item>int16_t</item>
0190       <item>int32_t</item>
0191       <item>int64_t</item>
0192       <item>uint8_t</item>
0193       <item>uint16_t</item>
0194       <item>uint32_t</item>
0195       <item>uint64_t</item>
0196       <item>int_least8_t</item>
0197       <item>int_least16_t</item>
0198       <item>int_least32_t</item>
0199       <item>int_least64_t</item>
0200       <item>uint_least8_t</item>
0201       <item>uint_least16_t</item>
0202       <item>uint_least32_t</item>
0203       <item>uint_least64_t</item>
0204       <item>int_fast8_t</item>
0205       <item>int_fast16_t</item>
0206       <item>int_fast32_t</item>
0207       <item>int_fast64_t</item>
0208       <item>uint_fast8_t</item>
0209       <item>uint_fast16_t</item>
0210       <item>uint_fast32_t</item>
0211       <item>uint_fast64_t</item>
0212       <item>size_t</item>
0213       <item>ssize_t</item>
0214       <item>wchar_t</item>
0215       <item>intptr_t</item>
0216       <item>uintptr_t</item>
0217       <item>intmax_t</item>
0218       <item>uintmax_t</item>
0219       <item>ptrdiff_t</item>
0220       <item>sig_atomic_t</item>
0221       <item>wint_t</item>
0222       <item>va_list</item>
0223       <item>FILE</item>
0224       <item>fpos_t</item>
0225       <item>time_t</item>
0226     </list>
0227     <list name="modifiers">
0228       <item>const</item>
0229       <item>extern</item>
0230       <item>mutable</item>
0231       <item>register</item> <!-- The keyword is unused and reserved (c++17) -->
0232       <item>static</item>
0233       <item>thread_local</item>
0234       <item>volatile</item>
0235     </list>
0236     <!-- http://en.cppreference.com/w/cpp/preprocessor/replace -->
0237     <list name="StdMacros">
0238       <item>__DATE__</item>
0239       <item>__FILE__</item>
0240       <item>__LINE__</item>
0241       <item>__STDCPP_DEFAULT_NEW_ALIGNMENT__</item>
0242       <item>__STDCPP_STRICT_POINTER_SAFETY__</item>
0243       <item>__STDCPP_THREADS__</item>
0244       <item>__STDC_HOSTED__</item>
0245       <item>__STDC_ISO_10646__</item>
0246       <item>__STDC_MB_MIGHT_NEQ_WC__</item>
0247       <item>__STDC_VERSION__</item>
0248       <item>__STDC__</item>
0249       <item>__TIME__</item>
0250       <item>__cplusplus</item>
0251       <item>__func__</item>
0252       <item>assert</item>
0253       <item>_Pragma</item>
0254       <!-- C++17 -->
0255       <item>__has_include</item>
0256       <!-- C++20 -->
0257       <item>__has_cpp_attribute</item>
0258     </list>
0259     <list name="InMacro">
0260       <item>__VA_ARGS__</item>
0261       <item>__VA_OPT__</item>
0262     </list>
0263     <list name="preprocessor">
0264       <item>if</item>
0265       <item>ifdef</item>
0266       <item>ifndef</item>
0267       <item>elif</item>
0268       <item>elifdef</item> <!--C++23-->
0269       <item>elifndef</item> <!--C++23-->
0270       <item>else</item>
0271       <item>endif</item>
0272       <item>cmakedefine01</item>
0273       <item>cmakedefine</item>
0274       <item>define</item>
0275       <item>include</item>
0276       <item>error</item>
0277       <item>line</item>
0278       <item>pragma</item>
0279       <item>undef</item>
0280       <item>warning</item>
0281     </list>
0282     <list name="preprocessorDefine">
0283       <item>cmakedefine01</item>
0284       <item>cmakedefine</item>
0285       <item>define</item>
0286       <item>undef</item>
0287     </list>
0288     <list name="preprocessorOther">
0289       <item>error</item>
0290       <item>line</item>
0291       <item>pragma</item>
0292       <item>warning</item>
0293     </list>
0294 
0295     <contexts>
0296       <context name="Main" attribute="Normal Text" lineEndContext="#stay">
0297         <DetectSpaces/>
0298         <!-- Match punctuators (partial for fast path) -->
0299         <AnyChar attribute="Symbol" context="#stay" String=":()]+-*=&gt;!|&amp;~^" />
0300         <AnyChar attribute="Separator Symbol" context="#stay" String="&separators;" />
0301         <!-- Match scope regions -->
0302         <DetectChar attribute="Symbol" context="#stay" char="{" beginRegion="Brace1" />
0303         <DetectChar attribute="Symbol" context="#stay" char="}" endRegion="Brace1" />
0304         <Detect2Chars attribute="Symbol" context="#stay" char="&lt;" char1="%" beginRegion="Brace1" /> <!-- Digraph: { -->
0305         <Detect2Chars attribute="Symbol" context="#stay" char="%" char1="&gt;" endRegion="Brace1" /> <!-- Digraph: } -->
0306         <!-- Detect attributes -->
0307         <Detect2Chars attribute="Symbol" context="Attribute" char="[" char1="[" />
0308         <StringDetect attribute="Symbol" context="Attribute" String="&lt;:&lt;:" /> <!-- Digraph: [[ -->
0309 
0310         <!-- Match preprocessor directives -->
0311         <DetectChar attribute="Preprocessor" context="AfterHash" char="#" lookAhead="1"/>
0312         <Detect2Chars attribute="Preprocessor" context="AfterHash" char="%" char1=":" lookAhead="1"/> <!-- Digraph: # -->
0313         <StringDetect attribute="Preprocessor" context="AfterHash" String="??=" lookAhead="1"/> <!-- Trigraph: # -->
0314 
0315         <!-- Match numbers -->
0316         <RegExpr context="Number" String="\.?[0-9]" lookAhead="true" />
0317         <!-- Match comments -->
0318         <IncludeRules context="match comments and region markers" />
0319         <!-- Match punctuators -->
0320         <AnyChar attribute="Symbol" context="#stay" String="&punctuators;" />
0321         <!-- Match keywords -->
0322         <IncludeRules context="match keywords" />
0323         <!-- Match string literals -->
0324         <AnyChar context="SelectString" String="UuLR&quot;'" lookAhead="1"/>
0325         <!-- Match GCC extensions -->
0326         <IncludeRules context="DetectGccExtensions##GCCExtensions" />
0327         <!-- Match most used namespaces and styles -->
0328         <RegExpr context="DispatchNamespace" String="(std::)|(boost::|BOOST_)|details?::|aux::|internals::" lookAhead="1"/>
0329         <IncludeRules context="match identifier" />
0330         <!-- Match invalid symbols -->
0331         <AnyChar attribute="Error" context="#stay" String="$@`" />
0332       </context>
0333 
0334       <context name="match comments" attribute="Normal Text" lineEndContext="#pop">
0335         <Detect2Chars attribute="Comment" context="MatchComment" char="/" char1="/" lookAhead="true"/>
0336         <Detect2Chars attribute="Comment" context="MatchComment" char="/" char1="*" lookAhead="true" />
0337       </context>
0338 
0339       <context name="MatchComment" attribute="Normal Text" lineEndContext="#pop" fallthroughContext="#pop">
0340         <IncludeRules context="##Doxygen" />
0341         <Detect2Chars attribute="Comment" context="#pop!Comment 1" char="/" char1="/" />
0342         <Detect2Chars attribute="Comment" context="#pop!Comment 2" char="/" char1="*" beginRegion="Comment" />
0343       </context>
0344 
0345       <context name="match comments and region markers" attribute="Normal Text" lineEndContext="#pop">
0346         <Detect2Chars attribute="Comment" context="MatchCommentAndRegionMarkers" char="/" char1="/" lookAhead="true"/>
0347         <Detect2Chars attribute="Comment" context="MatchCommentAndRegionMarkers" char="/" char1="*" lookAhead="true" />
0348       </context>
0349 
0350       <context name="MatchCommentAndRegionMarkers" attribute="Normal Text" lineEndContext="#pop" fallthroughContext="#pop">
0351         <StringDetect attribute="Region Marker" context="#pop!Region Marker" String="//BEGIN" beginRegion="Region1" firstNonSpace="true" />
0352         <StringDetect attribute="Region Marker" context="#pop!Region Marker" String="//END" endRegion="Region1" firstNonSpace="true" />
0353         <IncludeRules context="MatchComment" />
0354       </context>
0355 
0356       <context name="match keywords" attribute="Normal Text" lineEndContext="#pop">
0357         <WordDetect attribute="Keyword" context="CheckUDLOperator" String="operator" />
0358         <keyword attribute="Control Flow" context="#stay" String="controlflow" />
0359         <keyword attribute="Keyword" context="#stay" String="keywords" />
0360       </context>
0361 
0362 
0363       <context name="SelectStringPP" attribute="Preprocessor" lineEndContext="#pop">
0364         <IncludeRules context="SelectString"/>
0365       </context>
0366       <context name="SelectString" attribute="Normal Text" lineEndContext="#pop">
0367         <DetectChar attribute="String" context="#pop!String8" char="&quot;"/>
0368         <DetectChar attribute="Char" context="#pop!Char8" char="'"/>
0369         <Detect2Chars context="#pop!SelectStringPrefix" char="U" char1="&quot;" lookAhead="1"/>
0370         <Detect2Chars context="#pop!SelectStringPrefix" char="u" char1="&quot;" lookAhead="1"/>
0371         <Detect2Chars context="#pop!SelectStringPrefix" char="L" char1="&quot;" lookAhead="1"/>
0372         <StringDetect context="#pop!SelectStringPrefix" String="u8&quot;" lookAhead="1"/>
0373         <Detect2Chars attribute="Raw String Delimiter" context="#pop!RawString" char="R" char1="&quot;" />
0374         <StringDetect attribute="Raw String Delimiter" context="#pop!RawString" String="uR&quot;"/>
0375         <StringDetect attribute="Raw String Delimiter" context="#pop!RawString" String="UR&quot;"/>
0376         <StringDetect attribute="Raw String Delimiter" context="#pop!RawString" String="LR&quot;"/>
0377         <StringDetect attribute="Raw String Delimiter" context="#pop!RawString" String="u8R&quot;"/>
0378         <Detect2Chars context="#pop!SelectCharPrefix" char="U" char1="'" lookAhead="1"/>
0379         <Detect2Chars context="#pop!SelectCharPrefix" char="u" char1="'" lookAhead="1"/>
0380         <Detect2Chars context="#pop!SelectCharPrefix" char="L" char1="'" lookAhead="1"/>
0381         <StringDetect context="#pop!SelectCharPrefix" String="u8'" lookAhead="1"/>
0382 
0383         <!-- match identifier -->
0384         <keyword attribute="Data Type" context="#pop" String="types"/>
0385         <RegExpr context="#pop!DispatchIdentifier" String="(&ident_internal2;)|(&ident_member2;)|(&ident_CONST;)|(&ident_type;)" lookAhead="1"/>
0386         <DetectIdentifier context="#pop"/>
0387       </context>
0388 
0389       <context name="SelectStringPrefix" attribute="String" lineEndContext="#pop">
0390         <Detect2Chars attribute="String Literal Prefix" context="#pop!StringPrefix8" char="u" char1="8"/>
0391         <AnyChar attribute="String Literal Prefix" context="#pop!StringPrefix16" String="uL"/>
0392         <DetectChar attribute="String Literal Prefix" context="#pop!StringPrefix32" char="U"/>
0393       </context>
0394       <context name="StringPrefix8" attribute="String" lineEndContext="#pop">
0395         <DetectChar attribute="String" context="#pop!String8" char="&quot;"/>
0396       </context>
0397       <context name="StringPrefix16" attribute="String" lineEndContext="#pop">
0398         <DetectChar attribute="String" context="#pop!String16" char="&quot;"/>
0399       </context>
0400       <context name="StringPrefix32" attribute="String" lineEndContext="#pop">
0401         <DetectChar attribute="String" context="#pop!String32" char="&quot;"/>
0402       </context>
0403 
0404       <context name="SelectCharPrefix" attribute="String" lineEndContext="#pop">
0405         <Detect2Chars attribute="Char Literal Prefix" context="#pop!CharPrefix8" char="u" char1="8"/>
0406         <AnyChar attribute="Char Literal Prefix" context="#pop!CharPrefix16" String="uL"/>
0407         <DetectChar attribute="Char Literal Prefix" context="#pop!CharPrefix32" char="U"/>
0408       </context>
0409       <context name="CharPrefix8" attribute="Char" lineEndContext="#pop">
0410         <DetectChar attribute="Char" context="#pop!Char8" char="'"/>
0411       </context>
0412       <context name="CharPrefix16" attribute="Char" lineEndContext="#pop">
0413         <DetectChar attribute="Char" context="#pop!Char16" char="'"/>
0414       </context>
0415       <context name="CharPrefix32" attribute="Char" lineEndContext="#pop">
0416         <DetectChar attribute="Char" context="#pop!Char32" char="'"/>
0417       </context>
0418 
0419       <context name="match identifier" attribute="Normal Text" lineEndContext="#pop">
0420         <keyword attribute="Data Type" context="#stay" String="types" />
0421         <keyword attribute="Type Modifiers" context="#stay" String="modifiers" />
0422         <keyword attribute="Standard Macros" context="#stay" String="StdMacros" />
0423         <RegExpr context="DispatchIdentifier" String="(&ident_internal;)|(&ident_member;)|(&ident_CONST;)|(&ident_type;)|(&ident_global;)|&ident_static_prefix;" lookAhead="1"/>
0424         <DetectIdentifier />
0425       </context>
0426       <context name="DispatchIdentifier" attribute="Normal Text" lineEndContext="#pop">
0427         <StringDetect context="#pop" String="%2" dynamic="1" attribute="Data Members (m_*)"/>
0428         <StringDetect context="#pop" String="%4" dynamic="1" attribute="Types (*_t/*_type)"/>
0429         <StringDetect context="#pop" String="%3" dynamic="1" attribute="CONSTS/MACROS"/>
0430         <StringDetect context="#pop" String="%1" dynamic="1" attribute="Internals"/>
0431         <StringDetect context="#pop" String="%5" dynamic="1" attribute="Globals (g_*)"/>
0432         <DetectIdentifier context="#pop" attribute="Statics (s_*)"/>
0433       </context>
0434 
0435       <context name="DispatchNamespace" attribute="Normal Text" lineEndContext="#pop">
0436         <StringDetect context="#pop!Standard Classes" String="%1" dynamic="1" attribute="Standard Classes"/>
0437         <StringDetect context="#pop!Boost Stuff" String="%2" dynamic="1" attribute="Boost Stuff"/>
0438         <DetectIdentifier context="#pop!InternalsNS" attribute="Internals"/>
0439       </context>
0440 
0441       <context name="DispatchNamespacePP" attribute="Preprocessor" lineEndContext="#pop">
0442         <StringDetect context="#pop!Standard Classes In PP" String="%1" dynamic="1" attribute="Standard Classes"/>
0443         <StringDetect context="#pop!Boost Stuff In PP" String="%2" dynamic="1" attribute="Boost Stuff"/>
0444         <DetectIdentifier context="#pop!InternalsNS In PP" attribute="Internals"/>
0445       </context>
0446 
0447       <context name="Number" attribute="Normal Text" lineEndContext="#pop" fallthroughContext="#pop">
0448         <WordDetect attribute="Decimal" context="IntSuffix" String="0" weakDeliminator="."/>
0449         <RegExpr attribute="Float" context="FloatSuffix" String="\.&int;&exp_float;?|0[xX](?:\.&hex_int;&exp_hexfloat;?|&hex_int;(?:&exp_hexfloat;|\.&hex_int;?&exp_hexfloat;?))|&int;(?:&exp_float;|\.&int;?&exp_float;?)" />
0450         <IncludeRules context="Integer" />
0451       </context>
0452 
0453       <context name="Integer" attribute="Normal Text" lineEndContext="#pop">
0454         <DetectChar context="#pop!IntStartsWith0" char="0" lookAhead="1"/>
0455         <RegExpr attribute="Decimal" context="IntSuffix" String="&int;" />
0456         <RegExpr attribute="Error" context="#pop" String="[._0-9A-Za-z']++" />
0457       </context>
0458       <context name="IntStartsWith0" attribute="Normal Text" lineEndContext="#pop">
0459         <RegExpr attribute="Hex" context="IntSuffix" String="0[xX]&hex_int;" />
0460         <RegExpr attribute="Binary" context="IntSuffix" String="0[Bb][01](?:'?[01]++)*+" />
0461         <RegExpr attribute="Octal" context="IntSuffix" String="0(?:'?[0-7]++)++" />
0462         <DetectChar attribute="Decimal" context="IntSuffix" char="0"/>
0463       </context>
0464 
0465       <context name="IntSuffix" attribute="Error" lineEndContext="#pop#pop" fallthroughContext="NumericSuffixError">
0466         <DetectChar attribute="Error" context="#stay" char="'" />
0467         <AnyChar context="#pop!IntSuffixPattern" String="uUlLzZimunshyd_" lookAhead="1"/>
0468       </context>
0469 
0470       <context name="IntSuffixPattern" attribute="Error" lineEndContext="#pop#pop" fallthroughContext="NumericSuffixError">
0471         <!-- https://en.cppreference.com/w/cpp/language/integer_literal#The_type_of_the_literal -->
0472         <RegExpr attribute="Standard Suffix" context="NumericSuffixError" String="([Uu](LL?|ll?|[Zz])?|(LL?|ll?|[Zz])[Uu]?)\b"/>
0473         <!-- https://en.cppreference.com/w/cpp/language/user_literal#Standard_library -->
0474         <RegExpr attribute="Standard Classes" context="NumericSuffixError" String="(?:i[fl]?|min|[mun]?s|[hyd])\b"/>
0475         <DetectChar context="#pop!NumericUserSuffixPattern" char="_" lookAhead="1"/>
0476       </context>
0477 
0478       <context name="FloatSuffix" attribute="Error" lineEndContext="#pop#pop" fallthroughContext="NumericSuffixError">
0479         <DetectChar attribute="Error" context="#stay" char="'" />
0480         <AnyChar context="#pop!FloatSuffixPattern" String="fFlLimsh_" lookAhead="1"/>
0481       </context>
0482 
0483       <context name="FloatSuffixPattern" attribute="Error" lineEndContext="#pop#pop" fallthroughContext="NumericSuffixError">
0484         <!-- https://en.cppreference.com/w/cpp/language/floating_literal#Syntax -->
0485         <AnyChar attribute="Standard Suffix" context="NumericSuffixError" String="fFlL" />
0486         <!-- https://en.cppreference.com/w/cpp/language/user_literal#Standard_library -->
0487         <RegExpr attribute="Standard Classes" context="NumericSuffixError" String="(?:i[fl]?|min|[mun]?s|h)\b" />
0488         <DetectChar context="#pop!NumericUserSuffixPattern" char="_" lookAhead="1" />
0489       </context>
0490 
0491       <context name="NumericUserSuffixPattern" attribute="Error" lineEndContext="#pop#pop">
0492         <!--
0493         http://en.cppreference.com/w/cpp/language/user_literal#Notes
0494         Due to maximal munch, user-defined integer and floating point literals ending in
0495         p, P, (since C++17) e and E, when followed by the operators + or -,
0496         must be separated from the operator with whitespace or parentheses in the source
0497         -->
0498         <RegExpr attribute="Error" context="#pop#pop" String="_[eEpP][+-]" />
0499         <DetectIdentifier attribute="UDL Numeric Suffix" context="NumericSuffixError"/>
0500       </context>
0501 
0502       <context name="NumericSuffixError" attribute="Error" lineEndContext="#pop#pop#pop" fallthroughContext="#pop#pop#pop">
0503         <AnyChar attribute="Error" String=".'0123456789"/>
0504         <DetectIdentifier attribute="Error"/>
0505       </context>
0506 
0507       <context name="CheckUDLOperator" attribute="Normal Text" lineEndContext="#pop" fallthroughContext="#pop">
0508         <DetectSpaces />
0509         <Detect2Chars attribute="String" context="UDLOperatorName" char="&quot;" char1="&quot;" />
0510       </context>
0511 
0512       <context name="UDLOperatorName" attribute="Normal Text" lineEndContext="#stay" fallthroughContext="#pop!IdentifierError">
0513         <DetectSpaces />
0514         <RegExpr attribute="Normal Text" context="#pop#pop" String="_[_[:alnum:]]*\b" />
0515       </context>
0516 
0517       <context name="IdentifierError" attribute="Error" lineEndContext="#stay" fallthroughContext="#pop#pop">
0518         <RegExpr attribute="Error" context="#pop#pop" String=".[^\s()]*" />
0519       </context>
0520 
0521 
0522       <context name="Char8" attribute="Char" lineEndContext="#pop" fallthroughContext="CharClose">
0523         <HlCStringChar attribute="String Char" context="CharClose"/>
0524         <IncludeRules context="FindSingleChar"/>
0525       </context>
0526 
0527       <context name="Char16" attribute="Char" lineEndContext="#pop" fallthroughContext="CharClose">
0528         <RegExpr attribute="String Char" context="CharClose" String="\\(?:[tnvbrfa'&quot;\\?]|[0-7]{1,3}|x[0-9A-Fa-f]{1,4}|u[0-9A-Fa-f]{4})|" />
0529         <IncludeRules context="FindSingleChar"/>
0530       </context>
0531 
0532       <context name="Char32" attribute="Char" lineEndContext="#pop" fallthroughContext="CharClose">
0533         <RegExpr attribute="String Char" context="CharClose" String="\\(?:[tnvbrfa'&quot;\\?]|[0-7]{1,3}|x[0-9A-Fa-f]{1,8}|u[0-9A-Fa-f]{4}|U[0-9A-Fa-f]{8})|" />
0534         <IncludeRules context="FindSingleChar"/>
0535       </context>
0536 
0537       <context name="FindSingleChar" attribute="Char" lineEndContext="#pop">
0538         <DetectChar attribute="Error" context="#pop" char="'" />
0539         <RegExpr attribute="Char" context="CharClose" String="." />
0540       </context>
0541 
0542       <context name="CharClose" attribute="Error" lineEndContext="#pop#pop">
0543         <DetectChar attribute="Char" context="#pop#pop" char="'" />
0544       </context>
0545 
0546 
0547       <context name="String8" attribute="String" lineEndContext="#pop">
0548         <IncludeRules context="string normal char" />
0549         <Detect2Chars context="String8EscapeX" char="\" char1="x" lookAhead="1"/>
0550         <IncludeRules context="string special char" />
0551       </context>
0552       <context name="String8EscapeX" attribute="String" lineEndContext="#pop">
0553         <HlCStringChar attribute="String Char" context="#pop!StringNoHex"/>
0554         <Detect2Chars context="#pop" attribute="Error" char="\" char1="x"/>
0555       </context>
0556 
0557       <context name="String16" attribute="String" lineEndContext="#pop">
0558         <IncludeRules context="string normal char" />
0559         <Detect2Chars context="String16EscapeX" char="\" char1="x" lookAhead="1"/>
0560         <IncludeRules context="string special char" />
0561       </context>
0562       <context name="String16EscapeX" attribute="String" lineEndContext="#pop">
0563         <RegExpr attribute="String Char" context="#pop!StringNoHex" String="\\x[0-9A-Fa-f]{1,4}" />
0564         <Detect2Chars context="#pop" attribute="Error" char="\" char1="x"/>
0565       </context>
0566 
0567       <context name="String32" attribute="String" lineEndContext="#pop">
0568         <IncludeRules context="string normal char" />
0569         <Detect2Chars context="String32EscapeX" char="\" char1="x" lookAhead="1"/>
0570         <IncludeRules context="string special char" />
0571       </context>
0572       <context name="String32EscapeX" attribute="String" lineEndContext="#pop">
0573         <RegExpr attribute="String Char" context="#pop!StringNoHex" String="\\x[0-9A-Fa-f]{1,8}" />
0574         <Detect2Chars context="#pop" attribute="Error" char="\" char1="x"/>
0575       </context>
0576 
0577       <context name="StringNoHex" attribute="Error" lineEndContext="#pop" fallthroughContext="#pop">
0578         <RegExpr attribute="Error" context="#pop" String="[0-9A-Fa-f]{1,}" />
0579       </context>
0580 
0581       <context name="string special char" attribute="String" lineEndContext="#pop">
0582         <HlCStringChar attribute="String Char"/>
0583         <RegExpr attribute="String Char" String="\\(?:u[0-9A-Fa-f]{4}|U[0-9A-Fa-f]{8})|&printf_like;|&format_like;"/>
0584         <AnyChar attribute="String" String="%{}"/>
0585         <RegExpr attribute="Error" String="\\(?:u[^&quot;]{0,3}|U[^&quot;]{0,7}|.)"/>
0586         <LineContinue attribute="Separator Symbol"/>
0587       </context>
0588 
0589       <context name="string normal char" attribute="String" lineEndContext="#pop">
0590         <DetectChar attribute="String" context="UDLStringSuffix" char="&quot;" />
0591         <!-- fast way, can be replaced by a `UntilChars` rule if it exists -->
0592         <!-- % -> printf format ; {} -> std::format -->
0593         <RegExpr attribute="String" context="#stay" String="[^%\\&quot;{}]+" />
0594       </context>
0595 
0596       <context name="UDLStringSuffix" attribute="String" fallthroughContext="#pop#pop" lineEndContext="#pop#pop">
0597         <WordDetect attribute="Standard Classes" context="#pop#pop" String="sv" />
0598         <WordDetect attribute="Standard Classes" context="#pop#pop" String="s" />
0599         <RegExpr attribute="UDL String Suffix" context="#pop#pop" String="_[_0-9A-Za-z]*\b" />
0600       </context>
0601 
0602 
0603       <context name="Attribute" attribute="Attribute" lineEndContext="#stay">
0604         <DetectSpaces/>
0605         <keyword attribute="Standard Attribute" context="#stay" String="attributes" />
0606         <Detect2Chars attribute="Symbol" context="#pop" char="]" char1="]" />
0607         <StringDetect attribute="Symbol" context="#pop" String=":&gt;:&gt;" /> <!-- Digraph: ]] -->
0608         <DetectChar attribute="Separator Symbol" context="#stay" char="," />
0609         <AnyChar attribute="Symbol" context="#stay" String="&punctuators;" />
0610         <!-- Attributes may contain some text: [[deprecated("Reason text")]] -->
0611         <DetectChar attribute="String" context="String8" char="&quot;" />
0612         <AnyChar attribute="Decimal" context="Integer" String="0123456789" lookAhead="true" />
0613         <!-- This keyword may appear in Attribute context. For example in code:
0614         [[using CC: opt(1), debug]]
0615         and it should be displayed as keyword, not like part of attribute...
0616         -->
0617         <WordDetect attribute="Keyword" context="AttributeNamespace" String="using" />
0618         <IncludeRules context="DetectGccAttributes##GCCExtensions" />
0619         <RegExpr attribute="CONSTS/MACROS" context="#stay" String="[A-Z][A-Z0-9_]{2,}\b" />
0620         <DetectIdentifier />
0621       </context>
0622 
0623       <context name="Attribute In PP" attribute="Attribute" lineEndContext="#pop">
0624         <IncludeRules context="InPreprocessor" />
0625         <IncludeRules context="Attribute" />
0626       </context>
0627 
0628       <context name="AttributeNamespace" attribute="Attribute" lineEndContext="#stay" fallthroughContext="#pop">
0629         <DetectSpaces />
0630         <IncludeRules context="DetectNamespaceGccAttributes##GCCExtensions" />
0631         <DetectIdentifier />
0632       </context>
0633 
0634       <context name="RawString" attribute="String" lineEndContext="#stay" fallthroughContext="#pop!LineError">
0635         <RegExpr attribute="Raw String Delimiter" context="#pop!InRawString" String="([^\(]{0,16})\(" beginRegion="Raw String" />
0636       </context>
0637 
0638       <context name="InRawString" attribute="Raw String" lineEndContext="#stay" dynamic="true">
0639         <!-- fast way, can be replaced by a `UntilChars` rule if it exists -->
0640         <RegExpr attribute="Raw String" context="#stay" String="[^%){}]+" />
0641         <RegExpr attribute="String Char" context="#stay" String="&printf_like;|&format_like;" />
0642         <StringDetect attribute="Raw String Delimiter" context="#pop" String=")%1&quot;" dynamic="true" endRegion="Raw String" />
0643       </context>
0644 
0645       <context name="Region Marker" attribute="Region Marker" lineEndContext="#pop" />
0646 
0647       <context name="DetectNSEnd" attribute="Normal Text" lineEndContext="#stay">
0648         <AnyChar attribute="Symbol" context="#pop" String="&ns_punctuators; &#9;" />
0649         <AnyChar attribute="Separator Symbol" context="#pop" String="&separators;" />
0650         <!-- This keyword may appear in InternalsNS context. For example in code:
0651           details::some_class::template some_templated_static();
0652           and it should be displayed as keyword, not like part of details namespace...
0653           -->
0654         <WordDetect attribute="Keyword" context="#stay" String="template" />
0655         <DetectIdentifier context="#stay"/>
0656       </context>
0657 
0658       <context name="Standard Classes" attribute="Standard Classes" lineEndContext="#stay">
0659         <IncludeRules context="DetectNSEnd" />
0660       </context>
0661 
0662       <context name="Boost Stuff" attribute="Boost Stuff" lineEndContext="#stay">
0663         <IncludeRules context="DetectNSEnd" />
0664       </context>
0665 
0666       <context name="InternalsNS" attribute="Internals" lineEndContext="#stay">
0667         <IncludeRules context="DetectNSEnd" />
0668       </context>
0669 
0670       <context name="Standard Classes In PP" attribute="Standard Classes" lineEndContext="#pop">
0671         <IncludeRules context="InPreprocessor" />
0672         <IncludeRules context="DetectNSEnd" />
0673       </context>
0674 
0675       <context name="Boost Stuff In PP" attribute="Boost Stuff" lineEndContext="#pop">
0676         <IncludeRules context="InPreprocessor" />
0677         <IncludeRules context="DetectNSEnd" />
0678       </context>
0679 
0680       <context name="InternalsNS In PP" attribute="Internals" lineEndContext="#pop">
0681         <IncludeRules context="InPreprocessor" />
0682         <IncludeRules context="DetectNSEnd" />
0683       </context>
0684 
0685       <context name="Comment 1" attribute="Comment" lineEndContext="#pop">
0686         <LineContinue attribute="Error" context="#stay" />
0687         <DetectSpaces />
0688         <IncludeRules context="##Comments" />
0689         <DetectIdentifier />
0690       </context>
0691 
0692       <context name="Comment 2" attribute="Comment" lineEndContext="#stay">
0693         <DetectSpaces />
0694         <LineContinue attribute="Comment" context="#stay" />
0695         <Detect2Chars attribute="Comment" context="#pop" char="*" char1="/" endRegion="Comment" />
0696         <IncludeRules context="##Comments" />
0697         <DetectIdentifier />
0698       </context>
0699 
0700       <context name="AfterHash" attribute="Error" lineEndContext="#pop" fallthroughContext="#pop!LineError">
0701         <RegExpr attribute="Preprocessor" context="#pop!PreprocessorCmd" String="&pphash;(?=.)|" firstNonSpace="true" />
0702       </context>
0703 
0704       <context name="LineError" attribute="Error" lineEndContext="#pop">
0705         <LineContinue attribute="Error" context="#stay" />
0706         <RegExpr attribute="Error" context="#stay" String="[^\\]+" />
0707       </context>
0708 
0709 
0710       <context name="PreprocessorCmd" attribute="Error" lineEndContext="#pop" fallthroughContext="#pop!LineError">
0711         <WordDetect attribute="Preprocessor" context="#pop!Include" String="include" />
0712         <WordDetect attribute="Preprocessor" context="#pop!PreprocessorIfDef" String="ifdef" beginRegion="PP" lookAhead="true" />
0713         <WordDetect attribute="Preprocessor" context="#pop!PreprocessorIfDef" String="ifndef" beginRegion="PP" lookAhead="true" />
0714         <WordDetect attribute="Preprocessor" context="#pop!PreprocessorIf" String="if" beginRegion="PP" lookAhead="true" />
0715         <WordDetect attribute="Preprocessor" context="#pop!PreprocessorIf" String="elif" endRegion="PP" beginRegion="PP" lookAhead="true" />
0716         <WordDetect attribute="Preprocessor" context="PreprocessorEndOfLineSpace" String="else" endRegion="PP" beginRegion="PP" />
0717         <WordDetect attribute="Preprocessor" context="PreprocessorEndOfLineSpace" String="endif" endRegion="PP" />
0718         <WordDetect attribute="Preprocessor" context="#pop!PreprocessorIfDef" String="elifdef" endRegion="PP" beginRegion="PP" lookAhead="true" />
0719         <WordDetect attribute="Preprocessor" context="#pop!PreprocessorIfDef" String="elifndef" endRegion="PP" beginRegion="PP" lookAhead="true" />
0720         <keyword attribute="Preprocessor" context="#pop!Define" String="preprocessorDefine" />
0721         <keyword attribute="Preprocessor" context="#pop!Preprocessor" String="preprocessorOther" />
0722         <!-- GCC extension -->
0723         <WordDetect attribute="Preprocessor" context="#pop!Include" String="include_next" />
0724         <Int attribute="Preprocessor" context="#pop!Preprocessor"/>
0725       </context>
0726 
0727       <context name="Include" attribute="Preprocessor" lineEndContext="#pop">
0728         <DetectSpaces/>
0729         <RangeDetect attribute="Prep. Lib" context="PreprocessorEndOfLineSpace" char="&quot;" char1="&quot;" />
0730         <RangeDetect attribute="Prep. Lib" context="PreprocessorEndOfLineSpace" char="&lt;" char1="&gt;" />
0731         <IncludeRules context="Preprocessor" />
0732         <DetectIdentifier/>
0733       </context>
0734 
0735       <context name="PreprocessorIfDef" attribute="Preprocessor" lineEndContext="#pop" fallthroughContext="#pop!LineError">
0736         <RegExpr attribute="Preprocessor" context="#pop!Preprocessor" String="\w+\s+([_A-Za-z][A-Za-z0-9]*\s*|(?=//|/\*))" />
0737       </context>
0738 
0739       <context name="PreprocessorIf" attribute="Preprocessor" lineEndContext="#pop" fallthroughContext="#pop!LineError">
0740         <RegExpr attribute="Preprocessor" context="#pop!Inscoped" String="\w+&ppcond1;" />
0741         <RegExpr attribute="Preprocessor" context="#pop!Outscoped" String="\w+&ppcond0;" />
0742         <RegExpr attribute="Preprocessor" context="#pop!Preprocessor" String="\w+\s+(?=[^\s])" />
0743       </context>
0744 
0745       <context name="PreprocessorEndOfLineSpace" attribute="Preprocessor" lineEndContext="#pop#pop" fallthroughContext="#pop#pop!LineError">
0746         <DetectSpaces />
0747         <IncludeRules context="match comments" />
0748       </context>
0749 
0750       <context name="Preprocessor" attribute="Preprocessor" lineEndContext="#pop">
0751         <LineContinue attribute="Preprocessor" context="#stay" />
0752         <keyword attribute="Standard Macros" context="#stay" String="StdMacros" />
0753         <IncludeRules context="GNUMacros##GCCExtensions" />
0754         <IncludeRules context="match comments" />
0755       </context>
0756 
0757       <context name="Define" attribute="Preprocessor" lineEndContext="#pop">
0758         <DetectSpaces/>
0759         <!--
0760         Old version: non-contextual macro
0761         <IncludeRules context="InPreprocessor" />
0762         <keyword attribute="Standard Macros" context="#stay" String="StdMacros" />
0763         <keyword attribute="Standard Macros" context="#stay" String="InMacro" />
0764         <IncludeRules context="GNUMacros##GCCExtensions" />
0765         <IncludeRules context="match comments" />
0766         -->
0767 
0768         <IncludeRules context="InPreprocessor" />
0769         <Detect2Chars attribute="Error" context="#pop!LineError" char="/" char1="/" />
0770         <Detect2Chars attribute="Comment" context="MatchComment" char="/" char1="*" lookAhead="true" />
0771         <IncludeRules context="GNUMacros##GCCExtensions" />
0772         <DetectIdentifier attribute="Preprocessor" context="#pop!In Define"/>
0773       </context>
0774 
0775       <context name="In Define" attribute="Preprocessor" lineEndContext="#pop">
0776         <DetectSpaces/>
0777         <LineContinue attribute="Separator Symbol" context="#stay" />
0778         <!-- Match scope regions and punctuators (partial for fast path) -->
0779         <AnyChar attribute="Symbol" context="#stay" String="#:(){}]+-*%=&gt;!|&amp;~^" />
0780         <!-- Detect attributes -->
0781         <Detect2Chars attribute="Symbol" context="Attribute In PP" char="[" char1="[" />
0782         <StringDetect attribute="Symbol" context="Attribute In PP" String="&lt;:&lt;:" /> <!-- Digraph: [[ -->
0783         <!-- Match numbers -->
0784         <RegExpr context="Number" String="\.?\d" lookAhead="true" />
0785         <!-- Match comments -->
0786         <IncludeRules context="match comments" />
0787         <!-- Match punctuators -->
0788         <AnyChar attribute="Separator Symbol" context="#stay" String="&separators;" />
0789         <AnyChar attribute="Symbol" context="#stay" String="&punctuators;" />
0790         <!-- Match keywords -->
0791         <IncludeRules context="match keywords" />
0792         <!-- Match string literals -->
0793         <AnyChar context="SelectStringPP" String="UuLR&quot;'" lookAhead="1"/>
0794         <!-- Match GCC extensions -->
0795         <IncludeRules context="DetectGccExtensionsInPP##GCCExtensions" />
0796         <!-- Match most used namespaces and styles -->
0797         <RegExpr context="DispatchNamespacePP" String="(std::)|(boost::|BOOST_)|details?::|aux::|internals::" lookAhead="1"/>
0798         <keyword attribute="Standard Macros" context="#stay" String="InMacro" />
0799         <IncludeRules context="match identifier" />
0800         <!-- Match invalid symbols -->
0801         <AnyChar attribute="Error" context="#stay" String="$@`\" />
0802       </context>
0803 
0804       <context name="InPreprocessor" attribute="Normal Text" lineEndContext="#pop">
0805         <LineContinue attribute="Separator Symbol" context="#stay" />
0806         <DetectChar attribute="Error" context="#stay" char="\" />
0807       </context>
0808 
0809       <context name="Outscoped Common" attribute="Comment" lineEndContext="#stay">
0810         <DetectSpaces />
0811         <IncludeRules context="##Comments" />
0812         <DetectIdentifier />
0813         <!-- prevent incorrect highlighting in case of not closed properly comment block -->
0814         <Detect2Chars attribute="Comment" context="#stay" char="*" char1="/" />
0815         <IncludeRules context="match comments" />
0816         <RegExpr attribute="Comment" context="Outscoped intern" String="&pphash;if|" beginRegion="PP" firstNonSpace="true" />
0817         <LineContinue context="#stay" />
0818       </context>
0819 
0820       <context name="Outscoped" attribute="Comment" lineEndContext="#stay">
0821         <DetectSpaces />
0822         <RegExpr attribute="Preprocessor" context="Outscoped AfterHash" String="&ispphash;|" firstNonSpace="true" lookAhead="true" />
0823         <IncludeRules context="Outscoped Common" />
0824       </context>
0825 
0826       <context name="Outscoped AfterHash" attribute="Comment" lineEndContext="#pop">
0827         <RegExpr attribute="Preprocessor" context="#pop#pop!PreprocessorEndOfLineSpace" String="&pphash;endif\b" endRegion="PP" />
0828         <RegExpr attribute="Preprocessor" context="#pop#pop!Inscoped"          String="&pphash;else\b" endRegion="PP" beginRegion="PP" />
0829         <RegExpr attribute="Comment" context="#pop!Outscoped intern"           String="&pphash;if" beginRegion="PP" />
0830         <RegExpr attribute="Preprocessor" context="#pop#pop!Inscoped"          String="&pphash;elif&ppcond1;" endRegion="PP" beginRegion="PP" />
0831         <RegExpr attribute="Preprocessor" context="#pop"                       String="&pphash;elif&ppcond0;" endRegion="PP" beginRegion="PP" />
0832         <RegExpr attribute="Preprocessor" context="#pop#pop!Preprocessor"      String="&pphash;elif\b" endRegion="PP" beginRegion="PP" />
0833         <RegExpr attribute="Comment" context="#pop"                            String="&pphash;" />
0834       </context>
0835 
0836       <context name="Outscoped 2" attribute="Comment" lineEndContext="#stay">
0837         <IncludeRules context="Outscoped Common" />
0838         <RegExpr attribute="Preprocessor" context="#pop!PreprocessorEndOfLineSpace" String="&pphash;endif|" endRegion="PP" firstNonSpace="true" />
0839       </context>
0840 
0841       <context name="Inscoped" attribute="Normal Text" lineEndContext="#stay">
0842         <DetectSpaces />
0843         <RegExpr attribute="Preprocessor" context="Inscoped AfterHash" String="&ispphash;|" firstNonSpace="true" lookAhead="true" />
0844         <IncludeRules context="Main" />
0845       </context>
0846 
0847       <context name="Inscoped AfterHash" attribute="Normal Text" lineEndContext="#pop" fallthroughContext="#pop!AfterHash">
0848         <DetectSpaces />
0849         <RegExpr attribute="Preprocessor" context="#pop!Outscoped 2" String="&pphash;el(?:se|if(n?def)?)" endRegion="PP" beginRegion="PP"/>
0850         <RegExpr attribute="Preprocessor" context="#pop#pop!PreprocessorEndOfLineSpace" String="&pphash;endif\b" endRegion="PP" />
0851       </context>
0852 
0853       <context name="Outscoped intern" attribute="Comment" lineEndContext="#stay">
0854         <DetectSpaces />
0855         <IncludeRules context="##Comments" />
0856         <DetectIdentifier />
0857         <!-- prevent incorrect highlighting in case of not closed properly comment block -->
0858         <Detect2Chars attribute="Comment" context="#stay" char="*" char1="/" />
0859         <IncludeRules context="match comments" />
0860         <RegExpr attribute="Comment" context="Outscoped intern" String="&pphash;if|" beginRegion="PP" firstNonSpace="true" />
0861         <RegExpr attribute="Comment" context="#stay" String="&pphash;el(se|if(n?def)?)|" beginRegion="PP" endRegion="PP" firstNonSpace="true" />
0862         <RegExpr attribute="Comment" context="PreprocessorEndOfLineSpace" String="&pphash;endif|" endRegion="PP" firstNonSpace="true" />
0863       </context>
0864     </contexts>
0865 
0866     <itemDatas>
0867       <itemData name="Normal Text"        defStyleNum="dsNormal"    spellChecking="false" />
0868       <itemData name="Control Flow"       defStyleNum="dsControlFlow" spellChecking="false" />
0869       <itemData name="Keyword"            defStyleNum="dsKeyword"   spellChecking="false" />
0870       <itemData name="Data Type"          defStyleNum="dsDataType"  spellChecking="false" />
0871       <itemData name="Type Modifiers"     defStyleNum="dsAttribute" spellChecking="false" />
0872       <itemData name="Attribute"          defStyleNum="dsAttribute" spellChecking="false" bold="false" italic="true" />
0873       <itemData name="Standard Attribute" defStyleNum="dsAttribute" spellChecking="false" bold="false" italic="true" />
0874       <itemData name="Decimal"            defStyleNum="dsDecVal"    spellChecking="false" />
0875       <itemData name="Octal"              defStyleNum="dsBaseN"     spellChecking="false" />
0876       <itemData name="Hex"                defStyleNum="dsBaseN"     spellChecking="false" />
0877       <itemData name="Binary"             defStyleNum="dsBaseN"     spellChecking="false" />
0878       <itemData name="Float"              defStyleNum="dsFloat"     spellChecking="false" />
0879       <itemData name="Char"               defStyleNum="dsChar"      spellChecking="false" />
0880       <itemData name="Char Literal Prefix" defStyleNum="dsChar"     spellChecking="false" />
0881       <itemData name="String"             defStyleNum="dsString"    spellChecking="true"  />
0882       <itemData name="String Char"        defStyleNum="dsSpecialChar" spellChecking="false" />
0883       <itemData name="String Literal Prefix" defStyleNum="dsString" spellChecking="true" />
0884       <itemData name="Raw String"         defStyleNum="dsVerbatimString" spellChecking="true" />
0885       <itemData name="Raw String Delimiter" defStyleNum="dsString"  spellChecking="false" />
0886       <itemData name="Comment"            defStyleNum="dsComment"   spellChecking="true"  />
0887       <itemData name="Symbol"             defStyleNum="dsOperator"  spellChecking="false" />
0888       <itemData name="Separator Symbol"   defStyleNum="dsOperator"  spellChecking="false" />
0889       <itemData name="Data Members (m_*)" defStyleNum="dsVariable"  spellChecking="false" />
0890       <itemData name="Globals (g_*)"      defStyleNum="dsVariable"  spellChecking="false" />
0891       <itemData name="Statics (s_*)"      defStyleNum="dsVariable"  spellChecking="false" />
0892       <itemData name="Types (*_t/*_type)" defStyleNum="dsDataType"  spellChecking="false" />
0893       <itemData name="CONSTS/MACROS"      defStyleNum="dsNormal"    spellChecking="false" />
0894       <itemData name="Preprocessor"       defStyleNum="dsPreprocessor" spellChecking="false" />
0895       <itemData name="Prep. Lib"          defStyleNum="dsImport"    spellChecking="false" />
0896       <itemData name="Standard Macros"    defStyleNum="dsOthers"    spellChecking="false" />
0897       <itemData name="Standard Classes"   defStyleNum="dsBuiltIn"   spellChecking="false" />
0898       <itemData name="Boost Stuff"        defStyleNum="dsExtension" spellChecking="false" />
0899       <itemData name="Internals"          defStyleNum="dsNormal"    spellChecking="false" color="#808080" selColor="#808080" />
0900       <itemData name="Region Marker"      defStyleNum="dsRegionMarker" spellChecking="false" />
0901       <itemData name="UDL Numeric Suffix" defStyleNum="dsDecVal"    spellChecking="false" />
0902       <itemData name="UDL String Suffix"  defStyleNum="dsString"    spellChecking="false" />
0903       <itemData name="Standard Suffix"    defStyleNum="dsBuiltIn"   spellChecking="false" />
0904       <itemData name="Error"              defStyleNum="dsError"     spellChecking="false" />
0905     </itemDatas>
0906   </highlighting>
0907   <general>
0908     <comments>
0909       <comment name="singleLine" start="//" position="afterwhitespace"/>
0910       <comment name="multiLine" start="/*" end="*/" region="Comment" />
0911     </comments>
0912     <keywords casesensitive="1" additionalDeliminator="#&quot;" />
0913   </general>
0914 </language>
0915 <!-- kate: indent-width 2; tab-width 2; -->