Coder plugin (2)

Discuss and announce AkelPad plugins
Locked
  • Author
  • Message
Offline
Posts: 1161
Joined: Sun Oct 20, 2013 11:44 am

Post by Skif_off »

Serge Yolkin wrote:

Code: Select all

0	"\b(([0-1][0-9])|([2][0-3]))(:([0-5][0-9])){1,2}"	"\0=(0,#00FF00,0)"
?
Удобное сокращение, спасибо, исправил. Вот с \b не все гладко местами, решил отказаться. Хотелось бы понять, почему не срабатывает с условием

Code: Select all

(?<!:)
?
1е срабатывает, 2е нет:

Code: Select all

0	"(([0-1][0-9])|([2][0-3]))(:([0-5][0-9])){1,2}"		"\0=(0,${IF},0)"
0	"(?<!:)((([0-1][0-9])|([2][0-3]))(:([0-5][0-9])){1,2})"	"\0=(0,${IF},0)"
Drugmix wrote:Я думал у нас для обсуждения регулярок есть отдельная тема
Я сюда пишу ибо у плагина могут быть нюансы (например).


Instructor
Поправьте, пожалуйста, au3.coder:
стр. 491-492

Code: Select all

0	0	${OP}	0	TCPShutdown, UDPShutdown
0	0	${OP}	0	TCPStartup, UDPStartup
+ новые функции v3.3.10.0
FileReadToArray
FuncName
IsFunc
ObjCreateInterface
StringReverse

Если кого интересует: полный список UDF (3080 штук, у себя пока оставил, но склоняюсь к мысли - как-то дофига :))

Offline
Site Admin
Posts: 6311
Joined: Thu Jul 06, 2006 7:20 am

Post by Instructor »

Skif_off wrote:Почему правило

Code: Select all

QuotesRE:
; Time - HH:MM:SS or HH:MM
0	"(?<!:)((([0-1][0-9]|[2][0-3])(:([0-5][0-9])){2})|(([0-1][0-9]|[2][0-3]):([0-5][0-9])))"	"\0=(0,${IF},0)"
не работает в начале строки?
Лучше воздержаться от использования конструкций (?<!) и (?<=) в "QuotesRE:" (пояснение).
Serge Yolkin wrote:Вероятно, проблема с вложенными скобками:

Code: Select all

1 "(что)\-(то)(\s`(там)`)+" "\3=(0,#0000ff,0)"
; работает правильно
1 "(что)\-(то)(\s`(там)`)+" "\4=(0,#0000ff,0)"
; подсвечивает только последнее вхождение
Одна группа может хранить только один диапазон. В данном случае сохраняется последний найденный.
Skif_off wrote:au3.coder
Сделано.

Offline
Posts: 1161
Joined: Sun Oct 20, 2013 11:44 am

Post by Skif_off »

Instructor wrote:Лучше воздержаться от использования конструкций (?<!) и (?<=) в "QuotesRE:" (пояснение).
Понял, спасибо, добавил правило

Code: Select all

; Time - H:MM:SS or H:MM
0	"([0-9]|([1][0-9])|([2][0-3]))(:([0-5][0-9])){1,2}"		"\0=(0,${IF},0)"
вроде как надо получается.

Offline
Posts: 582
Joined: Mon Apr 08, 2013 9:50 pm
Location: Win7SP1x64, APx64

Post by Drugmix »

Instructor wrote:
Serge Yolkin wrote:Вероятно, проблема с вложенными скобками:

Code: Select all

1 "(что)\-(то)(\s`(там)`)+" "\3=(0,#0000ff,0)"
; работает правильно
1 "(что)\-(то)(\s`(там)`)+" "\4=(0,#0000ff,0)"
; подсвечивает только последнее вхождение
Одна группа может хранить только один диапазон. В данном случае сохраняется последний найденный.
А Вы бы не могли это исправить?

И ещё:
Я пытаюсь сделать хороший .coder-файл для *.ahk, но возникла проблема с нехваткой встроенных цветовых переменных.
Если я буду вводить новые переменные, то все встроенные цветовые схемы для coder-плагина будут выдавать оповещение об отсутствующей переменной.
Хотелось бы избежать таких оповещений, т.к. помимо того, что они могут оказать моральный ущерб пользователям - они ломают подсветку в файлах, т.к. AkelPad "спотыкается" на первом же правиле с переменной, значения для которой он не имеет.

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

Поэтому прошу добавить:
а) несколько (хотя бы штук 5) переменных про запас во встроенный набор цветовых схем;
б) возможность задавать внутри .coder файлов значения по умолчанию для переменных, которые бы использовались в случае если в выбранной у пользователя цветовой схеме не задано значение для указанной переменной (а если задано, то использовалось бы оно, а не указанное внутри .coder файла).
Last edited by Drugmix on Thu Dec 26, 2013 10:57 pm, edited 1 time in total.

Offline
Posts: 874
Joined: Sat Jan 16, 2010 2:03 pm

Post by opk44 »

Drugmix wrote:А Вы бы не могли это исправить?
Не нужно чинить то, что не сломано.
Посмотрите на сторонних ресурсах типа "regex101.com". Надо ввести там правило и посмотреть протокол разбора выражения.
Цитирую:
Note: A repeated capturing group will only capture the last iteration. Put a capturing group around the repeated group to capture all iterations or use a non-capturing group instead if you're not interested in the data

Offline
Posts: 582
Joined: Mon Apr 08, 2013 9:50 pm
Location: Win7SP1x64, APx64

Post by Drugmix »

opk44 wrote:Посмотрите на сторонних ресурсах типа "regex101.com". Надо ввести там правило и посмотреть протокол разбора выражения.
Цитирую:
Note: A repeated capturing group will only capture the last iteration. Put a capturing group around the repeated group to capture all iterations or use a non-capturing group instead if you're not interested in the data
Ценное замечание, спасибо.
opk44 wrote:Не нужно чинить то, что не сломано.
Вот это спорно. То, что ничего с точки зрения машины или соответствия RegEx не сломано - не означает, что ничего на самом деле не сломано:
из-за этого внутреннего ограничения PCRE плохо работает подсветка в плагине .coder. Т.к. в код плагина можно вносить правки, то и обойти внутреннее ограничение PCRE - в принципе возможно.
А раз возможно, но этого нет, то логично и попросить такое исправление.
Я же прошу это изменение не ради изменения, а ради того, чтобы можно было, наконец, сделать более гибкие правила раскраски текста.

Offline
Posts: 582
Joined: Mon Apr 08, 2013 9:50 pm
Location: Win7SP1x64, APx64

Post by Drugmix »

Ещё вопрос по coder.coder и RegEx:
в секции QuotesRE есть такое правило:

Code: Select all

0	"^\s*(\d+)\s+[`"](.*)[`"]\s*[`"](?:\s*\\(\d*)=\((.*),(.*),(.*)\)\s*)*[`"]\s*$"  "\1=(0,#ff0000,0) \2=(0,#00ff00,0) \3=(2,#0000ff,0) \4=(0,#ff0000,0) \5=(0,#00ff00,0) \6=(2,#0000ff,0)"
Но оно не срабатывает на этом же самом правиле в этом же файле (и в других .coder-файлах, хотя если в нём везде заменить [`"] на ` - то в других .coder-файлах правила для секции QuotesRE будут подсвечиваться этим правилом нормально).
Тот же самый regex101.com показывает, что всё должно работать.
Если же правило изменить на

Code: Select all

0	"^\s*(\d+)\s+`|"(.*)`|"\s*`|"(?:\s*\\(\d*)=\((.*),(.*),(.*)\)\s*)*`|"\s*$"  "\1=(0,#ff0000,0) \2=(0,#00ff00,0) \3=(2,#0000ff,0) \4=(0,#ff0000,0) \5=(0,#00ff00,0) \6=(2,#0000ff,0)"
То это приводит к тому, что при открытии акелпад зависает.

Зависания - это не хорошо даже в том случае, когда понятна их причина. Если как-то можно - то, пожалуйста, исправьте это.

Offline
Posts: 1161
Joined: Sun Oct 20, 2013 11:44 am

Post by Skif_off »

Drugmix
Не планируется ли в будущем заменить в ahk.coder #00ff00 на что-нибудь менее вырвиглазное (на темах со светлым фоном)? Для удобства синхронизации по возможности стараюсь не трогать цвета.

Offline
Posts: 294
Joined: Tue Jul 27, 2010 11:18 pm

Post by Serge Yolkin »

Skif_off wrote:Вот с \b не все гладко местами, решил отказаться.
А что не гладко? (я не для поспорить, мне интересно). Насколько я понимаю, \b это граница между \w и \W в любой последовательности, поэтому не гладко будет с подчерком "_" перед временем - он тоже \w, других проблем, на первый взгляд, не видно.

Offline
Posts: 582
Joined: Mon Apr 08, 2013 9:50 pm
Location: Win7SP1x64, APx64

Post by Drugmix »

Skif_off
конечно. Я пока просто правила сами составляю, тут у меня локально намного больше изменений, просто важно сначала сами правила составить и отладить.
В планах - на каждую команду по RegEx'у, чтобы каждая команда и каждый атрибут у каждой команды - подсвечивался в соответствии с тем типом данных, к которому он относится.
Как я уже писал выше - сейчас вскрылась даже просто нехватка цветов из встроенного набора, надо и эту проблему как-то решать.

Offline
Posts: 1161
Joined: Sun Oct 20, 2013 11:44 am

Post by Skif_off »

Serge Yolkin
Честно говоря, уже не помню деталей и к сожалению (или к счастью) отказался от систем контроля версий (источников coder-файлов несколько, KDiff3 показался удобнее). Вполне допускаю, что условия были не реальные, а смоделированные в процессе тестирования (только знакомлюсь с регулярными выражениями).

Drugmix
Прошу прощения за любопытство, с какой целью в Words были добавлены функции, UDF и макросы AutoIt, а позже закомментированы?

Offline
Posts: 582
Joined: Mon Apr 08, 2013 9:50 pm
Location: Win7SP1x64, APx64

Post by Drugmix »

Skif_off wrote:Drugmix
Прошу прощения за любопытство, с какой целью в Words были добавлены функции, UDF и макросы AutoIt, а позже закомментированы?
Это наследие прошлого (было до меня), с которым я пытался бороться и только сейчас получил одобрение от Lenchik'а, соавтора ahk.coder.

Offline
Posts: 294
Joined: Tue Jul 27, 2010 11:18 pm

Post by Serge Yolkin »

Как-то невзначай версия 12.0 появилась...

Offline
Site Admin
Posts: 6311
Joined: Thu Jul 06, 2006 7:20 am

Post by Instructor »

Drugmix wrote:Зависания - это не хорошо даже в том случае, когда понятна их причина.
В избранное :)

В вашей строке нарушено правило заключения в кавычки:
"^\s*(\d+)\s+`|"(.*)`|"\s*`|"(?:\s*\\(\d*)=\((.*),(.*),(.*)\)\s*)*`|"\s*$"
В данном случае можно использовать '.

Serge Yolkin
Невзначай? :)

Offline
Posts: 582
Joined: Mon Apr 08, 2013 9:50 pm
Location: Win7SP1x64, APx64

Post by Drugmix »

Instructor wrote:В вашей строке нарушено правило заключения в кавычки:
"^\s*(\d+)\s+`|"(.*)`|"\s*`|"(?:\s*\\(\d*)=\((.*),(.*),(.*)\)\s*)*`|"\s*$"
В данном случае можно использовать '.
Я не понял как Вы предлагаете их использовать. Можно, пожалуйста, исправленный вариант?
Пробовал везде заменить " на ' - зависание при старте.
Пробовал только обрамляющие кавычки заменить на ' вот так

Code: Select all

0   '^\s*(\d+)\s+`|"(.*)`|"\s*`|"(?:\s*\\(\d*)=\((.*),(.*),(.*)\)\s*)*`|"\s*$'  "\1=(0,${STR},0) \2=(0,${OP},0) \3=(2,${AREA},0)"
зависания нет, но правило не работает должным образом.

А ещё меня очень расстраивает, что многие из моих других обращений и вопросов к Вам - Вы оставляете без ответа (что ещё хуже, чем получить прямой отказ или ответ, что заявка на изменение принята, но не является приоритетной).
Вы их не читаете или просто молча принимаете их к сведению? :)
Locked