Lenchik / Akelpad-syntax-highlighting

Syntax themes for AkelPad text editor with Coder plugin (AutoHotkey, AviSynth, bash, BibTeX, Grub4Dos, KiXtart, LaTeX, Makefile, nnCron, R, Smarty, plain text and many more other syntax highlighting)
32 stars 3 forks source link

ahk.coder содержит ошибку в регулярном выражении #26

Closed Skif-off closed 8 years ago

Skif-off commented 9 years ago

При попытке переключить схему подсветки на AutoHotkey получаю последовательно 2 окна с ошибками:

"ahk.coder" содержит ошибку в регулярном выражении
"^\s*+(:)((?:\*|?|B0|C|C1|K\d++|O|P\d++|R|S(?:I|P|E)|Z)*)(:)(.*?)(::)\s*+(.*)\s*+((?<=\s);.*)?+$"
"ahk.coder" содержит ошибку в регулярном выражении
"(>|>=|<|<=|==|<>|!=|AND|&&|OR|\|\||NOT|~=|?|:(?!=))?+"

Win7x64, AkelPad 4.9.5

Skif-off commented 9 years ago

В обоих выражениях неэкранированный знак "?". Второе правило срабатывает лишь частично: AND|OR|NOT не подсвечиваются. Возможно, матчаться правилами выше.

Да, выше правило на строке 431: "; Var declaring and/or assigning values vars."

Lenchik commented 8 years ago

Может быть, это тоже решилось коммитом 6d03b84b1a1f101916332f5e5833b91c007a96b3?

Skif-off commented 8 years ago

Нет, не решилось, найдено: правило с комментами "/* */" из-за флага 32 всё ломает, если комментарий в одну строку

/* Параметры %P%N */

Может быть, оставить просто 1+512?

С if не всё гладко

if %0% > 0
  arg = %1%

if inStr(lst2[a_Index], arg "|") = 1 {
  command := subStr(lst2[a_Index], inStr(lst2[a_Index], "|") + 1)

И вот такой кусок кода

  ,"\\Оформление и персонализация\Экран|shell:::{26EE0668-A00A-44D7-9371-BEB064C98683}\1\::{C555438B-3C23-4769-A71F-B6D3D9B6053A}"
  ,"\\Оформление и персонализация\Шрифты|control fonts"
  ,"Шифрование диска BitLocker\Шифрование диска BitLocker|shell:::{26EE0668-A00A-44D7-9371-BEB064C98683}\0\::{D9EF8727-CAC2-4e60-809E-86F80A666C91}"
  ,"Шрифты\Шрифты|control fonts"

  ,"\\Специальные возможности\Центр специальных возможностей|" EASE_OF_ACCESS_CENTER ""
  ,"\\Специальные возможности\Распознавание речи|" SPEECH_RECOGNITION ""
Drugoy commented 8 years ago
  1. Изначально этот issue именно об ошибках в конкретных правилах. Там и правда были неэкранированные ?
  2. Нужен пример где

Второе правило срабатывает лишь частично: AND|OR|NOT не подсвечиваются.

  1. правило с комментами "/* */" из-за флага 32 всё ломает, если комментарий в одну строку

комментариев в одну строку с использованием /* */ не бывает, я же это в комите указал, это намерено было исправлено.

  1. С if не всё гладко

Вроде всё ок. А как по вашему должно быть?

  1. И вот такой кусок кода См issue #28.

Skif-off commented 8 years ago

комментариев в одну строку с использованием /* */ не бывает

Был скрипт, где автор использовал комментарий в одну строку, попробовал найти - скрипт был основательно переписан и теперь там этого комментария нет. По утверждению автора скрипт был рабочим.

Вроде всё ок. А как по вашему должно быть?

Нет, не по моему, а по вашему: правило

0   `(>|>=|<|<=|==|<>|!=|AND|&&|OR|\|\||NOT|~=|\?|:(?!=))?+` `\1=(0,${IF},0)`   0   0

не срабатывает в первом примере с ">". Иногда всё, после if идёт одним цветом, иногда if подсвечивается не ${IF}. У меня 4.9.7, может быть, какие-то изменения влияют, можете показать скрин с обоими примерами if из моего комментария?

Drugoy commented 8 years ago

Был скрипт, где автор использовал комментарий в одну строку, попробовал найти - скрипт был основательно переписан и теперь там этого комментария нет. По утверждению автора скрипт был рабочим.

Всё, что ниже открывающего тега считалось комментарием до конца файла (или до закрывающего тега в начале строки, если таковой имелся), скрипт от ругаться не начнёт (собственно, когда у меня такое произошло - я очень долго искал у себя ошибку, пока не понял в чём же дело). Документация по этому поводу весьма однозначная.

Нет, не по моему, а по вашему: правило

0   `(>|>=|<|<=|==|<>|!=|AND|&&|OR|\|\||NOT|~=|\?|:(?!=))?+` `\1=(0,${IF},0)`   0   0

не срабатывает в первом примере с ">".

Ааа, понял про что вы. Да, так и задумано, т.к. после if можно в скобках указать выражение, а выражение может в себе иметь и запятые и что угодно ещё, пока нет атомарности в правилах - правильно подсветить такое нет никакой возможности.

Drugoy commented 8 years ago

Эээ, issue было исправлено ещё коммитом 6d03b84b1a1f101916332f5e5833b91c007a96b3