Вложенная спецификация встроенного языка (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): Пример TM для общего выделения глав

0 ответов

Другие вопросы по тегам