Coder plugin (2)

Discuss and announce AkelPad plugins
Locked
  • Author
  • Message
Offline
Posts: 2247
Joined: Tue Aug 07, 2007 2:03 pm
Location: Vinnitsa, Ukraine

Post by FeyFre »

Кстати, изкоробочный coder.bat

Code: Select all

EXIT /B %ERRORLEVEL% ::Это уже коментарий должно быть раскрашено
"::Это уже коментарий должно быть раскрашено" - собственно комментарий и должен быть раскрашен. (:: - символ комментария в том числе с середины строки, да)

Offline
Posts: 582
Joined: Mon Apr 08, 2013 9:50 pm
Location: Win7SP1x64, APx64

Post by Drugmix »

FeyFre wrote:Наверное не так поняли. В тесте "goto :wrongsyntax_no_colorisation_label" - ошибка синтаксиса, соответственно раскраска не должна распространяться. Меток начинающихся на : не существует(кроме псевдометки :EOF)
А я же спрашивал (4.).

Code: Select all

0   `^\s*(Call)(?:\s*:|\s+)([\w:=\\/%\s"]+)\s*((?<=\s)::.*$)?$` "\1=(0,${OP},0) \2=(0,${AREA},0) \3=(0,${ATTR},0) \4=(3,${COMM},0)"
0   "^\s*(GoTo)\s*(\w+)\s*((?<=\s)::.*$)?$" "\1=(0,${OP},0) \2=(0,${AREA},0) \3=(3,${COMM},0)"
Но правило для команды Call задано с учётом возможного вызова параметров из слов и в виде путей к файлам, но без учёта вызова другой команды, вроде call set tratata=blabla.
Чтобы правильно подкрасить Call Set - надо составлять правила по аналогии с тем, как я их составил в ahk.coder:
там перед каждой командой идёт большая приписка, в которой, например, указывается Try, потому что Try может стоять перед любой другой командой.
FeyFre wrote:Кстати, изкоробочный coder.bat

Code: Select all

EXIT /B %ERRORLEVEL% ::Это уже коментарий должно быть раскрашено
"::Это уже коментарий должно быть раскрашено" - собственно комментарий и должен быть раскрашен. (:: - символ комментария в том числе с середины строки, да)
QuotesRE правила содержащие привязки к концу (и вроде к началу тоже) строки - перебивают остальные правила, в том числе и правила из Quotes: секции.

Offline
Posts: 1161
Joined: Sun Oct 20, 2013 11:44 am

Post by Skif_off »

FeyFre wrote:Наверное не так поняли. В тесте "goto :wrongsyntax_no_colorisation_label" - ошибка синтаксиса, соответственно раскраска не должна распространяться. Меток начинающихся на : не существует(кроме псевдометки :EOF)
Однако goto :label часто встречается.

А где можно про комментирование прочитать? Не могу нагуглить, пишут про rem и :: в начале строки и все. И с именами самих меток проблема.

Drugmix
А зачем вы привязываетесь к началу и концу строк? call и goto совсем не обязательно в начале строки.

Offline
Posts: 582
Joined: Mon Apr 08, 2013 9:50 pm
Location: Win7SP1x64, APx64

Post by Drugmix »

Skif_off wrote:
FeyFre wrote:Наверное не так поняли. В тесте "goto :wrongsyntax_no_colorisation_label" - ошибка синтаксиса, соответственно раскраска не должна распространяться. Меток начинающихся на : не существует(кроме псевдометки :EOF)
Однако goto :label часто встречается.

А где можно про комментирование прочитать? Не могу нагуглить, пишут про rem и :: в начале строки и все. И с именами самих меток проблема.

Drugmix
А зачем вы привязываетесь к началу и концу строк? call и goto совсем не обязательно в начале строки.
Я синтаксиса не знаю и подумал, что они идут всегда сначала строки (не считая отступов). Иных примеров тут никто не приводил. А что перед ними ещё может быть? Если что угодно - то тогда и правда надо избавляться от правил с привязками к краям строки.

Offline
Posts: 1161
Joined: Sun Oct 20, 2013 11:44 am

Post by Skif_off »

Drugmix
Все, что угодно, например, плагин Templates, batch.bat и batch.cmd:
IF "%1"=="" GOTO :NoParam

Offline
Posts: 1161
Joined: Sun Oct 20, 2013 11:44 am

Post by Skif_off »

В процессе поисков нашел Batch Function Library, используются метки вида
:DateToDays %yy% %mm% %dd% days
вероятно, для удобства и только.

По комментариям внутри строки:
видел такое в одной дискуссии

Code: Select all

command &::comment
но реально не встречал. В Sublime Text есть такое правило

Code: Select all

\s*:\s*:.*$
но оно споткнется здесь

Code: Select all

if defined ALLDRV (
  set ALLDRV=!ALLDRV:\=!
  set ALLDRV=!ALLDRV: =!
  set ALLDRV=!ALLDRV::=: !
)
ИМХО, проще забить в силу редкости.
Тут еще это исправление отработает некорректно. В общем, компромиссы кругом :)

По имени метки: нагуглил эту тему и объелся рыбного супа :) Но обычно используют a-z, 0-9 и "_", на DosTips до кучи ".". Засим предложенный в теме вариант

Code: Select all

(\w+(?:\.\w+)*)
наверное, самое оно?

Добавлено:
В итоге, по goto, call и меткам: кажется, оптимальным будет закомментировать в Quotes

Code: Select all

;1809=1+16+256+512+1024
1809	2	0	0	":"	""	""	""	""
и в QuotesRE добавить

Code: Select all

0	"^:\w+(?:\.\w+)*"	"\0=(2,0,0)"
0	"(goto)(?:\s*:|\s+)(\w+(?:\.\w+)*)"	"\1=(0,${OP},0) \2=(2,0,0)"
0	"(call)(?:\s*:|:)(\w+(?:\.\w+)*)"	"\1=(0,${OP},0) \2=(2,0,0)"
Или перед правилом в Quotes добавить еще одно

Code: Select all

;773=1+4+256+512
773	2	0	0	":"	" "	""	""	""
и убрать первое правило в QuotesRE.
Стиль шрифта и цвет по вкусу.
Last edited by Skif_off on Fri Feb 14, 2014 10:10 pm, edited 2 times in total.

Offline
Posts: 173
Joined: Mon Dec 06, 2010 9:53 am
Location: г.Харьков, Русь

Post by San_dr »

koros, если уже можно, - просьба выложить финальный вариант кодера после устаканивания

Offline
Posts: 58
Joined: Sat Apr 12, 2008 11:43 am

Post by koros »

Skif_off wrote:
koros wrote:И ещё вопрос для знатоков: возможно ли в coder.coder задать подсветку так, чтобы при просмотре любого *.coder переменные типа ${COMM} подсвечивались тем цветом, который задан для этой переменной в текущей цветовой теме?
Не знаток, но делал как-то: закомментировать в Quotes

Code: Select all

5	0	${VAR}	0	"${"	"}"	"$"	""	""
в Words добавить

Code: Select all

0	0	#808080	0	"${STR}"
0	0	#008000	0	"${COMM}"
0	0	#800000	0	"${VAR}"
0	0	#CC3333	0	"${DEL1}"
0	0	0	0	"${DEL2}"
0	0	#3333CC	0	"${TYPE}"
0	0	#3333CC	0	"${OP}"
0	0	#3333CC	0	"${TAG}"
0	0	#339933	0	"${ATTR}"
0	0	#339933	0	"${IF}"
0	0	#FF8000	0	"${AREA}"
0	0	#FF8000	0	"${NUM}"

(для дефолтной темы)
Но в итоге просто держу файл color.coder с одной секцией Words со строками типа

Code: Select all

0	0	#808080	0	STR
цвета и переменные из дефолтной темы + цвета из моей темы + цвета и переменные Infocatcher + основные цвета html/css (с кодом и отдельно с именем).
Это не совсем то, что я спрашивал. В этом примере цвета для переменных типа ${AREA} заданы жестко, а я бы хотел, чтобы они менялись в зависимости от текущей темы. То есть я, например, в abc.coder (для подсветки файлов типа *.abc) задаю в Words для слова mywords цвет ${OP} и сразу вижу, как он отображается в текущей теме, и мне не надо открывать файл *.abc. Если такой возможности нет, то неплохо было бы добавит в последующих версиях плагина.
Skif_off wrote: Еще по вашему bat.coder:
- не будут работать команды с пробелом (net ..., reg ...), т.к. пробел и табуляция есть в Delimiters, у себя делал в Quotes

Code: Select all

32768	0	${OP}	0	"reg"	" add"		""	""	""
- правило

Code: Select all

0	2	${OP}	0	regsvr32.exe
тоже не сработает из-за точки в Delimiters. Где-то в теме обсуждалось, добавлял себе в QuotesRE

Code: Select all

; внешние команды
0	"\b(\w+[\-\w]*\w*)\.(bat|cmd|com|exe)"	"\1=(0,${NUM},0) \2=(0,${NUM},0)"
Спасибо буду пробовать.
San_dr wrote:koros, если уже можно, - просьба выложить финальный вариант кодера после устаканивания
Окончательный вариант выложу в составе конструктора на осзоне. Или нужно здесь? Вроде это никому особо не интересно

Offline
Posts: 366
Joined: Mon Jan 10, 2011 5:28 pm
Contact:

Post by Lenchik »

интересно

Offline
Posts: 1161
Joined: Sun Oct 20, 2013 11:44 am

Post by Skif_off »

koros wrote:я бы хотел, чтобы они менялись в зависимости от текущей темы. То есть я, например, в abc.coder (для подсветки файлов типа *.abc) задаю в Words для слова mywords цвет ${OP} и сразу вижу, как он отображается в текущей теме, и мне не надо открывать файл *.abc. Если такой возможности нет, то неплохо было бы добавит в последующих версиях плагина.
Вряд-ли будет реализовано, слишком специфично, не так уж много людей занимается файлами подсветки.

По bat.coder: не сталкивался ранее, но вдруг заметил - отсутствует правило для одиночных кавычек (или апостроф, хз как правильно), из увиденного сегодня:

Code: Select all

(for /f "tokens=1* delims=:" %%a in ('findstr /n /r "^" nvram1.txt') do (  
команда findstr не будет подсвечена. Вот думаю - продублировать правило для обычных двойных кавычек или дабавить "'" в Delimiters?

Offline
Posts: 58
Joined: Sat Apr 12, 2008 11:43 am

Post by koros »

Skif_off wrote:
По bat.coder: не сталкивался ранее, но вдруг заметил - отсутствует правило для одиночных кавычек (или апостроф, хз как правильно), из увиденного сегодня:

Code: Select all

(for /f "tokens=1* delims=:" %%a in ('findstr /n /r "^" nvram1.txt') do (  
команда findstr не будет подсвечена. Вот думаю - продублировать правило для обычных двойных кавычек или дабавить "'" в Delimiters?

Хорошее замечание.
У меня правило для обычных кавычек в Quotes не используется, поэтому - добавил себе в Delimiters.

А нет ли мыслей по поводу параметров после call :label ?

Offline
Posts: 1161
Joined: Sun Oct 20, 2013 11:44 am

Post by Skif_off »

koros wrote:А нет ли мыслей по поводу параметров после call :label ?
ИМХО, можно забить - многовато условий:
параметры, имена файлов, пакетные параметры (%1-%9), переменные

Code: Select all

if not "%len%"=="" set /a %1+=1 & call :len %1 "%len:~1%"

Offline
Posts: 58
Joined: Sat Apr 12, 2008 11:43 am

Post by koros »

Skif_off wrote:
koros wrote:А нет ли мыслей по поводу параметров после call :label ?
ИМХО, можно забить - многовато условий:
параметры, имена файлов, пакетные параметры (%1-%9), переменные

Code: Select all

if not "%len%"=="" set /a %1+=1 & call :len %1 "%len:~1%"
А если только то, что внутри кавычек?
call :label "param1" "param2"
Переменные пусть отображаются, как переменные, а параметры без кавычек - как просто текст

Offline
Posts: 58
Joined: Sat Apr 12, 2008 11:43 am

Post by koros »

Я так понимаю, что на мой предыдущий вопрос ответа нет. На, да и ладно с ним :)

У меня появился вопрос по фолдингу. Есть большой файл (~10000 строк). Включаю фолдинг - ничего не происходит. Выключаю фолдинг и удаляю снизу некоторое количество строк (опытным путем выяснил, что должно оставаться не более 9138 строк). Включаю фолдинг - работает, вставляю обратно удаленные строки - работает. Выключаю и опять включаю - не работает. Проверял на Akelmenu.coder

Offline
Posts: 2247
Joined: Tue Aug 07, 2007 2:03 pm
Location: Vinnitsa, Ukraine

Post by FeyFre »

koros, диалог настроек палгина, закладка CodeFold 1, курить 2 ограничения: Folds linit и Maximum document ### characters. Вероятно у вас срабатывает второй лимит, который срабатывает только при открытии файла(ну или разрешении фолдинга если файл уже открыт). В процессе редактирования если ограничения нарушаются реакции не будет.
Locked