AkelPad Forum Index AkelPad
Support forum
 
 FAQFAQ   SearchSearch   MemberlistMemberlist   UsergroupsUsergroups   RegisterRegister 
 ProfileProfile   Log in to check your private messagesLog in to check your private messages   Log inLog in 

Coder plugin (2)
Goto page Previous  1, 2, 3 ... 21, 22, 23 ... 52, 53, 54  Next
 
Post new topic   Reply to topic    AkelPad Forum Index -> Plugins
View previous topic :: View next topic  
Author Message
Skif_off



Joined: 20 Oct 2013
Posts: 255

PostPosted: Sat Dec 14, 2013 3:25 pm    Post subject: Reply with quote

Lenchik wrote:
А что не работает при текущей записи букв в Delimiters?

Определенно я зря отказался от Git Extensions в пользу KDiff3 (т.к. изменения в конечном итоге достаточно компактны и вполне удобны для переноса строками при "синхронизации" с оригинальными версиями) Smile Теперь проблема отследить то, что я делал и зачем.

Lenchik wrote:
На гитхаб зальёте потом?

Нет аккуанта и не думаю, что кому-то интересно Smile Из изменений - подсветка для mbox (файлы без расширений), кое-что вытащено из txt.coder сборок San_dr и Andrey_A_A (оригинальный txt.coder с незначительными изменениями переехал в "Text En/Ru detect" Call("Coder::Settings", 1, "textdetect"), задача которого выделить в тексте цифры и буквы En/Ru, в т.ч. показать, если строка набрана похожими буквами, но в другой раскладке), kixtart.coder и latex.coder не пользуются популярностью, mnu.coder для меню ТС (не выкладывал еще) тоже вряд-ли будет.

Переформулирую корректнее:
1. В сеции Delimiters обе записи
Code:

1   0   ${OP}   0   [
1   0   ${OP}   0   "["

равнозначны?

2. Почему при таком coder-файле

Code:
...
Files:
...
*.txt
...

Quotes:
...
5   3   ${STR}   0   `"`   `"`   ""   ""   ""
...

Delimiters:
...
1   0   0   0   " "
1   0   0   0   "   "
1   0   ${DEL2}   0   .
1   0   ${DEL2}   0   ,
1   0   ${DEL2}   0   :
1   0   ${DEL2}   0   ;
1   0   ${DEL2}   0   "
1   0   ${DEL1}   0   (
1   0   ${DEL1}   0   )
1   0   ${DEL1}   0   $
1   0   ${DEL1}   0   @
1   0   ${DEL2}   0   &
1   0   ${DEL2}   0   [
1   0   ${DEL2}   0   ]
1   0   ${DEL2}   0   =
1   0   ${DEL2}   0   *
1   0   ${DEL2}   0   /
1   0   ${DEL2}   0   -
1   0   ${DEL2}   0   +
1   0   ${DEL2}   0   >
1   0   ${DEL2}   0   <

Words:
...
2   0   ${IF}   0   "abcdefghijklmnopqrstuvwxyz"
...


(всё, что есть в любом coder-файле заменено на ...) есть такая проблема:

"x" explorer.exe
(explorer.exe)
"x"explorer.exe
?
Какой-то нюанс работы парсера с кавычками, который до меня не доходит.
Back to top
View user's profile Send private message
opk44



Joined: 16 Jan 2010
Posts: 320

PostPosted: Sat Dec 14, 2013 7:01 pm    Post subject: Reply with quote

Skif_off wrote:
Какой-то нюанс работы парсера с кавычками, который до меня не доходит.
В таких ситуациях, на мой взгляд, хорошо работает метод "по аналогии".
Берем стандартный xml.coder. Находим в нем секцию Delimiters:
Code:
Delimiters:
;======================================
;Flags  Font    Color   Color   Char(s)
;       style   text    bkgrnd
;======================================
1   0   0   0   " "
1   0   0   0   "   "
1   0   0   0   `"`
1   0   ${DEL1}   0   </
1   0   ${DEL1}   0   />
1   0   ${DEL1}   0   <
1   0   ${DEL1}   0   >
1   0   ${DEL2}   0   =
Обращаем внимание на первые три строки, и особенно на то, как в третьей оформлена двойная кавычка. Далее делаем у себя "по аналогии" (`"`).
Если все это проделать самостоятельно, то обычно в этот момент случается инсайт и вопросы снимаются.
Пробуйте.

P.S. Вы еще символ подчеркивания проигнорировали, фигурные скобки, "крышку" и еще чего-то.
Back to top
View user's profile Send private message
Skif_off



Joined: 20 Oct 2013
Posts: 255

PostPosted: Sat Dec 14, 2013 8:52 pm    Post subject: Reply with quote

opk44 wrote:
В таких ситуациях, на мой взгляд, хорошо работает метод "по аналогии".
Берем стандартный xml.coder...

Спасибо, не сообразил посмотреть другие coder-файлы Smile

opk44 wrote:
P.S. Вы еще символ подчеркивания проигнорировали, фигурные скобки, "крышку" и еще чего-то.

Из разделителей в настройках самого AkelPad? Это просто набросок, достаточный, чтобы воспроизвести ситуацию. Неразумная, однако, идея - перенести буквы в Words, ибо секция Delimiters неимоверно разрастется...

Получается, по первому вопросу все просто - нужно проверить и взять в кавычки только то, что нужно. Из разделителей в настройках самого AkelPad брать в кавычки нужно только кавычки Smile Помимо пробела и табуляции.

З.Ы. Заранее прошу прощения, у меня бывает такое, зависаю и начинаю тупить на мелочи, бывает - очевидной мелочи. Самый простой выход - спросить (не смущает показаться глупым или невнимательным, понять важнее Smile)
Back to top
View user's profile Send private message
Skif_off



Joined: 20 Oct 2013
Posts: 255

PostPosted: Wed Dec 18, 2013 11:22 am    Post subject: Reply with quote

Подскажите, пожалуйста, по QuotesRE:
Code:
0   "(?<!\\)%.*"   "\0=(3,${COMM},0)"

отлично работает, но только если перед % стоит любой разделитель из настроек AkelPad, если же стоит что-нибудь подсвеченное ранее, например, правилом
Code:
0   "\\[a-z]+"   "\0=(0,${OP},0)"

то уже нет. Как можно сделать? Попробовать расширить предыдущие правила?

Правильно понимаю, что в текущей версии плагина в секции Folds при использовании Color text отличного от 0 можно исключить только конец блока (флаг 128), а начало нет?
Back to top
View user's profile Send private message
Instructor
Site Admin


Joined: 06 Jul 2006
Posts: 5293

PostPosted: Fri Dec 20, 2013 9:12 am    Post subject: Reply with quote

Тут думаю будет иместнее использовать "Quotes:"
Code:
Quotes:
;Исключаем \%
1   0   0   0   "\%"   ""   ""   ""   ""
;Подсвечиваем %
1   3   ${COMM}   0   "%"   ""   ""   ""   ""

Quote:
Правильно понимаю...
Правильно.
Back to top
View user's profile Send private message Send e-mail
Skif_off



Joined: 20 Oct 2013
Posts: 255

PostPosted: Fri Dec 20, 2013 6:22 pm    Post subject: Reply with quote

Instructor
Спасибо, работает, тут я поторопился и разнес:
Code:
Quotes:
;513=1+512
513   3   ${COMM}   0   "%"   ""   ""   ""   ""

QuotesRE:
0   "(?<!\\)%.*"   "\0=(3,${COMM},0)"


Если интересно: подсветка LaTeX (*.tex, *.aux, *.bbl, *.clo, *.cls, *.def, *.ltx, *.sty) и BibTeX (*.bib)
http://rghost.ru/51102737
К сожалению, с LaTeX не удалось добиться безусловно корректно работающего фолдинга, поэтому оставил только многострочные комментарии (пакет comment) и тело документа (т.к. преамбула за счет комментариев может быть длинной).


Last edited by Skif_off on Sat Dec 21, 2013 2:02 am; edited 3 times in total
Back to top
View user's profile Send private message
Skif_off



Joined: 20 Oct 2013
Posts: 255

PostPosted: Fri Dec 20, 2013 7:00 pm    Post subject: Reply with quote

Instructor
Из-за
Code:
1   0   0   0   "\%"   ""   ""   ""   ""

всё, что будет после \% перестает подсвечиваться, это можно как-то избежать?

Добавлено:
Прогон, конечно же флагами: 17=1+16. Исправлено, ссылка в предыдущем посте тоже.

Добавлено2:
Исправлены опечатки, подсветка конца строки \\ (перенес из Delimiters в Quotes, иначе проблема с комментариями сразу за \\), фолдинг в latex.coder (выпилена строка с \com­ment ... \end­com­ment, т.к. иначе презабавнейше получается). Ссылка в посте выше обновлена.
Back to top
View user's profile Send private message
Skif_off



Joined: 20 Oct 2013
Posts: 255

PostPosted: Tue Dec 24, 2013 3:44 pm    Post subject: Reply with quote

Почему правило
Code:
QuotesRE:
; Time - HH:MM:SS or HH:MM
0   "(?<!:)((([0-1][0-9]|[2][0-3])(:([0-5][0-9])){2})|(([0-1][0-9]|[2][0-3]):([0-5][0-9])))"   "\0=(0,${IF},0)"

не работает в начале строки?
Back to top
View user's profile Send private message
Serge Yolkin



Joined: 27 Jul 2010
Posts: 246

PostPosted: Wed Dec 25, 2013 11:04 am    Post subject: Reply with quote

Skif_off
Code:
0   "\b(([0-1][0-9])|([2][0-3]))(:([0-5][0-9])){1,2}"   "\0=(0,#00FF00,0)"
?
Back to top
View user's profile Send private message
Serge Yolkin



Joined: 27 Jul 2010
Posts: 246

PostPosted: Wed Dec 25, 2013 11:28 am    Post subject: Reply with quote

Регулярка для JS регулярок:
Code:
4 `(?![\w\)}\];.,]|^)\s*((/(?![\s\d/>*]).*([^\\]((\\\\)*)|([^\\](\\\\)*\\<))/)|(/\\\\/))([gim]{0,3})(?!\w)` `\1=(3,${TYPE},0)`
на моём наборе html-hta-wsf-js работает. Может, кто-нибудь раскритикует?
Back to top
View user's profile Send private message
Drugmix



Joined: 08 Apr 2013
Posts: 382

PostPosted: Wed Dec 25, 2013 12:09 pm    Post subject: Reply with quote

Я думал у нас для обсуждения регулярок есть отдельная тема, но там я счастья не добился, так что попытаю его тут:
Помогите улучшить правило для coder.coder, которое должно раскрашивать правила в секции QuotesRE внутри .coder файлов:
Code:
0   "^\s*(\d+)\s*`(.*)`\s*`\s*\\(\d*)=\((.*),(.*),(.*)\)\s*`\s*$"  "\1=(0,#ff0000,0) \2=(0,#00ff00,0) \3=(2,#0000ff,0) \4=(0,#ff0000,0) \5=(0,#00ff00,0) \6=(2,#0000ff,0)"

это правило в принципе работает:

но если в правиле (для которого пишется это правило) BackRef'ов больше одного, то окрашивается не так, как хотелось бы:

я понимаю почему так происходит (потому что шаблон составлен именно так, lol), но не понимаю как это исправить.
По идее, должно бы работать что-то вроде
Code:
0   "^\s*(\d+)\s*`(.*)`\s*`(\s*\\(\d*)=\((.*),(.*),(.*)\)\s*)*`\s*$"  "\1=(0,#ff0000,0) \2=(0,#00ff00,0) \4=(2,#0000ff,0) \5=(0,#ff0000,0) \6=(0,#00ff00,0) \7=(2,#0000ff,0)"

или
Code:
0   "^\s*(\d+)\s*`(.*)`\s*`(?:\s*\\(\d*)=\((.*),(.*),(.*)\)\s*)*`\s*$"  "\1=(0,#ff0000,0) \2=(0,#00ff00,0) \3=(2,#0000ff,0) \4=(0,#ff0000,0) \5=(0,#00ff00,0) \6=(2,#0000ff,0)"


но одна из групп (.*) становится овержадной, а если им всем трём добавить по ? в конец - то правило перестаёт работать совсем.
Back to top
View user's profile Send private message
Drugmix



Joined: 08 Apr 2013
Posts: 382

PostPosted: Wed Dec 25, 2013 12:15 pm    Post subject: Reply with quote

В принципе, вопрос можно и такой поставить:
почему правила
Code:
0   "^\s*(\d+)\s*`(.*)`\s*`\s*\\(\d*)=\((.*)?,(.*)?,(.*)?\)\s*`\s*$"  "\1=(0,#ff0000,0) \2=(0,#00ff00,0) \3=(2,#0000ff,0) \4=(0,#ff0000,0) \5=(0,#00ff00,0) \6=(2,#0000ff,0)"

и
Code:
0   "^\s*(\d+)\s*`(.*)?`\s*`\s*\\(\d*)=\((.*)?,(.*)?,(.*)?\)\s*`\s*$"  "\1=(0,#ff0000,0) \2=(0,#00ff00,0) \3=(2,#0000ff,0) \4=(0,#ff0000,0) \5=(0,#00ff00,0) \6=(2,#0000ff,0)"

не срабатывают на таком примере:

Code:
0   `^\s*(#NoEnv)([^;]*?)(\s*(;|$))?` `\1=(2,${AREA},0)`

?
Back to top
View user's profile Send private message
Serge Yolkin



Joined: 27 Jul 2010
Posts: 246

PostPosted: Wed Dec 25, 2013 12:38 pm    Post subject: Reply with quote

Drugmix
правила с одним условием раскраски, как в Вашем примере, подсвечиваются, например, так:
Code:
"^(\d+)\s+`(.*)`\s+`(\\(\d*)=\((.*),(.*),(.*)\)\s*)+`\s*$"
проблема с раскраской нескольких одинаковых групп - тот самый "+" после последней закрывающей скобки: подсветится только последняя группа из набора одинаковых \1=(...) \2=(...) ...

P.S. Обратил на это внимание, балуясь с подсветкой времени - пример выше
Back to top
View user's profile Send private message
Drugmix



Joined: 08 Apr 2013
Posts: 382

PostPosted: Wed Dec 25, 2013 1:02 pm    Post subject: Reply with quote

Serge Yolkin
+ - это частный случай * и в первом сообщении я уже описал этот вариант.
Создать правило для правила только с заранее известным количеством условий раскраски - я и сам могу.
Вопрос был в том, как написать 1 универсальное правило, которое будет разукрашивать правила с любым количеством условий раскраски.

Или услышать ответ, что такое невозможно. Тогда бы я просто создал n похожих правил на n вариантов количества условий раскраски.

p.s.: заметил, что обсуждение регулярок - само по себе довольно сложно.
Back to top
View user's profile Send private message
Serge Yolkin



Joined: 27 Jul 2010
Posts: 246

PostPosted: Wed Dec 25, 2013 1:36 pm    Post subject: Reply with quote

Тогда это вопрос к Инструктору:

Instructor, почему правило
Code:
1 `(что)\-(то)(\sтам)+` `\3=(0,#ff0000,0)`
в строке
Code:
что-то там там там
подсвечивает только последний "там"? Это фича?

Опа! Именно в этом случае подсвечивает все! Надо поэкспериментировать...

Ага! А правило
Code:
1 "(что)(\-(то))?(\s`(там)`)+" "\3=(0,#ff0000,0) \5=(0,#0000ff,0)"
для строки
Code:
что-то `там` `там` `там`...
подсвечивает только последнее `там`.

Вероятно, проблема с вложенными скобками:
Code:
1 "(что)\-(то)(\s`(там)`)+" "\3=(0,#0000ff,0)"
; работает правильно
1 "(что)\-(то)(\s`(там)`)+" "\4=(0,#0000ff,0)"
; подсвечивает только последнее вхождение
Кавычки не при делах - что с ними, что без.
Back to top
View user's profile Send private message
Display posts from previous:   
Post new topic   Reply to topic    AkelPad Forum Index -> Plugins All times are GMT
Goto page Previous  1, 2, 3 ... 21, 22, 23 ... 52, 53, 54  Next
Page 22 of 54

 
Jump to:  
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum


SourceForge.net Logo Powered by phpBB © 2001, 2005 phpBB Group