tm-grammars
Version:
Collecton of TextMate grammars in JSON
344 lines (343 loc) • 7.75 kB
JSON
{
"displayName": "ROS Interface",
"fileTypes": [
"msg",
"srv",
"action"
],
"name": "rosmsg",
"patterns": [
{
"include": "#separators"
},
{
"include": "#lines"
},
{
"include": "#comments"
}
],
"repository": {
"attributes": {
"match": "@optional\\b",
"name": "storage.modifier.attribute.rosmsg"
},
"builtin-types": {
"match": "\\b(?:bool|byte|char|u?int(?:8|16|32|64)|float(?:32|64)|w?string|time|duration)\\b",
"name": "storage.type.rosmsg"
},
"comments": {
"match": "#.*",
"name": "comment.line.number-sign.rosmsg"
},
"field-other": {
"begin": "(?=\\b[A-Z_a-z])",
"end": "$|(?=#)",
"patterns": [
{
"captures": {
"0": {
"patterns": [
{
"include": "#builtin-types"
}
]
}
},
"match": "\\G[/-9A-Z_a-z]+",
"name": "support.type.rosmsg"
},
{
"match": "\\d+",
"name": "constant.numeric.integer.rosmsg"
},
{
"begin": "(?=[A-Z_a-z])",
"end": "$|(?=#)",
"patterns": [
{
"include": "#field-other-after-type"
}
]
}
]
},
"field-other-after-type": {
"patterns": [
{
"match": "\\G[0-9A-Z_a-z]+",
"name": "variable.other.field.rosmsg"
},
{
"begin": "",
"end": "$|(?=#)",
"patterns": [
{
"include": "#literal-other"
},
{
"include": "#literal-other-array"
}
]
}
]
},
"field-string": {
"begin": "(?=\\bw?string\\b)",
"end": "$|(?=#)",
"patterns": [
{
"captures": {
"0": {
"name": "storage.type.rosmsg"
}
},
"match": "\\Gw?string\\b"
},
{
"match": "\\d+",
"name": "constant.numeric.integer.rosmsg"
},
{
"begin": "(?=[A-Z_a-z])",
"end": "$|(?=#)",
"patterns": [
{
"include": "#field-string-after-type"
}
]
}
]
},
"field-string-after-type": {
"patterns": [
{
"match": "\\G[0-9A-Z_a-z]+",
"name": "variable.other.field.rosmsg"
},
{
"begin": "=|(?<=\\s)",
"end": "$|(?=#)",
"patterns": [
{
"include": "#literal-string"
}
]
}
]
},
"field-string-array": {
"begin": "(?=\\bw?string[<=\\d]*\\[)",
"end": "$|(?=#)",
"patterns": [
{
"captures": {
"0": {
"name": "storage.type.rosmsg"
}
},
"match": "\\Gw?string\\b",
"name": "support.type.rosmsg"
},
{
"match": "\\d+",
"name": "constant.numeric.integer.rosmsg"
},
{
"begin": "(?=[A-Z_a-z])",
"end": "$|(?=#)",
"patterns": [
{
"include": "#field-string-array-after-type"
}
]
}
]
},
"field-string-array-after-type": {
"patterns": [
{
"match": "\\G[0-9A-Z_a-z]+",
"name": "variable.other.field.rosmsg"
},
{
"begin": "(?<=\\s)",
"end": "$|(?=#)",
"name": "meta.default-value.rosmsg",
"patterns": [
{
"include": "#literal-string-array"
}
]
}
]
},
"lines": {
"patterns": [
{
"include": "#attributes"
},
{
"include": "#field-string-array"
},
{
"include": "#field-string"
},
{
"include": "#field-other"
}
]
},
"literal-other": {
"patterns": [
{
"match": "[-+]?(?:(?:\\d+(?:_\\d+)*)?\\.\\d+(?:_\\d+)*|\\d+(?:_\\d+)*\\.)(?:[Ee][-+]?\\d+(?:_\\d+)*)?",
"name": "constant.numeric.float.rosmsg"
},
{
"match": "[-+]?\\d+(?:_\\d+)*",
"name": "constant.numeric.integer.rosmsg"
},
{
"match": "(?i)\\b(?:true|false)\\b",
"name": "constant.language.boolean.rosmsg"
}
]
},
"literal-other-array": {
"patterns": [
{
"begin": "\\[",
"end": "]|$|(?=#)",
"name": "meta.array.rosmsg",
"patterns": [
{
"include": "#literal-other"
}
]
}
]
},
"literal-string": {
"patterns": [
{
"include": "#literal-string-quoted"
},
{
"include": "#literal-string-unquoted"
}
]
},
"literal-string-array": {
"patterns": [
{
"begin": "\\[",
"end": "]|$|(?=#)",
"name": "meta.array.rosmsg",
"patterns": [
{
"include": "#literal-string-quoted"
},
{
"include": "#literal-string-unquoted-in-array"
}
]
}
]
},
"literal-string-escape": {
"patterns": [
{
"match": "\\\\(?:[0-7]{3}|x\\h{2}|u\\h{4}|U\\h{8}|.)",
"name": "constant.character.escape.rosmsg"
}
]
},
"literal-string-quoted": {
"patterns": [
{
"begin": "\"",
"beginCaptures": {
"0": {
"name": "punctuation.definition.string.begin.rosmsg"
}
},
"end": "\"|$",
"endCaptures": {
"0": {
"name": "punctuation.definition.string.end.rosmsg"
}
},
"name": "string.quoted.double.rosmsg",
"patterns": [
{
"include": "#literal-string-escape"
}
]
},
{
"begin": "'",
"beginCaptures": {
"0": {
"name": "punctuation.definition.string.begin.rosmsg"
}
},
"end": "'|$",
"endCaptures": {
"0": {
"name": "punctuation.definition.string.end.rosmsg"
}
},
"name": "string.quoted.single.rosmsg",
"patterns": [
{
"include": "#literal-string-escape"
}
]
}
]
},
"literal-string-unquoted": {
"begin": "(?=[^\"'\\s])",
"end": "(?=\\s*(?:#|$))",
"name": "string.unquoted.rosmsg",
"patterns": [
{
"include": "#literal-string-escape"
}
]
},
"literal-string-unquoted-in-array": {
"begin": "(?=[^]\"',\\s])",
"end": "(?=\\s*(?:$|[],]))",
"name": "string.unquoted.rosmsg",
"patterns": [
{
"include": "#literal-string-escape"
}
]
},
"separators": {
"patterns": [
{
"match": "^---\\s*$\\n?",
"name": "meta.separator.rosmsg"
},
{
"match": "^={3,}\\s*$\\n?",
"name": "meta.separator.rosmsg"
},
{
"captures": {
"1": {
"name": "entity.name.type.class.rosmsg"
}
},
"match": "^MSG:\\s+([/-9A-Z_a-z]+)\\s*$\\n?",
"name": "meta.separator.rosmsg"
}
]
}
},
"scopeName": "source.rosmsg"
}