tm-grammars
Version:
Collecton of TextMate grammars in JSON
540 lines (539 loc) • 11.7 kB
JSON
{
"displayName": "TalonScript",
"name": "talonscript",
"patterns": [
{
"include": "#body-header"
},
{
"include": "#header"
},
{
"include": "#body-noheader"
},
{
"include": "#comment"
},
{
"include": "#settings"
}
],
"repository": {
"action": {
"begin": "([.0-9A-Z_a-z]+)(\\()",
"beginCaptures": {
"1": {
"name": "entity.name.function.talon",
"patterns": [
{
"match": "\\.",
"name": "punctuation.separator.talon"
}
]
},
"2": {
"name": "punctuation.definition.parameters.begin.talon"
}
},
"end": "(\\))",
"endCaptures": {
"1": {
"name": "punctuation.definition.parameters.end.talon"
}
},
"name": "variable.parameter.talon",
"patterns": [
{
"include": "#action"
},
{
"include": "#qstring-long"
},
{
"include": "#qstring"
},
{
"include": "#argsep"
},
{
"include": "#number"
},
{
"include": "#operator"
},
{
"include": "#varname"
}
]
},
"action-gamepad": {
"captures": {
"2": {
"name": "punctuation.definition.parameters.begin.talon"
},
"3": {
"name": "variable.parameter.talon",
"patterns": [
{
"include": "#key-mods"
}
]
},
"4": {
"name": "punctuation.definition.parameters.key.talon"
}
},
"match": "(deck|gamepad|action|face|parrot)(\\()(.*)(\\))",
"name": "entity.name.function.talon"
},
"action-key": {
"captures": {
"1": {
"name": "punctuation.definition.parameters.begin.talon"
},
"2": {
"name": "variable.parameter.talon",
"patterns": [
{
"include": "#key-prefixes"
},
{
"include": "#key-mods"
},
{
"include": "#keystring"
}
]
},
"3": {
"name": "punctuation.definition.parameters.key.talon"
}
},
"match": "key(\\()(.*)(\\))",
"name": "entity.name.function.talon"
},
"argsep": {
"match": ",",
"name": "punctuation.separator.talon"
},
"assignment": {
"begin": "(\\S*)(\\s?=\\s?)",
"beginCaptures": {
"1": {
"name": "variable.other.talon"
},
"2": {
"name": "keyword.operator.talon"
}
},
"end": "\\n",
"patterns": [
{
"include": "#comment"
},
{
"include": "#comment-invalid"
},
{
"include": "#expression"
}
]
},
"body-header": {
"begin": "^-$",
"end": "(?=not)possible",
"patterns": [
{
"include": "#body-noheader"
}
]
},
"body-noheader": {
"patterns": [
{
"include": "#comment"
},
{
"include": "#comment-invalid"
},
{
"include": "#other-rule-definition"
},
{
"include": "#speech-rule-definition"
}
]
},
"capture": {
"match": "(<[.0-9A-Z_a-z]+>)",
"name": "variable.parameter.talon"
},
"comment": {
"match": "^\\s*(#.*)$",
"name": "comment.line.number-sign.talon"
},
"comment-invalid": {
"match": "(\\s*#.*)$",
"name": "invalid.illegal"
},
"context": {
"captures": {
"1": {
"name": "entity.name.tag.talon",
"patterns": [
{
"match": "(and |or )",
"name": "keyword.operator.talon"
}
]
},
"2": {
"name": "entity.name.type.talon",
"patterns": [
{
"include": "#comment"
},
{
"include": "#comment-invalid"
},
{
"include": "#regexp"
}
]
}
},
"match": "(.*): (.*)"
},
"expression": {
"patterns": [
{
"include": "#qstring-long"
},
{
"include": "#action-key"
},
{
"include": "#action"
},
{
"include": "#operator"
},
{
"include": "#number"
},
{
"include": "#qstring"
},
{
"include": "#varname"
}
]
},
"fstring": {
"captures": {
"1": {
"patterns": [
{
"include": "#action"
},
{
"include": "#operator"
},
{
"include": "#number"
},
{
"include": "#varname"
},
{
"include": "#qstring"
}
]
}
},
"match": "\\{(.+?)}",
"name": "constant.character.format.placeholder.talon"
},
"header": {
"begin": "(?=(?:^app|title|os|tag|list|language):)",
"end": "(?=^-$)",
"patterns": [
{
"include": "#comment"
},
{
"include": "#context"
}
]
},
"key-mods": {
"captures": {
"1": {
"name": "keyword.operator.talon"
},
"2": {
"name": "keyword.control.talon"
}
},
"match": "(:)(up|down|change|repeat|start|stop|\\d+)",
"name": "keyword.operator.talon"
},
"key-prefixes": {
"captures": {
"1": {
"name": "keyword.control.talon"
},
"2": {
"name": "keyword.operator.talon"
}
},
"match": "(ctrl|shift|cmd|alt|win|super)(-)"
},
"keystring": {
"begin": "([\"'])",
"beginCaptures": {
"1": {
"name": "punctuation.definition.string.begin.talon"
}
},
"end": "(\\1)|$",
"endCaptures": {
"1": {
"name": "punctuation.definition.string.end.talon"
}
},
"name": "string.quoted.double.talon",
"patterns": [
{
"include": "#string-body"
},
{
"include": "#key-mods"
},
{
"include": "#key-prefixes"
}
]
},
"list": {
"match": "(\\{[.0-9A-Z_a-z]+?})",
"name": "string.interpolated.talon"
},
"number": {
"match": "(?<=\\b)\\d+(\\.\\d+)?",
"name": "constant.numeric.talon"
},
"operator": {
"match": "\\s([-*+/]|or)\\s",
"name": "keyword.operator.talon"
},
"other-rule-definition": {
"begin": "^([a-z]+\\(.*[^-]\\)|[a-z]+\\(.*--\\)|[a-z]+\\(-\\)|[a-z]+\\(\\)):",
"beginCaptures": {
"1": {
"name": "entity.name.tag.talon",
"patterns": [
{
"include": "#action-key"
},
{
"include": "#action-gamepad"
},
{
"include": "#rule-specials"
}
]
}
},
"end": "(?=^[^#\\s])",
"patterns": [
{
"include": "#statement"
}
]
},
"qstring": {
"begin": "([\"'])",
"beginCaptures": {
"1": {
"name": "punctuation.definition.string.begin.talon"
}
},
"end": "(\\1)|$",
"endCaptures": {
"1": {
"name": "punctuation.definition.string.end.talon"
}
},
"name": "string.quoted.double.talon",
"patterns": [
{
"include": "#string-body"
}
]
},
"qstring-long": {
"begin": "(\"\"\"|''')",
"beginCaptures": {
"1": {
"name": "punctuation.definition.string.begin.talon"
}
},
"end": "(\\1)",
"endCaptures": {
"1": {
"name": "punctuation.definition.string.end.talon"
}
},
"name": "string.quoted.triple.talon",
"patterns": [
{
"include": "#string-body"
}
]
},
"regexp": {
"begin": "(/)",
"end": "(/)",
"name": "string.regexp.talon",
"patterns": [
{
"match": "\\.",
"name": "support.other.match.any.regexp"
},
{
"match": "\\$",
"name": "support.other.match.end.regexp"
},
{
"match": "\\^",
"name": "support.other.match.begin.regexp"
},
{
"match": "\\\\[$*+.?^]",
"name": "constant.character.escape.talon"
},
{
"match": "\\[(\\\\]|[^]])*]",
"name": "constant.other.set.regexp"
},
{
"match": "[*+?]",
"name": "keyword.operator.quantifier.regexp"
}
]
},
"rule-specials": {
"captures": {
"1": {
"name": "entity.name.function.talon"
},
"2": {
"name": "punctuation.definition.parameters.begin.talon"
},
"3": {
"name": "punctuation.definition.parameters.end.talon"
}
},
"match": "(settings|tag)(\\()(\\))"
},
"speech-rule-definition": {
"begin": "^(.*?):",
"beginCaptures": {
"1": {
"name": "entity.name.tag.talon",
"patterns": [
{
"match": "^\\^",
"name": "string.regexp.talon"
},
{
"match": "\\$$",
"name": "string.regexp.talon"
},
{
"match": "\\(",
"name": "punctuation.definition.parameters.begin.talon"
},
{
"match": "\\)",
"name": "punctuation.definition.parameters.end.talon"
},
{
"match": "\\|",
"name": "punctuation.separator.talon"
},
{
"include": "#capture"
},
{
"include": "#list"
}
]
}
},
"end": "(?=^[^#\\s])",
"patterns": [
{
"include": "#statement"
}
]
},
"statement": {
"patterns": [
{
"include": "#comment"
},
{
"include": "#comment-invalid"
},
{
"include": "#qstring-long"
},
{
"include": "#action-key"
},
{
"include": "#action"
},
{
"include": "#qstring"
},
{
"include": "#assignment"
}
]
},
"string-body": {
"patterns": [
{
"match": "\\{\\{|}}",
"name": "string.quoted.double.talon"
},
{
"match": "\\\\[\"'\\\\nrt]",
"name": "constant.character.escape.python"
},
{
"include": "#fstring"
}
]
},
"varname": {
"captures": {
"2": {
"name": "constant.numeric.talon",
"patterns": [
{
"match": "_",
"name": "keyword.operator.talon"
}
]
}
},
"match": "([.0-9A-Z_a-z])(_(list|\\d+)(?=[^.0-9A-Z_a-z]))?",
"name": "variable.parameter.talon"
}
},
"scopeName": "source.talon"
}