tm-grammars
Version:
Collecton of TextMate grammars in JSON
207 lines (206 loc) • 5.15 kB
JSON
{
"displayName": "Fluent",
"name": "fluent",
"patterns": [
{
"include": "#comment"
},
{
"include": "#message"
},
{
"include": "#wrong-line"
}
],
"repository": {
"attributes": {
"begin": "\\s*(\\.[A-Za-z][-0-9A-Z_a-z]*\\s*=\\s*)",
"beginCaptures": {
"1": {
"name": "support.class.attribute-begin.fluent"
}
},
"end": "^(?=\\s*[^.])",
"patterns": [
{
"include": "#placeable"
}
]
},
"comment": {
"match": "^##?#?\\s.*$",
"name": "comment.fluent"
},
"function-comma": {
"match": ",",
"name": "support.function.function-comma.fluent"
},
"function-named-argument": {
"begin": "([0-9A-Za-z]+:)\\s*([\"0-9A-Za-z]+)",
"beginCaptures": {
"1": {
"name": "support.function.named-argument.name.fluent"
},
"2": {
"name": "variable.other.named-argument.value.fluent"
}
},
"end": "(?=[),\\s])",
"name": "variable.other.named-argument.fluent"
},
"function-positional-argument": {
"match": "\\$[-0-9A-Z_a-z]+",
"name": "variable.other.function.positional-argument.fluent"
},
"invalid-placeable-string-missing-end-quote": {
"match": "\"[^\"]+$",
"name": "invalid.illegal.wrong-placeable-missing-end-quote.fluent"
},
"invalid-placeable-wrong-placeable-missing-end": {
"match": "([^A-Z}]*|[^-][^>])$\\b",
"name": "invalid.illegal.wrong-placeable-missing-end.fluent"
},
"message": {
"begin": "^(-?[A-Za-z][-0-9A-Z_a-z]*\\s*=\\s*)",
"beginCaptures": {
"1": {
"name": "support.class.message-identifier.fluent"
}
},
"contentName": "string.fluent",
"end": "^(?=\\S)",
"patterns": [
{
"include": "#attributes"
},
{
"include": "#placeable"
}
]
},
"placeable": {
"begin": "(\\{)",
"beginCaptures": {
"1": {
"name": "keyword.placeable.begin.fluent"
}
},
"contentName": "variable.other.placeable.content.fluent",
"end": "(})",
"endCaptures": {
"1": {
"name": "keyword.placeable.end.fluent"
}
},
"patterns": [
{
"include": "#placeable-string"
},
{
"include": "#placeable-function"
},
{
"include": "#placeable-reference-or-number"
},
{
"include": "#selector"
},
{
"include": "#invalid-placeable-wrong-placeable-missing-end"
},
{
"include": "#invalid-placeable-string-missing-end-quote"
},
{
"include": "#invalid-placeable-wrong-function-name"
}
]
},
"placeable-function": {
"begin": "([A-Z][-0-9A-Z_]*\\()",
"beginCaptures": {
"1": {
"name": "support.function.placeable-function.call.begin.fluent"
}
},
"contentName": "string.placeable-function.fluent",
"end": "(\\))",
"endCaptures": {
"1": {
"name": "support.function.placeable-function.call.end.fluent"
}
},
"patterns": [
{
"include": "#function-comma"
},
{
"include": "#function-positional-argument"
},
{
"include": "#function-named-argument"
}
]
},
"placeable-reference-or-number": {
"match": "(([-$])[-0-9A-Z_a-z]+|[A-Za-z][-0-9A-Z_a-z]*|[0-9]+)",
"name": "variable.other.placeable.reference-or-number.fluent"
},
"placeable-string": {
"begin": "(\")(?=[^\\n]*\")",
"beginCaptures": {
"1": {
"name": "variable.other.placeable-string-begin.fluent"
}
},
"contentName": "string.placeable-string-content.fluent",
"end": "(\")",
"endCaptures": {
"1": {
"name": "variable.other.placeable-string-end.fluent"
}
}
},
"selector": {
"begin": "(->)",
"beginCaptures": {
"1": {
"name": "support.function.selector.begin.fluent"
}
},
"contentName": "string.selector.content.fluent",
"end": "^(?=\\s*})",
"patterns": [
{
"include": "#selector-item"
}
]
},
"selector-item": {
"begin": "(\\s*\\*?\\[)([-0-9A-Z_a-z]+)(]\\s*)",
"beginCaptures": {
"1": {
"name": "support.function.selector-item.begin.fluent"
},
"2": {
"name": "variable.other.selector-item.begin.fluent"
},
"3": {
"name": "support.function.selector-item.begin.fluent"
}
},
"contentName": "string.selector-item.content.fluent",
"end": "^(?=(\\s*})|(\\s*\\[)|(\\s*\\*))",
"patterns": [
{
"include": "#placeable"
}
]
},
"wrong-line": {
"match": ".*",
"name": "invalid.illegal.wrong-line.fluent"
}
},
"scopeName": "source.ftl"
}