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
В CMD.CODER у вас тоже ошибка с переменными: правило

Code: Select all

0	`(\![^!]+)(\:.+)?(\!)`	`\1=(0,${VAR},0) \3=(0,${VAR},0)`
захватит путь с !, хотя это неправильно, !xxx! - это почти %xxx%.
Т.е. строка должна выглядеть не так
if exist %SoftDrive%\autoinstall\!Config\first_run.cmd (hidcon %SoftDrive%\autoinstall\!Config\first_run.cmd),
а вот так
if exist %SoftDrive%\autoinstall\!Config\first_run.cmd (hidcon %SoftDrive%\autoinstall\!Config\first_run.cmd).

В оригинальном bat.coder как временное (однако прижилось :)) решение в Quote exclude в Quote добавил "\":

Code: Select all

;5=1+4
5	0	${VAR}	0	"!"	"!"	""	""	"\"

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

Post by Serge Yolkin »

С одной стороны Вы безусловно правы, а с другой я как-то поимел много проблем с пакетником из-за восклицательных знаков в именах папок/файлов. И не все эти проблемы можно обойти. Поэтому мудрить не стал. Путь C:\Пап!ка\Ф!айл при EnableDelayedExpansion и в пакетнике-то не найдётся, не говоря о подсветке. Лучше такие символы (особенно & - он тоже не запрещён) вообще в именах избегать, а уж мудрить с их подсветкой - пусть тот, кто их использует, - и мудрит...

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

Post by Skif_off »

Serge Yolkin wrote:Лучше такие символы (особенно & - он тоже не запрещён) вообще в именах избегать
Согласен, сам даже пробелов и кириллицы стараюсь избегать. Батник попался случайно и лежит давно (потому что там есть цикл для определения буквы CDROM), иначе бы и внимания не обратил.
Мудрить или не мудрить - вопрос несколько дискуссионный :) Мне не понравилось - исправил, с минимальными затратами сил.


Подскажите, пожалуйста, по COM-объектам:
KiXtart и AutoIt умеют с ними работать, примеры кода

Code: Select all

;KiXtart
$oXL = CreateObject("EXCEL.application") 
$Rc = $oXL.Workbooks.Add

;AutoIt
$oShell = ObjCreate("shell.application")
$oShell.MinimizeAll
как правильно подсветить? Не погу найти списка COM-объектов, чтобы определиться с их именами, гуглил, копался в HKEY_CLASSES_ROOT, в списке защищенных COM-объектов Comodo Firewall, случайно заметил, что Notepad++ и SciTE подсвечивают и исходя из всего этого родилось правило:

Code: Select all

0	"(\$[w]+)(\.[a-z]{1}[\w]+)+"	"\1=(0,${VAR},0) \2=(4,${IF},0)"
Правильно или какие-то имена упускаю?

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

Post by Serge Yolkin »

Skif_off
Ну, список COM объектов - это всё равно, что список всех возможных драйверов к винде... Их же тоже устанавливать можно. А посветка должна работать. Я этих языков не знаю, может быть не айс, если в одной инструкции элементов \2 слишком много: длинная одноцветная строка получится. Если синтаксис такого не предполагает, то всё нормально, только {1} уберите - и без него "ровно один раз". Хотя, это не ошибка, поскольку интерпретируется правильно.

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

Post by Skif_off »

Serge Yolkin wrote:Ну, список COM объектов - это всё равно, что список всех возможных драйверов к винде... Их же тоже устанавливать можно.
Это да, но проблема в том, что не удалось нагуглить правила назначения имени. С переменными понятно, в доках простым языком пишут - буквы, цыфры и "_".
Serge Yolkin wrote:А посветка должна работать. Я этих языков не знаю, может быть не айс, если в одной инструкции элементов \2 слишком много: длинная одноцветная строка получится.
Упрется в какой-нибудь разделитель, то, что видел - 2-3 таких элемента. Придется добавить еще правило для обычных переменных

Code: Select all

0	"\$[\w]+"	"\0=(0,${VAR},0)"
но не тестил много, может кто-нибудь подскажет какие грабли могут вылезти.
Serge Yolkin wrote:только {1} уберите - и без него "ровно один раз". Хотя, это не ошибка, поскольку интерпретируется правильно.
Это для наглядности (себе) оставил временно, пока подбирал выражение, ибо не силен :)

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

Post by Serge Yolkin »

Skif_off
Если правил всё равно 2, то чем хуже

Code: Select all

0   "\$[\w]+"   "\0=(0,${VAR},0)"
0   "(?<=\.)([a-z][\w]+)(?=(.|\s|$)"   "\1=(4,${IF},0)"
в этом случае точки не захватываются, значит их цвет можно задать отдельно в разделителях (всё не сплошная строка одним цветом).
Не хочу ввязываться в полемику, но, на мой взгляд, распознавать и захватывать надо не строки во всём их многообразии, а "кирпичики" - элементы синтаксиса (для js, например, это методы, свойства, структуры, операторы и т.д.). Обычно, таких элементов в языке вовсе не сотни. Ну, и то, что очень хочется, или нестандартное - дополнительно :)

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

Post by Drugmix »

Skif_off
Serge Yolkin
господа, почему вы используете [\w]+? внутри квадратных же скобок это будет матчить ненулевую последовательность \ и w.
Если нужно матчить ненулевую последовательность буквенно-циферных символов - следует же использовать \w+.

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

Post by Serge Yolkin »

Drugmix
Да, формально Вы правы, но матчится то, что нужно (и в js тоже). А запись [\w], вероятно, остаток от [\w\-] после редактирования.

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

Post by Skif_off »

Serge Yolkin
В регулярных выражениях разбираюсь слабо и Instructor писал:
Лучше воздержаться от использования конструкций (?<!) и (?<=) в "QuotesRE:" (пояснение).
Поэтому делаю попроще и по порядку :)
Serge Yolkin wrote:на мой взгляд, распознавать и захватывать надо не строки во всём их многообразии, а "кирпичики" - элементы синтаксиса
Именно это и планируется - только захват переменных
$var1
$sPath
$oShell.GoBack
$oShell.GoForward
С точкой да, по хорошему отделить, но только первую, как мне кажется, имя, например, псевдо COM-интерфейса LocalSecurityAuthority.Restore выглядит самодостаточным, чтобы разрывать цвет точкой. В общем, пока не думал.
Drugmix wrote:господа, почему вы используете [\w]+? внутри квадратных же скобок это будет матчить ненулевую последовательность \ и w.
Разве в квадратных скобках не нужно экранировать? И да, [\w]+ осталось после правок.

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

Post by Drugmix »

В квадратных скобках не экранируются символы. Но не знаю, может [\w]+ и правда срабатывает не только на \ и w, но это бы должно быть ошибкой.
В любом случае, то, что нужно было вам двоим - это \w+ без всяких скобок.

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

Post by Serge Yolkin »

Skif_off
Так там про "от начала строки", а .ххх. - это не в начале. Лучше проверьте мою пару правил.

Drugmix
Если работает, при чём не только в Акеле, - не ошибка. Кому не нравится, можно не использовать. И уважаемый YuS, помогая Вам, писал:
0 "^\s*(?:(Try)?(Else)?(?:\s*?,\s*?|\s+?)|(.{1,38}(?=::))(?:::))?\s*(#IfWinActive\b)(?:\s*?,\s*?|\s*?)??([^,`\s]*(?!`,)|(?:[^`,\s]*(?:`,)?)*)?(?:\s*?,\s*?)?([^,`\s]*(?!`,)|(?:[^`,\s]*(?:`,)?)*)?(\s+;.*)?[\s]*$" `\1=(4,${OP},0) \2=(4,${IF},0) \3=(2,${STR},0) \4=(2,${OP},0) \5=(2,${ATTR},#ff0000) \6=(2,${ATTR},#00ff00) \7=(3,${COMM},0)`
обратите внимание на конец регулярки...

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

Post by Skif_off »

Serge Yolkin
Не совсем уверен в выделенном
(?<=\.)([a-z][\w]+)(?=(.|\s|$)
(хотя теперь понял как работает :)), пока записал и отложил вопрос, но все равно спасибо за пояснения.

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

Post by Serge Yolkin »

Skif_off
Опа! Лажанул. Там в выделенном \. должна быть. И ещё, если такая строка может быть в скобках, т.е. заканчиваться на закрывающую скобку, надо туда же добавить \) через "или" (|).

Offline
Posts: 4
Joined: Thu Oct 24, 2013 4:41 pm

Post by Smitis »

Подскажите, можно ли сделать для folds подсветку следующим образом:
Допустим, есть конструкция if-elseif-else-end (в данном случае это lua, но это не важно). Если курсор стоит на if, подсвечивается if-elseif. Если курсор стоит на elseif посвечивается elseif-else, если на else - else-end. А вот можно ли сделать так, что бы если курсор на одном из этих слов, подсвечивался весь fold (т.е. все if-elseif-else-end сразу)?

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

Post by Serge Yolkin »

Smitis
Полагаю, там есть правило для if - end, вот его и оставить, а остальные убрать (на время экспериментов лучше закомментировать)
Locked