{ "name": "CIE Pseudocode", "scopeName": "source.cie-pseudocode", "patterns": [ { "include": "#code" } ], "repository": { "line_comment": { "begin": "(//)", "end": "$", "beginCaptures": { "1": { "name": "punctuation.definition.comment.cie-pseudocode" } }, "endCaptures": {}, "name": "comment.line.double-slash.cie-pseudocode", "patterns": [] }, "strings": { "patterns": [ { "begin": "\"", "end": "(\")(C)?|$", "beginCaptures": { "0": { "name": "punctuation.definition.string.begin.cie-pseudocode" } }, "endCaptures": { "1": { "name": "punctuation.definition.string.end.cie-pseudocode" }, "2": { "name": "keyword.other.suffix.literal.user-defined.string.cpp" } }, "name": "string.quoted.double.cie-pseudocode", "patterns": [ { "include": "#escapes" } ] }, { "begin": "'", "end": "(')|$", "beginCaptures": { "0": { "name": "punctuation.definition.string.begin.cie-pseudocode" } }, "endCaptures": { "1": { "name": "punctuation.definition.string.end.cie-pseudocode" } }, "name": "string.quoted.single.cie-pseudocode", "patterns": [ { "include": "#escapes" } ] } ] }, "escapes": { "patterns": [ { "match": "\\\\(?:['\"?\\\\abfnrtv]|[0-7]{1,3}|x[0-9A-Fa-f]+|u[0-9A-Fa-f]{4}|U[0-9A-Fa-f]{8})", "name": "constant.character.escape" }, { "match": "\\\\[^\\r\\n]" } ] }, "type_tokens": { "patterns": [ { "include": "#line_comment" }, { "match": "(?", "name": "punctuation.section.angle-brackets.end.template.call.cpp" }, { "match": "\\.\\.\\.", "name": "punctuation.vararg-ellipses.cpp" }, { "match": ",", "name": "punctuation.separator.delimiter.comma.cie-pseudocode" } ] }, "type_annotation": { "match": "(:)\\s*((?[A-Za-z_][A-Za-z0-9_]*(?:\\s*<\\s*\\g(?:\\s*,\\s*\\g)*\\s*>)?(?:\\s*\\.\\.\\.)?))", "captures": { "1": { "name": "punctuation.separator.cie-pseudocode" }, "2": { "patterns": [ { "include": "#type_tokens" } ] } } }, "element_type": { "match": "(?[A-Za-z_][A-Za-z0-9_]*(?:\\s*<\\s*\\g(?:\\s*,\\s*\\g)*\\s*>)?(?:\\s*\\.\\.\\.)?))", "captures": { "1": { "name": "storage.modifier.cie-pseudocode" }, "2": { "patterns": [ { "include": "#type_tokens" } ] } } }, "return_type": { "match": "(?[A-Za-z_][A-Za-z0-9_]*(?:\\s*<\\s*\\g(?:\\s*,\\s*\\g)*\\s*>)?(?:\\s*\\.\\.\\.)?))", "captures": { "1": { "name": "storage.modifier.cie-pseudocode" }, "2": { "patterns": [ { "include": "#type_tokens" } ] } } }, "array_bounds": { "begin": "\\[", "end": "\\]", "beginCaptures": { "0": { "name": "punctuation.section.brackets.cie-pseudocode" } }, "endCaptures": { "0": { "name": "punctuation.section.brackets.cie-pseudocode" } }, "patterns": [ { "include": "#array_bounds" }, { "include": "#code" } ], "comment": "Keep array bound expressions outside declaration type annotations, including nested indexing." }, "declaration": { "begin": "(?[A-Za-z_][A-Za-z0-9_]*(?:\\s*<\\s*\\g(?:\\s*,\\s*\\g)*\\s*>)?(?:\\s*\\.\\.\\.)?))", "captures": { "1": { "name": "keyword.operator.cie-pseudocode" }, "2": { "name": "keyword.operator.cie-pseudocode" }, "3": { "patterns": [ { "include": "#type_tokens" } ] } } }, { "include": "#code" } ] }, "template_declaration": { "match": "(?[A-Za-z_][A-Za-z0-9_]*(?:\\s*<\\s*\\g(?:\\s*,\\s*\\g)*\\s*>)?(?:\\s*\\.\\.\\.)?)(?:\\s*,\\s*\\g)*\\s*>)", "captures": { "1": { "name": "storage.type.template.cpp" }, "2": { "patterns": [ { "include": "#template_parameters" } ] } } }, "template_call": { "match": "(?[A-Za-z_][A-Za-z0-9_]*(?:\\s*<\\s*\\g(?:\\s*,\\s*\\g)*\\s*>)?(?:\\s*\\.\\.\\.)?)(?:\\s*,\\s*\\g)*\\s*>)(?=\\s*\\()", "captures": { "1": { "name": "entity.name.function.cie-pseudocode" }, "2": { "patterns": [ { "include": "#type_tokens" } ] } }, "comment": "Balanced type lookahead follows Parser::isTemplateCall; a following parenthesis distinguishes calls from comparisons." }, "new_type": { "match": "(?[A-Za-z_][A-Za-z0-9_]*(?:\\s*<\\s*\\g(?:\\s*,\\s*\\g)*\\s*>)?(?:\\s*\\.\\.\\.)?))", "captures": { "1": { "name": "keyword.operator.new.cpp" }, "2": { "patterns": [ { "include": "#type_tokens" } ] } } }, "parameters": { "begin": "\\(", "end": "\\)", "beginCaptures": { "0": { "name": "punctuation.section.parens.cie-pseudocode" } }, "endCaptures": { "0": { "name": "punctuation.section.parens.cie-pseudocode" } }, "patterns": [ { "include": "#array_bounds" }, { "include": "#type_annotation" }, { "include": "#element_type" }, { "include": "#code" } ] }, "function_header": { "begin": "(?[A-Za-z_][A-Za-z0-9_]*(?:\\s*<\\s*\\g(?:\\s*,\\s*\\g)*\\s*>)?(?:\\s*\\.\\.\\.)?))", "captures": { "2": { "name": "punctuation.separator.cie-pseudocode" }, "3": { "patterns": [ { "include": "#type_tokens" } ] } } }, { "include": "#code" } ] }, "code": { "patterns": [ { "include": "#line_comment" }, { "include": "#strings" }, { "include": "#preprocessor" }, { "include": "#class" }, { "include": "#type_declaration" }, { "include": "#declaration" }, { "include": "#template_declaration" }, { "include": "#function_header" }, { "include": "#extern_parameters" }, { "include": "#new_type" }, { "include": "#return_type" }, { "match": "(?|<=|>=|[+*/=&^<>-]", "name": "keyword.operator.cie-pseudocode" }, { "match": "(?", "name": "punctuation.section.angle-brackets.end.template.definition.cpp" }, { "include": "#type_tokens" } ] }, "preprocessor": { "begin": "^\\s*(?:(PP_DEFINE)|(PP_UNDEF)|(PP_IFDEF|PP_IFNDEF)|(PP_ENDIF))\\b", "end": "$", "beginCaptures": { "1": { "name": "keyword.control.directive.define.cpp" }, "2": { "name": "keyword.control.directive.undef.cpp" }, "3": { "name": "keyword.control.directive.conditional.cpp" }, "4": { "name": "keyword.control.directive.conditional.cpp" } }, "name": "meta.preprocessor.cie-pseudocode", "patterns": [ { "include": "#line_comment" }, { "match": "[A-Za-z_][A-Za-z0-9_]*", "name": "entity.name.function.preprocessor.cpp" } ] } }, "injections": { "L:meta.method.cie-pseudocode -comment -string": { "patterns": [ { "match": "(?