Многострочное регулярное выражение в пользовательском режиме jEdit - PullRequest
1 голос
/ 18 августа 2011

В настоящее время я создаю язык с другом, и я хотел бы выделить его в jEdit. Синтаксис на самом деле довольно прост. Функции могут соответствовать только этому шаблону: $function_name(arguments)

Обратите внимание, что наш синтаксический анализатор в настоящее время работает без закрывающего тега, такого как полуколонна в стиле C, и мы хотели бы сохранить эту функцию.

Я создал свой режим jEdit и (почти) успешно выделил мой шаблон с помощью <SPAN_REGEXP>. Вот как я это сделал:

<SPAN_REGEXP HASH_CAR="\$" TYPE="KEYWORD3" DELEGATE="ARGS">

<BEGIN>\$[A-Za_z0-9_]*\s*\(</BEGIN>

<END>)</END>

</SPAN_REGEXP>

Но это не достаточно хорошо.

Вот что я хотел бы:

  • Одинаковый цвет для всего скелета функции: $func( )
  • Специальная подсветка (уже определенная в наборе ARGS правил) для %content1% в $func(%content1%)
  • Нет подсветки для скобок, не следующих за $func
  • Авторизовать альтернативный многострочный синтаксис, такой как

$func

(

args

)

, который пока не выделен. Я догадался, что мне нужно изменить <BEGIN> регулярное выражение для принятия новых строк, но кажется, что jEdit не может сопоставить многострочное регулярное выражение для выделения, хотя он делает это идеально для поиска и замены!

Я пробовал флаги (?s) и (?m), обходной путь [\d\D]*, даже [\r\n]*, но он никогда не работает.

Итак, вот мои вопросы:

  • Кто-нибудь знает, как сопоставить многострочное регулярное выражение в режимах jEdit <SPAN_REGEXP>?
  • Если нет, у кого-нибудь есть идеи, как сделать то, что мне нужно?

1 Ответ

1 голос
/ 02 марта 2012

Как указано в справке, SPAN_REGEXP не поддерживает многострочные регулярные выражения. Можно, конечно, указать многострочные регулярные выражения, но они проверяются только по отдельным строкам и, следовательно, никогда не будут совпадать. Вы можете опубликовать запрос функции в трекере запросов функций jEdit, если его еще нет.

...