2015-12-11 2 views
1

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

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 не подсветку синтаксиса на всех). Что я сделал не так? (Да, я определил строку, десятичную, поплавок, и комментировать-многострочный контексты выше.)

+0

Примечание. Я проверил XML с помощью xmlstarlet, xmllint и http://www.xmlvalidation.com/, поэтому это не простой случай отсутствия закрывающего тега или тому подобного. Если я удаляю внешний файл '' и' ', он будет работать (но не может обработать упомянутое различие). – Charles

ответ

0

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