Coder plugin (2)

Discuss and announce AkelPad plugins
Locked
  • Author
  • Message
Offline
Site Admin
Posts: 6311
Joined: Thu Jul 06, 2006 7:20 am

Post by Instructor »

Drugmix
См. плагин SpecialChar настройку "Линия отступа".

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

Post by Drugmix »

Instructor
спасибо, но это не подходит, т.к. я включаю этот плагин по мере надобности, чтобы отображал невидимые символы табы, переносы строк, конец файла и т.п.).
Так что если его держать постоянно включённым для отображения линеек - то будет много визуального мусора. Если же отключить показ всего, кроме линии отступа - то потом это всё надо будет включать поочерёдно через меню. Ни то, ни другое - не удобно.

Плюс, на скриншоте отступ у скобок подсвечен сильнее, чем другие отступы, а в акелпаде - такого нет (или есть, но надо шаманить с темами, а темы в акелпаде сейчас не юзабельны).

Ладно, выживу и без этого.

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

Post by Drugmix »

А как в .coder файле можно раскрасить слова из "Words:" секции так, чтобы можно было одно и то же слово использовать дважды, подкрасив его так или иначе, в зависимости от его позиции в коде?
В ahk все атрибуты у команды разделены запятой (практически csv-лист получается).

И аналогичный вопрос (вероятно по секциям "Quotes:" и "QuotesRE:"): можно ли задать правила раскраски текста, например, так?
если с начала строки идёт слово "PixelGetColor", то всё, что идёт после первой запятой после него и до следующей запятой (или конца строки) - раскрасить синим цветом
Можно ли как-то составлять подобные правила? Желательно, с поддержкой RegExp'ов.

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

Post by Drugmix »

И ещё вопрос по секции "Delimiters:" как менять настройки при выделении по словам/абзацам?

Например, выделение по словам можно произвести двумя способами:
а). сделав в тексте даблклик и не отпуская второй клик начать вести курсор в сторону.
б). на клавиатуре каретку двигать навигационными стрелками влево/вправо при зажатом CTRL (и + Shift, если нужно не просто переместить каретку, а переместить с выделением).

Сейчас, всякие символы знаки препинания являются разделительными, а потом правильно обрабатываются при выделении. Но в список разделителей не получается добавить связку из двух символов: например `n. Эта связка в ahk означает символ новой строки.
Я уже пробовал создавать правила и
1 0 ${DEL2} 0 `n
и
1 0 ${DEL2} 0 "`n"
Но это не помогло: в первом случае - раскрашиваться они начинают правильно (как разделители), но при выделении - только ` распознаётся как delimiter, а n выделяется вместе с примыкающим к нему словом.
Может быть это баг?

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

Post by Instructor »

Drugmix wrote:А как в .coder файле можно раскрасить слова из "Words:" секции так, чтобы можно было одно и то же слово использовать дважды, подкрасив его так или иначе, в зависимости от его позиции в коде?
Для этого секция "Words:" не подходит, но подходит "Quotes:" или "QuotesRE:"
если с начала строки идёт слово "PixelGetColor", то всё, что идёт после первой запятой после него и до следующей запятой (или конца строки) - раскрасить синим цветом

Code: Select all

QuotesRE:
;========================================================================================
;Flags  Pattern                       \BackRef=(FontStyle,ColorText,ColorBk) \BackRef=...
;========================================================================================
1	`^\s*PixelGetColor.*,(.*),?` `\1=(2,#0000ff,0)`
Drugmix wrote:И ещё вопрос по секции "Delimiters:" как менять настройки при выделении по словам/абзацам?
Секция "Delimiters:" не предназначена для изменения механизма выделения текста.

Code: Select all

1	0	${DEL2}	0	"`n"
Это корректное правило, но как уже было сказано - оно будет правильно разделять слова при подсветке, но на выделение не будет влиять.

На данный момент, разделители слов для навигации по тексту, в виде последовательности символов, в принципе не реализованы.

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

Post by Drugmix »

Instructor wrote:

Code: Select all

1	`^\s*PixelGetColor.*,(.*),?` `\1=(2,#0000ff,0)`
А почему мой шаблон не работает?
Правильный шаблон будет же

Code: Select all

img)^\s*PixelGetColor\s*,?\s*((?U)\S*),.*$
Соответственно правило для "QuotesRE:" я использовал такое:

Code: Select all

2   `img)^\s*PixelGetColor\s*,?\s*((?U)\S*),.*$` `\1=(2,#0000ff,0)`
Шаблон правильный, но в акелпаде нужные вхождения не подсвечивает:

Image

Пробовал без igm) - то же самое.
Instructor wrote:На данный момент, разделители слов для навигации по тексту, в виде последовательности символов, в принципе не реализованы.
А есть ли в планах на будущее это исправить?

EDIT:
добавил в шаблон (?-U) на всякий случай:

Code: Select all

^\s*PixelGetColor\s*,?\s*((?U)\S*(?-U)),.*$
всё равно не работает.

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

Post by Instructor »

Drugmix
Вами тестируется PCRE. AkelPad использует свою реализацию регулярных выражений см. AkelHelp-Rus.htm.

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

Post by Drugmix »

Instructor
Читал, но там же всё как в pcre, только "настройки" не описаны. Или они не поддерживаются, но тогда вопрос: а как же их задавать и переключать?

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

Post by Drugmix »

Drugmix wrote:Instructor
Читал, но там же всё как в pcre, только "настройки" не описаны. Или они не поддерживаются, но тогда вопрос: а как же их задавать и переключать?
Похоже, что управлять "жадностью" в шаблонах акелпада нельзя, пришлось вместо

Code: Select all

2   `^\s*PixelGetColor\s*,?\s*(.*),?` `\1=(2,#0000ff,0)`
использовать

Code: Select all

2   `^\s*PixelGetColor(\s*,\s*|\s+)(.*),?` `\2=(2,#0000ff,0)`

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

Post by Drugmix »

Instructor
а не могли бы Вы всё-таки добавить поддержку управления жадностью в шаблоны регулярных выражений в .coder?
Потому что я хочу через .coder приделать "умную" раскраску аргументов у команд AHK, а многие команды имеют по нескольку опциональных параметров и без поддержки управления жадностью - я боюсь, что я замучаюсь составлять шаблоны для таких команд:
WinGet, OutputVar [, Cmd, WinTitle, WinText, ExcludeTitle, ExcludeText]
всё, что в квадратных скобках - опционально, а раскрасить каждый из аргументов требуется по-своему.

Code: Select all

2   `^\s*(WinGet)(\s*,\s*|\s+)(.*)(,.*)?(,.*)?(,.*)?(,.*)?(,.*)?` `\1=(2,${OP},0) \3=(2,${VAR},0) \4=(2,${OP},0) \5=(2,${VAR},0) \6=(2,${OP},0) \7=(2,${VAR},0) \8=(2,${OP},0)`
раскрашивает все параметры начиная со второго - одним цветом.

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

Post by Instructor »

Drugmix

Code: Select all

QuotesRE:
;==================================================================
;Flags  Pattern \BackRef=(FontStyle,ColorText,ColorBk) \BackRef=...
;==================================================================
0   `^\s*(WinGet)(\s*,\s*|\s+)(.*)((,.*)((,.*)((,.*)((,.*)((,.*))?)?)?)?)?` `\1=(2,${OP},0) \3=(2,${VAR},0) \5=(2,${OP},0) \7=(2,${VAR},0) \9=(2,${OP},0) \11=(2,${VAR},0) \13=(2,${OP},0)`
Но стоит ли связываться с подсветкой параметров, учитывая, что, например, запятая может присутствовать как часть строки.

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

Post by Drugmix »

Instructor wrote:Drugmix

Code: Select all

QuotesRE:
;==================================================================
;Flags  Pattern \BackRef=(FontStyle,ColorText,ColorBk) \BackRef=...
;==================================================================
0   `^\s*(WinGet)(\s*,\s*|\s+)(.*)((,.*)((,.*)((,.*)((,.*)((,.*))?)?)?)?)?` `\1=(2,${OP},0) \3=(2,${VAR},0) \5=(2,${OP},0) \7=(2,${VAR},0) \9=(2,${OP},0) \11=(2,${VAR},0) \13=(2,${OP},0)`
Но стоит ли связываться с подсветкой параметров, учитывая, что, например, запятая может присутствовать как часть строки.
Спасибо, уже что-то. Запятую можно вынести за круглые скобки, чтоб она не подсвечивалась как часть аргумента:

Code: Select all

2   `^\s*(WinGet)(?:\s*,\s*|\s+)(.*)(,(.*)(,(.*)(,(.*)(,(.*)(,(.*))?)?)?)?)?` `\1=(2,${OP},0) \2=(2,${VAR},#00ff00) \4=(2,${OP},#ff0000) \6=(2,${VAR},#0000ff) \8=(2,${OP},#ff0000) \10=(2,${VAR},#00ff00) \12=(2,${OP},#0000ff)`
Но избавиться от подсветки пробелов и табов до и после запятой - не получается, т.к. \s* будет искать не жадно и найдёт 0 совпадений.

Code: Select all

2   `^\s*(WinGet)(?:\s*,\s*|\s+)([^,]*)((?:,)((?:\s*).*(?:\s*)))((?:,)((?:\s*).*(?:\s*)))((?:,)((?:\s*).*(?:\s*)))((?:,)((?:\s*).*(?:\s*)))((?:,)((?:\s*).*(?:\s*))))?)?)?)?)?` `\1=(2,${OP},0) \2=(2,${VAR},#00ff00) \4=(2,${OP},#ff0000) \6=(2,${VAR},#0000ff) \8=(2,${OP},#ff0000) \10=(2,${VAR},#00ff00) \12=(2,${OP},#0000ff)`


Appendices > H - Regular Expression reference > Elements: Non-capture group (?:} - закрывающая скобка - фигурная, вместо круглой

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

Post by Drugmix »

Instructor wrote:Но стоит ли связываться с подсветкой параметров, учитывая, что, например, запятая может присутствовать как часть строки.
Я бы её экранировал заменив , на [^`], но backtick является частью синтаксиса .coder, как его экранировать? Его стоит добавить в мануал в раздел "Special characters".
А ещё в мануал стоит добавить про якорь конца строки $, который не просто означает символ новой строки, но ещё и, похоже, меняет направление обработки шаблона с ltr на rtl.
Last edited by Drugmix on Thu Sep 12, 2013 2:48 pm, edited 1 time in total.

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

Post by opk44 »

Drugmix wrote:...непонятно написано...похоже, меняет направление...
Зачем гадать и строить гипотезы, если можно обратиться к первоисточнику AkelHelp-Rus.htm#ch7 (8. Синтаксис регулярных выражений)?

Code: Select all

^      Соответствует позиции начала строки.
$      Соответствует позиции конца строки.  
...
[^xyz] Отрицательный набор знаков. Соответствует любому не указанному символу. Например, '[^abc]' соответствует "p" в "plain". 

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

Post by Drugmix »

opk44,
Спасибо, я затупил чего-то.
Last edited by Drugmix on Thu Sep 12, 2013 2:49 pm, edited 2 times in total.
Locked