Правила подстветки синтаксиса для Kate?

Я хочу добавить правило, чтобы апостроф внутри конструкции подпадающей под регулярное выражение q'(\S).*\1' не считался закрывающим. Например, q'#Oracle's quote#' это один строковый литерал.



Отрыл файл ~/.kde4/share/apps/katepart/syntax/sql.xml, в элемент
<context name="Normal" attribute="Normal Text" lineEndContext="#stay"><br>


перед нодой

<DetectChar attribute="String" context="String literal" char="'"/><br>


добавляю свою ноду

<RegExpr attribute="String" context="Oracle quote operator" String="q&(\S)" dinamic="true" lookAhead="true"/><br>


Далее добавил соответствующий контекст, но ничего не работает…

<context name="Oracle quote operator" attribute="String" lineEndContext="#stay" dinamic="true" lookAhead="true"><br>
        <Detect2Chars attribute="String" context="#pop" char="%1" char1="&" dinamic="true"/><br>
        <DetectChar attribute="String Char" context="#stay" char="&"/><br>
</context><br>




Пробовал без регулярок просто искать строку вида q'# #' через StringDetect, но это так же не привело к подсветке теста как строкового литерала. Никак не могу понять, что я делаю не так.
  • Вопрос задан
  • 3400 просмотров
Решения вопроса 1
EGDFree
@EGDFree Автор вопроса
Нашел вариант задания правил, при котором все работает.

<contexts>
      <context name="Normal" attribute="Normal Text" lineEndContext="#stay">
        <RegExpr attribute="Operator" context="Quote operator brace" String="\bq'\{" insensitive="true"/>
        <RegExpr attribute="Operator" context="Quote operator bracket" String="\bq'\[" insensitive="true"/>
        <RegExpr attribute="Operator" context="Quote operator parenthesis" String="\bq'\(" insensitive="true"/>
        <RegExpr attribute="Operator" context="Quote operator" String="\bq'(\S)" insensitive="true"/>
        <DetectChar attribute="String" context="String literal" char="'" insensitive="true"/>
      </context>
      <context name="Quote operator" attribute="String" lineEndContext="#stay" dynamic="true">
        <RegExpr attribute="Operator" context="#pop" String="%1'" dynamic="true"/>  
      </context>
      <context name="Quote operator brace" attribute="String" lineEndContext="#stay">
        <Detect2Chars attribute="Operator" context="#pop" char="}" char1="'"/>
      </context>
      <context name="Quote operator bracket" attribute="String" lineEndContext="#stay">
        <Detect2Chars attribute="Operator" context="#pop" char="]" char1="'"/>
      </context>
      <context name="Quote operator parenthesis" attribute="String" lineEndContext="#stay">
        <Detect2Chars attribute="Operator" context="#pop" char=")" char1="'"/>
      </context>
</contexts>
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы