Coder plugin (2)

Discuss and announce AkelPad plugins
Locked
  • Author
  • Message
DV
Offline
Posts: 1250
Joined: Thu Nov 16, 2006 11:53 am
Location: Kyiv, Ukraine

Post by DV »

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

/наклонный/ --> /наклонный/
*жирный* --> *жирный*
_подчёркнутый_ --> _подчёркнутый_

Наклонный и жирный можно проимитировать в AkelPad, описав что-то вроде:

Code: Select all

QuotesRE:
;==========================================================================
;Flags  Pattern         \BackRef=(FontStyle,ColorText,ColorBk) \BackRef=...
;==========================================================================
0	(\s|\.|\A)(\/[^\/\n\r]+\/)(\s|\.|\Z)	\2=(3,0,0)
0	(\s|\.|\A)(\*[^\*\n\r]+\*)(\s|\.|\Z)	\2=(2,0,0)
Поддержки подчёркнутого (пока что?) нет.
Last edited by DV on Fri Sep 05, 2014 10:32 am, edited 1 time in total.

YuS
Offline
Posts: 512
Joined: Sun Sep 15, 2013 8:25 am
Location: 013 в Тентуре, семь по Спирали, налево от Большой Медведицы

Post by YuS »

DV wrote: Наклонный и жирный можно проимитировать в AkelPad, описав что-то вроде:
Регулярку надо бы подкорректировать. Пример для теста:

Code: Select all

*dfgh* ghjkklf* /sdfgh просто текст //это_домен/это_компьютер http://dfgh.dfgh.cvb/?p=dfghr/ 
Раздельные слова, по идее, тоже не должны подсвечиваться:
/abc def/ *abc def*

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

Post by DV »

YuS,
Спасибо, немного подправил регулярку в оригинальном сообщении.
Также обнаружилось - то ли фича, то ли баг - что

Code: Select all

(\s|\.|\A)
работает, тогда как

Code: Select all

[\s\.\A]
даёт ошибку регулярного выражения из-за использования \A
Если использовать \Z внутри [], то тоже ошибка.

Offline
Posts: 124
Joined: Tue Jun 03, 2008 10:32 pm

Post by Xephon »

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

Code: Select all

(\s|\.|\A)
может быть любой валидный регексп. Тогда как внутри символьного класса

Code: Select all

[\s\.\A]
допустимы только символы. \A является, по сути, позиционной проверкой, а не символом, так что ошибка вполне логична.

YuS
Offline
Posts: 512
Joined: Sun Sep 15, 2013 8:25 am
Location: 013 в Тентуре, семь по Спирали, налево от Большой Медведицы

Post by YuS »

DV wrote:YuS,
Спасибо, немного подправил регулярку в оригинальном сообщении.
Всё же, так регулярка будет работать иногда непредсказуемо:

Code: Select all

*dfgh* *ghjkklf* /sdfgh просто/ текст //это_домен/это_компьютер http://dfgh.dfgh.cvb/?=dfghr/ 
/asdf/ *dfg* /fdsa/ *fgh*
Image
Имхо, лучше как-то так:

Code: Select all

0   (?:(?<=\s)|(?<=\.)|(?<=\A))(\/[^\s\/\n\r]+\/)(?:(?=\s)|(?=\.)|(?=\Z))   \1=(3,0,0)
0   (?:(?<=\s)|(?<=\.)|(?<=\A))(\*[^\s\*\n\r]+\*)(?:(?=\s)|(?=\.)|(?=\Z))   \1=(2,0,0)
Результат:
Image

Offline
Posts: 366
Joined: Mon Jan 10, 2011 5:28 pm
Contact:

Post by Lenchik »

А если так

Code: Select all

0	(?:(?<=\s)|(?<=\.)|(?<=\W)|(?<=\A))(\/[^\s\/\n\r]+\/)(?:(?=\s)|(?=\.)|(?=\W)|(?=\Z))	\1=(3,0,0) 
0	(?:(?<=\s)|(?<=\.)|(?<=\W)|(?<=\A))(\*[^\s\*\n\r]+\*)(?:(?=\s)|(?=\.)|(?=\W)|(?=\Z))	\1=(2,0,0)
И применение в txt.coder в несколько изменённом виде:
https://github.com/Lenchik/Akelpad-synt ... f1747de113

YuS
Offline
Posts: 512
Joined: Sun Sep 15, 2013 8:25 am
Location: 013 в Тентуре, семь по Спирали, налево от Большой Медведицы

Post by YuS »

Lenchik wrote:А если так
Тут есть некоторое противоречие шаблонов, которое в некоторых случаях может привести к неожиданной реакции...
Вот эти части:
(?<=\W)
(?=\W)
c этими:
[^\s\/\n\r]+
[^\s\*\n\r]+
- могут пересекаться.
Да и выделение всё таки, имхо, должно быть отделено от остального текста пробельным символом, а в данном случае будет срабатывать и на таком тексте:
*asdf*=/dfgh/
Lenchik wrote: И применение в txt.coder в несколько изменённом виде:
Да, действительно, перечисление подсвечиваемого набора символов поможет исключить вышеописанное пересечение.
Не знаю как латиница плюс всякие умляуты, но кириллицу можно так перечислить:
[а-яёА-ЯЁ]
и про цифры надо не забыть...
А зачем, кстати, перечислять всё... можно же, как-то так сделать:

Code: Select all

0   (?:(?<=\s)|(?<=\.)|(?<=\W)|(?<=\A))(\/\w+\/)(?:(?=\s)|(?=\.)|(?=\W)|(?=\Z))   \1=(3,0,0) 
0   (?:(?<=\s)|(?<=\.)|(?<=\W)|(?<=\A))(\*\w+\*)(?:(?=\s)|(?=\.)|(?=\W)|(?=\Z))   \1=(2,0,0)

Offline
Posts: 366
Joined: Mon Jan 10, 2011 5:28 pm
Contact:

Post by Lenchik »

Перечисление всех букв в этом txt.coder сделано ради сохранения цвета подсветки.
Ради этого же была сделана запись всех букв в секции Delimiters. Таким образом можно видеть какие именно буквы в словах были записаны на ином языке из-за их визуальной схожести.
Поэтому

Code: Select all

0	(?:(?<=\s)|(?<=\.)|(?<=\W)|(?<=\A))(\/[^\s\/\n\r]+\/)(?:(?=\s)|(?=\.)|(?=\W)|(?=\Z))	\1=(3,0,0)
0	(?:(?<=\s)|(?<=\.)|(?<=\W)|(?<=\A))(\*[^\s\*\n\r]+\*)(?:(?=\s)|(?=\.)|(?=\W)|(?=\Z))	\1=(2,0,0)
стоят последними, как то, что сработает в последнюю очередь (fallback).
Раз там может быть опасное пересечение диапазонов, то эта запись с [^\s\*\n\r]+ может быть выгодней, но тогда (?<=\W), похоже придётся заменить на перечисление какое-то или на иную более сложную конструкцию.

YuS
Offline
Posts: 512
Joined: Sun Sep 15, 2013 8:25 am
Location: 013 в Тентуре, семь по Спирали, налево от Большой Медведицы

Post by YuS »

Lenchik wrote:Перечисление всех букв в этом txt.coder сделано ради сохранения цвета подсветки.
А, вот теперь понятнее...
Но, всё же, такое перечисление неэстетично смотрится. Лучше так:
Image
- диапазон с умляутами, наверное, надо будет проверить, но такая запись более приемлемая.
Lenchik wrote: Раз там может быть опасное пересечение диапазонов, то эта запись с [^\s\*\n\r]+ может быть выгодней, но тогда (?<=\W), похоже придётся заменить на перечисление какое-то или на иную более сложную конструкцию.
Ну, собственно, \W - это то, что прописано в настройках редактора (Параметры->Редактор 2->Разделители слов)
Но думаю, что в данном случае, всё же, лучше перечислить то, что надо захватывать, шаблон [^\s\*\n\r]+ - слишком широкого действия...

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

Post by Skif_off »

Может быть, умляуты можно сразу шестнадцатеричным кодом?

Offline
Posts: 366
Joined: Mon Jan 10, 2011 5:28 pm
Contact:

Post by Lenchik »

YuS wrote:диапазон с умляутами, наверное, надо будет проверить, но такая запись более приемлемая.
Проверил. :D В итоге — обширные обновления файла подсветки.
Вот для case insensitive латиницы (кроме Latin Extended-D и Latin Extended-E разделов Unicode)

Code: Select all

[a-zß-öø-ÿā-ŷź-ſƀ-ɏɐ-ʯḁ-ỿⱠ-Ɀa-zff-st]
Выяснилось, что то ли винда, то ли акельпад не все small letter умеет понимать/преобразовывать в Capital letter.
Для символов кириллицы case insensitive (у них тоже не все связки строчных и заглавных букв понимаются в акельпаде):

Code: Select all

[ђ-ӿѐЀЍԀ-ԯⷠ-ⷿꙀ-ꚟ]
Instructor
Почему-то Coder не хочет выделять слова по этому правилу:

Code: Select all

;--Cyrillic letters--
;это правило почему-то не хочет работать
2	0	${CodeFold_ListTextColor}	0	"ѐЀђѓєѕіїјљњћќѝЍўџѡѣѥѧѩѫѭѯѱѳѵѷѹѻѽѿҁҋҍҏґғҕҗҙқҝҟҡңҥҧҩҫҭүұҳҵҷҹһҽҿӂӄӆӈӊӌӎӏӑӓӕӗәӛӝӟӡӣӥӧөӫӭӯӱӳӵӷӹӻӽӿ҂҈҉ҊҌҎӀӅӉӍӬӶӺӼӾԀԁԂԃԄԅԆԇԈԉԊԋԌԍԎԏԐԑԒԓԔԕԖԗԘԙԚԛԜԝԞԟԠԡԢԣԤԥԦԧԨԩԪԫԬԭԮԯⷠⷡⷢⷣⷤⷥⷦⷧⷨⷩⷪⷫⷬⷭⷮⷯⷰⷱⷲⷳⷴⷵⷶⷷⷸⷹⷺⷻⷼⷽⷾⷿꙀꙁꙂꙃꙄꙅꙆꙇꙈꙉꙊꙋꙌꙍꙎꙏꙐꙑꙒꙓꙔꙕꙖꙗꙘꙙꙚꙛꙜꙝꙞꙟꙠꙡꙢꙣꙤꙥꙦꙧꙨꙩꙪꙫꙬꙭꙮ꙯꙰꙱꙲꙳ꙴꙵꙶꙷꙸꙹꙺꙻ꙼꙽꙾ꙿꚀꚁꚂꚃꚄꚅꚆꚇꚈꚉꚊꚋꚌꚍꚎꚏꚐꚑꚒꚓꚔꚕꚖꚗꚘꚙꚚꚛꚜꚝꚟ"
А вот оно же, чуть укороченное, работает:

Code: Select all

2	0	${CodeFold_ListTextColor}	0	"ѐЀђѓєѕіїјљњћќѝЍўџѡѣѥѧѩѫѭѯѱѳѵѷѹѻѽѿҁҋҍҏґғҕҗҙқҝҟҡңҥҧҩҫҭүұҳҵҷҹһҽҿӂӄӆӈӊӌӎӏӑӓӕӗәӛӝӟӡӣӥӧөӫӭӯӱӳӵӷӹӻӽӿ҂҈҉ҊҌҎӀӅӉӍӬӶӺӼӾԀԁԂԃԄԅԆԇԈԉԊԋԌԍԎԏԐԑԒԓԔԕԖԗԘԙԚԛԜԝԞԟԠԡԢԣԤԥԦԧԨԩԪԫԬԭԮԯⷠⷡⷢⷣⷤⷥⷦⷧⷨⷩⷪⷫⷬⷭⷮⷯⷰⷱⷲⷳⷴⷵⷶⷷⷸⷹⷺⷻⷼⷽⷾⷿꙀꙁꙂꙃꙄꙅꙆꙇꙈꙉꙊꙋꙌꙍꙎꙏꙐꙑꙒꙓꙔꙕꙖꙗꙘꙙꙚꙛꙜꙝꙞꙟꙠꙡꙢꙣꙤꙥꙦꙧꙨꙩꙪꙫꙬꙭꙮ꙯꙰꙱꙲꙳ꙴꙵꙶꙷꙸꙹꙺꙻ꙼꙽꙾ꙿꚀꚁꚂꚃꚄꚅꚆ"

Но работает и более длинное, с другими символами:

Code: Select all

;--Latin letters-- 
2	0	${IF}	0	"abcdefghijklmnopqrstuvwxyzßàáâãäåæçèéêëìíîïðñòóôõöøùúûüýþÿāăąćĉċčďđēĕėęěĝğġģĥħĩīĭįıijĵķĸĺļľŀłńņňʼnŋōŏőœŕŗřśŝşšţťŧũūŭůűųŵŷźżžſİƀƃƅƈƌƍƒƕƙƚƛƞơƣƥƨƫƭưƴƶƹƺƽDždžLjljNjnjǎǐǒǔǖǘǚǜǝǟǡǣǥǧǩǫǭǯǰDzdzǵǹǻǽǿȁȃȅȇȉȋȍȏȑȓȕȗɐɑɒɓɔɕɖɗɘəɚɛɜɝɞɟɠɡɢɣɤɥɦɧɨɩɪɫɬɭɮɯɰɱɲɳɴɵɶɷɸɹɺɻɼɽɾɿʀʁʂʃʄʅʆʇʈʉʊʋʌʍʎʏʐʑʒʓʔʕʖʗʘʙʚʛʜʝʞʟʠʡʢʣʤʥʦʧʨʩʪʫʬʭʮʯƦƪƻƾƿǀǁǂǃǶǷǸȘșȚțȜȝȞȟȠȡȢȣȤȥȦȧȨȩȪȫȬȭȮȯȰȱȲȳȴȵȶȷȸȹȺȻȼȽȾȿɀɁɂɃɄɅɆɇɈɉɊɋɌɍɎɏḁḃḅḇḉḋḍḏḑḓḕḗḙḛḝḟḡḣḤḧḩḫḭḯḱḳḵḷḹḻḽḿṁṃṅṇṉṋṍṏṑṓṕṗṙṛṝṟṡṣṥṧṩṫṭṯṱṳṵṷṹṻṽṿẁẃẅẇẉẋẍẏẑẓẕẗẙẛẝẟạảấầẩẫậắằẳẵặẹẻẽếềểễệỉịọỏốồổỗộớờởỡợụủứừửữựỳỵỷỹỺỻỼỽỾỿẖẘẚẜẞⱠⱡⱢⱣⱤⱥⱦⱧⱨⱩⱪⱫⱬⱭⱮⱯⱰⱱⱲⱳⱴⱵⱶⱷⱸⱹⱺⱻⱼⱽⱾⱿfffiflffifflſtstabcdefghijklmnopqrstuvwxyz"

Проверочные строки:

Code: Select all

ѐЀђѓєѕіїјљњћќѝЍўџѡѣѥѧѩѫѭѯѱѳѵѷѹѻѽѿҁҋҍҏґғҕҗҙқҝҟҡңҥҧҩҫҭүұҳҵҷҹһҽҿӂӄӆӈӊӌӎӏӑӓӕӗәӛӝӟӡӣӥӧөӫӭӯӱӳӵӷӹӻӽӿ҂҈҉ҊҌҎӀӅӉӍӬӶӺӼӾԀԁԂԃԄԅԆԇԈԉԊԋԌԍԎԏԐԑԒԓԔԕԖԗԘԙԚԛԜԝԞԟԠԡԢԣԤԥԦԧԨԩԪԫԬԭԮԯⷠⷡⷢⷣⷤⷥⷦⷧⷨⷩⷪⷫⷬⷭⷮⷯⷰⷱⷲⷳⷴⷵⷶⷷⷸⷹⷺⷻⷼⷽⷾⷿꙀꙁꙂꙃꙄꙅꙆꙇꙈꙉꙊꙋꙌꙍꙎꙏꙐꙑꙒꙓꙔꙕꙖꙗꙘꙙꙚꙛꙜꙝꙞꙟꙠꙡꙢꙣꙤꙥꙦꙧꙨꙩꙪꙫꙬꙭꙮ꙯꙰꙱꙲꙳ꙴꙵꙶꙷꙸꙹꙺꙻ꙼꙽꙾ꙿꚀꚁ ꚂꚃꚄ ꚅꚆ ꚇꚈ ꚉꚊ ꚋꚌꚍꚎ ꚏꚐꚑ ꚒꚓꚔꚕꚖꚗꚘꚙꚚꚛꚜꚝꚟ
њћќѝЍў
ѓєѕ
ӗәӛӝӟӡӣӥӧөӫӭ

ѐЀђѓєѕіїјљњћќѝЍўџѡѣѥѧѩѫѭѯѱѳѵѷѹѻѽѿҁҋҍҏґғҕҗҙқҝҟҡңҥҧҩҫҭүұҳҵҷҹһҽҿӂӄӆӈӊӌӎӏӑӓӕӗәӛӝӟӡӣӥӧөӫӭӯӱӳӵӷӹӻӽӿ҂҈҉ҊҌҎӀӅӉӍӬӶӺӼӾԀԁԂԃԄԅԆԇԈԉԊԋԌԍԎԏԐԑԒԓԔԕԖԗԘԙԚԛԜԝԞԟԠԡԢԣԤԥԦԧԨԩԪԫԬԭԮԯⷠⷡⷢⷣⷤⷥⷦⷧⷨⷩⷪⷫⷬⷭⷮⷯⷰⷱⷲⷳⷴⷵⷶⷷⷸⷹⷺⷻⷼⷽⷾⷿꙀꙁꙂꙃꙄꙅꙆꙇꙈꙉꙊꙋꙌꙍꙎꙏꙐꙑꙒꙓꙔꙕꙖꙗꙘꙙꙚꙛꙜꙝꙞꙟꙠꙡꙢꙣꙤꙥꙦꙧꙨꙩꙪꙫꙬꙭꙮ꙯꙰꙱꙲꙳ꙴꙵꙶꙷꙸꙹꙺꙻ꙼꙽꙾ꙿꚀꚁꚂꚃꚄꚅꚆꚇꚈꚉꚊꚋꚌꚍꚎꚏꚐꚑꚒꚓꚔꚕꚖꚗꚘꚙꚚꚛꚜꚝꚟ

Плохо работающая версия кодер-файла

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

Post by Instructor »

Lenchik
В текущей реализации длина слова не может превышать 260 символов.
Но работает и более длинное, с другими символами:...
Проверил - не работает.

Offline
Posts: 381
Joined: Wed Sep 28, 2011 3:05 pm

Post by Cuprum »

У меня что-то возникли проблемы с показом .ahk-файлов. Пробовал подключать 2 варианта: раз, два.
В обоих случаях при открытии совсем небольшого файла в 1Кб прорисовка подсветки тормозит, это заметно на глаз. Было ли такое на предыдущих версиях - не знаю, понадобилось поработать с ahk сейчас.
редактор - 4.9.0. x86, Ось - Win 7 64.

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

Post by Skif_off »

Cuprum
За то разговор идет в параллельной теме

Offline
Posts: 366
Joined: Mon Jan 10, 2011 5:28 pm
Contact:

Post by Lenchik »

Только сейчас обратил внимание - окошко Autocomplete до сих пор не настраивается по цветам и параметрам шрифта (можно было бы в дополнение к значкам + и * иметь возможности адавать в цветовой теме и другие оформления фонов, жирность/курсив, возможность включить зебру). Уж не знаю, скрипт ли кто придумает, или плагин будет доработан, но, как мне кажется, на "ночных" темах яркое белое окошко автодополнения не комильфо.
Locked