@wooorm/starry-night
Version:
Syntax highlighting, like GitHub
1,153 lines (1,152 loc) • 93 kB
JavaScript
// This is a TextMate grammar distributed by `starry-night`.
// This grammar is developed at
// <https://github.com/shader-slang/slang-vscode-extension>
// and licensed `apache-2.0`.
// See <https://github.com/wooorm/starry-night> 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|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)\\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: '\\bk[A-Z]\\w*\\b',
name: 'constant.other.variable.mac-classic.slang'
},
{
match: '\\bg[A-Z]\\w*\\b',
name: 'variable.other.readwrite.global.mac-classic.slang'
},
{
match: '\\bs[A-Z]\\w*\\b',
name: 'variable.other.readwrite.static.mac-classic.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+((?<!\\w)[a-zA-Z_]\\w*(?!\\w))(?:(\\()([^()\\\\]+)(\\)))?',
beginCaptures: {
1: {patterns: [{include: '#inline_comment'}]},
10: {name: 'punctuation.definition.parameters.end.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.control.directive.define.slang'},
6: {name: 'punctuation.definition.directive.slang'},
7: {name: 'entity.name.function.preprocessor.slang'},
8: {name: 'punctuation.definition.parameters.begin.slang'},
9: {
patterns: [
{
captures: {1: {name: 'variable.parameter.preprocessor.slang'}},
match: '(?<=[(,])\\s*((?<!\\w)[a-zA-Z_]\\w*(?!\\w))\\s*'
},
{match: ',', name: 'punctuation.separator.parameters.slang'},
{
match: '\\.\\.\\.',
name: 'ellipses.slang punctuation.vararg-ellipses.variable.parameter.preprocessor.slang'
}
]
}
},
end: '(?<!\\\\)(?=\\n)',
name: 'meta.preprocessor.macro.slang',
patterns: [{include: '#preprocessor-rule-define-line-contents'}]
},
{
begin: '^\\s*((#)\\s*(error|warning))\\b\\s*',
beginCaptures: {
1: {name: 'keyword.control.directive.diagnostic.$3.slang'},
2: {name: 'punctuation.definition.directive.slang'}
},
end: '(?<!\\\\)(?=\\n)',
name: 'meta.preprocessor.diagnostic.slang',
patterns: [
{
begin: '"',
beginCaptures: {
0: {name: 'punctuation.definition.string.begin.slang'}
},
end: '"|(?<!\\\\)(?=\\s*\\n)',
endCaptures: {0: {name: 'punctuation.definition.string.end.slang'}},
name: 'string.quoted.double.slang',
patterns: [{include: '#line_continuation_character'}]
},
{
begin: "'",
beginCaptures: {
0: {name: 'punctuation.definition.string.begin.slang'}
},
end: "'|(?<!\\\\)(?=\\s*\\n)",
endCaptures: {0: {name: 'punctuation.definition.string.end.slang'}},
name: 'string.quoted.single.slang',
patterns: [{include: '#line_continuation_character'}]
},
{
begin: '[^\'"]',
end: '(?<!\\\\)(?=\\s*\\n)',
name: 'string.unquoted.single.slang',
patterns: [
{include: '#line_continuation_character'},
{include: '#comments'}
]
}
]
},
{
begin:
'^\\s*((#)\\s*(include(?:_next)?|import|module|implementing|__include))\\b\\s*',
beginCaptures: {
1: {name: 'keyword.control.directive.$3.slang'},
2: {name: 'punctuation.definition.directive.slang'}
},
end: '(?=(?://|/\\*))|(?<!\\\\)(?=\\n)',
name: 'meta.preprocessor.include.slang',
patterns: [
{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.double.include.slang'
},
{
begin: '<',
beginCaptures: {
0: {name: 'punctuation.definition.string.begin.slang'}
},
end: '>',
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: '(?=(?://|/\\*))|(?<!\\\\)(?=\\n)',
name: 'meta.preprocessor.slang',
patterns: [
{include: '#strings'},
{include: '#numbers'},
{include: '#line_continuation_character'}
]
},
{
begin: '^\\s*(?:((#)\\s*undef))\\b',
beginCaptures: {
1: {name: 'keyword.control.directive.undef.slang'},
2: {name: 'punctuation.definition.directive.slang'}
},
end: '(?=(?://|/\\*))|(?<!\\\\)(?=\\n)',
name: 'meta.preprocessor.slang',
patterns: [
{
match: '[a-zA-Z_$][\\w$]*',
name: 'entity.name.function.preprocessor.slang'
},
{include: '#line_continuation_character'}
]
},
{
begin: '^\\s*(?:((#)\\s*pragma))\\b',
beginCaptures: {
1: {name: 'keyword.control.directive.pragma.slang'},
2: {name: 'punctuation.definition.directive.slang'}
},
end: '(?=(?://|/\\*))|(?<!\\\\)(?=\\n)',
name: 'meta.preprocessor.pragma.slang',
patterns: [
{include: '#strings'},
{
match: '[a-zA-Z_$][\\w\\-$]*',
name: 'entity.other.attribute-name.pragma.preprocessor.slang'
},
{include: '#numbers'},
{include: '#line_continuation_character'}
]
},
{
match:
'(?x) \\b\n(int8_t|int16_t|int32_t|int64_t|uint8_t|uint16_t|uint32_t|uint64_t|intptr_t|uintptr_t)\n\\b',
name: 'support.type.stdint.slang'
},
{match: '(?x) \\b(string)\\b', name: 'support.type.string.slang'},
{match: '(?x) \\b(Ptr)\\b', name: 'support.type.ptr.slang'},
{
match:
'(?x) \\b((RW)?StructuredBuffer|(RW)?Buffer|(RW)?ByteAddressBuffer|ConstantBuffer|ParameterBlock|(RW)?Texture([1-3]D|Cube)(MS)?(Array)?|Sampler(Comparison)?State|RaytracingAccelerationStructure)\\b',
name: 'support.type.hlsl.slang'
},
{
match: '(?x) \\b(bool|char|half|float|int|double|uint)[1-4](x[1-4])?\\b',
name: 'support.type.vector.slang'
},
{include: '#block'},
{include: '#parens'},
{include: '#line_continuation_character'},
{
begin: '([a-zA-Z_][a-zA-Z_0-9]*|(?<=[\\]\\)]))?(\\[)(?!\\])',
beginCaptures: {
1: {name: 'variable.object.slang'},
2: {name: 'punctuation.definition.begin.bracket.square.slang'}
},
end: '\\]',
endCaptures: {
0: {name: 'punctuation.definition.end.bracket.square.slang'}
},
name: 'meta.bracket.square.access.slang',
patterns: [{include: '#function-call-innards'}]
},
{match: '\\[\\s*\\]', name: 'storage.modifier.array.bracket.square.slang'},
{match: ';', name: 'punctuation.terminator.statement.slang'},
{match: ',', name: 'punctuation.separator.delimiter.slang'}
],
repository: {
'access-method': {
begin:
'([a-zA-Z_][a-zA-Z_0-9]*|(?<=[\\]\\)]))\\s*(?:(\\.)|(->))((?:(?:[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'}]
},
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'}]
}
]
},
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)(?<!else|new|return)\n\t(?<=\\w) \\s+(and|and_eq|bitand|bitor|compl|not|not_eq|or|or_eq|typeid|xor|xor_eq|alignof|alignas|(__)?(f|b)wd_diff|__dispatch_kernel|no_diff|__constref) # or word + space before name\n )\n)\n(\n (?:[A-Za-z_][A-Za-z0-9_]*+ | :: )++ # actual name\n |\n (?:(?<=operator) (?:[-*&<>=+!]+ | \\(\\) | \\[\\]))\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:
'((?>(?:(?:(?>(?<!\\s)\\s+)|(\\/\\*)((?>(?:[^\\*]|(?>\\*+)[^\\/])*)((?>\\*+)\\/)))+|(?:(?:(?:(?:\\b|(?<=\\W))|(?=\\W))|\\A)|\\Z))))((?<!\\w)case(?!\\w))',
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: 'keyword.control.case.slang'}
},
end: '(:)',
endCaptures: {1: {name: 'punctuation.separator.colon.case.slang'}},
name: 'meta.conditional.case.slang',
patterns: [
{include: '#evaluation_context'},
{include: '#c_conditional_context'}
]
},
comments: {
patterns: [
{
begin: '(?:^)(?>\\s*)(\\/\\/[!\\/]+)',
beginCaptures: {
1: {name: 'punctuation.definition.comment.documentation.slang'}
},
end: '(?<=\\n)(?<!\\\\\\n)',
name: 'comment.line.double-slash.documentation.slang',
patterns: [
{include: '#line_continuation_character'},
{
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|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:
'((?>(?:(?:(?>(?<!\\s)\\s+)|(\\/\\*)((?>(?:[^\\*]|(?>\\*+)[^\\/])*)((?>\\*+)\\/)))+|(?:(?:(?:(?:\\b|(?<=\\W))|(?=\\W))|\\A)|\\Z))))((?<!\\w)default(?!\\w))',
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: 'keyword.control.default.slang'}
},
end: '(:)',
endCaptures: {
1: {name: 'punctuation.separator.colon.case.default.slang'}
},
name: 'meta.conditional.case.slang',
patterns: [
{include: '#evaluation_context'},
{include: '#c_conditional_context'}
]
},
disabled: {
begin: '^\\s*#\\s*if(n?def)?\\b.*$',
end: '^\\s*#\\s*endif\\b',
patterns: [{include: '#disabled'}, {include: '#pragma-mark'}]
},
evaluation_context: {
patterns: [{include: '#function-call-innards'}, {include: '$base'}]
},
'function-call-innards': {
patterns: [
{include: '#comments'},
{include: '#storage_types'},
{include: '#method_access'},
{include: '#member_access'},
{include: '#operators'},
{
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.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])))*)?((?<!')([pP])(\\+?)(\\-?)((?:[0-9](?:[0-9]|(?:(?<=[0-9a-fA-F])'(?=[0-9a-fA-F])))*)))?([lLfFzZhH](?!\\w))?$"
},
{
captures: {
10: {name: 'keyword.operator.minus.exponent.decimal.slang'},
11: {
name: 'constant.numeric.exponent.decimal.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.decimal.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.decimal.point.slang'},
5: {
name: 'constant.numeric.decimal.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.decimal.slang'},
9: {name: 'keyword.operator.plus.exponent.decimal.slang'}
},
match:
"(\\G(?=[0-9.])(?!0[xXbB]))([0-9](?:[0-9]|((?<=[0-9a-fA-F])'(?=[0-9a-fA-F])))*)?((?:(?<=[0-9])\\.|\\.(?=[0-9])))([0-9](?:[0-9]|((?<=[0-9a-fA-F])'(?=[0-9a-fA-F])))*)?((?<!')([eE])(\\+?)(\\-?)((?:[0-9](?:[0-9]|(?:(?<=[0-9a-fA-F])'(?=[0-9a-fA-F])))*)))?([lLfFzZhH](?!\\w))?$"
},
{
captures: {
1: {name: 'keyword.other.unit.binary.slang'},
2: {
name: 'constant.numeric.binary.slang',
patterns: [
{
match: "(?<=[0-9a-fA-F])'(?=[0-9a-fA-F])",
name: 'punctuation.separator.constant.numeric'
}
]
},
3: {name: 'punctuation.separator.constant.numeric'},
4: {name: 'keyword.other.unit.suffix.integer.slang'}
},
match:
"(\\G0[bB])([01](?:[01]|((?<=[0-9a-fA-F])'(?=[0-9a-fA-F])))*)((?:(?:(?:(?:(?:[uU]|[uU]ll?)|[uU]LL?)|ll?[uU]?)|LL?[uU]?|[uU]?z|z[uU])|[fF])(?!\\w))?$"
},
{
captures: {
1: {name: 'keyword.other.unit.octal.slang'},
2: {
name: 'constant.numeric.octal.slang',
patterns: [
{
match: "(?<=[0-9a-fA-F])'(?=[0-9a-fA-F])",
name: 'punctuation.separator.constant.numeric'
}
]
},
3: {name: 'punctuation.separator.constant.numeric'},
4: {name: 'keyword.other.unit.suffix.integer.slang'}
},
match:
"(\\G0)((?:[0-7]|((?<=[0-9a-fA-F])'(?=[0-9a-fA-F])))+)((?:(?:(?:(?:(?:[uU]|[uU]ll?)|[uU]LL?)|ll?[uU]?|[uU]?z|z[uU])|LL?[uU]?)|[fF])(?!\\w))?$"
},
{
captures: {
1: {name: 'keyword.other.unit.hexadecimal.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'},
5: {name: 'keyword.other.unit.exponent.hexadecimal.slang'},
6: {
name: 'keyword.operator.plus.exponent.hexadecimal.slang'
},
7: {
name: 'keyword.operator.minus.exponent.hexadecimal.slang'
},
8: {
name: 'constant.numeric.exponent.hexadecimal.slang',
patterns: [
{
match: "(?<=[0-9a-fA-F])'(?=[0-9a-fA-F])",
name: 'punctuation.separator.constant.numeric'
}
]
},
9: {name: 'keyword.other.unit.suffix.integer.slang'}
},
match:
"(\\G0[xX])([0-9a-fA-F](?:[0-9a-fA-F]|((?<=[0-9a-fA-F])'(?=[0-9a-fA-F])))*)((?<!')([pP])(\\+?)(\\-?)((?:[0-9](?:[0-9]|(?:(?<=[0-9a-fA-F])'(?=[0-9a-fA-F])))*)))?((?:(?:(?:(?:(?:[uU]|[uU]ll?)|[uU]LL?)|ll?[uU]?)|LL?[uU]?|[uU]?z|z[uU])|[fF])(?!\\w))?$"
},
{
captures: {
2: {
name: 'constant.numeric.decimal.slang',
patterns: [
{
match: "(?<=[0-9a-fA-F])'(?=[0-9a-fA-F])",
name: 'punctuation.separator.constant.numeric'
}
]
},
3: {name: 'punctuation.separator.constant.numeric'},
5: {name: 'keyword.other.unit.exponent.decimal.slang'},
6: {name: 'keyword.operator.plus.exponent.decimal.slang'},
7: {name: 'keyword.operator.minus.exponent.decimal.slang'},
8: {
name: 'constant.numeric.exponent.decimal.slang',
patterns: [
{
match: "(?<=[0-9a-fA-F])'(?=[0-9a-fA-F])",
name: 'punctuation.separator.constant.numeric'
}
]
},
9: {name: 'keyword.other.unit.suffix.integer.slang'}
},
match:
"(\\G(?=[0-9.])(?!0[xXbB]))([0-9](?:[0-9]|((?<=[0-9a-fA-F])'(?=[0-9a-fA-F])))*)((?<!')([eE])(\\+?)(\\-?)((?:[0-9](?:[0-9]|(?:(?<=[0-9a-fA-F])'(?=[0-9a-fA-F])))*)))?((?:(?:(?:(?:(?:[uU]|[uU]ll?|[uU]?z|z[uU])|[uU]LL?)|ll?[uU]?)|LL?[uU]?)|[fF])(?!\\w))?$"
},
{
match: "(?:(?:[0-9a-zA-Z_\\.]|')|(?<=[eEpP])[+-])+",
name: 'invalid.illegal.constant.numeric'
}
]
}
]
}
},
match: "(?<!\\w)\\.?\\d(?:(?:[0-9a-zA-Z_\\.]|')|(?<=[eEpP])[+-])*"
},
operators: {
patterns: [
{
match: '(?<![\\w$])(sizeof|countof)(?![\\w$])',
name: 'keyword.operator.sizeof.slang'
},
{
match: '(?<![\\w$])(as)(?![\\w$])',
name: 'keyword.other.additional.slang'
},
{
match: '(?<![\\w$])(is)(?![\\w$])',
name: 'keyword.other.additional.slang'
},
{match: '--', name: 'keyword.operator.decrement.slang'},
{match: '\\+\\+', name: 'keyword.operator.increment.slang'},
{
match: '%=|\\+=|-=|\\*=|(?<!\\()/=',
name: 'keyword.operator.assignment.compound.slang'
},
{
match: '&=|\\^=|<<=|>>=|\\|=',
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:(?<!:):(?!:))', name: 'punctuation.range-based.slang'}
]
},
'pragma-mark': {
captures: {
1: {name: 'meta.preprocessor.pragma.slang'},
2: {name: 'keyword.control.directive.pragma.pragma-mark.slang'},
3: {name: 'punctuation.definition.directive.slang'},
4: {name: 'entity.name.tag.pragma-mark.slang'}
},
match: '^\\s*(((#)\\s*pragma\\s+mark)\\s+(.*))',
name: 'meta.section.slang'
},
predefined_macros: {
patterns: [
{
captures: {
1: {
name: 'entity.name.other.preprocessor.macro.predefined.$1.slang'
}
},
match:
'\\b(__cplusplus|__DATE__|__FILE__|__LINE__|__STDC__|__STDC_HOSTED__|__STDC_NO_COMPLEX__|__STDC_VERSION__|__STDCPP_THREADS__|__TIME__|NDEBUG|__OBJC__|__ASSEMBLER__|__ATOM__|__