Не воспроизводится - работает одинаково.Drugmix wrote:правило не работало из-за того, как странно regex parser обрабатывает (call|goto) - достаточно изменить на (goto|call) и всё заработает
Coder plugin (2)
- Author
- Message
-
Offline
- Posts: 582
- Joined: Mon Apr 08, 2013 9:50 pm
- Location: Win7SP1x64, APx64
Instructor
перепроверил у себя - и правда работает одинаково. Прошу прощения, возможно, я во время одной из проверок забыл обновить кэш после правки правила из состояния, когда оно было нерабочим. Забираю свои слова назад.
А предположение такое сделал потому что у меня уже были некоторые правила (упоминалось в этой же теме или в теме про регулярные выражения), когда перебор ИЛИ ИЛИ вариантов работал так, что порядок вариантов влиял на результат, например:
не срабатывает на строке
а если группу (\d|[1-9]\d|100) заменить на (100|[1-9]\d|\d) - то уже срабатывает.
перепроверил у себя - и правда работает одинаково. Прошу прощения, возможно, я во время одной из проверок забыл обновить кэш после правки правила из состояния, когда оно было нерабочим. Забираю свои слова назад.
А предположение такое сделал потому что у меня уже были некоторые правила (упоминалось в этой же теме или в теме про регулярные выражения), когда перебор ИЛИ ИЛИ вариантов работал так, что порядок вариантов влиял на результат, например:
Code: Select all
0 "^\s*(?:\}\s*)*?(?:(Else)(?:\s*,\s*|\s+|\s*\{\s*)|(.+(?=::))::)?(?:(Try)(?:\s*,\s*|\s+|\s*\{\s*))?\s*(#InputLevel)(?:(?:\s*,\s*|\s+)(\d|[1-9]\d|100)?)?\s*?((?<=\s);.*)?$" "\1=(4,${IF},0) \2=(4,${STR},0) \3=(2,${OP},0) \4=(2,${AREA},0) \5=(0,${NUM},0) \6=(3,${COMM},0)" ; \5=${LEVEL}
Code: Select all
#inputlevel 20
-
Offline
- Posts: 1161
- Joined: Sun Oct 20, 2013 11:44 am
Начало и конец строки тут лишние, комментарий тоже.Drugmix wrote:попробуйте вот это правило:Code: Select all
0 "^\s*(goto|call)(?:\s+|\s*:?)(\w+(?:\.\w+)*)([^;])*((?<=\s);.*$)?$" "\1=(0,${OP},0) \2=(0,${AREA},0) \3=(0,${ATTR},0) \4=(3,${COMM},0)"
FeyFre
Drugmix
Спасибо за пояснения и предложения, правила писались в три приема между делом, никак руки не доходили очеловечить Остановился на таком варианте:
Code: Select all
0 "(goto|call)(?:\s+|\s*:?)(\w+(?:\.\w+)*)" "\1=(0,${OP},0) \2=(2,0,0) \3=(2,0,0)"
-
Offline
- Posts: 582
- Joined: Mon Apr 08, 2013 9:50 pm
- Location: Win7SP1x64, APx64
Skif_off
я в своём сообщении ошибку то подправил, и хоть и с ней всё работает нормально, но формально парсер имеет полное право сработать по заданному правилу и ошибочно:там 2-ой знак вопроса не нужен.
И да, у вас лишняя \3=(…) в правиле: там нет захватывающей третьей группы же.
я в своём сообщении ошибку то подправил, и хоть и с ней всё работает нормально, но формально парсер имеет полное право сработать по заданному правилу и ошибочно:
Code: Select all
(?:\s+|\s*:)
И да, у вас лишняя \3=(…) в правиле: там нет захватывающей третьей группы же.
-
Offline
- Posts: 1161
- Joined: Sun Oct 20, 2013 11:44 am
-
Offline
- Posts: 582
- Joined: Mon Apr 08, 2013 9:50 pm
- Location: Win7SP1x64, APx64
Skif_off
не должно быть такого. А если попробовать то результат такой же?
не должно быть такого. А если попробовать
Code: Select all
(?:\s*:|\s+)
Last edited by Drugmix on Wed Feb 12, 2014 7:40 pm, edited 1 time in total.
-
Offline
- Posts: 1161
- Joined: Sun Oct 20, 2013 11:44 am
Так вообще не работает.Drugmix wrote:не должно быть такого. А если попробоватьто результат такой же?Code: Select all
(\s*:|\s+)
Вспомнил, почему разнес на два правила:
call set MYPATH=%MYPATH%
Через call нечасто вызывают внутренние функции, но бывает. С :{0,1} таки прогнал.
-
Offline
- Posts: 58
- Joined: Sat Apr 12, 2008 11:43 am
Вот, что у меня получаетсяDrugmix wrote:koros
попробуйте вот это правило:Code: Select all
0 "^\s*(goto|call)(?:\s+|\s*:)(\w+(?:\.\w+)*)([^;])*((?<=\s);.*$)?$" "\1=(0,${OP},0) \2=(0,${AREA},0) \3=(0,${ATTR},0) \4=(3,${COMM},0)"
Skif_off
Code: Select all
0 "(goto|call)(?:\s+|\s*:?)(\w+(?:\.\w+)*)" "\1=(2,${OP},0) \2=(2,${AREA},0)"
Вот мой bat.coder
-
Offline
- Posts: 1161
- Joined: Sun Oct 20, 2013 11:44 am
koros
Не знаю, в чем может быть дело, скопировал все себе - нормально, ничего не слетает, все подсвечивается. Или дело в том, что у меня тестовая версия? Открыто несколько файлов + несохраненные, проверить с 4.8.7 пока не могу)
Кстати, правило
не сработает из-за "=" в Delimiters.
Еще по поводу call:
call d:\work\test.bat "%var%"
Это не дело, наверное, все-таки разнесу.
Не знаю, в чем может быть дело, скопировал все себе - нормально, ничего не слетает, все подсвечивается. Или дело в том, что у меня тестовая версия? Открыто несколько файлов + несохраненные, проверить с 4.8.7 пока не могу)
Кстати, правило
Code: Select all
0 2 ${OP} 0 files=
Еще по поводу call:
call d:\work\test.bat "%var%"
Это не дело, наверное, все-таки разнесу.
-
Offline
- Posts: 582
- Joined: Mon Apr 08, 2013 9:50 pm
- Location: Win7SP1x64, APx64
Code: Select all
(?:\s*:|\s+)
-
Offline
- Posts: 58
- Joined: Sat Apr 12, 2008 11:43 am
Ещё раз собрал перезагрузил AkelPad - вроде всё заработало как надо. Спасибо.Skif_off wrote:koros
Не знаю, в чем может быть дело, скопировал все себе - нормально, ничего не слетает, все подсвечивается. Или дело в том, что у меня тестовая версия? Открыто несколько файлов + несохраненные, проверить с 4.8.7 пока не могу)
Кстати, правилоне сработает из-за "=" в Delimiters.Code: Select all
0 2 ${OP} 0 files=
Еще по поводу call:
call d:\work\test.bat "%var%"
Это не дело, наверное, все-таки разнесу.
Вот что я подумал:
call test.bat onespace
call d:\work\test.bat "%var%"
test.bat и d:\work\test.bat - вообще не надо подсвечивать, как метки типа :label. Как это сделать?
А по поводу files= - я вообще эту строку уберу, т.к. папка files встречается гораздо чаще, чем команда files.
И ещё вопрос для знатоков: возможно ли в coder.coder задать подсветку так, чтобы при просмотре любого *.coder переменные типа ${COMM} подсвечивались тем цветом, который задан для этой переменной в текущей цветовой теме?
-
Offline
- Posts: 1161
- Joined: Sun Oct 20, 2013 11:44 am
Drugmix
Спасибо, исправил.
в Words добавить
(для дефолтной темы)
Но в итоге просто держу файл color.coder с одной секцией Words со строками типа
цвета и переменные из дефолтной темы + цвета из моей темы + цвета и переменные Infocatcher + основные цвета html/css (с кодом и отдельно с именем).
Еще по вашему bat.coder:
- не будут работать команды с пробелом (net ..., reg ...), т.к. пробел и табуляция есть в Delimiters, у себя делал в Quotes
- правило
тоже не сработает из-за точки в Delimiters. Где-то в теме обсуждалось, добавлял себе в QuotesRE
Спасибо, исправил.
Я, вероятно, разделю правила для call и goto.koros wrote:test.bat и d:\work\test.bat - вообще не надо подсвечивать, как метки типа :label. Как это сделать?
Не знаток, но делал как-то: закомментировать в Quoteskoros wrote:И ещё вопрос для знатоков: возможно ли в coder.coder задать подсветку так, чтобы при просмотре любого *.coder переменные типа ${COMM} подсвечивались тем цветом, который задан для этой переменной в текущей цветовой теме?
Code: Select all
5 0 ${VAR} 0 "${" "}" "$" "" ""
(для дефолтной темы)
Но в итоге просто держу файл color.coder с одной секцией Words со строками типа
Code: Select all
0 0 #808080 0 STR
Еще по вашему bat.coder:
- не будут работать команды с пробелом (net ..., reg ...), т.к. пробел и табуляция есть в Delimiters, у себя делал в Quotes
Code: Select all
32768 0 ${OP} 0 "reg" " add" "" "" ""
Code: Select all
0 2 ${OP} 0 regsvr32.exe
Code: Select all
; внешние команды
0 "\b(\w+[\-\w]*\w*)\.(bat|cmd|com|exe)" "\1=(0,${NUM},0) \2=(0,${NUM},0)"