// This is a TextMate grammar distributed by `starry-night`. // This grammar is developed at // // and licensed `apache-2.0`. // See for more info. /** * @import {Grammar} from '@wooorm/starry-night' */ /** @type {Grammar} */ const grammar = { extensions: ['.slang'], names: ['slang'], patterns: [ {include: '#preprocessor-rule-enabled'}, {include: '#preprocessor-rule-disabled'}, {include: '#preprocessor-rule-conditional'}, {include: '#predefined_macros'}, {include: '#comments'}, {include: '#switch_statement'}, { match: '\\b(break|continue|do|else|for|goto|if|return|while|try|throw|catch|defer|discard)\\b', name: 'keyword.control.slang' }, {include: '#storage_types'}, {match: 'typedef', name: 'keyword.other.typedef.slang'}, { match: '\\b(throws|using|__generic|func|associatedtype|override|public|internal|private|import|module|implementing|__include|export|__exported|groupshared|let|var|property|extension|in|out|inout|ref|namespace|this|cbuffer|tbuffer|(dynamic_)?uniform|typealias|new|__extern_cpp|__(target|stage)_intrinsic|__intrinsic_asm|spirv_asm|(__)?(f|b)wd_diff|__dispatch_kernel|no_diff|__constref|expand|each|where|typename|constexpr|dyn|some|implicit|noncopyable)\\b', name: 'keyword.other.additional.slang' }, { match: '\\b(const|extern|register|restrict|static|volatile|inline|nointerpolation|precise|row_major|column_major|snorm|unorm|globallycoherent|layout)\\b', name: 'storage.modifier.slang' }, {match: '\\b(nullptr|none|true|false)\\b', name: 'constant.language.slang'}, {include: '#operators'}, {include: '#numbers'}, {include: '#strings'}, { begin: '((?:(?:(?>\\s+)|(\\/\\*)((?>(?:[^\\*]|(?>\\*+)[^\\/])*)((?>\\*+)\\/)))+?|(?:(?:(?:(?:\\b|(?<=\\W))|(?=\\W))|\\A)|\\Z)))((#)\\s*define\\b)\\s+((?', endCaptures: {0: {name: 'punctuation.definition.string.end.slang'}}, name: 'string.quoted.other.lt-gt.include.slang' } ] }, {include: '#pragma-mark'}, {include: '#preprocessor-version'}, { begin: '^\\s*((#)\\s*line)\\b', beginCaptures: { 1: {name: 'keyword.control.directive.line.slang'}, 2: {name: 'punctuation.definition.directive.slang'} }, end: '(?=(?://|/\\*))|(?))((?:(?:[a-zA-Z_][a-zA-Z_0-9]*)\\s*(?:(?:\\.)|(?:->)))*)\\s*([a-zA-Z_][a-zA-Z_0-9]*)(\\()', beginCaptures: { 1: {name: 'variable.object.slang'}, 2: {name: 'punctuation.separator.dot-access.slang'}, 3: {name: 'punctuation.separator.pointer-access.slang'}, 4: { patterns: [ {match: '\\.', name: 'punctuation.separator.dot-access.slang'}, {match: '->', name: 'punctuation.separator.pointer-access.slang'}, {match: '[a-zA-Z_][a-zA-Z_0-9]*', name: 'variable.object.slang'}, {match: '.+', name: 'everything.else.slang'} ] }, 5: {name: 'entity.name.function.member.slang'}, 6: { name: 'punctuation.section.arguments.begin.bracket.round.function.member.slang' } }, end: '\\)', endCaptures: { 0: { name: 'punctuation.section.arguments.end.bracket.round.function.member.slang' } }, name: 'meta.function-call.member.slang', patterns: [{include: '#function-call-innards'}] }, access_qualifier: { captures: { 1: {name: 'punctuation.separator.delimiter.colon.slang'}, 2: {name: 'keyword.other.additional.slang'}, 3: {patterns: [{include: '#shader_stages'}]}, 5: {patterns: [{include: '#shader_stages'}]} }, match: '(?x)(:)\\s*\\b(read|write)\\b \\((([A-z]+)(,\\s*([A-z]+)\\s*)*)?(\\))', name: 'meta.variable.qualifer.access_qualifier' }, backslash_escapes: { match: '(?x)\\\\ (\n\\\\\t\t\t |\n[abefnprtv\'"?] |\n[0-3][0-7]{,2}\t |\n[4-7]\\d?\t\t|\nx[a-fA-F0-9]{,2} |\nu[a-fA-F0-9]{,4} |\nU[a-fA-F0-9]{,8} )', name: 'constant.character.escape.slang' }, block: { patterns: [ { begin: '{', beginCaptures: { 0: {name: 'punctuation.section.block.begin.bracket.curly.slang'} }, end: '}|(?=\\s*#\\s*(?:elif|else|endif)\\b)', endCaptures: { 0: {name: 'punctuation.section.block.end.bracket.curly.slang'} }, name: 'meta.block.slang', patterns: [ {include: '#block_innards'}, { begin: '(?x) (\\b([a-zA-Z_][a-zA-Z_0-9]*)\\b)\\s*(?=:\\s*((read|write).*))', beginCaptures: { 1: {name: 'variable.other.slang'}, 3: {patterns: [{include: '#access_qualifier'}]} }, end: ';', endCaptures: {0: {name: 'punctuation.semicolon.slang'}}, name: 'meta.variable.qualifer', patterns: [{include: '#access_qualifier'}] } ] } ] }, block_innards: { patterns: [ {include: '#preprocessor-rule-enabled-block'}, {include: '#preprocessor-rule-disabled-block'}, {include: '#preprocessor-rule-conditional-block'}, {include: '#method_access'}, {include: '#member_access'}, {include: '#c_function_call'}, { begin: '(?x)\n(?:\n (?:\n\t(?=\\s)(?=+!]+ | \\(\\) | \\[\\]))\n)\n\\s*(\\() # opening bracket', beginCaptures: { 1: {name: 'variable.other.slang'}, 2: { name: 'punctuation.section.parens.begin.bracket.round.initialization.slang' } }, end: '\\)', endCaptures: { 0: { name: 'punctuation.section.parens.end.bracket.round.initialization.slang' } }, name: 'meta.initialization.slang', patterns: [{include: '#function-call-innards'}] }, { begin: '{', beginCaptures: { 0: {name: 'punctuation.section.block.begin.bracket.curly.slang'} }, end: '}|(?=\\s*#\\s*(?:elif|else|endif)\\b)', endCaptures: { 0: {name: 'punctuation.section.block.end.bracket.curly.slang'} }, patterns: [{include: '#block_innards'}] }, {include: '#parens-block'}, {include: '$base'} ] }, c_conditional_context: { patterns: [{include: '$self'}, {include: '#block_innards'}] }, c_function_call: { begin: '(?x)\n(?!(?:while|for|do|if|else|switch|catch|enumerate|return|typeid|alignof|alignas|sizeof|countof|where|(__)?(f|b)wd_diff|__dispatch_kernel|no_diff|__constref|__target_intrinsic|__intrinsic_asm|spirv_asm|expand|each)\\s*\\()\n(?=\n(?:[A-Za-z_][A-Za-z0-9_]*+|::)++\\s*\\( # actual name\n|\n(?:(?<=operator)(?:[-*&<>=+!]+|\\(\\)|\\[\\]))\\s*\\(\n)', end: '(?<=\\))(?!\\w)', name: 'meta.function-call.slang', patterns: [{include: '#function-call-innards'}] }, case_statement: { begin: '((?>(?:(?:(?>(?(?:[^\\*]|(?>\\*+)[^\\/])*)((?>\\*+)\\/)))+|(?:(?:(?:(?:\\b|(?<=\\W))|(?=\\W))|\\A)|\\Z))))((?\\s*)(\\/\\/[!\\/]+)', beginCaptures: { 1: {name: 'punctuation.definition.comment.documentation.slang'} }, end: '(?<=\\n)(?|%|"|\\.|=|::|\\||\\-\\-|\\-\\-\\-)\\b(?:\\{[^}]*\\})?', name: 'storage.type.class.doxygen.slang' }, { captures: { 1: {name: 'storage.type.class.doxygen.slang'}, 2: {name: 'markup.italic.doxygen.slang'} }, match: '((?<=[\\s*!\\/])[\\\\@](?:a|em|e))\\s+(\\S+)' }, { captures: { 1: {name: 'storage.type.class.doxygen.slang'}, 2: {name: 'markup.bold.doxygen.slang'} }, match: '((?<=[\\s*!\\/])[\\\\@]b)\\s+(\\S+)' }, { captures: { 1: {name: 'storage.type.class.doxygen.slang'}, 2: {name: 'markup.inline.raw.string.slang'} }, match: '((?<=[\\s*!\\/])[\\\\@](?:c|p))\\s+(\\S+)' }, { match: '(?<=[\\s*!\\/])[\\\\@](?:a|anchor|b|c|cite|copybrief|copydetail|copydoc|def|dir|dontinclude|e|em|emoji|enum|example|extends|file|idlexcept|implements|include|includedoc|includelineno|latexinclude|link|memberof|namespace|p|package|ref|refitem|related|relates|relatedalso|relatesalso|verbinclude)\\b(?:\\{[^}]*\\})?', name: 'storage.type.class.doxygen.slang' }, { match: '(?<=[\\s*!\\/])[\\\\@](?:addindex|addtogroup|category|class|defgroup|diafile|dotfile|elseif|fn|headerfile|if|ifnot|image|ingroup|interface|line|mainpage|mscfile|name|overload|page|property|protocol|section|skip|skipline|snippet|snippetdoc|snippetlineno|struct|subpage|subsection|subsubsection|typedef|union|until|vhdlflow|weakgroup)\\b(?:\\{[^}]*\\})?', name: 'storage.type.class.doxygen.slang' }, { captures: { 1: {name: 'storage.type.class.doxygen.slang'}, 2: { patterns: [ { match: 'in|out|ref', name: 'keyword.other.parameter.direction.$0.slang' } ] }, 3: {name: 'variable.parameter.slang'} }, match: '((?<=[\\s*!\\/])[\\\\@]param)(?:\\s*\\[((?:,?\\s*(?:in|out)\\s*)+)\\])?\\s+(\\b\\w+\\b)' }, { match: '(?<=[\\s*!\\/])[\\\\@](?:arg|attention|author|authors|brief|bug|copyright|date|deprecated|details|exception|invariant|li|note|par|paragraph|param|post|pre|remark|remarks|result|return|returns|retval|sa|see|short|since|test|throw|todo|tparam|version|warning|xrefitem)\\b(?:\\{[^}]*\\})?', name: 'storage.type.class.doxygen.slang' }, { match: '(?<=[\\s*!\\/])[\\\\@](?:code|cond|docbookonly|dot|htmlonly|internal|latexonly|link|manonly|msc|parblock|rtfonly|secreflist|uml|verbatim|xmlonly|endcode|endcond|enddocbookonly|enddot|endhtmlonly|endinternal|endlatexonly|endlink|endmanonly|endmsc|endparblock|endrtfonly|endsecreflist|enduml|endverbatim|endxmlonly)\\b(?:\\{[^}]*\\})?', name: 'storage.type.class.doxygen.slang' }, { match: '(?:\\b[A-Z]+:|@[a-z_]+:)', name: 'storage.type.class.gtkdoc' } ] }, { captures: { 1: { name: 'punctuation.definition.comment.begin.documentation.slang' }, 2: { patterns: [ { match: '(?<=[\\s*!\\/])[\\\\@](?:callergraph|callgraph|else|endif|f\\$|f\\[|f\\]|hidecallergraph|hidecallgraph|hiderefby|hiderefs|hideinitializer|htmlinclude|n|nosubgrouping|private|privatesection|protected|protectedsection|public|publicsection|pure|showinitializer|showrefby|showrefs|tableofcontents|\\$|\\#|<|>|%|"|\\.|=|::|\\||\\-\\-|\\-\\-\\-)\\b(?:\\{[^}]*\\})?', name: 'storage.type.class.doxygen.slang' }, { captures: { 1: {name: 'storage.type.class.doxygen.slang'}, 2: {name: 'markup.italic.doxygen.slang'} }, match: '((?<=[\\s*!\\/])[\\\\@](?:a|em|e))\\s+(\\S+)' }, { captures: { 1: {name: 'storage.type.class.doxygen.slang'}, 2: {name: 'markup.bold.doxygen.slang'} }, match: '((?<=[\\s*!\\/])[\\\\@]b)\\s+(\\S+)' }, { captures: { 1: {name: 'storage.type.class.doxygen.slang'}, 2: {name: 'markup.inline.raw.string.slang'} }, match: '((?<=[\\s*!\\/])[\\\\@](?:c|p))\\s+(\\S+)' }, { match: '(?<=[\\s*!\\/])[\\\\@](?:a|anchor|b|c|cite|copybrief|copydetail|copydoc|def|dir|dontinclude|e|em|emoji|enum|example|extends|file|idlexcept|implements|include|includedoc|includelineno|latexinclude|link|memberof|namespace|p|package|ref|refitem|related|relates|relatedalso|relatesalso|verbinclude)\\b(?:\\{[^}]*\\})?', name: 'storage.type.class.doxygen.slang' }, { match: '(?<=[\\s*!\\/])[\\\\@](?:addindex|addtogroup|category|class|defgroup|diafile|dotfile|elseif|fn|headerfile|if|ifnot|image|ingroup|interface|line|mainpage|mscfile|name|overload|page|property|protocol|section|skip|skipline|snippet|snippetdoc|snippetlineno|struct|subpage|subsection|subsubsection|typedef|union|until|vhdlflow|weakgroup)\\b(?:\\{[^}]*\\})?', name: 'storage.type.class.doxygen.slang' }, { captures: { 1: {name: 'storage.type.class.doxygen.slang'}, 2: { patterns: [ { match: 'in|out', name: 'keyword.other.parameter.direction.$0.slang' } ] }, 3: {name: 'variable.parameter.slang'} }, match: '((?<=[\\s*!\\/])[\\\\@]param)(?:\\s*\\[((?:,?\\s*(?:in|out)\\s*)+)\\])?\\s+(\\b\\w+\\b)' }, { match: '(?<=[\\s*!\\/])[\\\\@](?:arg|attention|author|authors|brief|bug|copyright|date|deprecated|details|exception|invariant|li|note|par|paragraph|param|post|pre|remark|remarks|result|return|returns|retval|sa|see|short|since|test|throw|todo|tparam|version|warning|xrefitem)\\b(?:\\{[^}]*\\})?', name: 'storage.type.class.doxygen.slang' }, { match: '(?<=[\\s*!\\/])[\\\\@](?:code|cond|docbookonly|dot|htmlonly|internal|latexonly|link|manonly|msc|parblock|rtfonly|secreflist|uml|verbatim|xmlonly|endcode|endcond|enddocbookonly|enddot|endhtmlonly|endinternal|endlatexonly|endlink|endmanonly|endmsc|endparblock|endrtfonly|endsecreflist|enduml|endverbatim|endxmlonly)\\b(?:\\{[^}]*\\})?', name: 'storage.type.class.doxygen.slang' }, { match: '(?:\\b[A-Z]+:|@[a-z_]+:)', name: 'storage.type.class.gtkdoc' } ] }, 3: {name: 'punctuation.definition.comment.end.documentation.slang'} }, match: '(\\/\\*[!*]+(?=\\s))(.+)([!*]*\\*\\/)', name: 'comment.block.documentation.slang' }, { begin: '((?>\\s*)\\/\\*[!*]+(?:(?:\\n|$)|(?=\\s)))', beginCaptures: { 1: { name: 'punctuation.definition.comment.begin.documentation.slang' } }, end: '([!*]*\\*\\/)', endCaptures: { 1: {name: 'punctuation.definition.comment.end.documentation.slang'} }, name: 'comment.block.documentation.slang', patterns: [ { match: '(?<=[\\s*!\\/])[\\\\@](?:callergraph|callgraph|else|endif|f\\$|f\\[|f\\]|hidecallergraph|hidecallgraph|hiderefby|hiderefs|hideinitializer|htmlinclude|n|nosubgrouping|private|privatesection|protected|protectedsection|public|publicsection|pure|showinitializer|showrefby|showrefs|tableofcontents|\\$|\\#|<|>|%|"|\\.|=|::|\\||\\-\\-|\\-\\-\\-)\\b(?:\\{[^}]*\\})?', name: 'storage.type.class.doxygen.slang' }, { captures: { 1: {name: 'storage.type.class.doxygen.slang'}, 2: {name: 'markup.italic.doxygen.slang'} }, match: '((?<=[\\s*!\\/])[\\\\@](?:a|em|e))\\s+(\\S+)' }, { captures: { 1: {name: 'storage.type.class.doxygen.slang'}, 2: {name: 'markup.bold.doxygen.slang'} }, match: '((?<=[\\s*!\\/])[\\\\@]b)\\s+(\\S+)' }, { captures: { 1: {name: 'storage.type.class.doxygen.slang'}, 2: {name: 'markup.inline.raw.string.slang'} }, match: '((?<=[\\s*!\\/])[\\\\@](?:c|p))\\s+(\\S+)' }, { match: '(?<=[\\s*!\\/])[\\\\@](?:a|anchor|b|c|cite|copybrief|copydetail|copydoc|def|dir|dontinclude|e|em|emoji|enum|example|extends|file|idlexcept|implements|include|includedoc|includelineno|latexinclude|link|memberof|namespace|p|package|ref|refitem|related|relates|relatedalso|relatesalso|verbinclude)\\b(?:\\{[^}]*\\})?', name: 'storage.type.class.doxygen.slang' }, { match: '(?<=[\\s*!\\/])[\\\\@](?:addindex|addtogroup|category|class|defgroup|diafile|dotfile|elseif|fn|headerfile|if|ifnot|image|ingroup|interface|line|mainpage|mscfile|name|overload|page|property|protocol|section|skip|skipline|snippet|snippetdoc|snippetlineno|struct|subpage|subsection|subsubsection|typedef|union|until|vhdlflow|weakgroup)\\b(?:\\{[^}]*\\})?', name: 'storage.type.class.doxygen.slang' }, { captures: { 1: {name: 'storage.type.class.doxygen.slang'}, 2: { patterns: [ { match: 'in|out', name: 'keyword.other.parameter.direction.$0.slang' } ] }, 3: {name: 'variable.parameter.slang'} }, match: '((?<=[\\s*!\\/])[\\\\@]param)(?:\\s*\\[((?:,?\\s*(?:in|out)\\s*)+)\\])?\\s+(\\b\\w+\\b)' }, { match: '(?<=[\\s*!\\/])[\\\\@](?:arg|attention|author|authors|brief|bug|copyright|date|deprecated|details|exception|invariant|li|note|par|paragraph|param|post|pre|remark|remarks|result|return|returns|retval|sa|see|short|since|test|throw|todo|tparam|version|warning|xrefitem)\\b(?:\\{[^}]*\\})?', name: 'storage.type.class.doxygen.slang' }, { match: '(?<=[\\s*!\\/])[\\\\@](?:code|cond|docbookonly|dot|htmlonly|internal|latexonly|link|manonly|msc|parblock|rtfonly|secreflist|uml|verbatim|xmlonly|endcode|endcond|enddocbookonly|enddot|endhtmlonly|endinternal|endlatexonly|endlink|endmanonly|endmsc|endparblock|endrtfonly|endsecreflist|enduml|endverbatim|endxmlonly)\\b(?:\\{[^}]*\\})?', name: 'storage.type.class.doxygen.slang' }, { match: '(?:\\b[A-Z]+:|@[a-z_]+:)', name: 'storage.type.class.gtkdoc' } ] }, { captures: {1: {name: 'meta.toc-list.banner.block.slang'}}, match: '^\\/\\* =(\\s*.*?)\\s*= \\*\\/$\\n?', name: 'comment.block.banner.slang' }, { begin: '(\\/\\*)', beginCaptures: { 1: {name: 'punctuation.definition.comment.begin.slang'} }, end: '(\\*\\/)', endCaptures: {1: {name: 'punctuation.definition.comment.end.slang'}}, name: 'comment.block.slang' }, { captures: {1: {name: 'meta.toc-list.banner.line.slang'}}, match: '^\\/\\/ =(\\s*.*?)\\s*=$\\n?', name: 'comment.line.banner.slang' }, { begin: '((?:^[ \\t]+)?)(?=\\/\\/)', beginCaptures: { 1: {name: 'punctuation.whitespace.comment.leading.slang'} }, end: '(?!\\G)', patterns: [ { begin: '(\\/\\/)', beginCaptures: { 1: {name: 'punctuation.definition.comment.slang'} }, end: '(?=\\n)', name: 'comment.line.double-slash.slang', patterns: [{include: '#line_continuation_character'}] } ] } ] }, default_statement: { begin: '((?>(?:(?:(?>(?(?:[^\\*]|(?>\\*+)[^\\/])*)((?>\\*+)\\/)))+|(?:(?:(?:(?:\\b|(?<=\\W))|(?=\\W))|\\A)|\\Z))))((?=+!]+|\\(\\)|\\[\\]))\n)\n\\s*(\\()', beginCaptures: { 1: {name: 'entity.name.function.slang'}, 2: {name: 'punctuation.section.arguments.begin.bracket.round.slang'} }, end: '\\)', endCaptures: { 0: {name: 'punctuation.section.arguments.end.bracket.round.slang'} }, patterns: [{include: '#function-call-innards'}] }, { begin: '\\(', beginCaptures: { 0: {name: 'punctuation.section.parens.begin.bracket.round.slang'} }, end: '\\)', endCaptures: { 0: {name: 'punctuation.section.parens.end.bracket.round.slang'} }, patterns: [{include: '#function-call-innards'}] }, {include: '#block_innards'} ] }, 'function-innards': { patterns: [ {include: '#comments'}, {include: '#storage_types'}, {include: '#operators'}, {include: '#vararg_ellipses'}, { begin: '(?x)\n(?!(?:while|for|do|if|else|switch|catch|enumerate|return|typeid|alignof|alignas|sizeof|countof|where|(__)?(f|b)wd_diff|__dispatch_kernel|no_diff|__constref|expand|each)\\s*\\()\n(\n(?:[A-Za-z_][A-Za-z0-9_]*+|::)++ # actual name\n|\n(?:(?<=operator)(?:[-*&<>=+!]+|\\(\\)|\\[\\]))\n)\n\\s*(\\()', beginCaptures: { 1: {name: 'entity.name.function.slang'}, 2: { name: 'punctuation.section.parameters.begin.bracket.round.slang' } }, end: '\\)', endCaptures: { 0: {name: 'punctuation.section.parameters.end.bracket.round.slang'} }, name: 'meta.function.definition.parameters.slang', patterns: [ {include: '#probably_a_parameter'}, {include: '#function-innards'} ] }, { begin: '\\(', beginCaptures: { 0: {name: 'punctuation.section.parens.begin.bracket.round.slang'} }, end: '\\)', endCaptures: { 0: {name: 'punctuation.section.parens.end.bracket.round.slang'} }, patterns: [{include: '#function-innards'}] }, {include: '$base'} ] }, inline_comment: { captures: { 1: { name: 'comment.block.slang punctuation.definition.comment.begin.slang' }, 2: {name: 'comment.block.slang'}, 3: { patterns: [ { match: '\\*\\/', name: 'comment.block.slang punctuation.definition.comment.end.slang' }, {match: '\\*', name: 'comment.block.slang'} ] } }, match: '(\\/\\*)((?>(?:[^\\*]|(?>\\*+)[^\\/])*)((?>\\*+)\\/))' }, line_continuation_character: { patterns: [ { captures: { 1: {name: 'constant.character.escape.line-continuation.slang'} }, match: '(\\\\)\\n' } ] }, member_access: { captures: { 1: {name: 'variable.other.object.access.slang'}, 2: {name: 'punctuation.separator.dot-access.slang'}, 3: {name: 'punctuation.separator.pointer-access.slang'}, 4: { patterns: [ {include: '#member_access'}, {include: '#method_access'}, { captures: { 1: {name: 'variable.other.object.access.slang'}, 2: {name: 'punctuation.separator.dot-access.slang'}, 3: {name: 'punctuation.separator.pointer-access.slang'} }, match: '((?:[a-zA-Z_]\\w*|(?<=\\]|\\)))\\s*)(?:((?:\\.\\*|\\.))|((?:->\\*|->)))' } ] }, 5: {name: 'variable.other.member.slang'} }, match: '((?:[a-zA-Z_]\\w*|(?<=\\]|\\)))\\s*)(?:((?:\\.\\*|\\.))|((?:->\\*|->)))((?:[a-zA-Z_]\\w*\\s*(?:(?:(?:\\.\\*|\\.))|(?:(?:->\\*|->)))\\s*)*)\\s*(\\b(?!(?:atomic_uint_least64_t|atomic_uint_least16_t|atomic_uint_least32_t|atomic_uint_least8_t|atomic_int_least16_t|atomic_uint_fast64_t|atomic_uint_fast32_t|atomic_int_least64_t|atomic_int_least32_t|pthread_rwlockattr_t|atomic_uint_fast16_t|pthread_mutexattr_t|atomic_int_fast16_t|atomic_uint_fast8_t|atomic_int_fast64_t|atomic_int_least8_t|atomic_int_fast32_t|atomic_int_fast8_t|pthread_condattr_t|atomic_uintptr_t|atomic_ptrdiff_t|pthread_rwlock_t|atomic_uintmax_t|pthread_mutex_t|atomic_intmax_t|atomic_intptr_t|atomic_char32_t|atomic_char16_t|pthread_attr_t|atomic_wchar_t|uint_least64_t|uint_least32_t|uint_least16_t|pthread_cond_t|pthread_once_t|uint_fast64_t|uint_fast16_t|atomic_size_t|uint_least8_t|int_least64_t|int_least32_t|int_least16_t|pthread_key_t|atomic_ullong|atomic_ushort|uint_fast32_t|atomic_schar|atomic_short|uint_fast8_t|int_fast64_t|int_fast32_t|int_fast16_t|atomic_ulong|atomic_llong|int_least8_t|atomic_uchar|memory_order|suseconds_t|int_fast8_t|atomic_bool|atomic_char|atomic_uint|atomic_long|atomic_int|useconds_t|_Imaginary|blksize_t|pthread_t|in_addr_t|uintptr_t|in_port_t|uintmax_t|uintmax_t|blkcnt_t|uint16_t|unsigned|_Complex|uint32_t|intptr_t|intmax_t|intmax_t|uint64_t|u_quad_t|int64_t|int32_t|ssize_t|caddr_t|clock_t|uint8_t|u_short|swblk_t|segsz_t|int16_t|fixpt_t|daddr_t|nlink_t|qaddr_t|size_t|time_t|mode_t|signed|quad_t|ushort|u_long|u_char|double|int8_t|ino_t|uid_t|pid_t|_Bool|float|dev_t|div_t|short|gid_t|off_t|u_int|key_t|id_t|uint|long|void|char|bool|id_t|int)\\b)[a-zA-Z_]\\w*\\b(?!\\())' }, method_access: { begin: '((?:[a-zA-Z_]\\w*|(?<=\\]|\\)))\\s*)(?:((?:\\.\\*|\\.))|((?:->\\*|->)))((?:[a-zA-Z_]\\w*\\s*(?:(?:(?:\\.\\*|\\.))|(?:(?:->\\*|->)))\\s*)*)\\s*([a-zA-Z_]\\w*)(\\()', beginCaptures: { 1: {name: 'variable.other.object.access.slang'}, 2: {name: 'punctuation.separator.dot-access.slang'}, 3: {name: 'punctuation.separator.pointer-access.slang'}, 4: { patterns: [ {include: '#member_access'}, {include: '#method_access'}, { captures: { 1: {name: 'variable.other.object.access.slang'}, 2: {name: 'punctuation.separator.dot-access.slang'}, 3: {name: 'punctuation.separator.pointer-access.slang'} }, match: '((?:[a-zA-Z_]\\w*|(?<=\\]|\\)))\\s*)(?:((?:\\.\\*|\\.))|((?:->\\*|->)))' } ] }, 5: {name: 'entity.name.function.member.slang'}, 6: { name: 'punctuation.section.arguments.begin.bracket.round.function.member.slang' } }, contentName: 'meta.function-call.member.slang', end: '(\\))', endCaptures: { 1: { name: 'punctuation.section.arguments.end.bracket.round.function.member.slang' } }, patterns: [{include: '#function-call-innards'}] }, numbers: { captures: { 0: { patterns: [ { begin: '(?=.)', end: '$', patterns: [ { captures: { 1: {name: 'keyword.other.unit.hexadecimal.slang'}, 10: { name: 'keyword.operator.minus.exponent.hexadecimal.slang' }, 11: { name: 'constant.numeric.exponent.hexadecimal.slang', patterns: [ { match: "(?<=[0-9a-fA-F])'(?=[0-9a-fA-F])", name: 'punctuation.separator.constant.numeric' } ] }, 12: { name: 'keyword.other.unit.suffix.floating-point.slang' }, 2: { name: 'constant.numeric.hexadecimal.slang', patterns: [ { match: "(?<=[0-9a-fA-F])'(?=[0-9a-fA-F])", name: 'punctuation.separator.constant.numeric' } ] }, 3: {name: 'punctuation.separator.constant.numeric'}, 4: {name: 'constant.numeric.hexadecimal.slang'}, 5: { name: 'constant.numeric.hexadecimal.slang', patterns: [ { match: "(?<=[0-9a-fA-F])'(?=[0-9a-fA-F])", name: 'punctuation.separator.constant.numeric' } ] }, 6: {name: 'punctuation.separator.constant.numeric'}, 8: {name: 'keyword.other.unit.exponent.hexadecimal.slang'}, 9: { name: 'keyword.operator.plus.exponent.hexadecimal.slang' } }, match: "(\\G0[xX])([0-9a-fA-F](?:[0-9a-fA-F]|((?<=[0-9a-fA-F])'(?=[0-9a-fA-F])))*)?((?:(?<=[0-9a-fA-F])\\.|\\.(?=[0-9a-fA-F])))([0-9a-fA-F](?:[0-9a-fA-F]|((?<=[0-9a-fA-F])'(?=[0-9a-fA-F])))*)?((?>=|\\|=', name: 'keyword.operator.assignment.compound.bitwise.slang' }, {match: '<<|>>', name: 'keyword.operator.bitwise.shift.slang'}, {match: '!=|<=|>=|==|<|>', name: 'keyword.operator.comparison.slang'}, {match: '&&|!|\\|\\|', name: 'keyword.operator.logical.slang'}, {match: '&|\\||\\^|~', name: 'keyword.operator.slang'}, {match: '=', name: 'keyword.operator.assignment.slang'}, {match: '%|\\*|/|-|\\+', name: 'keyword.operator.slang'}, { begin: '(\\?)', beginCaptures: {1: {name: 'keyword.operator.ternary.slang'}}, end: '(:)', endCaptures: {1: {name: 'keyword.operator.ternary.slang'}}, patterns: [{include: '#function-call-innards'}, {include: '$base'}] } ] }, parens: { begin: '\\(', beginCaptures: { 0: {name: 'punctuation.section.parens.begin.bracket.round.slang'} }, end: '\\)', endCaptures: { 0: {name: 'punctuation.section.parens.end.bracket.round.slang'} }, name: 'meta.parens.slang', patterns: [{include: '$base'}] }, 'parens-block': { begin: '\\(', beginCaptures: { 0: {name: 'punctuation.section.parens.begin.bracket.round.slang'} }, end: '\\)', endCaptures: { 0: {name: 'punctuation.section.parens.end.bracket.round.slang'} }, name: 'meta.parens.block.slang', patterns: [ {include: '#block_innards'}, {match: '(?-mix:(?=+!]+|\\(\\)|\\[\\]))\\s*\\(\n)', end: '(?<=\\))(?!\\w)|(?=+!]+|\\(\\)|\\[\\]))\n)\n\\s*(\\()', beginCaptures: { 1: {name: 'entity.name.function.slang'}, 2: {name: 'punctuation.section.arguments.begin.bracket.round.slang'} }, end: '(\\))|(?\\]\\)])\\s*([a-zA-Z_]\\w*)\\s*(?=(?:\\[\\]\\s*)?(?:,|\\)))' }, shader_stages: { match: '\\b(vertex|fragment|compute|hull|domain|geometry|raygen|intersection|anyhit|closesthit|miss|mesh|amplification|callable)\\b', name: 'variable.other.constant.shader_stage' }, static_assert: { begin: '((?>(?:(?:(?>(?(?:[^\\*]|(?>\\*+)[^\\/])*)((?>\\*+)\\/)))+|(?:(?:(?:(?:\\b|(?<=\\W))|(?=\\W))|\\A)|\\Z))))((?(?:(?:(?>(?(?:[^\\*]|(?>\\*+)[^\\/])*)((?>\\*+)\\/)))+|(?:(?:(?:(?:\\b|(?<=\\W))|(?=\\W))|\\A)|\\Z))))(\\()', beginCaptures: { 1: {patterns: [{include: '#inline_comment'}]}, 10: { name: 'punctuation.section.arguments.begin.bracket.round.static_assert.slang' }, 2: { name: 'comment.block.slang punctuation.definition.comment.begin.slang' }, 3: {name: 'comment.block.slang'}, 4: { patterns: [ { match: '\\*\\/', name: 'comment.block.slang punctuation.definition.comment.end.slang' }, {match: '\\*', name: 'comment.block.slang'} ] }, 5: {name: 'keyword.other.static_assert.slang'}, 6: {patterns: [{include: '#inline_comment'}]}, 7: { name: 'comment.block.slang punctuation.definition.comment.begin.slang' }, 8: {name: 'comment.block.slang'}, 9: { patterns: [ { match: '\\*\\/', name: 'comment.block.slang punctuation.definition.comment.end.slang' }, {match: '\\*', name: 'comment.block.slang'} ] } }, end: '(\\))', endCaptures: { 1: { name: 'punctuation.section.arguments.end.bracket.round.static_assert.slang' } }, patterns: [ { begin: '(,)\\s*(?=(?:L|u8|u|U\\s*\\")?)', beginCaptures: { 1: {name: 'punctuation.separator.delimiter.comma.slang'} }, end: '(?=\\))', name: 'meta.static_assert.message.slang', patterns: [{include: '#string_context'}] }, {include: '#evaluation_context'} ] }, storage_types: { patterns: [ { match: '(?-mix:(?\\s+)|(\\/\\*)((?>(?:[^\\*]|(?>\\*+)[^\\/])*)((?>\\*+)\\/)))+?|(?:(?:(?:(?:\\b|(?<=\\W))|(?=\\W))|\\A)|\\Z)))(?:\\n|$)' }, {include: '#comments'}, { begin: '(((?:(?:(?>\\s+)|(\\/\\*)((?>(?:[^\\*]|(?>\\*+)[^\\/])*)((?>\\*+)\\/)))+?|(?:(?:(?:(?:\\b|(?<=\\W))|(?=\\W))|\\A)|\\Z)))\\()', beginCaptures: { 1: { name: 'punctuation.section.parens.begin.bracket.round.assembly.slang' }, 2: {patterns: [{include: '#inline_comment'}]}, 3: { name: 'comment.block.slang punctuation.definition.comment.begin.slang' }, 4: {name: 'comment.block.slang'}, 5: { patterns: [ { match: '\\*\\/', name: 'comment.block.slang punctuation.definition.comment.end.slang' }, {match: '\\*', name: 'comment.block.slang'} ] } }, end: '(\\))', endCaptures: { 1: { name: 'punctuation.section.parens.end.bracket.round.assembly.slang' } }, patterns: [ { begin: '(R?)(")', beginCaptures: { 1: {name: 'meta.encoding.slang'}, 2: { name: 'punctuation.definition.string.begin.assembly.slang' } }, contentName: 'meta.embedded.assembly.slang', end: '(")', endCaptures: { 1: { name: 'punctuation.definition.string.end.assembly.slang' } }, name: 'string.quoted.double.slang', patterns: [ {include: '#backslash_escapes'}, {include: '#string_escaped_char'} ] }, { begin: '(\\()', beginCaptures: { 1: { name: 'punctuation.section.parens.begin.bracket.round.assembly.inner.slang' } }, end: '(\\))', endCaptures: { 1: { name: 'punctuation.section.parens.end.bracket.round.assembly.inner.slang' } }, patterns: [{include: '#evaluation_context'}] }, { captures: { 1: {patterns: [{include: '#inline_comment'}]}, 2: { name: 'comment.block.slang punctuation.definition.comment.begin.slang' }, 3: {name: 'comment.block.slang'}, 4: { patterns: [ { match: '\\*\\/', name: 'comment.block.slang punctuation.definition.comment.end.slang' }, {match: '\\*', name: 'comment.block.slang'} ] }, 5: {name: 'variable.other.asm.label.slang'}, 6: {patterns: [{include: '#inline_comment'}]}, 7: { name: 'comment.block.slang punctuation.definition.comment.begin.slang' }, 8: {name: 'comment.block.slang'}, 9: { patterns: [ { match: '\\*\\/', name: 'comment.block.slang punctuation.definition.comment.end.slang' }, {match: '\\*', name: 'comment.block.slang'} ] } }, match: '\\[((?:(?:(?>\\s+)|(\\/\\*)((?>(?:[^\\*]|(?>\\*+)[^\\/])*)((?>\\*+)\\/)))+?|(?:(?:(?:(?:\\b|(?<=\\W))|(?=\\W))|\\A)|\\Z)))([a-zA-Z_]\\w*)((?:(?:(?>\\s+)|(\\/\\*)((?>(?:[^\\*]|(?>\\*+)[^\\/])*)((?>\\*+)\\/)))+?|(?:(?:(?:(?:\\b|(?<=\\W))|(?=\\W))|\\A)|\\Z)))\\]' }, { match: ':', name: 'punctuation.separator.delimiter.colon.assembly.slang' }, {include: '#comments'} ] } ] } ] }, string_escaped_char: { patterns: [ { match: '(?x)\\\\ (\n\\\\\t\t\t |\n[abefnprtv\'"?] |\n[0-3]\\d{,2}\t |\n[4-7]\\d?\t\t|\nx[a-fA-F0-9]{,2} |\nu[a-fA-F0-9]{,4} |\nU[a-fA-F0-9]{,8} )', name: 'constant.character.escape.slang' }, {match: '\\\\.', name: 'invalid.illegal.unknown-escape.slang'} ] }, string_placeholder: { patterns: [ { match: "(?x) %\n(\\d+\\$)?\t\t\t\t\t\t # field (argument #)\n[#0\\- +']*\t\t\t\t\t\t # flags\n[,;:_]?\t\t\t\t\t\t\t # separator character (AltiVec)\n((-?\\d+)|\\*(-?\\d+\\$)?)?\t\t # minimum field width\n(\\.((-?\\d+)|\\*(-?\\d+\\$)?)?)?\t# precision\n(hh|h|ll|l|j|t|z|q|L|vh|vl|v|hv|hl)? # length modifier\n[diouxXDOUeEfFgGaACcSspn%]\t\t # conversion type", name: 'constant.other.placeholder.slang' }, { captures: {1: {name: 'invalid.illegal.placeholder.slang'}}, match: '(%)(?!"\\s*(PRI|SCN))' } ] }, strings: { patterns: [ { begin: '((?:u|u8|U|L)?R)"(?:([^ ()\\\\\\t]{0,16})|([^ ()\\\\\\t]*))\\(', beginCaptures: { 0: {name: 'punctuation.definition.string.begin'}, 1: {name: 'meta.encoding'}, 3: {name: 'invalid.illegal.delimiter-too-long'} }, end: '\\)\\2(\\3)"', endCaptures: { 0: {name: 'punctuation.definition.string.end'}, 1: {name: 'invalid.illegal.delimiter-too-long'} }, name: 'string.quoted.double.raw' }, { begin: '((?:u|u8|U|L)?)?"', beginCaptures: { 0: {name: 'punctuation.definition.string.begin.slang'} }, end: '"', endCaptures: {0: {name: 'punctuation.definition.string.end.slang'}}, name: 'string.quoted.double.slang', patterns: [ {include: '#string_escaped_char'}, {include: '#string_placeholder'}, {include: '#line_continuation_character'} ] }, { begin: "'", beginCaptures: { 0: {name: 'punctuation.definition.string.begin.slang'} }, end: "'", endCaptures: {0: {name: 'punctuation.definition.string.end.slang'}}, name: 'string.quoted.single.slang', patterns: [ {include: '#string_escaped_char'}, {include: '#line_continuation_character'} ] } ] }, switch_conditional_parentheses: { begin: '((?>(?:(?:(?>(?(?:[^\\*]|(?>\\*+)[^\\/])*)((?>\\*+)\\/)))+|(?:(?:(?:(?:\\b|(?<=\\W))|(?=\\W))|\\A)|\\Z))))(\\()', beginCaptures: { 1: {patterns: [{include: '#inline_comment'}]}, 2: { name: 'comment.block.slang punctuation.definition.comment.begin.slang' }, 3: {name: 'comment.block.slang'}, 4: { patterns: [ { match: '\\*\\/', name: 'comment.block.slang punctuation.definition.comment.end.slang' }, {match: '\\*', name: 'comment.block.slang'} ] }, 5: { name: 'punctuation.section.parens.begin.bracket.round.conditional.switch.slang' } }, end: '(\\))', endCaptures: { 1: { name: 'punctuation.section.parens.end.bracket.round.conditional.switch.slang' } }, name: 'meta.conditional.switch.slang', patterns: [ {include: '#evaluation_context'}, {include: '#c_conditional_context'} ] }, switch_statement: { begin: '(((?>(?:(?:(?>(?(?:[^\\*]|(?>\\*+)[^\\/])*)((?>\\*+)\\/)))+|(?:(?:(?:(?:\\b|(?<=\\W))|(?=\\W))|\\A)|\\Z))))((?|\\?\\?>)|(?=[;>\\[\\]=]))', name: 'meta.block.switch.slang', patterns: [ { begin: '\\G ?', end: '((?:\\{|<%|\\?\\?<|(?=;)))', endCaptures: { 1: { name: 'punctuation.section.block.begin.bracket.curly.switch.slang' } }, name: 'meta.head.switch.slang', patterns: [ {include: '#switch_conditional_parentheses'}, {include: '$self'} ] }, { begin: '(?<=\\{|<%|\\?\\?<)', end: '(\\}|%>|\\?\\?>)', endCaptures: { 1: { name: 'punctuation.section.block.end.bracket.curly.switch.slang' } }, name: 'meta.body.switch.slang', patterns: [ {include: '#default_statement'}, {include: '#case_statement'}, {include: '$self'}, {include: '#block_innards'} ] }, { begin: '(?<=\\}|%>|\\?\\?>)[\\s\\n]*', end: '[\\s\\n]*(?=;)', name: 'meta.tail.switch.slang', patterns: [{include: '$self'}] } ] }, vararg_ellipses: { match: '(?