Авалон Править - PullRequest
       32

Авалон Править

0 голосов
/ 24 апреля 2020

С Avalon Edit я ищу способ предоставить формат подсветки внутри чего-то, что уже отформатировано.

То есть я хотел бы выделить вещи внутри кавычек, но внутри этих кавычек У меня есть другой синтаксис, который может быть добавлен, который начинается с ${ и заканчивается }.

По умолчанию кажется, что подсветка синтаксиса прекращается, когда он входит в «начало» и не ищет любые другие, пока не будет достигнут конец.

<Span color="ParamName">
  <Begin>"</Begin>
  <End>(?=:)</End>
</Span>
<Span color="Variable" multiline="false">
  <Begin>\${</Begin>
  <End>}</End>
</Span>

Так что здесь синтаксис ${ раскрашивается только в том случае, если он не находится в пределах ParamName ("). Есть ли способ, позволяющий моей подсветке переменных работать, даже если она в ParamName (да ParamName от JSON форматирования, я бы хотел, чтобы моя подсветка работала независимо от того, где она отображается в JSON синтаксис)?

Полный код выделения:

<Keywords color="Digits" >
  <Word>true</Word>
  <Word>false</Word>
</Keywords>

<Span color="Value" multiline="true">
  <Begin>
    (?&lt;=:)\040?"[^"]*
  </Begin>
  <End>"</End>
</Span>
<Span color="ParamName">
  <Begin>"</Begin>
  <End>(?=:)</End>
</Span>
<Span color="Variable" multiline="false">
  <Begin>\${</Begin>
  <End>}</End>
</Span>
<Rule color="Digits">\b0[xX][0-9a-fA-F]+|(\b\d+(\.[0-9]+)?|\.[0-9]+)([eE][+-]?[0-9]+)?</Rule>

1 Ответ

1 голос
/ 07 мая 2020

A <Span> переключается на другой <RuleSet>, который активен в пределах диапазона. По умолчанию это пустой набор правил, поэтому больше ничего не активно.

Если вы хотите, чтобы правило применялось внутри диапазона, переместите его во вложенный набор правил:

<Span color="ParamName">
  <Begin>"</Begin>
  <End>(?=:)</End>

  <RuleSet>
    <Span color="Variable" multiline="false">
     <Begin>\${</Begin>
     <End>}</End>
    </Span>
  </RuleSet>
</Span>
...