...

Text file src/github.com/alecthomas/chroma/v2/lexers/embedded/c++.xml

Documentation: github.com/alecthomas/chroma/v2/lexers/embedded

     1<lexer>
     2  <config>
     3    <name>C++</name>
     4    <alias>cpp</alias>
     5    <alias>c++</alias>
     6    <filename>*.cpp</filename>
     7    <filename>*.hpp</filename>
     8    <filename>*.c++</filename>
     9    <filename>*.h++</filename>
    10    <filename>*.cc</filename>
    11    <filename>*.hh</filename>
    12    <filename>*.cxx</filename>
    13    <filename>*.hxx</filename>
    14    <filename>*.C</filename>
    15    <filename>*.H</filename>
    16    <filename>*.cp</filename>
    17    <filename>*.CPP</filename>
    18    <mime_type>text/x-c++hdr</mime_type>
    19    <mime_type>text/x-c++src</mime_type>
    20    <ensure_nl>true</ensure_nl>
    21  </config>
    22  <rules>
    23    <state name="classname">
    24      <rule pattern="(\[\[.+\]\])(\s*)">
    25        <bygroups>
    26          <token type="NameAttribute"/>
    27          <token type="Text"/>
    28        </bygroups>
    29      </rule>
    30      <rule pattern="[a-zA-Z_]\w*">
    31        <token type="NameClass"/>
    32        <pop depth="1"/>
    33      </rule>
    34      <rule pattern="\s*(?=[&gt;{])">
    35        <token type="Text"/>
    36        <pop depth="1"/>
    37      </rule>
    38    </state>
    39    <state name="whitespace">
    40      <rule pattern="^#if\s+0">
    41        <token type="CommentPreproc"/>
    42        <push state="if0"/>
    43      </rule>
    44      <rule pattern="^#">
    45        <token type="CommentPreproc"/>
    46        <push state="macro"/>
    47      </rule>
    48      <rule pattern="^(\s*(?:/[*].*?[*]/\s*)?)(#if\s+0)">
    49        <bygroups>
    50          <usingself state="root"/>
    51          <token type="CommentPreproc"/>
    52        </bygroups>
    53        <push state="if0"/>
    54      </rule>
    55      <rule pattern="^(\s*(?:/[*].*?[*]/\s*)?)(#)">
    56        <bygroups>
    57          <usingself state="root"/>
    58          <token type="CommentPreproc"/>
    59        </bygroups>
    60        <push state="macro"/>
    61      </rule>
    62      <rule pattern="\n">
    63        <token type="Text"/>
    64      </rule>
    65      <rule pattern="\s+">
    66        <token type="Text"/>
    67      </rule>
    68      <rule pattern="\\\n">
    69        <token type="Text"/>
    70      </rule>
    71      <rule pattern="//(\n|[\w\W]*?[^\\]\n)">
    72        <token type="CommentSingle"/>
    73      </rule>
    74      <rule pattern="/(\\\n)?[*][\w\W]*?[*](\\\n)?/">
    75        <token type="CommentMultiline"/>
    76      </rule>
    77      <rule pattern="/(\\\n)?[*][\w\W]*">
    78        <token type="CommentMultiline"/>
    79      </rule>
    80    </state>
    81    <state name="macro">
    82      <rule pattern="(include)(\s*(?:/[*].*?[*]/\s*)?)([^\n]+)">
    83        <bygroups>
    84          <token type="CommentPreproc"/>
    85          <token type="Text"/>
    86          <token type="CommentPreprocFile"/>
    87        </bygroups>
    88      </rule>
    89      <rule pattern="[^/\n]+">
    90        <token type="CommentPreproc"/>
    91      </rule>
    92      <rule pattern="/[*](.|\n)*?[*]/">
    93        <token type="CommentMultiline"/>
    94      </rule>
    95      <rule pattern="//.*?\n">
    96        <token type="CommentSingle"/>
    97        <pop depth="1"/>
    98      </rule>
    99      <rule pattern="/">
   100        <token type="CommentPreproc"/>
   101      </rule>
   102      <rule pattern="(?&lt;=\\)\n">
   103        <token type="CommentPreproc"/>
   104      </rule>
   105      <rule pattern="\n">
   106        <token type="CommentPreproc"/>
   107        <pop depth="1"/>
   108      </rule>
   109    </state>
   110    <state name="statements">
   111      <rule pattern="(reinterpret_cast|static_assert|thread_local|dynamic_cast|static_cast|const_cast|co_return|protected|namespace|consteval|constexpr|typename|co_await|co_yield|operator|restrict|explicit|template|override|noexcept|requires|decltype|alignof|private|alignas|virtual|mutable|nullptr|concept|export|friend|typeid|throws|public|delete|final|throw|catch|using|this|new|try)\b">
   112        <token type="Keyword"/>
   113      </rule>
   114      <rule pattern="(enum)\b(\s+)(class)\b(\s*)">
   115        <bygroups>
   116          <token type="Keyword"/>
   117          <token type="Text"/>
   118          <token type="Keyword"/>
   119          <token type="Text"/>
   120        </bygroups>
   121        <push state="classname"/>
   122      </rule>
   123      <rule pattern="(class|struct|enum|union)\b(\s*)">
   124        <bygroups>
   125          <token type="Keyword"/>
   126          <token type="Text"/>
   127        </bygroups>
   128        <push state="classname"/>
   129      </rule>
   130      <rule pattern="\[\[.+\]\]">
   131        <token type="NameAttribute"/>
   132      </rule>
   133      <rule pattern="(R)(&#34;)([^\\()\s]{,16})(\()((?:.|\n)*?)(\)\3)(&#34;)">
   134        <bygroups>
   135          <token type="LiteralStringAffix"/>
   136          <token type="LiteralString"/>
   137          <token type="LiteralStringDelimiter"/>
   138          <token type="LiteralStringDelimiter"/>
   139          <token type="LiteralString"/>
   140          <token type="LiteralStringDelimiter"/>
   141          <token type="LiteralString"/>
   142        </bygroups>
   143      </rule>
   144      <rule pattern="(u8|u|U)(&#34;)">
   145        <bygroups>
   146          <token type="LiteralStringAffix"/>
   147          <token type="LiteralString"/>
   148        </bygroups>
   149        <push state="string"/>
   150      </rule>
   151      <rule pattern="(L?)(&#34;)">
   152        <bygroups>
   153          <token type="LiteralStringAffix"/>
   154          <token type="LiteralString"/>
   155        </bygroups>
   156        <push state="string"/>
   157      </rule>
   158      <rule pattern="(L?)(&#39;)(\\.|\\[0-7]{1,3}|\\x[a-fA-F0-9]{1,2}|[^\\\&#39;\n])(&#39;)">
   159        <bygroups>
   160          <token type="LiteralStringAffix"/>
   161          <token type="LiteralStringChar"/>
   162          <token type="LiteralStringChar"/>
   163          <token type="LiteralStringChar"/>
   164        </bygroups>
   165      </rule>
   166      <rule pattern="(\d+\.\d*|\.\d+|\d+)[eE][+-]?\d+[LlUu]*">
   167        <token type="LiteralNumberFloat"/>
   168      </rule>
   169      <rule pattern="(\d+\.\d*|\.\d+|\d+[fF])[fF]?">
   170        <token type="LiteralNumberFloat"/>
   171      </rule>
   172      <rule pattern="0[xX]([0-9A-Fa-f](&#39;?[0-9A-Fa-f]+)*)[LlUu]*">
   173        <token type="LiteralNumberHex"/>
   174      </rule>
   175      <rule pattern="0(&#39;?[0-7]+)+[LlUu]*">
   176        <token type="LiteralNumberOct"/>
   177      </rule>
   178      <rule pattern="0[Bb][01](&#39;?[01]+)*[LlUu]*">
   179        <token type="LiteralNumberBin"/>
   180      </rule>
   181      <rule pattern="[0-9](&#39;?[0-9]+)*[LlUu]*">
   182        <token type="LiteralNumberInteger"/>
   183      </rule>
   184      <rule pattern="\*/">
   185        <token type="Error"/>
   186      </rule>
   187      <rule pattern="[~!%^&amp;*+=|?:&lt;&gt;/-]">
   188        <token type="Operator"/>
   189      </rule>
   190      <rule pattern="[()\[\],.]">
   191        <token type="Punctuation"/>
   192      </rule>
   193      <rule pattern="(restricted|volatile|continue|register|default|typedef|struct|extern|switch|sizeof|static|return|union|while|const|break|goto|enum|else|case|auto|for|asm|if|do)\b">
   194        <token type="Keyword"/>
   195      </rule>
   196      <rule pattern="(bool|int|long|float|short|double|char((8|16|32)_t)?|wchar_t|unsigned|signed|void|u?int(_fast|_least|)(8|16|32|64)_t)\b">
   197        <token type="KeywordType"/>
   198      </rule>
   199      <rule pattern="(typename|__inline|restrict|_inline|thread|inline|naked)\b">
   200        <token type="KeywordReserved"/>
   201      </rule>
   202      <rule pattern="(__m(128i|128d|128|64))\b">
   203        <token type="KeywordReserved"/>
   204      </rule>
   205      <rule pattern="__(forceinline|identifier|unaligned|declspec|fastcall|stdcall|finally|except|assume|int32|cdecl|int64|based|leave|int16|raise|noop|int8|w64|try|asm)\b">
   206        <token type="KeywordReserved"/>
   207      </rule>
   208      <rule pattern="(true|false|NULL)\b">
   209        <token type="NameBuiltin"/>
   210      </rule>
   211      <rule pattern="([a-zA-Z_]\w*)(\s*)(:)(?!:)">
   212        <bygroups>
   213          <token type="NameLabel"/>
   214          <token type="Text"/>
   215          <token type="Punctuation"/>
   216        </bygroups>
   217      </rule>
   218      <rule pattern="[a-zA-Z_]\w*">
   219        <token type="Name"/>
   220      </rule>
   221    </state>
   222    <state name="function">
   223      <rule>
   224        <include state="whitespace"/>
   225      </rule>
   226      <rule>
   227        <include state="statements"/>
   228      </rule>
   229      <rule pattern=";">
   230        <token type="Punctuation"/>
   231      </rule>
   232      <rule pattern="\{">
   233        <token type="Punctuation"/>
   234        <push/>
   235      </rule>
   236      <rule pattern="\}">
   237        <token type="Punctuation"/>
   238        <pop depth="1"/>
   239      </rule>
   240    </state>
   241    <state name="string">
   242      <rule pattern="&#34;">
   243        <token type="LiteralString"/>
   244        <pop depth="1"/>
   245      </rule>
   246      <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})">
   247        <token type="LiteralStringEscape"/>
   248      </rule>
   249      <rule pattern="[^\\&#34;\n]+">
   250        <token type="LiteralString"/>
   251      </rule>
   252      <rule pattern="\\\n">
   253        <token type="LiteralString"/>
   254      </rule>
   255      <rule pattern="\\">
   256        <token type="LiteralString"/>
   257      </rule>
   258    </state>
   259    <state name="if0">
   260      <rule pattern="^\s*#if.*?(?&lt;!\\)\n">
   261        <token type="CommentPreproc"/>
   262        <push/>
   263      </rule>
   264      <rule pattern="^\s*#el(?:se|if).*\n">
   265        <token type="CommentPreproc"/>
   266        <pop depth="1"/>
   267      </rule>
   268      <rule pattern="^\s*#endif.*?(?&lt;!\\)\n">
   269        <token type="CommentPreproc"/>
   270        <pop depth="1"/>
   271      </rule>
   272      <rule pattern=".*?\n">
   273        <token type="Comment"/>
   274      </rule>
   275    </state>
   276    <state name="root">
   277      <rule>
   278        <include state="whitespace"/>
   279      </rule>
   280      <rule pattern="((?:[\w*\s])+?(?:\s|[*]))([a-zA-Z_]\w*)(\s*\([^;]*?\))([^;{]*)(\{)">
   281        <bygroups>
   282          <usingself state="root"/>
   283          <token type="NameFunction"/>
   284          <usingself state="root"/>
   285          <usingself state="root"/>
   286          <token type="Punctuation"/>
   287        </bygroups>
   288        <push state="function"/>
   289      </rule>
   290      <rule pattern="((?:[\w*\s])+?(?:\s|[*]))([a-zA-Z_]\w*)(\s*\([^;]*?\))([^;]*)(;)">
   291        <bygroups>
   292          <usingself state="root"/>
   293          <token type="NameFunction"/>
   294          <usingself state="root"/>
   295          <usingself state="root"/>
   296          <token type="Punctuation"/>
   297        </bygroups>
   298      </rule>
   299      <rule>
   300        <push state="statement"/>
   301      </rule>
   302      <rule pattern="__(multiple_inheritance|virtual_inheritance|single_inheritance|interface|uuidof|super|event)\b">
   303        <token type="KeywordReserved"/>
   304      </rule>
   305      <rule pattern="__(offload|blockingoffload|outer)\b">
   306        <token type="KeywordPseudo"/>
   307      </rule>
   308    </state>
   309    <state name="statement">
   310      <rule>
   311        <include state="whitespace"/>
   312      </rule>
   313      <rule>
   314        <include state="statements"/>
   315      </rule>
   316      <rule pattern="[{]">
   317        <token type="Punctuation"/>
   318        <push state="root"/>
   319      </rule>
   320      <rule pattern="[;}]">
   321        <token type="Punctuation"/>
   322        <pop depth="1"/>
   323      </rule>
   324    </state>
   325  </rules>
   326</lexer>

View as plain text