{ "$schema": "https://raw.githubusercontent.com/martinring/tmlanguage/master/tmlanguage.json", "name": "TSL", "scopeName": "source.tsl", "fileTypes": ["tsl", "tsf"], "patterns": [ { "include": "#comments" }, { "include": "#strings" }, { "include": "#numbers" }, { "include": "#function-definitions" }, { "include": "#function-calls" }, { "include": "#variable-declarations" }, { "include": "#property-chains" }, { "include": "#keywords" }, { "include": "#operators" }, { "include": "#delimiters" } ], "repository": { "comments": { "patterns": [ { "name": "comment.line.double-slash.tsl", "match": "//.*$", "captures": { "0": { "patterns": [ { "include": "#todo-keywords" } ] } } }, { "name": "comment.block.pascal-style.tsl", "begin": "\\(\\*", "end": "\\*\\)", "patterns": [ { "include": "#todo-keywords" } ] }, { "name": "comment.block.braces.tsl", "begin": "\\{", "end": "\\}", "patterns": [ { "include": "#todo-keywords" } ] } ] }, "todo-keywords": { "patterns": [ { "name": "keyword.other.todo.tsl", "match": "\\b(FIXME|NOTE|NOTES|TODO|XXX)\\b" } ] }, "function-definitions": { "patterns": [ { "name": "meta.function.definition.tsl", "begin": "\\b(function|procedure)\\s+", "beginCaptures": { "1": { "name": "storage.type.function.tsl" } }, "end": "(?=;|\\bbegin\\b)", "patterns": [ { "include": "#function-name" }, { "include": "#function-params" }, { "include": "#return-type" } ] } ] }, "function-name": { "patterns": [ { "name": "entity.name.function.definition.tsl", "match": "(?<=\\b(?:function|procedure)\\s+)(?:(\\w+)\\.)?(\\w+)", "captures": { "1": { "name": "entity.name.type.class.tsl" }, "2": { "name": "entity.name.function.tsl" } } } ] }, "function-params": { "name": "meta.function.parameters.tsl", "begin": "\\(", "end": "\\)", "patterns": [ { "include": "#param-declaration" }, { "include": "#simple-param" }, { "include": "#param-separator" }, { "include": "#strings" }, { "include": "#numbers" }, { "include": "#property-chains" } ] }, "param-declaration": { "name": "meta.parameter.tsl", "match": "(\\w+)\\s*(:)\\s*([^;,)=]*)", "captures": { "1": { "name": "variable.parameter.tsl" }, "2": { "name": "punctuation.separator.type.tsl" }, "3": { "name": "storage.type.tsl" } } }, "simple-param": { "name": "variable.parameter.simple.tsl", "match": "\\b(\\w+)(?=\\s*[,;)])", "captures": { "1": { "name": "variable.parameter.tsl" } } }, "return-type": { "name": "meta.function.return-type.tsl", "match": "(:)\\s*([^;]*)", "captures": { "1": { "name": "punctuation.separator.type.tsl" }, "2": { "name": "storage.type.tsl" } } }, "param-separator": { "name": "punctuation.separator.parameter.tsl", "match": "[;,]" }, "variable-declarations": { "name": "meta.variable.declaration.tsl", "match": "(?=!&|^~%]" } ] }, "delimiters": { "name": "punctuation.separator.tsl", "match": "[()\\[\\]{},;:.@?]" } } }