Page 7 of 40

Posted: Thu Dec 24, 2015 6:47 pm
by FeyFre
YuS
Должно быть так
set noderoot=%~dp0servers/%%nodename%%/conf
%node%%%node%%
Дальше вижу много подобных ошибок, не буду перечислять. Суть в следующем:
set noderoot=%~dp0servers/%%nodename%%/conf -> nodename НЕ должен подствечиваться, ибо %% перед ним - экранирование, пользователь хочет чтобы имя состояло из сиволов % а не раскрылась переменная
%node%%%node%% - аналогично: первые 6 знаков выделить%node%, выделить оба %%

ЗЫ: на самом деле, выделять %%(т.е. экранированный %) не надо, ибо оно и есть экранированием. %% справедливо выделить только в случаях %%N.
А вообще рекомендую запихнуть тестовые примеры в батник, и тупо запустить, и посмотреть как действительно шелл их понял(предварительно снабдить переменные значениями). В первом десятке примера сразу нашлись ошибки.

PS: перекрасил %. Темнокрасный - % в переменной. Зеленый - % как обычный символ который экранировали (по аналогии с \\ в кавычках где \ управляющий символ который иногда в тексте тоже нужно выидеть).

Posted: Fri Dec 25, 2015 2:17 am
by YuS
FeyFre wrote:YuS
Должно быть так
set noderoot=%~dp0servers/%%nodename%%/conf
%node%%%node%%
Не согласен, позже аргументирую... вернее не со всем согласен, многое зависит от контекста. Интерпретатор консоли очень своеобразен сам по себе.
FeyFre wrote: Дальше вижу много подобных ошибок, не буду перечислять.
Огласите весь список, пожалуйста. :)
Ну, если в итоге, всё же, есть цель получить наиболее корректный bat.coder...
FeyFre wrote: Суть в следующем:
set noderoot=%~dp0servers/%%nodename%%/conf -> nodename НЕ должен подствечиваться, ибо %% перед ним - экранирование, пользователь хочет чтобы имя состояло из сиволов % а не раскрылась переменная
%node%%%node%% - аналогично: первые 6 знаков выделить%node%, выделить оба %%
Не факт. Всё будет зависеть от контекста... а учесть, с помощью текущих возможностей кодера, эти моменты сложно, если вообще возможно.
Всё же, "%" - не символ экранирования, а оператор разыменования переменной, изначально... именно поэтому интерпретатор его "съедает" и иногда используют удваивание этого символа для представления литеры %, но, повторюсь, это не экранирование в чистом виде и зачастую удваивание используется в местах двойного раскрытия именно переменных.
FeyFre wrote:В первом десятке примера сразу нашлись ошибки.
Надо по пунктам разобрать, могу ведь и честно заблуждаться...
Может быть, имеет смысл в отдельный топик перебраться, чтобы здесь не уходить далеко от темы?

Posted: Fri Dec 25, 2015 5:49 am
by YuS
FeyFre, чтобы не быть совсем голословным, сделал несколько примеров особенностей консоли.
ссылка

Posted: Fri Dec 25, 2015 8:55 am
by Lenchik
YuS
cmd vs bat - :shock: офигеть. Там пожизненное связывание переменных что ли?
А по первому тесту - вижу различия, но не понимаю что творится. Есть ссылка, где без особых рассусоливаний расписаны причины и, может, советы по применению даны?

Posted: Fri Dec 25, 2015 11:33 am
by YuS
Lenchik wrote:YuS
cmd vs bat - :shock: офигеть. Там пожизненное связывание переменных что ли?
Там похоже, что команда set сбрасывает errorlevel в cmd, а в bat-нике нет...
Lenchik wrote: А по первому тесту - вижу различия, но не понимаю что творится. Есть ссылка, где без особых рассусоливаний расписаны причины и, может, советы по применению даны?
Ссылки нет, у меня сохранились только примеры, а где я их взял и читал об этом - за давностью стерлось из памяти... то ли на rsdn, то ли из книжки какой электронной, то ли ещё где попадалось, не помню в общем.
Там загвоздка именно в двойном раскрытии переменных с помощью call и кроме того, имеют значение операторы скобки "(...)".

ЗЫ А, вот, нашел на руборде, в теме про командную строку, в шапке есть ссылки на два урока bat-аники. Про раскрытие переменных вот здесь

Posted: Wed Dec 30, 2015 11:59 am
by Skif_off
Тут вдруг подумал, что должно всё-таки выглядеть так:
set noderoot=%~dp0servers/%%nodename%%/conf
ведь по сути тут "%%nodename%%" передаётся команде set не как переменная, а как просто строка. И подсвечивать тут "%%" кажется не очень логичным, да и вообще.
А собственно переменная "%nodename%" будет раскрыта тут только при использовании переменной "%noderoot%", когда интерпретатор отбросит крайние символы процента в "%%nodename%%" и строка станет переменной.

Имя переменной в cmd может состоять из каких угодно символов? В некоторых языках очень удобно: имя "[A-Za-z0-9_]+" и всё.

Posted: Wed Dec 30, 2015 3:14 pm
by Skif_off
VladSh
В fb2 обнаружил баг с подсветкой атрибута в теге типа

Code: Select all

<a id="_Toc328493519">
содержимое кавычек не подсвечивается. Не совсем понял причину, но решилось переменой местами пары правил в Folds,

Code: Select all

;2049=1+2048
2049	0	0	0	"<!--"            "--->"             ""   0   0
;517=1+4+512
517	3	${COMM}	0	"<!--"            "-->"              ""   0   0
;517=1+4+512
517	0	0	0	"<![CDATA["       "]]>"              ""   0   0
;2049=1+2048
2049	0	0	0	"</"              ""                 ""   0   0
;4101=1+4+4096
4101	0	0	0	"<!"              ">"                ""   0   1
;5=1+4
5	0	0	0	"<?"              "?>"               ""   0   1
;266245=1+4+4096+262144
266245	0	0	0	"<emphasis>"      "</emphasis>"      ""   0   0
266245	0	0	0	"<strong>"        "</strong>"        ""   0   0
266245	0	0	0	"<code>"          "</code>"          ""   0   0
266245	0	0	0	"<strikethrough>" "</strikethrough>" ""   0   0
266245	0	0	0	"<sub>"           "</sub>"           ""   0   0
266245	0	0	0	"<sup>"           "</sup>"           ""   0   0
;4101=1+4+4096
4101	0	0	0	"<"               "</"               ""   0   1
;1314821=1+4+4096+262144+1048576
1314821	0	0	0	"<a(\s|>)"        "</a>"             ""   0   0
;4101=1+4+4096
4101	0	0	0	"<"               "/>"               ""   0   1
;3412609=1+128+512+4096+262144+1048576+2097152
3412609	0	0	0	"\s"              "[/?]?>"           ""   1   2

Posted: Wed Dec 30, 2015 11:36 pm
by VladSh
Skif_off
Спасибо!

Posted: Thu Dec 31, 2015 8:50 am
by Skif_off
VladSh
Так перестало подсвечивать атрибуты внутри <a></a> :)) Прошу прощения, что-то не сообразил проверить.

Code: Select all

;2049=1+2048
2049	0	0	0	"<!--"            "--->"             ""   0   0
;517=1+4+512
517	3	${COMM}	0	"<!--"            "-->"              ""   0   0
;517=1+4+512
517	0	0	0	"<![CDATA["       "]]>"              ""   0   0
;2049=1+2048
2049	0	0	0	"</"              ""                 ""   0   0
;4101=1+4+4096
4101	0	0	0	"<!"              ">"                ""   0   1
;5=1+4
5	0	0	0	"<?"              "?>"               ""   0   1
;266245=1+4+4096+262144
266245	0	0	0	"<emphasis>"      "</emphasis>"      ""   0   0
266245	0	0	0	"<strong>"        "</strong>"        ""   0   0
266245	0	0	0	"<code>"          "</code>"          ""   0   0
266245	0	0	0	"<strikethrough>" "</strikethrough>" ""   0   0
266245	0	0	0	"<sub>"           "</sub>"           ""   0   0
266245	0	0	0	"<sup>"           "</sup>"           ""   0   0
;1314821=1+4+4096+262144+1048576
1314821	0	0	0	"<a(\s|>)"        "</a>"             ""   0   2
;4101=1+4+4096
4101	0	0	0	"<"               "</"               ""   0   1
;4101=1+4+4096
4101	0	0	0	"<"               "/>"               ""   0   1
;3412609=1+128+512+4096+262144+1048576+2097152
3412609	0	0	0	"\s"              "[/?]?>"           ""   1   2

Posted: Fri Jan 08, 2016 5:15 pm
by Kley
Instructor
Функция с такими параметрами:

Code: Select all

"Слово целиком, с учетом регистра" Call("Coder::HighLight", 2, "#000000", "#9BFFFF", 5, 0)
выделяет все три слова

Code: Select all

Case
"Case"
Case
А вот такая:

Code: Select all

"Следующая отметка" Call("Coder::HighLight", 4, 0, 0, 0, 0)
находит только первое и третье слово.
Что не так? Подскажите пожалуйста.
Очень похоже, кстати, на обсуждение здесь.

Posted: Sat Jan 09, 2016 9:26 pm
by Cuprum
Instructor
Можно ли добавить подсветку цвета в SVG-файлах как в

Image

Posted: Fri Jan 15, 2016 5:16 am
by beotiger
Skif_off wrote:beotiger
Ход конём, спасибо, что навели на мысль:

Code: Select all

;3408385=1+512+262144+1048576+2097152
3408385	3	${STR}	0	`(?<!\\)"`	`(?<!\\)"`	""	0	0
Skif_off, отличное правило, пользуюсь им, но оно ломается при такой строке:

Code: Select all

$ar[$bnc[0]] = str_replace("\", '', $ar[$bnc[0]]);
Coder думает, что у нас тут экранированная кавычка, и всё ниже считает за строку, хотя мы тут экранируем обратный слэш.
Можно ли пофиксить в этом же RegExp'е или придётся что-то новое придумывать?

Posted: Fri Jan 15, 2016 6:12 am
by YuS
beotiger wrote:

Code: Select all

;3408385=1+512+262144+1048576+2097152
3408385	3	${STR}	0	`(?<!\\)"`	`(?<!\\)"`	""	0	0
...
Coder думает, что у нас тут экранированная кавычка, и всё ниже считает за строку, хотя мы тут экранируем обратный слэш.
Можно ли пофиксить в этом же RegExp'е или придётся что-то новое придумывать?
Хмм, Coder думает... есть над чем подумать человеку :) Шутка
А если серьёзно, то Coder, как раз выполняет то, что ему предписано... он "видит" слеш и находит совпадение по шаблону в отрицательном просмотре назад.
Тут бы лучше так сделать:

Code: Select all

;3408385=1+512+262144+1048576+2097152
3408385	3	${STR}	0	`(?<![^\\]\\)"`	`(?<![^\\]\\)"`	""	0	0
чтобы исключить экранированный обратный слеш.

Posted: Sat Jan 16, 2016 2:51 pm
by beotiger
YuS wrote:Тут бы лучше так сделать:

Code: Select all

;3408385=1+512+262144+1048576+2097152
3408385	3	${STR}	0	`(?<![^\\]\\)"`	`(?<![^\\]\\)"`	""	0	0
чтобы исключить экранированный обратный слеш.


Огромная благодарность! Это работает как надо.
Надеюсь, пройдёт проверку временем (иногда такие тексты попадаются, сам не знаешь, что от них ожидать).

Posted: Fri Jan 22, 2016 11:24 pm
by Skif_off
Никто случайно не проверял, до скольки в среднем можно увеличить максимальный размер документа до отключения фолдинга? С учётом того, что далеко не все сидаят на топовом железе, конечно. По умолчанию 1000000 символов.

Сейчас чуть с ума не сошёл, прежде чем дошло, почему отключилась подсветка текста в кавычках в атрибутах XML :)))