Page 35 of 99

Posted: Tue Feb 11, 2014 1:12 pm
by koros
Можно ли в bat.coder подсветить слово, которое написано сразу после кавычек (например, "usebackq)?

Я убрал из Quotes:

Code: Select all

5	3	${STR}	0	`"`	`"`	""	""	""
и добавил в Words:

Code: Select all

0	2	${IF}	0	usebackq
но
"usebackq - не подсвечивается
" usebackq (между кавычкой и usebackq - пробел) - подсвечивается

Posted: Tue Feb 11, 2014 4:56 pm
by Skif_off
koros
Добавьте в Delimiters:

Code: Select all

1	0	0	0	`"`

Posted: Wed Feb 12, 2014 5:04 am
by koros
Skif_off wrote:koros
Добавьте в Delimiters:

Code: Select all

1	0	0	0	`"`
Спасибо - так заработало.
И еще вопросик: как сделать, чтобы подсвечивалось :Function не только в строке

Code: Select all

goto :Function
но и в строке

call :Function Params

То есть, когда после :Function есть еще слова. Я так понимаю, что надо заменить 1297 в строке

Code: Select all

1297	2	${AREA}	0	":"	""	""	""	""
Но вот на что?

Posted: Wed Feb 12, 2014 10:23 am
by Skif_off
koros
Это правило подсвечивает метки только в начале строк.

Если нужно подсветить так: call :Function Params
то у себя в QuotesRE добавил

Code: Select all

;метки
0	"(?<=goto)\s?:{0,1}\w+"	"\0=(2,0,0)"
0	"(?<=call)\s?:{0,1}\w+"	"\0=(2,0,0)"

Posted: Wed Feb 12, 2014 10:36 am
by Drugmix
Skif_off
эквивалент для

Code: Select all

:{0,1}
[/b] -

Code: Select all

:?
[/b]

Posted: Wed Feb 12, 2014 11:21 am
by FeyFre
Товарищи, только не забывайте что там должно быть

Code: Select all

(call)|(goto)((\s*(?=:):)|(\s+))\w+

Posted: Wed Feb 12, 2014 11:48 am
by koros
Спасибо - все получилось

Code: Select all

0   "(?<=goto)\s?:?\w+"   "\0=(2,${AREA},0)"
0   "(?<=call)\s?:?\w+"   "\0=(2,${AREA},0)"

Posted: Wed Feb 12, 2014 12:19 pm
by FeyFre
koros, пробел обязателен если нету двоеточия. И пробелов может быть больше одного(я правило написал выше которое это всё учитывает).

И оператор goto имеет синтаксис "goto метка" и не имеет синтаксиса "goto :метка", и метка не может содержать двоеточие в начале, за исключением псевдометки ":EOF". Конечно если правила не собираетесь показывать народу, и 100% уверены что никогда не будете пользоваться тем что Ваше правило не покрывает, то можете не доделывать ;)

Posted: Wed Feb 12, 2014 12:20 pm
by Drugmix
На мой взгляд, должно быть как-то так:

Code: Select all

0   "^\s*(?:(call|goto)\s+)?:?(\w+)\s*([^;])*((?<=\s);.*$)?$"   "\1=(0,${OP},0) \2=(0,${TAG},0) \3=(0,${ATTR},0) \4=(3,${COMM},0)"

Posted: Wed Feb 12, 2014 12:26 pm
by FeyFre
Drugmix, не претендую на законченность правила, мое дело пнуть в правильном направлении(в предыдущем сообщении я уточнил какую ошибку я имел в виду правилом, и с учетом моего сообщения ваше новое правило тоже не совсем то. Нет необходимости лепить goto и call в одно правило - уж слишком оно станет громоздким, если не невозможным)

Posted: Wed Feb 12, 2014 12:28 pm
by Drugmix
FeyFre
2 простых правила, вроде как, будут работать медленней 1 более комплексного. И да, я ошибся по поводу того, что оно ничего не подсветит - если считать что это поправка к предыдущему - то там же указывается цвет для \0=, а значит подсвечиваться всё будет.

Posted: Wed Feb 12, 2014 12:51 pm
by FeyFre
Проверьте на контрольных примерах(с табуляциями в качестве разделителя опустил)

Code: Select all

call test.bat onespace
call  test.bat twospaces
call:lable nospaces
call :label onespace
call  :label twospaces
call            :label dozenspaces
goto label1sp
goto  label2sp
goto           label12sp
goto :EOF
goto:EOF
goto :wrongsyntax_no_colorisation_label

Posted: Wed Feb 12, 2014 1:13 pm
by Drugmix
FeyFre
Я же не знаю что это за язык и какой у него синтаксис:
1. раз перед : возможно любое кол-во пробелов, то следует

Code: Select all

^\s*(?:(call|goto)\s+)?:?
заменить на более простую конструкцию

Code: Select all

^\s*(call|goto)(?:\s*:|\s+)
2. раз в названии ярлыка могут быть и точки, то следует (\w+) заменить как минимум на

Code: Select all

([\w\.]+)
а как максимум - ещё и уточнить всякие вопросы о том сколько их может быть и где: например, если подразумевается простой стандарт test.file.name.bat, то можно изменить группу на

Code: Select all

(\w+(?:\.\w+)*)
3. возможны ли в этом языке комментарии в конце строки и как они задаются? я предположил, что могут и задаются точкой с запятой после пробельного символа.
4. не ясно по какому принципу следует определять, что последнюю строку из вашего примера не стоит окрашивать.

Итого, предварительный вариант получается такой:

Code: Select all

0	"^\s*(call|goto)(?:\s*:|\s+)(\w+(?:\.\w+)*)([^;])*((?<=\s);.*$)?$" "\1=(0,${OP},0) \2=(0,${TAG},0) \3=(0,${ATTR},0) \4=(3,${COMM},0)"

Posted: Wed Feb 12, 2014 1:22 pm
by koros
FeyFre
Drugmix
Спасибо за пояснения, но я не совсем понимаю как работает секция QuotesRE. Вариант Drugmix у меня не работает. Может кто-нибудь написать окончательный вариант, чтобы подсвечивались и "goto метка", и "goto :метка" и "call :метка" (пробелов - любое количество), причем :метка (метка) подсвечивалась бы цветом ${AREA}?
Заранее спасибо.

Posted: Wed Feb 12, 2014 1:59 pm
by Drugmix
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)"
:
Image