tm-grammars
Version:
Collecton of TextMate grammars in JSON
611 lines (610 loc) • 12.6 kB
JSON
{
"displayName": "Closure Templates",
"fileTypes": [
"soy"
],
"injections": {
"meta.tag": {
"patterns": [
{
"include": "#body"
}
]
}
},
"name": "soy",
"patterns": [
{
"include": "#alias"
},
{
"include": "#delpackage"
},
{
"include": "#namespace"
},
{
"include": "#template"
},
{
"include": "#comment"
}
],
"repository": {
"alias": {
"captures": {
"1": {
"name": "storage.type.soy"
},
"2": {
"name": "entity.name.type.soy"
},
"3": {
"name": "storage.type.soy"
},
"4": {
"name": "entity.name.type.soy"
}
},
"match": "{(alias)\\s+([\\w\\.]+)(?:\\s+(as)\\s+(\\w+))?}"
},
"attribute": {
"captures": {
"1": {
"name": "storage.other.attribute.soy"
},
"2": {
"name": "string.double.quoted.soy"
}
},
"match": "(\\w+)=(\"(?:\\\\?.)*?\")"
},
"body": {
"patterns": [
{
"include": "#comment"
},
{
"include": "#let"
},
{
"include": "#call"
},
{
"include": "#css"
},
{
"include": "#xid"
},
{
"include": "#condition"
},
{
"include": "#condition-control"
},
{
"include": "#for"
},
{
"include": "#literal"
},
{
"include": "#msg"
},
{
"include": "#special-character"
},
{
"include": "#print"
},
{
"include": "text.html.basic"
}
]
},
"boolean": {
"match": "true|false",
"name": "language.constant.boolean.soy"
},
"call": {
"patterns": [
{
"begin": "{((?:del)?call)\\s+([\\w\\.]+)(?=[^/]*?})",
"beginCaptures": {
"1": {
"name": "storage.type.function.soy"
},
"2": {
"name": "entity.name.function.soy"
}
},
"end": "{/(\\1)}",
"endCaptures": {
"1": {
"name": "storage.type.function.soy"
}
},
"patterns": [
{
"include": "#comment"
},
{
"include": "#variant"
},
{
"include": "#attribute"
},
{
"include": "#param"
}
]
},
{
"begin": "{((?:del)?call)(\\s+[\\w\\.]+)",
"beginCaptures": {
"1": {
"name": "storage.type.function.soy"
},
"2": {
"name": "entity.name.function.soy"
}
},
"end": "/}",
"patterns": [
{
"include": "#variant"
},
{
"include": "#attribute"
}
]
}
]
},
"comment": {
"patterns": [
{
"begin": "/\\*",
"end": "\\*/",
"name": "comment.block.documentation.soy",
"patterns": [
{
"captures": {
"1": {
"name": "keyword.parameter.soy"
},
"2": {
"name": "variable.parameter.soy"
}
},
"match": "(@param\\??)\\s+(\\S+)"
}
]
},
{
"match": "^\\s*(\\/\\/.*)$",
"name": "comment.line.double-slash.soy"
}
]
},
"condition": {
"begin": "{/?(if|elseif|switch|case)\\s*",
"beginCaptures": {
"1": {
"name": "keyword.control.soy"
}
},
"end": "}",
"patterns": [
{
"include": "#attribute"
},
{
"include": "#expression"
}
]
},
"condition-control": {
"captures": {
"1": {
"name": "keyword.control.soy"
}
},
"match": "{(else|ifempty|default)}"
},
"css": {
"begin": "{(css)\\s+",
"beginCaptures": {
"1": {
"name": "keyword.other.soy"
}
},
"end": "}",
"patterns": [
{
"include": "#expression"
}
]
},
"delpackage": {
"captures": {
"1": {
"name": "storage.type.soy"
},
"2": {
"name": "entity.name.type.soy"
}
},
"match": "{(delpackage)\\s+([\\w\\.]+)}"
},
"expression": {
"patterns": [
{
"include": "#boolean"
},
{
"include": "#number"
},
{
"include": "#function"
},
{
"include": "#null"
},
{
"include": "#string"
},
{
"include": "#variable-ref"
},
{
"include": "#operator"
}
]
},
"for": {
"begin": "{/?(foreach|for)(?=\\s|})",
"beginCaptures": {
"1": {
"name": "keyword.control.soy"
}
},
"end": "}",
"patterns": [
{
"match": "in",
"name": "keyword.control.soy"
},
{
"include": "#expression"
},
{
"include": "#body"
}
]
},
"function": {
"begin": "(\\w+)\\(",
"beginCaptures": {
"1": {
"name": "support.function.soy"
}
},
"end": "\\)",
"patterns": [
{
"include": "#expression"
}
]
},
"let": {
"patterns": [
{
"begin": "{(let)\\s+(\\$\\w+\\s*:)",
"beginCaptures": {
"1": {
"name": "storage.type.soy"
},
"2": {
"name": "variable.soy"
}
},
"end": "/}",
"patterns": [
{
"include": "#comment"
},
{
"include": "#expression"
}
]
},
{
"begin": "{(let)\\s+(\\$\\w+)",
"beginCaptures": {
"1": {
"name": "storage.type.soy"
},
"2": {
"name": "variable.soy"
}
},
"end": "{/(\\1)}",
"endCaptures": {
"1": {
"name": "storage.type.soy"
}
},
"patterns": [
{
"include": "#attribute"
},
{
"include": "#body"
}
]
}
]
},
"literal": {
"begin": "{(literal)}",
"beginCaptures": {
"1": {
"name": "keyword.other.soy"
}
},
"end": "{/(\\1)}",
"endCaptures": {
"1": {
"name": "keyword.other.soy"
}
},
"name": "meta.literal"
},
"msg": {
"captures": {
"1": {
"name": "keyword.other.soy"
}
},
"end": "}",
"match": "{/?(msg|fallbackmsg)",
"patterns": [
{
"include": "#attribute"
}
]
},
"namespace": {
"captures": {
"1": {
"name": "storage.type.soy"
},
"2": {
"name": "entity.name.type.soy"
}
},
"match": "{(namespace)\\s+([\\w\\.]+)}"
},
"null": {
"match": "null",
"name": "language.constant.null.soy"
},
"number": {
"match": "-?\\.?\\d+|\\d[\\.\\d]*",
"name": "language.constant.numeric"
},
"operator": {
"match": "-|not|\\*|\\/|%|\\+|<=|>=|<|>|==|!=|and|or|\\?:|\\?|:",
"name": "keyword.operator.soy"
},
"param": {
"patterns": [
{
"begin": "{(param)\\s+(\\w+\\s*\\:)",
"beginCaptures": {
"1": {
"name": "storage.type.soy"
},
"2": {
"name": "variable.parameter.soy"
}
},
"end": "/}",
"patterns": [
{
"include": "#expression"
}
]
},
{
"begin": "{(param)\\s+(\\w+)",
"beginCaptures": {
"1": {
"name": "storage.type.soy"
},
"2": {
"name": "variable.parameter.soy"
}
},
"end": "{/(\\1)}",
"endCaptures": {
"1": {
"name": "storage.type.soy"
}
},
"patterns": [
{
"include": "#attribute"
},
{
"include": "#body"
}
]
}
]
},
"print": {
"begin": "{(print)?\\s*",
"beginCaptures": {
"1": {
"name": "keyword.other.soy"
}
},
"end": "}",
"patterns": [
{
"captures": {
"1": {
"name": "support.function.soy"
}
},
"match": "\\|\\s*(changeNewlineToBr|truncate|bidiSpanWrap|bidiUnicodeWrap)"
},
{
"include": "#expression"
}
]
},
"special-character": {
"captures": {
"1": {
"name": "language.support.constant"
}
},
"match": "{(sp|nil|\\\\r|\\\\n|\\\\t|lb|rb)}"
},
"string": {
"begin": "'",
"end": "'",
"name": "string.quoted.single.soy",
"patterns": [
{
"match": "\\\\(?:[\\\\'\"nrtbf]|u[0-9a-fA-F]{4})",
"name": "constant.character.escape.soy"
}
]
},
"template": {
"begin": "{(template|deltemplate)\\s([\\w\\.]+)",
"beginCaptures": {
"1": {
"name": "storage.type.soy"
},
"2": {
"name": "entity.name.function.soy"
}
},
"end": "{(/\\1)}",
"endCaptures": {
"1": {
"name": "storage.type.soy"
}
},
"patterns": [
{
"begin": "{(@param)(\\??)\\s+(\\S+\\s*:)",
"beginCaptures": {
"1": {
"name": "keyword.parameter.soy"
},
"2": {
"name": "storage.modifier.keyword.operator.soy"
},
"3": {
"name": "variable.parameter.soy"
}
},
"end": "}",
"name": "meta.parameter.soy",
"patterns": [
{
"include": "#type"
}
]
},
{
"include": "#variant"
},
{
"include": "#body"
},
{
"include": "#attribute"
}
]
},
"type": {
"patterns": [
{
"match": "any|null|\\?|string|bool|int|float|number|html|uri|js|css|attributes",
"name": "support.type.soy"
},
{
"begin": "(list|map)(<)",
"beginCaptures": {
"1": {
"name": "support.type.soy"
},
"2": {
"name": "support.type.punctuation.soy"
}
},
"end": "(>)",
"endCaptures": {
"1": {
"name": "support.type.modifier.soy"
}
},
"patterns": [
{
"include": "#type"
}
]
}
]
},
"variable-ref": {
"match": "\\$[\\a-zA-Z_][\\w\\.]*",
"name": "variable.other.soy"
},
"variant": {
"begin": "(variant)=(\")",
"beginCaptures": {
"1": {
"name": "storage.other.attribute.soy"
},
"2": {
"name": "string.double.quoted.soy"
}
},
"contentName": "string.double.quoted.soy",
"end": "(\")",
"endCaptures": {
"1": {
"name": "string.double.quoted.soy"
}
},
"patterns": [
{
"include": "#expression"
}
]
},
"xid": {
"begin": "{(xid)\\s+",
"beginCaptures": {
"1": {
"name": "keyword.other.soy"
}
},
"end": "}",
"patterns": [
{
"include": "#expression"
}
]
}
},
"scopeName": "text.html.soy"
}