Регулярные выражения

Russian main discussion
  • Author
  • Message
Offline
Posts: 582
Joined: Mon Apr 08, 2013 9:50 pm
Location: Win7SP1x64, APx64

Post by Drugmix »

Instructor
это правило ломается на каждом атрибуте состоящим из нескольких слов:

Code: Select all

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

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

Post 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)`

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

Post by Drugmix »

Instructor
спасибо, это лучшее из правил, что я видел.
В нём только один недостаток остался:

Code: Select all

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

До релиза тестовой версии ~ сколько ещё времени осталось?
Last edited by Drugmix on Fri Nov 01, 2013 2:31 pm, edited 1 time in total.

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

Post by Drugmix »

Instructor
совсем забыл про довольно важную вещь: а как сделать так, чтобы работало и экранирование запятой?
т.е. чтобы в примере

Code: Select all

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

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

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

Post 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	"\*"       "*"      ""
Last edited by Instructor on Thu Oct 31, 2013 12:50 pm, edited 1 time in total.

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

Post by Drugmix »

Instructor
не помогает.
там раньше был флаг 5 (1+4), поэтому помимо 513 попробовал и 517 - ничто не помогает.

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

Post by Instructor »

Drugmix
Поправил сообщение выше там стояло "/*", "*/" вместо "\*", "*\".

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

Post by Drugmix »

Instructor
у меня уже было правило с флагом 5, там были правильно использованы слэши вместо бэкслэшей. Всё равно не помогает.

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

Post by Instructor »

Добавлять нужно не в "Quotes:", а как было указанно - в "Folds:".

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

Post by Drugmix »

Instructor
и так тоже не помогло.

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

Post 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   "/*"       "*/"      ""

Offline
Posts: 294
Joined: Tue Jul 27, 2010 11:18 pm

Post by Serge Yolkin »

И поднять правило наверх, если оно не одно. Возможно, те же слэши (или звёздочки) используются в других правилах...

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

Post 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 - на результат это никак не влияет.
Last edited by Drugmix on Fri Nov 01, 2013 9:51 pm, edited 1 time in total.

Offline
Posts: 294
Joined: Tue Jul 27, 2010 11:18 pm

Post by Serge Yolkin »

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

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

Post 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)? У меня перебивает и всегда перебивало.
Post Reply