Page 31 of 99
Posted: Wed Jan 15, 2014 9:14 pm
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 "!" "!" "" "" "\"
Posted: Wed Jan 15, 2014 9:55 pm
by Serge Yolkin
С одной стороны Вы безусловно правы, а с другой я как-то поимел много проблем с пакетником из-за восклицательных знаков в именах папок/файлов. И не все эти проблемы можно обойти. Поэтому мудрить не стал. Путь C:\Пап!ка\Ф!айл при EnableDelayedExpansion и в пакетнике-то не найдётся, не говоря о подсветке. Лучше такие символы (особенно & - он тоже не запрещён) вообще в именах избегать, а уж мудрить с их подсветкой - пусть тот, кто их использует, - и мудрит...
Posted: Thu Jan 16, 2014 6:51 am
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)"
Правильно или какие-то имена упускаю?
Posted: Thu Jan 16, 2014 8:27 am
by Serge Yolkin
Skif_off
Ну, список COM объектов - это всё равно, что список всех возможных драйверов к винде... Их же тоже устанавливать можно. А посветка должна работать. Я этих языков не знаю, может быть не айс, если в одной инструкции элементов \2 слишком много: длинная одноцветная строка получится. Если синтаксис такого не предполагает, то всё нормально, только {1} уберите - и без него "ровно один раз". Хотя, это не ошибка, поскольку интерпретируется правильно.
Posted: Thu Jan 16, 2014 11:18 am
by Skif_off
Serge Yolkin wrote:Ну, список COM объектов - это всё равно, что список всех возможных драйверов к винде... Их же тоже устанавливать можно.
Это да, но проблема в том, что не удалось нагуглить правила назначения имени. С переменными понятно, в доках простым языком пишут - буквы, цыфры и "_".
Serge Yolkin wrote:А посветка должна работать. Я этих языков не знаю, может быть не айс, если в одной инструкции элементов \2 слишком много: длинная одноцветная строка получится.
Упрется в какой-нибудь разделитель, то, что видел - 2-3 таких элемента. Придется добавить еще правило для обычных переменных
но не тестил много, может кто-нибудь подскажет какие грабли могут вылезти.
Serge Yolkin wrote:только {1} уберите - и без него "ровно один раз". Хотя, это не ошибка, поскольку интерпретируется правильно.
Это для наглядности (себе) оставил временно, пока подбирал выражение, ибо не силен

Posted: Thu Jan 16, 2014 11:46 am
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, например, это методы, свойства, структуры, операторы и т.д.). Обычно, таких элементов в языке вовсе не сотни. Ну, и то, что очень хочется, или нестандартное - дополнительно

Posted: Thu Jan 16, 2014 12:25 pm
by Drugmix
Skif_off
Serge Yolkin
господа, почему вы используете [\w]+? внутри квадратных же скобок это будет матчить ненулевую последовательность \ и w.
Если нужно матчить ненулевую последовательность буквенно-циферных символов - следует же использовать \w+.
Posted: Thu Jan 16, 2014 12:34 pm
by Serge Yolkin
Drugmix
Да, формально Вы правы, но матчится то, что нужно (и в js тоже). А запись [\w], вероятно, остаток от [\w\-] после редактирования.
Posted: Thu Jan 16, 2014 2:53 pm
by Skif_off
Serge Yolkin
В регулярных выражениях разбираюсь слабо и
Instructor писал:
Лучше воздержаться от использования конструкций (?<!) и (?<=) в "QuotesRE:" (пояснение).
Поэтому делаю попроще и по порядку
Serge Yolkin wrote:на мой взгляд, распознавать и захватывать надо не строки во всём их многообразии, а "кирпичики" - элементы синтаксиса
Именно это и планируется - только захват переменных
$var1
$sPath
$oShell.GoBack
$oShell.GoForward
С точкой да, по хорошему отделить, но только первую, как мне кажется, имя, например, псевдо COM-интерфейса
LocalSecurityAuthority.Restore выглядит самодостаточным, чтобы разрывать цвет точкой. В общем, пока не думал.
Drugmix wrote:господа, почему вы используете [\w]+? внутри квадратных же скобок это будет матчить ненулевую последовательность \ и w.
Разве в квадратных скобках не нужно экранировать? И да, [\w]+ осталось после правок.
Posted: Thu Jan 16, 2014 3:01 pm
by Drugmix
В квадратных скобках не экранируются символы. Но не знаю, может [\w]+ и правда срабатывает не только на \ и w, но это бы должно быть ошибкой.
В любом случае, то, что нужно было вам двоим - это \w+ без всяких скобок.
Posted: Thu Jan 16, 2014 9:50 pm
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)`
обратите внимание на конец регулярки...
Posted: Thu Jan 16, 2014 10:01 pm
by Skif_off
Serge Yolkin
Не совсем уверен в выделенном
(?<=\.)([a-z][\w]+)
(?=(.|\s|$)
(хотя теперь понял как работает

), пока записал и отложил вопрос, но все равно спасибо за пояснения.
Posted: Fri Jan 17, 2014 2:17 am
by Serge Yolkin
Skif_off
Опа! Лажанул. Там в выделенном \. должна быть. И ещё, если такая строка может быть в скобках, т.е. заканчиваться на закрывающую скобку, надо туда же добавить \) через "или" (|).
Posted: Fri Jan 17, 2014 12:23 pm
by Smitis
Подскажите, можно ли сделать для folds подсветку следующим образом:
Допустим, есть конструкция if-elseif-else-end (в данном случае это lua, но это не важно). Если курсор стоит на if, подсвечивается if-elseif. Если курсор стоит на elseif посвечивается elseif-else, если на else - else-end. А вот можно ли сделать так, что бы если курсор на одном из этих слов, подсвечивался весь fold (т.е. все if-elseif-else-end сразу)?
Posted: Sat Jan 18, 2014 11:09 am
by Serge Yolkin
Smitis
Полагаю, там есть правило для if - end, вот его и оставить, а остальные убрать (на время экспериментов лучше закомментировать)