cpp top-level property

Language cpp
final

Implementation

final cpp = Language(
  id: "cpp",
  refs: {
    '~contains~0~contains~6': Mode(
      className: "string",
      variants: [
        ModeReference('~contains~0~contains~1~contains~1~variants~0'),
        ModeReference('~contains~0~contains~1~contains~1~variants~1'),
        ModeReference('~contains~0~contains~1~contains~1~variants~2'),
      ],
    ),
    '~contains~0~contains~5': Mode(
      className: "number",
      variants: [
        Mode(
          begin: "\\b(0b[01']+)",
        ),
        Mode(
          begin:
              "(-?)\\b([\\d']+(\\.[\\d']*)?|\\.[\\d']+)((ll|LL|l|L)(u|U)?|(u|U)(ll|LL|l|L)?|f|F|b|B)",
        ),
        Mode(
          begin:
              "(-?)(\\b0[xX][a-fA-F0-9']+|(\\b[\\d']+(\\.[\\d']*)?|\\.[\\d']+)([eE][-+]?[\\d']+)?)",
        ),
      ],
      relevance: 0,
    ),
    '~contains~0~contains~2': Mode(
      className: "type",
      begin: "\\b[a-z\\d_]*_t\\b",
    ),
    '~contains~0~contains~1~contains~3': Mode(
      scope: "comment",
      begin: "//",
      end: "\$",
      contains: [
        Mode(
          begin: "\\\\\\n",
        ),
        Mode(
          scope: "doctag",
          begin: "[ ]*(?=(TODO|FIXME|NOTE|BUG|OPTIMIZE|HACK|XXX):)",
          end: "(TODO|FIXME|NOTE|BUG|OPTIMIZE|HACK|XXX):",
          excludeBegin: true,
          relevance: 0,
        ),
        Mode(
          begin:
              "[ ]+((?:I|a|is|so|us|to|at|if|in|it|on|[A-Za-z]+['](d|ve|re|ll|t|s|n)|[A-Za-z]+[-][a-z]+|[A-Za-z][a-z]{2,})[.]?[:]?([.][ ]|[ ])){3}",
        ),
      ],
    ),
    '~contains~0~contains~1~contains~1~variants~2': Mode(
      begin: "(?:u8?|U|L)?R\"([^()\\\\ ]{0,16})\\(",
      end: "\\)([^()\\\\ ]{0,16})\"",
      onBegin: endSameAsBeginOnBegin,
      onEnd: endSameAsBeginOnEnd,
    ),
    '~contains~0~contains~1~contains~1~variants~1': Mode(
      begin:
          "(u8?|U|L)?'(\\\\(x[0-9A-Fa-f]{2}|u[0-9A-Fa-f]{4,8}|[0-7]{3}|\\S)|.)",
      end: "'",
      illegal: ".",
    ),
    '~contains~0~contains~1~contains~1~variants~0': Mode(
      begin: "(u8?|U|L)?\"",
      end: "\"",
      illegal: "\\n",
      contains: [
        BACKSLASH_ESCAPE,
      ],
    ),
    '~contains~0~contains~1': Mode(
      className: "meta",
      begin: "#\\s*[a-z]+\\b",
      end: "\$",
      keywords: {
        "keyword":
            "if else elif endif define undef warning error line pragma _Pragma ifdef ifndef include"
      },
      contains: [
        Mode(
          begin: "\\\\\\n",
          relevance: 0,
        ),
        Mode(
          className: "string",
          variants: [
            ModeReference('~contains~0~contains~1~contains~1~variants~0'),
            ModeReference('~contains~0~contains~1~contains~1~variants~1'),
            ModeReference('~contains~0~contains~1~contains~1~variants~2'),
          ],
        ),
        Mode(
          className: "string",
          begin: "<.*?>",
        ),
        ModeReference('~contains~0~contains~1~contains~3'),
        C_BLOCK_COMMENT_MODE,
      ],
    ),
    '~contains~0~contains~0': Mode(
      className: "function.dispatch",
      relevance: 0,
      keywords: {
        "_hint": [
          "abort",
          "abs",
          "acos",
          "apply",
          "as_const",
          "asin",
          "atan",
          "atan2",
          "calloc",
          "ceil",
          "cerr",
          "cin",
          "clog",
          "cos",
          "cosh",
          "cout",
          "declval",
          "endl",
          "exchange",
          "exit",
          "exp",
          "fabs",
          "floor",
          "fmod",
          "forward",
          "fprintf",
          "fputs",
          "free",
          "frexp",
          "fscanf",
          "future",
          "invoke",
          "isalnum",
          "isalpha",
          "iscntrl",
          "isdigit",
          "isgraph",
          "islower",
          "isprint",
          "ispunct",
          "isspace",
          "isupper",
          "isxdigit",
          "labs",
          "launder",
          "ldexp",
          "log",
          "log10",
          "make_pair",
          "make_shared",
          "make_shared_for_overwrite",
          "make_tuple",
          "make_unique",
          "malloc",
          "memchr",
          "memcmp",
          "memcpy",
          "memset",
          "modf",
          "move",
          "pow",
          "printf",
          "putchar",
          "puts",
          "realloc",
          "scanf",
          "sin",
          "sinh",
          "snprintf",
          "sprintf",
          "sqrt",
          "sscanf",
          "std",
          "stderr",
          "stdin",
          "stdout",
          "strcat",
          "strchr",
          "strcmp",
          "strcpy",
          "strcspn",
          "strlen",
          "strncat",
          "strncmp",
          "strncpy",
          "strpbrk",
          "strrchr",
          "strspn",
          "strstr",
          "swap",
          "tan",
          "tanh",
          "terminate",
          "to_underlying",
          "tolower",
          "toupper",
          "vfprintf",
          "visit",
          "vprintf",
          "vsprintf"
        ]
      },
      begin:
          "\\b(?!decltype)(?!if)(?!for)(?!switch)(?!while)[a-zA-Z]\\w*(?=(<[^<>]+>|)\\s*\\()",
    ),
  },
  name: "C++",
  aliases: ["cc", "c++", "h++", "hpp", "hh", "hxx", "cxx"],
  keywords: {
    "type": [
      "bool",
      "char",
      "char16_t",
      "char32_t",
      "char8_t",
      "double",
      "float",
      "int",
      "long",
      "short",
      "void",
      "wchar_t",
      "unsigned",
      "signed",
      "const",
      "static"
    ],
    "keyword": [
      "alignas",
      "alignof",
      "and",
      "and_eq",
      "asm",
      "atomic_cancel",
      "atomic_commit",
      "atomic_noexcept",
      "auto",
      "bitand",
      "bitor",
      "break",
      "case",
      "catch",
      "class",
      "co_await",
      "co_return",
      "co_yield",
      "compl",
      "concept",
      "const_cast|10",
      "consteval",
      "constexpr",
      "constinit",
      "continue",
      "decltype",
      "default",
      "delete",
      "do",
      "dynamic_cast|10",
      "else",
      "enum",
      "explicit",
      "export",
      "extern",
      "false",
      "final",
      "for",
      "friend",
      "goto",
      "if",
      "import",
      "inline",
      "module",
      "mutable",
      "namespace",
      "new",
      "noexcept",
      "not",
      "not_eq",
      "nullptr",
      "operator",
      "or",
      "or_eq",
      "override",
      "private",
      "protected",
      "public",
      "reflexpr",
      "register",
      "reinterpret_cast|10",
      "requires",
      "return",
      "sizeof",
      "static_assert",
      "static_cast|10",
      "struct",
      "switch",
      "synchronized",
      "template",
      "this",
      "thread_local",
      "throw",
      "transaction_safe",
      "transaction_safe_dynamic",
      "true",
      "try",
      "typedef",
      "typeid",
      "typename",
      "union",
      "using",
      "virtual",
      "volatile",
      "while",
      "xor",
      "xor_eq"
    ],
    "literal": ["NULL", "false", "nullopt", "nullptr", "true"],
    "built_in": ["_Pragma"],
    "_type_hints": [
      "any",
      "auto_ptr",
      "barrier",
      "binary_semaphore",
      "bitset",
      "complex",
      "condition_variable",
      "condition_variable_any",
      "counting_semaphore",
      "deque",
      "false_type",
      "future",
      "imaginary",
      "initializer_list",
      "istringstream",
      "jthread",
      "latch",
      "lock_guard",
      "multimap",
      "multiset",
      "mutex",
      "optional",
      "ostringstream",
      "packaged_task",
      "pair",
      "promise",
      "priority_queue",
      "queue",
      "recursive_mutex",
      "recursive_timed_mutex",
      "scoped_lock",
      "set",
      "shared_future",
      "shared_lock",
      "shared_mutex",
      "shared_timed_mutex",
      "shared_ptr",
      "stack",
      "string_view",
      "stringstream",
      "timed_mutex",
      "thread",
      "true_type",
      "tuple",
      "unique_lock",
      "unique_ptr",
      "unordered_map",
      "unordered_multimap",
      "unordered_multiset",
      "unordered_set",
      "variant",
      "vector",
      "weak_ptr",
      "wstring",
      "wstring_view"
    ]
  },
  illegal: "</",
  classNameAliases: {"function.dispatch": "built_in"},
  contains: [
    Mode(
      variants: [
        Mode(
          begin: "=",
          end: ";",
        ),
        Mode(
          begin: "\\(",
          end: "\\)",
        ),
        Mode(
          beginKeywords: "new throw return else",
          end: ";",
        ),
      ],
      keywords: {
        "type": [
          "bool",
          "char",
          "char16_t",
          "char32_t",
          "char8_t",
          "double",
          "float",
          "int",
          "long",
          "short",
          "void",
          "wchar_t",
          "unsigned",
          "signed",
          "const",
          "static"
        ],
        "keyword": [
          "alignas",
          "alignof",
          "and",
          "and_eq",
          "asm",
          "atomic_cancel",
          "atomic_commit",
          "atomic_noexcept",
          "auto",
          "bitand",
          "bitor",
          "break",
          "case",
          "catch",
          "class",
          "co_await",
          "co_return",
          "co_yield",
          "compl",
          "concept",
          "const_cast|10",
          "consteval",
          "constexpr",
          "constinit",
          "continue",
          "decltype",
          "default",
          "delete",
          "do",
          "dynamic_cast|10",
          "else",
          "enum",
          "explicit",
          "export",
          "extern",
          "false",
          "final",
          "for",
          "friend",
          "goto",
          "if",
          "import",
          "inline",
          "module",
          "mutable",
          "namespace",
          "new",
          "noexcept",
          "not",
          "not_eq",
          "nullptr",
          "operator",
          "or",
          "or_eq",
          "override",
          "private",
          "protected",
          "public",
          "reflexpr",
          "register",
          "reinterpret_cast|10",
          "requires",
          "return",
          "sizeof",
          "static_assert",
          "static_cast|10",
          "struct",
          "switch",
          "synchronized",
          "template",
          "this",
          "thread_local",
          "throw",
          "transaction_safe",
          "transaction_safe_dynamic",
          "true",
          "try",
          "typedef",
          "typeid",
          "typename",
          "union",
          "using",
          "virtual",
          "volatile",
          "while",
          "xor",
          "xor_eq"
        ],
        "literal": ["NULL", "false", "nullopt", "nullptr", "true"],
        "built_in": ["_Pragma"],
        "_type_hints": [
          "any",
          "auto_ptr",
          "barrier",
          "binary_semaphore",
          "bitset",
          "complex",
          "condition_variable",
          "condition_variable_any",
          "counting_semaphore",
          "deque",
          "false_type",
          "future",
          "imaginary",
          "initializer_list",
          "istringstream",
          "jthread",
          "latch",
          "lock_guard",
          "multimap",
          "multiset",
          "mutex",
          "optional",
          "ostringstream",
          "packaged_task",
          "pair",
          "promise",
          "priority_queue",
          "queue",
          "recursive_mutex",
          "recursive_timed_mutex",
          "scoped_lock",
          "set",
          "shared_future",
          "shared_lock",
          "shared_mutex",
          "shared_timed_mutex",
          "shared_ptr",
          "stack",
          "string_view",
          "stringstream",
          "timed_mutex",
          "thread",
          "true_type",
          "tuple",
          "unique_lock",
          "unique_ptr",
          "unordered_map",
          "unordered_multimap",
          "unordered_multiset",
          "unordered_set",
          "variant",
          "vector",
          "weak_ptr",
          "wstring",
          "wstring_view"
        ]
      },
      contains: [
        ModeReference('~contains~0~contains~0'),
        ModeReference('~contains~0~contains~1'),
        ModeReference('~contains~0~contains~2'),
        ModeReference('~contains~0~contains~1~contains~3'),
        C_BLOCK_COMMENT_MODE,
        ModeReference('~contains~0~contains~5'),
        ModeReference('~contains~0~contains~6'),
        Mode(
          begin: "\\(",
          end: "\\)",
          keywords: {
            "type": [
              "bool",
              "char",
              "char16_t",
              "char32_t",
              "char8_t",
              "double",
              "float",
              "int",
              "long",
              "short",
              "void",
              "wchar_t",
              "unsigned",
              "signed",
              "const",
              "static"
            ],
            "keyword": [
              "alignas",
              "alignof",
              "and",
              "and_eq",
              "asm",
              "atomic_cancel",
              "atomic_commit",
              "atomic_noexcept",
              "auto",
              "bitand",
              "bitor",
              "break",
              "case",
              "catch",
              "class",
              "co_await",
              "co_return",
              "co_yield",
              "compl",
              "concept",
              "const_cast|10",
              "consteval",
              "constexpr",
              "constinit",
              "continue",
              "decltype",
              "default",
              "delete",
              "do",
              "dynamic_cast|10",
              "else",
              "enum",
              "explicit",
              "export",
              "extern",
              "false",
              "final",
              "for",
              "friend",
              "goto",
              "if",
              "import",
              "inline",
              "module",
              "mutable",
              "namespace",
              "new",
              "noexcept",
              "not",
              "not_eq",
              "nullptr",
              "operator",
              "or",
              "or_eq",
              "override",
              "private",
              "protected",
              "public",
              "reflexpr",
              "register",
              "reinterpret_cast|10",
              "requires",
              "return",
              "sizeof",
              "static_assert",
              "static_cast|10",
              "struct",
              "switch",
              "synchronized",
              "template",
              "this",
              "thread_local",
              "throw",
              "transaction_safe",
              "transaction_safe_dynamic",
              "true",
              "try",
              "typedef",
              "typeid",
              "typename",
              "union",
              "using",
              "virtual",
              "volatile",
              "while",
              "xor",
              "xor_eq"
            ],
            "literal": ["NULL", "false", "nullopt", "nullptr", "true"],
            "built_in": ["_Pragma"],
            "_type_hints": [
              "any",
              "auto_ptr",
              "barrier",
              "binary_semaphore",
              "bitset",
              "complex",
              "condition_variable",
              "condition_variable_any",
              "counting_semaphore",
              "deque",
              "false_type",
              "future",
              "imaginary",
              "initializer_list",
              "istringstream",
              "jthread",
              "latch",
              "lock_guard",
              "multimap",
              "multiset",
              "mutex",
              "optional",
              "ostringstream",
              "packaged_task",
              "pair",
              "promise",
              "priority_queue",
              "queue",
              "recursive_mutex",
              "recursive_timed_mutex",
              "scoped_lock",
              "set",
              "shared_future",
              "shared_lock",
              "shared_mutex",
              "shared_timed_mutex",
              "shared_ptr",
              "stack",
              "string_view",
              "stringstream",
              "timed_mutex",
              "thread",
              "true_type",
              "tuple",
              "unique_lock",
              "unique_ptr",
              "unordered_map",
              "unordered_multimap",
              "unordered_multiset",
              "unordered_set",
              "variant",
              "vector",
              "weak_ptr",
              "wstring",
              "wstring_view"
            ]
          },
          contains: [
            ModeReference('~contains~0~contains~0'),
            ModeReference('~contains~0~contains~1'),
            ModeReference('~contains~0~contains~2'),
            ModeReference('~contains~0~contains~1~contains~3'),
            C_BLOCK_COMMENT_MODE,
            ModeReference('~contains~0~contains~5'),
            ModeReference('~contains~0~contains~6'),
            ModeSelfReference(),
          ],
          relevance: 0,
        ),
      ],
      relevance: 0,
    ),
    Mode(
      className: "function",
      begin:
          "((?!struct)(decltype\\(auto\\)|(?:[a-zA-Z_]\\w*::)?[a-zA-Z_]\\w*(?:<[^<>]+>)?)[\\*&\\s]+)+(?:[a-zA-Z_]\\w*::)?[a-zA-Z]\\w*\\s*\\(",
      returnBegin: true,
      end: "[{;=]",
      excludeEnd: true,
      keywords: {
        "type": [
          "bool",
          "char",
          "char16_t",
          "char32_t",
          "char8_t",
          "double",
          "float",
          "int",
          "long",
          "short",
          "void",
          "wchar_t",
          "unsigned",
          "signed",
          "const",
          "static"
        ],
        "keyword": [
          "alignas",
          "alignof",
          "and",
          "and_eq",
          "asm",
          "atomic_cancel",
          "atomic_commit",
          "atomic_noexcept",
          "auto",
          "bitand",
          "bitor",
          "break",
          "case",
          "catch",
          "class",
          "co_await",
          "co_return",
          "co_yield",
          "compl",
          "concept",
          "const_cast|10",
          "consteval",
          "constexpr",
          "constinit",
          "continue",
          "decltype",
          "default",
          "delete",
          "do",
          "dynamic_cast|10",
          "else",
          "enum",
          "explicit",
          "export",
          "extern",
          "false",
          "final",
          "for",
          "friend",
          "goto",
          "if",
          "import",
          "inline",
          "module",
          "mutable",
          "namespace",
          "new",
          "noexcept",
          "not",
          "not_eq",
          "nullptr",
          "operator",
          "or",
          "or_eq",
          "override",
          "private",
          "protected",
          "public",
          "reflexpr",
          "register",
          "reinterpret_cast|10",
          "requires",
          "return",
          "sizeof",
          "static_assert",
          "static_cast|10",
          "struct",
          "switch",
          "synchronized",
          "template",
          "this",
          "thread_local",
          "throw",
          "transaction_safe",
          "transaction_safe_dynamic",
          "true",
          "try",
          "typedef",
          "typeid",
          "typename",
          "union",
          "using",
          "virtual",
          "volatile",
          "while",
          "xor",
          "xor_eq"
        ],
        "literal": ["NULL", "false", "nullopt", "nullptr", "true"],
        "built_in": ["_Pragma"],
        "_type_hints": [
          "any",
          "auto_ptr",
          "barrier",
          "binary_semaphore",
          "bitset",
          "complex",
          "condition_variable",
          "condition_variable_any",
          "counting_semaphore",
          "deque",
          "false_type",
          "future",
          "imaginary",
          "initializer_list",
          "istringstream",
          "jthread",
          "latch",
          "lock_guard",
          "multimap",
          "multiset",
          "mutex",
          "optional",
          "ostringstream",
          "packaged_task",
          "pair",
          "promise",
          "priority_queue",
          "queue",
          "recursive_mutex",
          "recursive_timed_mutex",
          "scoped_lock",
          "set",
          "shared_future",
          "shared_lock",
          "shared_mutex",
          "shared_timed_mutex",
          "shared_ptr",
          "stack",
          "string_view",
          "stringstream",
          "timed_mutex",
          "thread",
          "true_type",
          "tuple",
          "unique_lock",
          "unique_ptr",
          "unordered_map",
          "unordered_multimap",
          "unordered_multiset",
          "unordered_set",
          "variant",
          "vector",
          "weak_ptr",
          "wstring",
          "wstring_view"
        ]
      },
      illegal: "[^\\w\\s\\*&:<>.]",
      contains: [
        Mode(
          begin: "decltype\\(auto\\)",
          keywords: {
            "type": [
              "bool",
              "char",
              "char16_t",
              "char32_t",
              "char8_t",
              "double",
              "float",
              "int",
              "long",
              "short",
              "void",
              "wchar_t",
              "unsigned",
              "signed",
              "const",
              "static"
            ],
            "keyword": [
              "alignas",
              "alignof",
              "and",
              "and_eq",
              "asm",
              "atomic_cancel",
              "atomic_commit",
              "atomic_noexcept",
              "auto",
              "bitand",
              "bitor",
              "break",
              "case",
              "catch",
              "class",
              "co_await",
              "co_return",
              "co_yield",
              "compl",
              "concept",
              "const_cast|10",
              "consteval",
              "constexpr",
              "constinit",
              "continue",
              "decltype",
              "default",
              "delete",
              "do",
              "dynamic_cast|10",
              "else",
              "enum",
              "explicit",
              "export",
              "extern",
              "false",
              "final",
              "for",
              "friend",
              "goto",
              "if",
              "import",
              "inline",
              "module",
              "mutable",
              "namespace",
              "new",
              "noexcept",
              "not",
              "not_eq",
              "nullptr",
              "operator",
              "or",
              "or_eq",
              "override",
              "private",
              "protected",
              "public",
              "reflexpr",
              "register",
              "reinterpret_cast|10",
              "requires",
              "return",
              "sizeof",
              "static_assert",
              "static_cast|10",
              "struct",
              "switch",
              "synchronized",
              "template",
              "this",
              "thread_local",
              "throw",
              "transaction_safe",
              "transaction_safe_dynamic",
              "true",
              "try",
              "typedef",
              "typeid",
              "typename",
              "union",
              "using",
              "virtual",
              "volatile",
              "while",
              "xor",
              "xor_eq"
            ],
            "literal": ["NULL", "false", "nullopt", "nullptr", "true"],
            "built_in": ["_Pragma"],
            "_type_hints": [
              "any",
              "auto_ptr",
              "barrier",
              "binary_semaphore",
              "bitset",
              "complex",
              "condition_variable",
              "condition_variable_any",
              "counting_semaphore",
              "deque",
              "false_type",
              "future",
              "imaginary",
              "initializer_list",
              "istringstream",
              "jthread",
              "latch",
              "lock_guard",
              "multimap",
              "multiset",
              "mutex",
              "optional",
              "ostringstream",
              "packaged_task",
              "pair",
              "promise",
              "priority_queue",
              "queue",
              "recursive_mutex",
              "recursive_timed_mutex",
              "scoped_lock",
              "set",
              "shared_future",
              "shared_lock",
              "shared_mutex",
              "shared_timed_mutex",
              "shared_ptr",
              "stack",
              "string_view",
              "stringstream",
              "timed_mutex",
              "thread",
              "true_type",
              "tuple",
              "unique_lock",
              "unique_ptr",
              "unordered_map",
              "unordered_multimap",
              "unordered_multiset",
              "unordered_set",
              "variant",
              "vector",
              "weak_ptr",
              "wstring",
              "wstring_view"
            ]
          },
          relevance: 0,
        ),
        Mode(
          begin: "(?:[a-zA-Z_]\\w*::)?[a-zA-Z]\\w*\\s*\\(",
          returnBegin: true,
          contains: [
            Mode(
              className: "title",
              begin: "(?:[a-zA-Z_]\\w*::)?[a-zA-Z]\\w*",
              relevance: 0,
            ),
          ],
          relevance: 0,
        ),
        Mode(
          begin: "::",
          relevance: 0,
        ),
        Mode(
          begin: ":",
          endsWithParent: true,
          contains: [
            ModeReference('~contains~0~contains~6'),
            ModeReference('~contains~0~contains~5'),
          ],
        ),
        Mode(
          relevance: 0,
          match: ",",
        ),
        Mode(
          className: "params",
          begin: "\\(",
          end: "\\)",
          keywords: {
            "type": [
              "bool",
              "char",
              "char16_t",
              "char32_t",
              "char8_t",
              "double",
              "float",
              "int",
              "long",
              "short",
              "void",
              "wchar_t",
              "unsigned",
              "signed",
              "const",
              "static"
            ],
            "keyword": [
              "alignas",
              "alignof",
              "and",
              "and_eq",
              "asm",
              "atomic_cancel",
              "atomic_commit",
              "atomic_noexcept",
              "auto",
              "bitand",
              "bitor",
              "break",
              "case",
              "catch",
              "class",
              "co_await",
              "co_return",
              "co_yield",
              "compl",
              "concept",
              "const_cast|10",
              "consteval",
              "constexpr",
              "constinit",
              "continue",
              "decltype",
              "default",
              "delete",
              "do",
              "dynamic_cast|10",
              "else",
              "enum",
              "explicit",
              "export",
              "extern",
              "false",
              "final",
              "for",
              "friend",
              "goto",
              "if",
              "import",
              "inline",
              "module",
              "mutable",
              "namespace",
              "new",
              "noexcept",
              "not",
              "not_eq",
              "nullptr",
              "operator",
              "or",
              "or_eq",
              "override",
              "private",
              "protected",
              "public",
              "reflexpr",
              "register",
              "reinterpret_cast|10",
              "requires",
              "return",
              "sizeof",
              "static_assert",
              "static_cast|10",
              "struct",
              "switch",
              "synchronized",
              "template",
              "this",
              "thread_local",
              "throw",
              "transaction_safe",
              "transaction_safe_dynamic",
              "true",
              "try",
              "typedef",
              "typeid",
              "typename",
              "union",
              "using",
              "virtual",
              "volatile",
              "while",
              "xor",
              "xor_eq"
            ],
            "literal": ["NULL", "false", "nullopt", "nullptr", "true"],
            "built_in": ["_Pragma"],
            "_type_hints": [
              "any",
              "auto_ptr",
              "barrier",
              "binary_semaphore",
              "bitset",
              "complex",
              "condition_variable",
              "condition_variable_any",
              "counting_semaphore",
              "deque",
              "false_type",
              "future",
              "imaginary",
              "initializer_list",
              "istringstream",
              "jthread",
              "latch",
              "lock_guard",
              "multimap",
              "multiset",
              "mutex",
              "optional",
              "ostringstream",
              "packaged_task",
              "pair",
              "promise",
              "priority_queue",
              "queue",
              "recursive_mutex",
              "recursive_timed_mutex",
              "scoped_lock",
              "set",
              "shared_future",
              "shared_lock",
              "shared_mutex",
              "shared_timed_mutex",
              "shared_ptr",
              "stack",
              "string_view",
              "stringstream",
              "timed_mutex",
              "thread",
              "true_type",
              "tuple",
              "unique_lock",
              "unique_ptr",
              "unordered_map",
              "unordered_multimap",
              "unordered_multiset",
              "unordered_set",
              "variant",
              "vector",
              "weak_ptr",
              "wstring",
              "wstring_view"
            ]
          },
          relevance: 0,
          contains: [
            ModeReference('~contains~0~contains~1~contains~3'),
            C_BLOCK_COMMENT_MODE,
            ModeReference('~contains~0~contains~6'),
            ModeReference('~contains~0~contains~5'),
            ModeReference('~contains~0~contains~2'),
            Mode(
              begin: "\\(",
              end: "\\)",
              keywords: {
                "type": [
                  "bool",
                  "char",
                  "char16_t",
                  "char32_t",
                  "char8_t",
                  "double",
                  "float",
                  "int",
                  "long",
                  "short",
                  "void",
                  "wchar_t",
                  "unsigned",
                  "signed",
                  "const",
                  "static"
                ],
                "keyword": [
                  "alignas",
                  "alignof",
                  "and",
                  "and_eq",
                  "asm",
                  "atomic_cancel",
                  "atomic_commit",
                  "atomic_noexcept",
                  "auto",
                  "bitand",
                  "bitor",
                  "break",
                  "case",
                  "catch",
                  "class",
                  "co_await",
                  "co_return",
                  "co_yield",
                  "compl",
                  "concept",
                  "const_cast|10",
                  "consteval",
                  "constexpr",
                  "constinit",
                  "continue",
                  "decltype",
                  "default",
                  "delete",
                  "do",
                  "dynamic_cast|10",
                  "else",
                  "enum",
                  "explicit",
                  "export",
                  "extern",
                  "false",
                  "final",
                  "for",
                  "friend",
                  "goto",
                  "if",
                  "import",
                  "inline",
                  "module",
                  "mutable",
                  "namespace",
                  "new",
                  "noexcept",
                  "not",
                  "not_eq",
                  "nullptr",
                  "operator",
                  "or",
                  "or_eq",
                  "override",
                  "private",
                  "protected",
                  "public",
                  "reflexpr",
                  "register",
                  "reinterpret_cast|10",
                  "requires",
                  "return",
                  "sizeof",
                  "static_assert",
                  "static_cast|10",
                  "struct",
                  "switch",
                  "synchronized",
                  "template",
                  "this",
                  "thread_local",
                  "throw",
                  "transaction_safe",
                  "transaction_safe_dynamic",
                  "true",
                  "try",
                  "typedef",
                  "typeid",
                  "typename",
                  "union",
                  "using",
                  "virtual",
                  "volatile",
                  "while",
                  "xor",
                  "xor_eq"
                ],
                "literal": ["NULL", "false", "nullopt", "nullptr", "true"],
                "built_in": ["_Pragma"],
                "_type_hints": [
                  "any",
                  "auto_ptr",
                  "barrier",
                  "binary_semaphore",
                  "bitset",
                  "complex",
                  "condition_variable",
                  "condition_variable_any",
                  "counting_semaphore",
                  "deque",
                  "false_type",
                  "future",
                  "imaginary",
                  "initializer_list",
                  "istringstream",
                  "jthread",
                  "latch",
                  "lock_guard",
                  "multimap",
                  "multiset",
                  "mutex",
                  "optional",
                  "ostringstream",
                  "packaged_task",
                  "pair",
                  "promise",
                  "priority_queue",
                  "queue",
                  "recursive_mutex",
                  "recursive_timed_mutex",
                  "scoped_lock",
                  "set",
                  "shared_future",
                  "shared_lock",
                  "shared_mutex",
                  "shared_timed_mutex",
                  "shared_ptr",
                  "stack",
                  "string_view",
                  "stringstream",
                  "timed_mutex",
                  "thread",
                  "true_type",
                  "tuple",
                  "unique_lock",
                  "unique_ptr",
                  "unordered_map",
                  "unordered_multimap",
                  "unordered_multiset",
                  "unordered_set",
                  "variant",
                  "vector",
                  "weak_ptr",
                  "wstring",
                  "wstring_view"
                ]
              },
              relevance: 0,
              contains: [
                ModeSelfReference(),
                ModeReference('~contains~0~contains~1~contains~3'),
                C_BLOCK_COMMENT_MODE,
                ModeReference('~contains~0~contains~6'),
                ModeReference('~contains~0~contains~5'),
                ModeReference('~contains~0~contains~2'),
              ],
            ),
          ],
        ),
        ModeReference('~contains~0~contains~2'),
        ModeReference('~contains~0~contains~1~contains~3'),
        C_BLOCK_COMMENT_MODE,
        ModeReference('~contains~0~contains~1'),
      ],
    ),
    ModeReference('~contains~0~contains~0'),
    ModeReference('~contains~0~contains~0'),
    ModeReference('~contains~0~contains~1'),
    ModeReference('~contains~0~contains~2'),
    ModeReference('~contains~0~contains~1~contains~3'),
    C_BLOCK_COMMENT_MODE,
    ModeReference('~contains~0~contains~5'),
    ModeReference('~contains~0~contains~6'),
    ModeReference('~contains~0~contains~1'),
    Mode(
      begin:
          "\\b(deque|list|queue|priority_queue|pair|stack|vector|map|set|bitset|multiset|multimap|unordered_map|unordered_set|unordered_multiset|unordered_multimap|array|tuple|optional|variant|function)\\s*<(?!<)",
      end: ">",
      keywords: {
        "type": [
          "bool",
          "char",
          "char16_t",
          "char32_t",
          "char8_t",
          "double",
          "float",
          "int",
          "long",
          "short",
          "void",
          "wchar_t",
          "unsigned",
          "signed",
          "const",
          "static"
        ],
        "keyword": [
          "alignas",
          "alignof",
          "and",
          "and_eq",
          "asm",
          "atomic_cancel",
          "atomic_commit",
          "atomic_noexcept",
          "auto",
          "bitand",
          "bitor",
          "break",
          "case",
          "catch",
          "class",
          "co_await",
          "co_return",
          "co_yield",
          "compl",
          "concept",
          "const_cast|10",
          "consteval",
          "constexpr",
          "constinit",
          "continue",
          "decltype",
          "default",
          "delete",
          "do",
          "dynamic_cast|10",
          "else",
          "enum",
          "explicit",
          "export",
          "extern",
          "false",
          "final",
          "for",
          "friend",
          "goto",
          "if",
          "import",
          "inline",
          "module",
          "mutable",
          "namespace",
          "new",
          "noexcept",
          "not",
          "not_eq",
          "nullptr",
          "operator",
          "or",
          "or_eq",
          "override",
          "private",
          "protected",
          "public",
          "reflexpr",
          "register",
          "reinterpret_cast|10",
          "requires",
          "return",
          "sizeof",
          "static_assert",
          "static_cast|10",
          "struct",
          "switch",
          "synchronized",
          "template",
          "this",
          "thread_local",
          "throw",
          "transaction_safe",
          "transaction_safe_dynamic",
          "true",
          "try",
          "typedef",
          "typeid",
          "typename",
          "union",
          "using",
          "virtual",
          "volatile",
          "while",
          "xor",
          "xor_eq"
        ],
        "literal": ["NULL", "false", "nullopt", "nullptr", "true"],
        "built_in": ["_Pragma"],
        "_type_hints": [
          "any",
          "auto_ptr",
          "barrier",
          "binary_semaphore",
          "bitset",
          "complex",
          "condition_variable",
          "condition_variable_any",
          "counting_semaphore",
          "deque",
          "false_type",
          "future",
          "imaginary",
          "initializer_list",
          "istringstream",
          "jthread",
          "latch",
          "lock_guard",
          "multimap",
          "multiset",
          "mutex",
          "optional",
          "ostringstream",
          "packaged_task",
          "pair",
          "promise",
          "priority_queue",
          "queue",
          "recursive_mutex",
          "recursive_timed_mutex",
          "scoped_lock",
          "set",
          "shared_future",
          "shared_lock",
          "shared_mutex",
          "shared_timed_mutex",
          "shared_ptr",
          "stack",
          "string_view",
          "stringstream",
          "timed_mutex",
          "thread",
          "true_type",
          "tuple",
          "unique_lock",
          "unique_ptr",
          "unordered_map",
          "unordered_multimap",
          "unordered_multiset",
          "unordered_set",
          "variant",
          "vector",
          "weak_ptr",
          "wstring",
          "wstring_view"
        ]
      },
      contains: [
        ModeSelfReference(),
        ModeReference('~contains~0~contains~2'),
      ],
    ),
    Mode(
      begin: "[a-zA-Z]\\w*::",
      keywords: {
        "type": [
          "bool",
          "char",
          "char16_t",
          "char32_t",
          "char8_t",
          "double",
          "float",
          "int",
          "long",
          "short",
          "void",
          "wchar_t",
          "unsigned",
          "signed",
          "const",
          "static"
        ],
        "keyword": [
          "alignas",
          "alignof",
          "and",
          "and_eq",
          "asm",
          "atomic_cancel",
          "atomic_commit",
          "atomic_noexcept",
          "auto",
          "bitand",
          "bitor",
          "break",
          "case",
          "catch",
          "class",
          "co_await",
          "co_return",
          "co_yield",
          "compl",
          "concept",
          "const_cast|10",
          "consteval",
          "constexpr",
          "constinit",
          "continue",
          "decltype",
          "default",
          "delete",
          "do",
          "dynamic_cast|10",
          "else",
          "enum",
          "explicit",
          "export",
          "extern",
          "false",
          "final",
          "for",
          "friend",
          "goto",
          "if",
          "import",
          "inline",
          "module",
          "mutable",
          "namespace",
          "new",
          "noexcept",
          "not",
          "not_eq",
          "nullptr",
          "operator",
          "or",
          "or_eq",
          "override",
          "private",
          "protected",
          "public",
          "reflexpr",
          "register",
          "reinterpret_cast|10",
          "requires",
          "return",
          "sizeof",
          "static_assert",
          "static_cast|10",
          "struct",
          "switch",
          "synchronized",
          "template",
          "this",
          "thread_local",
          "throw",
          "transaction_safe",
          "transaction_safe_dynamic",
          "true",
          "try",
          "typedef",
          "typeid",
          "typename",
          "union",
          "using",
          "virtual",
          "volatile",
          "while",
          "xor",
          "xor_eq"
        ],
        "literal": ["NULL", "false", "nullopt", "nullptr", "true"],
        "built_in": ["_Pragma"],
        "_type_hints": [
          "any",
          "auto_ptr",
          "barrier",
          "binary_semaphore",
          "bitset",
          "complex",
          "condition_variable",
          "condition_variable_any",
          "counting_semaphore",
          "deque",
          "false_type",
          "future",
          "imaginary",
          "initializer_list",
          "istringstream",
          "jthread",
          "latch",
          "lock_guard",
          "multimap",
          "multiset",
          "mutex",
          "optional",
          "ostringstream",
          "packaged_task",
          "pair",
          "promise",
          "priority_queue",
          "queue",
          "recursive_mutex",
          "recursive_timed_mutex",
          "scoped_lock",
          "set",
          "shared_future",
          "shared_lock",
          "shared_mutex",
          "shared_timed_mutex",
          "shared_ptr",
          "stack",
          "string_view",
          "stringstream",
          "timed_mutex",
          "thread",
          "true_type",
          "tuple",
          "unique_lock",
          "unique_ptr",
          "unordered_map",
          "unordered_multimap",
          "unordered_multiset",
          "unordered_set",
          "variant",
          "vector",
          "weak_ptr",
          "wstring",
          "wstring_view"
        ]
      },
    ),
    Mode(
      match: [
        "\\b(?:enum(?:\\s+(?:class|struct))?|class|struct|union)",
        "\\s+",
        "\\w+"
      ],
      className: {"1": "keyword", "3": "title.class"},
    ),
  ],
);