Coder plugin (2)

Discuss and announce AkelPad plugins
Locked
  • Author
  • Message
Offline
Posts: 1161
Joined: Sun Oct 20, 2013 11:44 am

Post by Skif_off »

Instructor wrote:Чтобы помочь с правилом, необходимо понять назначение символа "@" и увидеть конечные примеры подсветки.
Не удается нагуглить пример с подсветкой, но выглядело

\if@twocolumn
\ifdim\@tempdima>2\@tempdimb\relax
\setlength\textwidth{2\@tempdimb}
\else
\setlength\textwidth{\@tempdima}
\fi
\else
\ifdim\@tempdima>\@tempdimb\relax
\setlength\textwidth{\@tempdimb}
\else
\setlength\textwidth{\@tempdima}
\fi
\fi
\@settopoint\textwidth


С назначением @ не совсем понятно, так понимаю - это тоже команды, но преимущественно вижу их в файлах стиля (*.sty). Кажется это что-то временное, вроде текстового или цифрового шаблона.
Нагуглил, что есть еще команда "\@", но, как понял, она ставится только перед знаком пунктуации и тогда не помеха.
Кстати:
SynWrite - не подсвечивает "\\[@a-z]*" вообще никак
Notepad++ - и "\\[a-z]*", и "\\[@a-z]*" подсвечивает одинаково
PSPad - не подсвечивает "\\[@a-z]*", но подсвечивает "\@"
не знаю, стоит ли заморачиваться? По логике - стоило бы и хотелось бы понять, почему не работает.

Попутно обнаружил "\" - принудительнывй разрыв строки и фолдинг:
- группы LaTeX (может быть вложенным, не знаю - добавлять или нет?)
{
...
}
- здесь увидел

Code: Select all

\begin{frame}
\frametitle{Формулы}
$$
\left\{
\begin{array}{rl}
\dot x = & \sigma (y-x) \\
\dot y = & x (r - z) - y \\
\dot z = & xy - bz
\end{array}
\right.
$$
\end{frame}

блок между $$ и $$ подсвечен иначе, но, наверное, можно забить, ведь в структуре файла по идее будет видно \begin{frame}?


Заодно по sh.coder:

Code: Select all

; ;2176=128+2048
2176	3	${STR}	0	"echo"	""	""	""	""
Если строка заканчивается комментарием, то комментарий не будет выглядить как комментарий, а все после # не изменит стиля, предварительно исправил на

Code: Select all

;2432=128+256+2048
2432	3	${STR}	0	"echo"	"#"	""	""	""
Или не нужно этого делать? В bat.coder получается так же.

Offline
Site Admin
Posts: 6311
Joined: Thu Jul 06, 2006 7:20 am

Post by Instructor »

Skif_off wrote:приблизительно так:
Например так:

Code: Select all

QuotesRE:
0   "\\[a-z]*@[a-z]+"   "\0=(0,${OP},0)"
0   "\\[a-z]+"          "\0=(0,${VAR},0)"

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

Post by Skif_off »

Instructor
Спасибо, работает. Элегантно, даже в голову не пришло, извиняет только уровень знаний :)
"\\[@a-z]*" в принципе верное выражение, но имеют значение нюансы работы регулярных выражений AkelPad и/или плагина?

Прошу прощения за любопытство, а кому принадлежит https://github.com/lexazloy/akelpad ?

Добавлено:
Если кому-нибудь интересно: пока окончательный вариант latex.coder,
дополнительно к вышеизложенному добавлена подсветка команды разрыва строки "\\" и фолдинг групп LaTeX "{"..."}", т.к.
Как правило, группа определяется как часть документа, заключённая между двумя фигурными скобками. Все команды действуют только в пределах той группы, где они были применены. Кроме открывающей и закрывающей фигурных скобок в качестве ограничителей могут быть использованы команды \begingroup и \endgroup.

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

Post by Skif_off »

Столкнулся со странностью:
командой

Code: Select all

"KiXtart" Call("Coder::Settings", 1, "kixtart")
не удается переключиться с другой темы в открытом или создаваемом документе, хотя файл *.kix открывается с правильной темой.
Проблема решается сокращением kixtart.coder до kix.coder и команды до

Code: Select all

"KiXtart" Call("Coder::Settings", 1, "kix")

Offline
Posts: 874
Joined: Sat Jan 16, 2010 2:03 pm

Post by opk44 »

Skif_off wrote:Столкнулся со странностью...
Проблема решается сокращением kixtart.coder до kix.coder и ...
1. Эта "странность" существует исключительно в вашей голове по причине не желания чтения документации к плагину

Code: Select all

*** Внешний вызов Coder::Settings ***

Call("Coder::Settings", 1, "EXTENSION")
  Параметры:
    1
      Установить синтаксическую тему вручную, используя расширение.
    "EXTENSION"
      Расширение, например: "html". Ручная установка темы отменяется, если параметр расширения отсутствует.
      Если параметр расширения равен "?", то документ определяется, как не имеющий темы.

2. Усечение ИМЕНИ файла "kixtart.coder" совершенно бессмысленно. Важно лишь то, что в этом файле прописано вот тут:

Code: Select all

Files:
;==========
;File types
;==========
*.kix

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

Post by Skif_off »

opk44
Спасибо, протупил, посыпаю голову пеплом :) Сначала добавлял пункты для открытия, а включения уже с помощью Найти/Заменить и с latex.coder это сработало (Files: *.tex, *.latex, *.sty).

З.Ы. Или у меня дежавю, или действительно так уже лажал, но тогда разобрался сам...

Offline
Posts: 3217
Joined: Wed Nov 29, 2006 1:19 pm
Location: Киев, Русь
Contact:

Post by VladSh »

Instructor
В vbs.coder ещё добавьте пожалуйста подсветку MsgBox, MessageBox, Stop, True, False и Null.

Offline
Posts: 874
Joined: Sat Jan 16, 2010 2:03 pm

Post by opk44 »

VladSh
4 последних уже предлагались, но безуспешно.

Offline
Site Admin
Posts: 6311
Joined: Thu Jul 06, 2006 7:20 am

Re: Кеш плагина

Post by Instructor »

"\\[@a-z]*" в принципе верное выражение, но имеют значение нюансы работы регулярных выражений AkelPad и/или плагина?
В данном случае только логика захвата диапазона. Можно проанализировать ваши правила на примере текста:
\if@twocolumn
\textwidth

Code: Select all

0   "\\[a-z]*"   "\0=(0,${VAR},0)"
0   "\\[@a-z]*"   "\0=(0,${OP},0)"
\if@twocolumn: "\\[a-z]*" найдет и захватит "\if", остальную часть "@twocolumn" никто не найдет.
\textwidth: "\\[a-z]*" найдет и захватит весь "\textwidth".
Т.е. правило "\\[@a-z]*" в данном случае никогда не сработает.
melky wrote:По-моему, не самая лучшая идея хранить кеш Program Files:
Cannot open file "C:\Program Files\AkelPad\AkelFiles\Plugs\Coder\cache"

Если есть где поменять, ткните носом, пожалуйста.
Ответ добавлен в FAQ.

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

Re: Кеш плагина

Post by Drugmix »

Instructor wrote:
"\\[@a-z]*" в принципе верное выражение, но имеют значение нюансы работы регулярных выражений AkelPad и/или плагина?
В данном случае только логика захвата диапазона. Можно проанализировать ваши правила на примере текста:
\if@twocolumn
\textwidth

Code: Select all

0   "\\[a-z]*"   "\0=(0,${VAR},0)"
0   "\\[@a-z]*"   "\0=(0,${OP},0)"
\if@twocolumn: "\\[a-z]*" найдет и захватит "\if", остальную часть "@twocolumn" никто не найдет.
\textwidth: "\\[a-z]*" найдет и захватит весь "\textwidth".
Т.е. правило "\\[@a-z]*" в данном случае никогда не сработает.
А почему так сделано, что не сработает-то? Это же не по канонам PCRE.
Instructor wrote:
melky wrote:По-моему, не самая лучшая идея хранить кеш Program Files:
Cannot open file "C:\Program Files\AkelPad\AkelFiles\Plugs\Coder\cache"

Если есть где поменять, ткните носом, пожалуйста.
Ответ добавлен в FAQ.
Это не ответ, а лишь рецепт как избежать ошибки.
Т.е. AkelPad не совместим с дефолтными установками:
1. по дефолту, при установке винды, UAC - включён.
2. по дефолту, установка программ происходит в системную папку Program Files.

На мой взгляд, это баг и вместо его исправления даются рекомендации о том, как его избежать.
Лично я не использую UAC и сижу из-под админа, поэтому этот лично меня даже не трогает и никогда не тронет, так что лично мне всё равно будет ли он исправлен или нет, но по отношению к остальным пользователям - было бы справедливо всё-таки его исправить.
Многие программы тоже хранят какие-то свои личные данные, но не имеют конфликтов, подобных этому акелпадовоскому, потому что это нормальная практика использовать %user%\AppData, как место для записи.

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

Post by Skif_off »

Потихоньку допиливаю sh.coder, разобрался с комментариями, если кому интересно:
в Quotes

Code: Select all

;1=1
1	3	${COMM}	0	"#"	""	""	""	""
;2176=128+2048
2176	3	${STR}	0	"echo"	""	""	""	""

в QuotesRE

Code: Select all

0	"^#.*|(?<!\S)#.*|(?<=\[)#.*"	"\0=(3,${COMM},0)"

Регулярное выражение подсмотрел в Vim и немного изменил, картинка (верхняя половина - как было, нижняя - как стало).

Такой вопрос возник попутно (не знаю, насколько часто такое встречается, но как минимум один раз подобное видел с AutoIt): есть пара строк

echo ""$1" "$BASE" o p" | dc
echo "Все аргументы командной строки: "$*""

Code: Select all

;5=1+4
5	3	${STR}	0	`"`	`"`	"\"	""	""
они должны выглядеть так

echo ""$1" "$BASE" o p" | dc
echo "Все аргументы командной строки: "$*""

но реально выглядят так

echo ""$1" "$BASE" o p" | dc
echo "Все аргументы командной строки: "$*""

Как-то можно исправить? Или особенности парсера coder-файлов и проще забить? Перепробовал кучу вариантов, не получилось. Склонился к мысли забить, но продержался всего три дня :)

DV
Offline
Posts: 1250
Joined: Thu Nov 16, 2006 11:53 am
Location: Kyiv, Ukraine

Re: Кеш плагина

Post by DV »

Drugmix wrote:1. по дефолту, при установке винды, UAC - включён.
2. по дефолту, установка программ происходит в системную папку Program Files.

На мой взгляд, это баг и вместо его исправления даются рекомендации о том, как его избежать.
Я тоже считаю это багом - багом Windows.
Какой смысл по умолчанию предлагать для установки папку, в которую устанавливаемое приложение не имеет прав на запись? Где логика? Если приложению нужно изменять файлы в своей папке, то это дело только самого приложения, и не система должна решать, можно это делать или нет - и уж точно не запрещать этого по умолчанию.
Лично мне очень нравится, когда приложение хранит всё своё рядом с собой (за исключением настроек, привязанных к специфике конкретного компьютера, системы или пользователя) - в этом случае приложение запросто и безболезненно можно перенести как в любую другую папку, так и на другой компьютер.
А некоторые старые программы, кстати говоря, вообще хранили настройки даже не в ini-файлах, а путём записи (модификации) непосредственно в исполняемый файл.

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

Re: Кеш плагина

Post by Drugmix »

DV wrote:Я тоже считаю это багом - багом Windows.
Какой смысл по умолчанию предлагать для установки папку, в которую устанавливаемое приложение не имеет прав на запись? Где логика?
Логика в сепарации исполняемых файлов от файлов личных данных и настроек.
Винда - многопользовательская система. Если бы программа писали свои данные в свою папку в Program Files - то другой бы пользователь имел бы доступ к этим данным, а это нарушает секурность.
Я уж не говорю про то, что их надо бы ещё и организовать так, чтобы для каждого пользователя использовался свой набор этих данных.

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

Post by Skif_off »

Можно делать как хромообразные - ставить в %APPDATA% (еще скайп под ограниченной учеткой, ЕМНИП, так делает)

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

Post by Drugmix »

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