Встраивание ключевых слов в другие ключевые слова: контекст в gtksourceview

Я пишу файл подсветки синтаксиса в gtksourceview для PARI/GP. Есть один аспект, который меня застрял: я хочу выделить определенные ключевые слова только внутри другого ключевого слова. В частности, мне нужен один вид выделения для «журнала» в

log(x)

(где log означает логарифм) и еще один в

default(log, 1)

(где log относится к файлам журнала). Кажется, именно для этого и был разработан <context>, поэтому я написал

            <context id="default" style-ref="keyword">
                <start>default\s*(</start>
                <end>)</end>
                <include>
                    <context id="in-default" style-ref="defaults">
                        <keyword>log</keyword>
                        ...
                        <keyword>timer</keyword>
                    </context>
                </include>
                <context ref="string"/>
                <context ref="decimal"/>
                <context ref="float"/>
                <context ref="comment-multiline"/>
                <context id="meta-comment" style-ref="comment">
                    <match>\s*\(([^()]+)\)</match>
                </context>
            </context>

но это не удалось молча (gedit вообще не выделял синтаксис). Что я сделал не так? (Да, я определил строковый, десятичный, плавающий и многострочный контексты выше.)


person Charles    schedule 11.12.2015    source источник
comment
Примечание. Я проверил XML с помощью xmlstarlet, xmllint и xmlvalidation.com, так что это не простой случай отсутствия закрывающий тег или тому подобное. Если я удалю внешний файл <context> и <include>, он заработает (но не сможет справиться с упомянутым различием).   -  person Charles    schedule 11.12.2015


Ответы (1)


Было две проблемы: внутренние контексты должны были находиться внутри блока <include>, а скобки в <start> и <end> нужно было экранировать.

person Charles    schedule 11.12.2015