Coder plugin (2)

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

Post by YuS »

Infocatcher wrote: работает только «t[a-z]+?t», а «t[a-z]+t» не находит вообще ничего (я так понимаю, оно «поедает» всю последовательность, а назад, если не найдено, не возвращается). И явно больше похоже не «t[a-z]++t».
Не, в данном случае всё нормально, самая обычная жадность...
"t" попадает в диапазон "a-z" и будет им захвачено, даже при условии возврата, для поиска возможных вариантов совпадения. Но в итоге не будет найдено общего совпадения из-за отсутствия в тексте "t" (она уже захвачена жадным шаблоном "[a-z]+"), т.к. последняя "t" шаблона будет искать свое совпадение... ревнивая же квантификация, просто ускорит все проверки и не даст алгоритму возвращаться, т.е. захватывает однократно максимально возможный вариант и идет на перекур (ну, это классически). :)
Last edited by YuS on Fri Aug 01, 2014 5:16 am, edited 3 times in total.

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

Post by Skif_off »

Infocatcher wrote:
DV wrote:Дело не только в "ИЛИ", а ещё и в наличии символа после "+".
Например, такой вариант работает корректно: (\()(c(a|d)+)
А как только добавляем "r" после "+", то перестаёт срабатывать на комбинации (caar, (cadr, (cdar и т.д.: (\()(c(a|d)+r)
Помнится, там чрезмерная жадность реализована, так что есть смысл попробовать (\()(c(a|d)+?r)
Пробовал, не работает.

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

Post by Cuprum »

YuS wrote: Конечно, будет. Надо здесь:

Code: Select all

"(-)?(\d{1,8})\s*(px|em|s|rem|deg)?"	"\1=(0,${DEL2},0) \2=(0,${NUM},0) \3=(0,${DEL1},0)"
${NUM} - заменить либо на 0, либо подсветить чем-то более нейтральным...
Сделал пока так:

Code: Select all

0	"(-)?(\d{1,8})\s*(%|ch|cm|deg|dpcm|dpi|dppx|em|ex|grad|in|mm|ms|pc|pt|px|rad|rem|s|turn|vh|vmax|vmin|vw)?"	"\1=(0,${DEL2},0) \2=(0,0,0) \3=(0,${IF},0)"
+ еще добавки.

css.coder 1.10
Кстати, \d{1,8} - не мало для захвата цифр? Число символов брал практически "с потолка"
Пусть пока остается, если что, потом добавим.
Такой еще момент. Можно ли как-то ловить по признаку "Находится внутри ближайших {...}". Просто заметил вот такую

Image

Т.е. подсвечивается как класс, но тут этого не надо.

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

Post by YuS »

Cuprum wrote: Такой еще момент. Можно ли как-то ловить по признаку "Находится внутри ближайших {...}". Просто заметил вот такую

Image

Т.е. подсвечивается как класс, но тут этого не надо.
В текущей реализации движка регулярок (чуть выше обозначили проблему с жадностью квантификаторов) и ограничений построчного их прохода в плагине кодера, однозначно сделать это невозможно.
Но с некоторыми условностями, можно попробовать обойти ограничения, как-то так:

Code: Select all

0	"(\.)(?!\d)(?!--)(?!-\d)(\w|-)+(?![^;}]*?[;}])"	"\1=(0,${DEL2},0) \2=(0,${VAR},0)"
- условности:
1. Если в строке не будет символа ";", то невалидные классы, находящиеся внутри {...}, будут подсвечены.
2. Если вне блока {...} в строке будет присутствовать ";", то валидные классы не будут подсвечены.
Кстати, по аналогии можно сделать проверку и для идентификаторов.

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

Post by Cuprum »

YuS wrote: Но с некоторыми условностями, можно попробовать обойти ограничения, как-то так:

Code: Select all

0	"(\.)(?!\d)(?!--)(?!-\d)(\w|-)+(?![^;}]*?[;}])"	"\1=(0,${DEL2},0) \2=(0,${VAR},0)"
Тогда не подсвечивается класс в таком виде

Code: Select all

.ededed {color: black;}
В текущей реализации движка регулярок (чуть выше обозначили проблему с жадностью квантификаторов) и ограничений построчного их прохода в плагине кодера, однозначно сделать это невозможно.
Т. е. если бы было, то решило все проблемы с подсветкой?

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

Post by YuS »

Cuprum wrote: Тогда не подсвечивается класс в таком виде

Code: Select all

.ededed {color: black;}
Да, этот момент не учтен. Но исправить тоже можно, надо добавить "{" в исключающий символьный класс:

Code: Select all

0	"(\.)(?!\d)(?!--)(?!-\d)(\w|-)+(?![^;}{]*?[;}])"	"\1=(0,${DEL2},0) \2=(0,${VAR},0)"
Cuprum wrote:
В текущей реализации движка регулярок (чуть выше обозначили проблему с жадностью квантификаторов) и ограничений построчного их прохода в плагине кодера, однозначно сделать это невозможно.
Т. е. если бы было, то решило все проблемы с подсветкой?
Многострочный проход? Не факт. Он может решить некоторые проблемы, но привнести другие... тут надо выбирать меньшее из зол.

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

Post by Cuprum »

YuS
а можно ли как сделать, чтобы цифра не выделялась в таком правиле

Code: Select all

-webkit-transform: translate3d(10px, 10px, 10px);
в слове "translate3d"?

Доп.
Разобрался. Правило должно быть таким

Code: Select all

0	"(-)?(\d{1,8})(%|ch|cm|deg|dpcm|dpi|dppx|em|ex|grad|in|mm|ms|pc|pt|px|rad|rem|s|turn|vh|vmax|vmin|vw)"	"\1=(0,${DEL2},0) \2=(0,0,0)  \3=(0,${IF},0)"
Но тогда придется закомментировать эту строку

Code: Select all

;3	0	${NUM}	0	"0123456789"
Если надо чтобы отдельные цифры не светились.

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

Post by YuS »

Имхо, выделенные цифры более наглядны...
Но если надо, чтобы цифры внутри текста не подсвечивались:

Code: Select all

0	"(-)?(?:(?<=\s)|(?<=\W))(?<![a-z])(\d{1,8})\s*(%|ch|cm|deg|dpcm|dpi|dppx|em|ex|grad|in|mm|ms|pc|pt|px|rad|rem|s|turn|vh|vmax|vmin|vw)?\b"	"\1=(0,${DEL2},0) \2=(0,${NUM},0) \3=(0,${DEL1},0)"

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

Post by Cuprum »

YuS
Тогда получается такой вариант:

css.coder 1.11
Я там подкорректировал, чтобы убрать подсветку, если между числом и ед. измерения есть пробел, т.к. это не по стандарту ;)

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

Post by YuS »

Cuprum wrote: Я там подкорректировал, чтобы убрать подсветку, если между числом и ед. измерения есть пробел, т.к. это не по стандарту ;)
Так значит это где-то тут прописано?
Ага, вот вроде что-то похожее:
The format of a length value (denoted by <length> in this specification) is a <number> (with or without a decimal point) immediately followed by a unit identifier (e.g., px, em, etc.). After a zero length, the unit identifier is optional.
Ну, значит будем считать версию 1.11 релизом файла подсветки css...

ЗЫ Только \b из моего варианта лучше добавить, иначе будет подсвечиваться набор символов типа: 345emabc

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

Post by Cuprum »

YuS
Только \b из моего варианта лучше добавить, иначе будет подсвечиваться набор символов типа: 345emabc
Тогда "%" после числа не подсвечиваются.

Offline
Posts: 3
Joined: Mon Aug 04, 2014 8:39 am

Post by AMAlex »

Добрый день.
Помогите разобраться.

Почему здесь все работает,

Code: Select all

Words:
;1	0	${AREA}	0	"${AREA}"
;1	0	${VAR}	0	"${VAR}"
;1	0	${OP}	0	"${OP}"
;1	0	${STR}	0	"${STR}"
А здесь ни как не работает? :(

Code: Select all

QuotesRE:
0	"\$\{\w{2,4}\}"  "\0=(0,\0,0)"
;0	"\$\{(OP)\}"  "\0=(0,${\1},0)"
Тут выключено.

Code: Select all

Quotes:
;5	0	${VAR}	0	"${"	"}"	"$"	""	""
Наверно нельзя "указатель на указатель".
Last edited by AMAlex on Tue Aug 05, 2014 6:55 am, edited 3 times in total.

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

Post by Drugmix »

Вряд ли такое допустимо:
"\0=(0,\0,0)"

Offline
Posts: 3
Joined: Mon Aug 04, 2014 8:39 am

Post by AMAlex »

Допустимо. Так работает.

Code: Select all

0	"#([A-F\d]{6}|[A-F\d]{3})\b"  "\0=(0,\0,0)"
0	"#([A-F\d]{6}|[A-F\d]{3})\b"  "\0=(0,\1,0)"
0	"#([A-F\d]{6}|[A-F\d]{3})\b"  "\1=(0,#911,0)"
Tак не работает. Без решетки это уже имя.

Code: Select all

0	"#([A-F\d]{6}|[A-F\d]{3})\b"  "\1=(0,911,0)"
Last edited by AMAlex on Mon Aug 04, 2014 5:32 pm, edited 6 times in total.

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

Post by YuS »

Cuprum wrote: Тогда "%" после числа не подсвечиваются.
Значит "%" надо вернуть в секцию Delimeters, где этот символ был записан ранее, в том числе и в версии css.coder v1.11
Locked