Coder plugin (2)

Discuss and announce AkelPad plugins
Locked
  • Author
  • Message
Offline
Posts: 382
Joined: Wed Sep 28, 2011 3:05 pm

Post by Cuprum »

Instructor
Хотелось бы, чтобы html.coder отлавливал и подсвечивал внутренности у элементов style и script без атрибута type. Этот атрибут может отсутствовать.

Offline
Posts: 1873
Joined: Mon Aug 06, 2007 1:07 pm
Contact:

Post by Infocatcher »

Instructor
Можно ли как-то простым способом (одним регулярным выражением) подсветить JavaScript внутри <handler>…</handler>, но при этом не сломать ничего при наличии <handler foo="bar" />?

Пока что сделал вот так:

Code: Select all

;1052676=4+4096+1048576
1052676	0	0	0	`<handler(?:\s[^<>/]*?)?>`	"</handler>"	""	0	2	"js.coder"
Но это хак, который сломается на

Code: Select all

<handler foo="/">
Кстати... было бы очень здорово, если бы не только подсветка выставлялась в таких областях, но и автодополнение бралось из соответствующего coder-файла. :roll:

Cuprum
Угу.

Wio
Offline
Posts: 76
Joined: Wed Jan 05, 2011 6:07 am

Post by Wio »

Instructor
Разобрался, помогло. Спасибо за подсказку!

Infocatcher
1. Возможна ли ситуация, когда значения атрибутов задаются без кавычек (<handler path=abc/def />)?
2. Возможна ли ситуация, когда между косой чертой и скобкой расположены пробелы (<handler foo="bar" /_____>)?

Offline
Posts: 1873
Joined: Mon Aug 06, 2007 1:07 pm
Contact:

Post by Infocatcher »

Wio wrote:1. Возможна ли ситуация, когда значения атрибутов задаются без кавычек (<handler path=abc/def />)?
2. Возможна ли ситуация, когда между косой чертой и скобкой расположены пробелы (<handler foo="bar" /_____>)?
Без кавычек – точно нельзя, там XML. Но могут быть одинарные кавычки. Пробелы, по идее, тоже должны отсутствовать.
Я пытался в таком духе:

Code: Select all

<tag(\s+[^<>]*?[^<>/])?>
Но не работает.

Wio
Offline
Posts: 76
Joined: Wed Jan 05, 2011 6:07 am

Post by Wio »

Infocatcher

Попробуйте такое выражение:

Code: Select all

<tag(?=[\s>])(?:[^>]*[^/])?>
Только оно не увидит <tag foo="bar>1">...</tag>

Offline
Posts: 1873
Joined: Mon Aug 06, 2007 1:07 pm
Contact:

Post by Infocatcher »

Wio
Хм, а вот не работает...
Вот файл для тестов: https://github.com/Infocatcher/Handy_Cl ... editor.xml

Offline
Posts: 1873
Joined: Mon Aug 06, 2007 1:07 pm
Contact:

Post by Infocatcher »

Пока вот так сделал:

Code: Select all

<handler(?:\s[^<>]*?)?(?<!/)>
Другое дело, что в атрибутах могут быть attr=">", но это уже ладно.
Там в данном случае если код поехал вовнутрь, то в атрибутах уже никакой экзотики быть не должно.

Wio
Offline
Posts: 76
Joined: Wed Jan 05, 2011 6:07 am

Post by Wio »

Infocatcher
Я думал, что используется движок JS, который не поддерживает negative lookbehind. Значит, есть косяки в реализации регулярных выражений у Instructor.

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

Post by Drugmix »

Instructor,
А почему правила Folds:
1052676 0 0 0 `<handler(\s.*?)?(?<!/)>` "</handler>" "" 0 2 "js.coder"
1052676 0 0 0 `<handler(\s[^>]*?)?(?<!/)>` "</handler>" "" 0 2 "js.coder"
срабатывают по-разному на таком примере?
<handler />
<handler>
var
</handler>
Правило 1:
Image
Правило 2:
Image
В первом правиле почему-то игнорируется конструкция (?<!/)>
Last edited by Drugmix on Tue Sep 29, 2015 10:08 pm, edited 1 time in total.

Wio
Offline
Posts: 76
Joined: Wed Jan 05, 2011 6:07 am

Post by Wio »

Infocatcher wrote:в атрибутах могут быть attr=">"
Переделал регулярное выражение для таких случаев. Но оно работает только при обработке JS-движком. Встроенный обработчик на нём спотыкается. Может быть, есть какая-нибудь опция переключения движка в файлах *.coder?

Drugmix
Вот так уже не будет работать: <handler attr=">" foo="bar">...</handler>

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

Post by Cuprum »

Instructor
Продолжу по подсветке CSS-Less.
В версиях до 4.9.5 директивы с "собачкой" (@import, @charset и т.д.) целиком подсвечивались одним цветом. Сейчас сам символ @ одним цветом, а слово после него

Image
.
Хочется вернуть, как было раньше.
Не очень понятно, почему для @font-face, @media и @page в css.coder установлен Parent ID равный 2. Вроде бы все эти директивы используются только на верхнем уровне, без вложенностей в кавычки или скобки.
+ еще желательно добавить @keyframes. Это часть анимаций.

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

Post by Drugmix »

Wio

Code: Select all

1052676   0   0   0   `<handler(?:\s+\w+?=(['"])[^\1]*?\1)*?(?<!/)>`   "</handler>"   ""   0   2   "js.coder"

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

Post by Drugmix »

Кстати, если с последним правилом поиграться добавив красный цвет тексту, то почему-то очень странно окрашивается:
Image
Это баг или фича?

p.s.: раньше цвета можно было задавать в 4 символа (#f00), а теперь работает только в 7 символов (#ff0000).

Wio
Offline
Posts: 76
Joined: Wed Jan 05, 2011 6:07 am

Post by Wio »

Drugmix
Всё равно не то, пропускает <handler disabled> и <handler_____> (пробелы)

Адаптировал своё выражение под внутренний обработчик:

Code: Select all

<handler(?=[\s>])(?:[^>"']*(["'])[^\1]*\1)*[^>]*(?<!/)>

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

Post by Drugmix »

Wio wrote:Drugmix
Всё равно не то, пропускает <handler disabled> и <handler_____> (пробелы)
Всё то. Это уже срабатывают какие-то другие правила.

Если закомментировать

Code: Select all

;4101=1+4+4096
4101	0	0	0	"<!"           ">"           ""         0	1
;4101=1+4+4096
4101	0	0	0	"<"            "</"          ""         0	1
;4101=1+4+4096
4101	0	0	0	"<"            "/>"          ""         0	1
то с моим правилом всё начинает работать корректно и на этих примерах.
Locked