Подсветка Gedit (gtksourceview): как выделить блок внутри фигурных скобок цветом - PullRequest
1 голос
/ 23 августа 2011

Мне нужно выделить каждый целый блок кода, который находится внутри фигурных скобок, поэтому я создал правило:

<context id="action-body" style-ref="action-body" extend-parent="true">
   <start>{</start>
   <end>}</end>
   <include>
      <context ref="builtin-vars" />
      <context ref="keywords" />
   </include>
</context>

Он правильно подсвечивает код, ключевые слова и переменные внутри, но, конечно, останавливается, если внутри есть еще одна закрывающая фигурная скобка. Я знаю, что регулярным выражениям нетрудно проверить уровень рекурсии, но может быть gtkSourceView в синтаксисе есть что-то особенное для подобных случаев?

Это серьезно, потому что язык (на самом деле PegJS), для которого я делаю выделение, может содержать код JavaScript только внутри фигурных скобок, а не снаружи. И я хочу выделить их одним цветом, исключая:)


Связанный:

1 Ответ

1 голос
/ 23 августа 2011

Таким образом ( из ) подсвечивается нормально (gedit идет немного медленнее, когда курсор в скобках), когда такой синтаксис используется в одной строке, но не для многострочных:

<context id="action-body" style-ref="action-body">
   <match>(\{(?:[^{}]*|(?0))*\})</match>
   <!-- <include>
      <context ref="builtin-vars"/>
      <context ref="keywords"/>
   </include> -->
</context>

(и это не позволяет мне использовать включенные контексты, но spec говорит, что я могу :()

...