{ "$schema": "https://raw.githubusercontent.com/martinring/tmlanguage/master/tmlanguage.json", "name": "4690 BASIC", "patterns": [ { "include": "#comments" }, { "include": "#strings" }, { "name": "string.regexp", "match": "\\b[\\w\\.]+:" }, { "name": "meta", "match": "\\s:" }, { "include": "#function-decl" }, { "include": "#function-end" }, { "include": "#subroutine-decl" }, { "include": "#subroutine-end" }, { "include": "#integer-decl" }, { "include": "#string-decl" }, { "include": "#real-decl" }, { "include": "#math-function" }, { "include": "#if-statement" }, { "include": "#if-statement-end" }, { "include": "#else" }, { "include": "#then" }, { "include": "#for-statement" }, { "include": "#arithmetic-operator" }, { "include": "#relational-operator" }, { "include": "#logical-operator" }, { "include": "#line-continuation" }, { "include": "#keywords" }, { "include": "#stmt-w-parameters" }, { "include": "#access-stmt" }, { "include": "#dim-stmt" }, { "include": "#compiler-directives" }, { "include": "#on-error" }, { "include": "#open-close" }, { "include": "#number-literal" }, { "include": "#string-function" }, { "include": "#identifier" } ], "repository": { "comments": { "patterns": [ { "name": "comment.line", "match": "!.*|\\bREM.*|\\bREMARK.*" } ] }, "strings": { "name": "string.quoted.double", "begin": "\"", "end": "\"" }, "line-continuation": { "name": "meta.line.continuation", "match": "\\\\(.*)\\n", "captures": { "1": { "name": "comment" } } }, "function-decl": { "name": "meta.function", "begin": "(?i)\\b(FUNCTION|DEF)\\s+((\\?|[a-zA-Z])([a-zA-Z0-9#.]*)[\\$#%]?)", "beginCaptures": { "1": { "name": "storage.type.function" }, "2": { "name": "entity.name.function" } }, "patterns": [ { "include": "#parameter-list" }, { "include": "#fun-sub-modifier" }, { "include": "#line-continuation" }, { "include": "#comments" } ], "end": "(?|<|=>|>|=)|\\b(LT|LE|GT|GE|EQ|NE)\\b" }, "logical-operator": { "name": "keyword.operator.logical", "match": "(?i)\\b(NOT|AND|OR|XOR)($|\\n|\\s\\()" }, "string-operator": { "name": "keyword.operator", "match": "[+]" }, "string-function": { "name": "support.function.builtin", "match": "(?i)\\b(ASC|LEN|PACK\\$|TRANSLATE\\$|UCASE\\$|UNPACK\\$|VAL|MID\\$|LEFT\\$|RIGHT\\$|MATCH|SUBSTR|STRING\\$)(?=\\s*\\()", "captures": { "1": { "name": "support.function.builtin"} } }, "string-expression": { "name": "meta.expression.string", "patterns": [ { "include": "#strings" }, { "include": "#string-operator" }, { "include": "#identifier" }, { "name": "\\s+", "match": "text.whitespace" } ] }, "logical-expression": { "name": "meta.expression.logical", "patterns": [ { "include": "#strings" }, { "include": "#logical-operator" }, { "include": "#identifier" }, { "include": "#number-literal" }, { "name": "variable.name", "match": "(\\?|[a-zA-Z])([a-zA-Z0-9#.]*)%?" }, { "name": "\\s+", "match": "text.whitespace" } ] }, "relational-expression": { "name": "meta.expression.relational", "patterns": [ { "include": "#strings" }, { "include": "#relational-operator" }, { "include": "#identifier" }, { "include": "#number-literal" }, { "name": "variable.name", "match": "(\\?|[a-zA-Z])([a-zA-Z0-9#.]*)%?" }, { "name": "\\s+", "match": "text.whitespace" } ] }, "general-expression": { "name": "meta.expression", "patterns": [ { "include": "#logical-expression" }, { "include": "#relational-expression" }, { "include": "#numeric-expression" }, { "include": "#string-expression" } ] }, "keywords": { "patterns": [ { "name": "keyword.control", "match": "(?i)\\b(GOSUB|RETURN|GOTO|WHILE|WEND|NEXT|ON|ERROR|STOP|RANDOMIZE|CHAIN|COMMON|CALL|EXIT\\s+SUB|EXIT\\s+FUNCTION|FORM)\\b[^%\\$\\.]" }, { "name": "support.function", "match": "(?i)\\b(NULL|TRUE|FALSE|READ|WRITE|KEY|NOWRITE|NODEL)\\b[^%\\$\\.]" } ] }, "single-stmts": { "name": "support.function", "match": "(COMMAND$|CONCHAR%|CONSOLE|DATE$)" }, "stmt-w-parameters": { "begin": "(?i)\\b(ASSIGNKEY|CHDIR|COMMON|CLEARS|DATA|DELETE|DELREC|GOSUB|GOTO|INPUT( LINE)?|MKDIR|NEXT|POINT|POKE|PUT|PUTLONG|READ MATRIX|RESUME|RMDIR|USE|WAIT)\\b", "beginCaptures": { "0": { "name": "keyword.other" } }, "patterns": [ { "include": "#io-session" }, { "include": "#string-expression" }, { "include": "#numeric-expression" }, { "include": "#identifier" }, { "match": "\\s+", "name": "text.whitespace" } ], "end": "(?