Вложенная спецификация встроенного языка (python)
Я хочу вставить подсветку синтаксиса для python в пользовательское определение синтаксиса textmate. Содержимое файла выглядит так:
this = any_value
// comment line
[Chapter1]
any_content
[End]
[Python]
pythonic code which should be highlighted.
[End]
any_other_custom_content
Я уже получил определение для общего [.*?]
синтаксис, но я не могу указать последующее определение. Общие главы определены под group-title
в конце. Если я использую уникальную начальную / конечную строку, не вложенную в уже определенную конструкцию, она работает нормально. Но я борюсь с вложенными вещами. Я попытался использовать конструкцию, предоставленную в грамматике TextMate - приоритет правил, но безрезультатно. Мой текущий файл определения выглядит так:
{
"$schema": "https://raw.githubusercontent.com/martinring/tmlanguage/master/tmlanguage.json",
"name": "SPM Config",
"patterns": [
{
"include": "#keywords"
},
{
"include": "#strings"
},
{
"include": "#comment"
},
{
"include": "#group-title"
}
],
"repository": {
"keywords": {
"patterns": [{
"name": "keyword.control.spm-config",
"match": "\\b(if|while|for|return)\\b"
}]
},
"strings": {
"name": "string.quoted.double.spm-config",
"begin": "\"",
"end": "\"",
"patterns": [
{
"name": "constant.character.escape.spm-config",
"match": "\\\\."
}
]
},
"codetags": {
"match": "(?:\\b(NOTE|XXX|HACK|FIXME|BUG|TODO)\\b)",
"captures": {
"1": {
"name": "keyword.codetag.notation.spm-config"
}
},
"patterns": []
},
"comment": {
"patterns": [
{
"begin": "(^\\s+)?(?=//)",
"beginCaptures": {
"1": {
"name": "punctuation.whitespace.comment.leading.spm-config"
}
},
"end": "(?=$)",
"patterns": [
{
"name": "comment.block.documentation.spm-config",
"begin": "(?<!/)///(?!/)",
"beginCaptures": {
"0": {
"name": "punctuation.definition.comment.spm-config"
}
},
"end": "(?=$)",
"patterns": [
{
"include": "#codetags"
}
]
},
{
"name": "comment.line.double-slash.spm-config",
"begin": "(?<!/)//(?:(?!/)|(?=//))",
"beginCaptures": {
"0": {
"name": "punctuation.definition.comment.spm-config"
}
},
"end": "(?=$)",
"patterns": [
{
"include": "#codetags"
}
]
},
{
"include": "#codetags"
}
]
},
{
"name": "comment.block.spm-config",
"begin": "/\\*",
"beginCaptures": {
"0": {
"name": "punctuation.definition.comment.spm-config"
}
},
"end": "\\*/",
"endCaptures": {
"0": {
"name": "punctuation.definition.comment.spm-config"
}
}
}
]
},
"group-title": {
"match": "^\\s*(\\[.*?\\])",
"captures": {
"1": {
"name": "punctuation.definition.entity.spm-config"
}
},
"patterns": [
{
"contentName": "source.python",
"begin": "(\\[Python\\])",
"beginCaptures": {
"1": {
"patterns": [
{
"include": "#group-title"
}
]
}
},
"end": "\\[End\\]",
"patterns": [
{
"include": "source.python"
}
]
}
]
}
},
"scopeName": "source.spmconfig"
}
Помощник TM-Language в VS Code показал (но без подсветки кода Python):