Page 4 of 28

Posted: Sun Oct 20, 2013 6:29 pm
by Drugmix
Instructor
это правило ломается на каждом атрибуте состоящим из нескольких слов:

Code: Select all

winget 1 2 , 3 ; единица - окрашена, а всё за ней - нет.

Posted: Wed Oct 30, 2013 6:48 am
by Instructor
Drugmix
Можно еще так попробовать

Code: Select all

0   `^\s*(WinGet)(?:\s*,\s*|\s+)([^;]*?)(\s*,\s*([^;]*?))?(\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) \8=(2,${VAR},#0000ff) \12=(2,${OP},#ff0000) \16=(2,${VAR},#00ff00) \20=(2,${OP},#ff0000)`

Posted: Thu Oct 31, 2013 9:55 am
by Drugmix
Instructor
спасибо, это лучшее из правил, что я видел.
В нём только один недостаток остался:

Code: Select all

/*
winget это всё раскрашено, а не должно бы
*/
но лично я очень редко пользуюсь многострочными комментариями, так что для меня такое правило приемлемо.
Спасибо за него большое.

До релиза тестовой версии ~ сколько ещё времени осталось?

Posted: Thu Oct 31, 2013 12:15 pm
by Drugmix
Instructor
совсем забыл про довольно важную вещь: а как сделать так, чтобы работало и экранирование запятой?
т.е. чтобы в примере

Code: Select all

winget, первый `, параметр, второй `, параметр, третий `, параметр
справа от winget идут только 3 параметра, а не 6.
Можно ли как-то добавить проверку на наличие backtick'а перед запятой?

edit:
ну и напоролся на то, о чём меня предупреждали ещё заранее: если запятая находится внутри кавычек, то она не должна бы распознаваться как разделитель атрибутов, а распознаётся.
если бы это можно было как-то исправить - то coder стал бы полноценным раскрашивателем синтаксиса.

Posted: Thu Oct 31, 2013 12:44 pm
by Instructor
Drugmix wrote:

Code: Select all

\*
winget это всё раскрашено, а не должно бы
*\

Code: Select all

Folds:
;=========================================================
;Flags  Font    Color   Color   Fold    Fold    Delimiters
;       style   text    bkgrnd  start   end
;=========================================================
;513=1+512
513	3	${COMM}	0	"\*"       "*"      ""

Posted: Thu Oct 31, 2013 12:50 pm
by Drugmix
Instructor
не помогает.
там раньше был флаг 5 (1+4), поэтому помимо 513 попробовал и 517 - ничто не помогает.

Posted: Thu Oct 31, 2013 12:51 pm
by Instructor
Drugmix
Поправил сообщение выше там стояло "/*", "*/" вместо "\*", "*\".

Posted: Thu Oct 31, 2013 12:53 pm
by Drugmix
Instructor
у меня уже было правило с флагом 5, там были правильно использованы слэши вместо бэкслэшей. Всё равно не помогает.

Posted: Thu Oct 31, 2013 1:05 pm
by Instructor
Добавлять нужно не в "Quotes:", а как было указанно - в "Folds:".

Posted: Thu Oct 31, 2013 1:30 pm
by Drugmix
Instructor
и так тоже не помогло.

Posted: Fri Nov 01, 2013 5:34 am
by Instructor
Drugmix
Будьте внимательны и делайте попытки самостоятельно разобраться, тем более, когда вам даются конкретные ответы.


Для указанного текста:

Code: Select all

\*
winget это всё раскрашено, а не должно бы
*\
требуется следующее правило:

Code: Select all

Folds:
;=========================================================
;Flags  Font    Color   Color   Fold    Fold    Delimiters
;       style   text    bkgrnd  start   end
;=========================================================
;513=1+512
513   3   ${COMM}   0   "\*"       "*\"      ""
Видимо вами была допущена ошибка в примере:

Code: Select all

/*
winget это всё раскрашено, а не должно бы
*/
для данного текста требуется следующее правило:

Code: Select all

Folds:
;=========================================================
;Flags  Font    Color   Color   Fold    Fold    Delimiters
;       style   text    bkgrnd  start   end
;=========================================================
;513=1+512
513   3   ${COMM}   0   "/*"       "*/"      ""

Posted: Fri Nov 01, 2013 8:31 am
by Serge Yolkin
И поднять правило наверх, если оно не одно. Возможно, те же слэши (или звёздочки) используются в других правилах...

Posted: Fri Nov 01, 2013 2:44 pm
by Drugmix
Instructor
я только сейчас понял, что это я своим изначальным примером про \* *\ Вас запутал, конечно же я имел в виду /* */, и когда я пытался добавлять правило в Folds и в Quotes, то я уже не делал ошибки и использовал /* */.
Но дело в том, как я уже написал выше - добавление
в Folds:
513 3 ${COMM} 0 "/*" "*/" ""
не влияет на раскраску winget правила, оно по-прежнему раскрашивается в таком примере как этот:

Code: Select all

/*
winget, test
*/
Я к тому, что может быть у Вас это работает, но у меня на тестовой версии - это не работает.

Serge Yolkin
поднять правило в секции Folds?
Несмотря на то, что там нет других правил для /* */ (или даже для / и * по отдельности) - я всё же попробовал его поднять и это никак не повлияло на результат.
или Вы имели в виду поднять всю секцию Folds повыше остальных секций? так /* во всём .coder-файле встречается только в предложенном Instructor'ом правиле для Folds и в таком правиле из секции Quotes:

Code: Select all

5	3	${COMM}	0	"/*"	"*/"	""	""	""
но я пробовал убирать это правило из Quotes - на результат это никак не влияет.

Posted: Fri Nov 01, 2013 8:01 pm
by Serge Yolkin
Drugmix
Что-то у Вас там загадочное... Нет, секцию Folds никуда двигать не надо, попробуйте так:
1. Сделайте резервную копию файла (рабочий будем ломать)
2. Закомментируйте все строки, где встречается / и * во всех секциях
3. Удалите или закомментируйте все строки из секций FoldPanel, FoldList, Skips и Folds
4. В секцию Folds добавьте единственное правило, продложенное Instructor.
5. Проверьте результат (по части многострочных комментариев)
Это должно работать. Если так и есть - искать, что ломает правило, добавляя строки из резервной копии в чищенный рабочий файл; если и это не работает, даже и не знаю, может, начать с пустого .coder файла (только имена секций без правил)?

Posted: Fri Nov 01, 2013 8:18 pm
by Drugmix
Не работает

Code: Select all

Files:
*.ahk

Font:


Colors:


BkImage:


AutoMark:


Quotes:


QuotesRE:
;=========================================================================================
; Flags  Pattern                        \BackRef=(FontStyle,ColorText,ColorBk) \BackRef=...
;=========================================================================================
; PixelGetColor, 1st arg
; Colorize text strings in quotes.
; Colorz:
;	${NUM} - numbers.
;	${OP} - commands.
;	${VAR} - target variables (writable).
;	${VAR2} - read only variables.
; 0   `(")((?:[^"]*?(?:"")?)*?)("(?!"))` `\1=(2,#ff0000,0) \2=(3,#00ff00,0) \3=(3,#ff0000,0)`
0   `(")((?:[^"]*(?:"")?)*)("(?!"))` `\1=(2,#ff0000,0) \2=(3,#00ff00,0) \3=(3,#ff0000,0)`
0   `^\s*(WinGet)(?:\s*,\s*|\s+)([^;]*?)(\s*,\s*([^;]*?))?(\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) \8=(2,${VAR},#0000ff) \12=(2,${OP},#ff0000) \16=(2,${VAR},#00ff00) \20=(2,${OP},#ff0000)`
;0   `^\s*(WinGet)(?:\s*,\s*|\s+)([^\s;]*)(\s*,\s*([^\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)`
; 0   `^\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)`


Delimiters:


Words:


FoldPanel:


FoldList:


TagMark:


Skips:


Folds:
; пробовал и 513 и 5. Текста этого комментария, который вы сейчас читаете - в файле нет.
5	3	${COMM}	0	"/*"	"*/"	""


Blocks:


(в настройках coder::settings стоит применять .coder от *.ahk по умолчанию для всех неизвестных типов файлов и судя по тому, что строка с winget раскрашивается - эта настройка работает).
А у Вас разве правила из секции QuotesRE не перебивают остальные (в т.ч. Folds)? У меня перебивает и всегда перебивало.