Coder plugin (3)
- Author
- Message
-
Offline
- Posts: 2248
- Joined: Tue Aug 07, 2007 2:03 pm
- Location: Vinnitsa, Ukraine
YuS
Должно быть так
set noderoot=%~dp0servers/%%nodename%%/conf
%node%%%node%%
Дальше вижу много подобных ошибок, не буду перечислять. Суть в следующем:
set noderoot=%~dp0servers/%%nodename%%/conf -> nodename НЕ должен подствечиваться, ибо %% перед ним - экранирование, пользователь хочет чтобы имя состояло из сиволов % а не раскрылась переменная
%node%%%node%% - аналогично: первые 6 знаков выделить%node%, выделить оба %%
ЗЫ: на самом деле, выделять %%(т.е. экранированный %) не надо, ибо оно и есть экранированием. %% справедливо выделить только в случаях %%N.
А вообще рекомендую запихнуть тестовые примеры в батник, и тупо запустить, и посмотреть как действительно шелл их понял(предварительно снабдить переменные значениями). В первом десятке примера сразу нашлись ошибки.
PS: перекрасил %. Темнокрасный - % в переменной. Зеленый - % как обычный символ который экранировали (по аналогии с \\ в кавычках где \ управляющий символ который иногда в тексте тоже нужно выидеть).
Должно быть так
set noderoot=%~dp0servers/%%nodename%%/conf
%node%%%node%%
Дальше вижу много подобных ошибок, не буду перечислять. Суть в следующем:
set noderoot=%~dp0servers/%%nodename%%/conf -> nodename НЕ должен подствечиваться, ибо %% перед ним - экранирование, пользователь хочет чтобы имя состояло из сиволов % а не раскрылась переменная
%node%%%node%% - аналогично: первые 6 знаков выделить%node%, выделить оба %%
ЗЫ: на самом деле, выделять %%(т.е. экранированный %) не надо, ибо оно и есть экранированием. %% справедливо выделить только в случаях %%N.
А вообще рекомендую запихнуть тестовые примеры в батник, и тупо запустить, и посмотреть как действительно шелл их понял(предварительно снабдить переменные значениями). В первом десятке примера сразу нашлись ошибки.
PS: перекрасил %. Темнокрасный - % в переменной. Зеленый - % как обычный символ который экранировали (по аналогии с \\ в кавычках где \ управляющий символ который иногда в тексте тоже нужно выидеть).
-
Offline
- Posts: 513
- Joined: Sun Sep 15, 2013 8:25 am
- Location: 013 в Тентуре, семь по Спирали, налево от Большой Медведицы
Не согласен, позже аргументирую... вернее не со всем согласен, многое зависит от контекста. Интерпретатор консоли очень своеобразен сам по себе.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:В первом десятке примера сразу нашлись ошибки.
Может быть, имеет смысл в отдельный топик перебраться, чтобы здесь не уходить далеко от темы?
-
Offline
- Posts: 366
- Joined: Mon Jan 10, 2011 5:28 pm
- Contact:
-
Offline
- Posts: 513
- Joined: Sun Sep 15, 2013 8:25 am
- Location: 013 в Тентуре, семь по Спирали, налево от Большой Медведицы
Там похоже, что команда set сбрасывает errorlevel в cmd, а в bat-нике нет...Lenchik wrote:YuS
cmd vs bat -офигеть. Там пожизненное связывание переменных что ли?
Ссылки нет, у меня сохранились только примеры, а где я их взял и читал об этом - за давностью стерлось из памяти... то ли на rsdn, то ли из книжки какой электронной, то ли ещё где попадалось, не помню в общем.Lenchik wrote: А по первому тесту - вижу различия, но не понимаю что творится. Есть ссылка, где без особых рассусоливаний расписаны причины и, может, советы по применению даны?
Там загвоздка именно в двойном раскрытии переменных с помощью call и кроме того, имеют значение операторы скобки "(...)".
ЗЫ А, вот, нашел на руборде, в теме про командную строку, в шапке есть ссылки на два урока bat-аники. Про раскрытие переменных вот здесь
-
Offline
- Posts: 1162
- Joined: Sun Oct 20, 2013 11:44 am
Тут вдруг подумал, что должно всё-таки выглядеть так:
set noderoot=%~dp0servers/%%nodename%%/conf
ведь по сути тут "%%nodename%%" передаётся команде set не как переменная, а как просто строка. И подсвечивать тут "%%" кажется не очень логичным, да и вообще.
А собственно переменная "%nodename%" будет раскрыта тут только при использовании переменной "%noderoot%", когда интерпретатор отбросит крайние символы процента в "%%nodename%%" и строка станет переменной.
Имя переменной в cmd может состоять из каких угодно символов? В некоторых языках очень удобно: имя "[A-Za-z0-9_]+" и всё.
set noderoot=%~dp0servers/%%nodename%%/conf
ведь по сути тут "%%nodename%%" передаётся команде set не как переменная, а как просто строка. И подсвечивать тут "%%" кажется не очень логичным, да и вообще.
А собственно переменная "%nodename%" будет раскрыта тут только при использовании переменной "%noderoot%", когда интерпретатор отбросит крайние символы процента в "%%nodename%%" и строка станет переменной.
Имя переменной в cmd может состоять из каких угодно символов? В некоторых языках очень удобно: имя "[A-Za-z0-9_]+" и всё.
-
Offline
- Posts: 1162
- Joined: Sun Oct 20, 2013 11:44 am
VladSh
В fb2 обнаружил баг с подсветкой атрибута в теге типа
содержимое кавычек не подсвечивается. Не совсем понял причину, но решилось переменой местами пары правил в Folds,
В fb2 обнаружил баг с подсветкой атрибута в теге типа
Code: Select all
<a id="_Toc328493519">
-
Offline
- Posts: 3234
- Joined: Wed Nov 29, 2006 1:19 pm
- Location: Киев, Русь
- Contact:
-
Offline
- Posts: 202
- Joined: Sat Mar 28, 2015 2:36 pm
- Location: Russia
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)
Что не так? Подскажите пожалуйста.
Очень похоже, кстати, на обсуждение здесь.
-
Offline
- Posts: 53
- Joined: Wed Dec 09, 2015 6:33 pm
Skif_off, отличное правило, пользуюсь им, но оно ломается при такой строке:Skif_off wrote:beotiger
Ход конём, спасибо, что навели на мысль:Code: Select all
;3408385=1+512+262144+1048576+2097152 3408385 3 ${STR} 0 `(?<!\\)"` `(?<!\\)"` "" 0 0
Code: Select all
$ar[$bnc[0]] = str_replace("\", '', $ar[$bnc[0]]);
Можно ли пофиксить в этом же RegExp'е или придётся что-то новое придумывать?
-
Offline
- Posts: 513
- Joined: Sun Sep 15, 2013 8:25 am
- Location: 013 в Тентуре, семь по Спирали, налево от Большой Медведицы
Хмм, Coder думает... есть над чем подумать человекуbeotiger wrote:...Code: Select all
;3408385=1+512+262144+1048576+2097152 3408385 3 ${STR} 0 `(?<!\\)"` `(?<!\\)"` "" 0 0
Coder думает, что у нас тут экранированная кавычка, и всё ниже считает за строку, хотя мы тут экранируем обратный слэш.
Можно ли пофиксить в этом же RegExp'е или придётся что-то новое придумывать?

А если серьёзно, то Coder, как раз выполняет то, что ему предписано... он "видит" слеш и находит совпадение по шаблону в отрицательном просмотре назад.
Тут бы лучше так сделать:
Code: Select all
;3408385=1+512+262144+1048576+2097152
3408385 3 ${STR} 0 `(?<![^\\]\\)"` `(?<![^\\]\\)"` "" 0 0
-
Offline
- Posts: 53
- Joined: Wed Dec 09, 2015 6:33 pm
YuS wrote:Тут бы лучше так сделать:чтобы исключить экранированный обратный слеш.Code: Select all
;3408385=1+512+262144+1048576+2097152 3408385 3 ${STR} 0 `(?<![^\\]\\)"` `(?<![^\\]\\)"` "" 0 0
Огромная благодарность! Это работает как надо.
Надеюсь, пройдёт проверку временем (иногда такие тексты попадаются, сам не знаешь, что от них ожидать).
-
Offline
- Posts: 1162
- Joined: Sun Oct 20, 2013 11:44 am
Никто случайно не проверял, до скольки в среднем можно увеличить максимальный размер документа до отключения фолдинга? С учётом того, что далеко не все сидаят на топовом железе, конечно. По умолчанию 1000000 символов.
Сейчас чуть с ума не сошёл, прежде чем дошло, почему отключилась подсветка текста в кавычках в атрибутах XML
))
Сейчас чуть с ума не сошёл, прежде чем дошло, почему отключилась подсветка текста в кавычках в атрибутах XML
