Как добавить поддержку многострочных комментариев в XML-формате TextMate plist для подсветки синтаксиса VSCode? - PullRequest
0 голосов
/ 01 июля 2019

Я пишу собственный синтаксис грамматики с TextMate для использования в VSCode в качестве расширения, которое будет выделять исходный код пользовательского языка с использованием регулярных выражений Oniguruma .

Iу меня все работает, кроме блочных комментариев (многострочных комментариев).

Есть несколько примеров XML-файлов TextMate, в которых, похоже, реализованы блочные комментарии, но они очень большие, например

Я не могу использовать этипримеры для извлечения функциональности блочного комментария, так как есть много других связанных, но не относящихся ко мне частей.

Это мой package.json:

{
    "name": "mylang",
    "version": "0.0.1",
    "engines": {
        "vscode": "*"
    },
    "publisher": "me",
    "contributes": {
        "languages": [
            {
                "id": "mylang",
                "aliases": [
                    "mylang"
                ],
                "extensions": [
                    ".mylang"
                ]
            }
        ],
        "grammars": [
            {
                "language": "mylang",
                "scopeName": "source.mylang",
                "path": "./syntaxes/mylang.tmLanguage"
            }
        ]
    }
}

Это мой файл mylang.tmlanguage (для краткости):

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
    <dict>
        <key>scopeName</key>
        <string>source.mylang</string>

        <key>fileTypes</key>
        <array>
            <string>mylang</string>
        </array>

        <key>name</key>
        <string>mylang file</string>

        <key>patterns</key>
        <array>

            <!-- Numbers -->
            <dict>
                <key>match</key>
                <string>\b((0(x|X)[0-9a-fA-F]*)|(([0-9]+\.?[0-9]*)|(\.[0-9]+))((e|E)(\+|-)?[0-9]+)?)(L|l|UL|ul|u|U|F|f|ll|LL|ull|ULL)?\b</string>
                <key>name</key>
                <string>constant.numeric</string>
            </dict>

            <!-- Types -->
            <dict>
                <key>match</key>
                <string>\b(date|int|string|float|varchar)\b</string>
                <key>name</key>
                <string>entity.name.type</string>
            </dict>

            <!-- single line comment -->
            <dict>
                <key>match</key>
                <string>\/\*(\w|\s|\W|\n|\r\n)*\/</string>
                <key>name</key>
                <string>comment</string>
            </dict>

            <!-- Multiline comments -->


        </array>            

        <key>uuid</key>
        <string>FF0550E0-3A29-11E3-AA6E-0800200C9A77</string>
    </dict>
</plist>

Я правильно выделю все элементы, поэтому мое расширение работает.

Если я правильно понимаю, я не могу просто предоставить регулярное выражение для несколькихкомментарий строки, как я сделал с комментарием в одну строку.Мне нужно будет использовать структуру вложенных тегов с тегами begin и end, но я не могу понять, какую структуру использовать.

...