Coder plugin (2)

Discuss and announce AkelPad plugins
Locked
  • Author
  • Message
Offline
Posts: 1161
Joined: Sun Oct 20, 2013 11:44 am

Post by Skif_off »

Натолкнулся у себя случайно на nncron.highlight от Casm для nnCron и неудачный набросок nncron.coder, переделал, дополнил (+полно комментов Ru/En), выкладываю: nncron.coder.
Из минусов (на первый взгляд) - цвета были заданы абсолютно, но вполне удобоваримо (проверил на дефолтной и паре темных тем). Была мысль пропиарить в соответствубщей теме на руборде для обратной связи, но как-то неловко.

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

Post by Instructor »

Изменено: корректировка положения окна дополнения (Coder::AutoComplete).

Changed: correction of auto-complete window position(Coder::AutoComplete).


Coder plugin v13.0

1
Offline
Posts: 1
Joined: Mon Mar 24, 2014 5:43 am

Post by 1 »

А можно добавить в набор powershell синтаксис? или я могу сам это сделать?

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

Post by Skif_off »


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

Post by DV »

Обнаружил довольно неприятную (потому что неочевидную и неожиданную) штуку в Coder::AutoComplete. Итак:
1) Настройка редактора заменять табуляцию пробелами отключена - т.е. символ табуляции остаётся символом табуляции
2) Открываем любой файл .ini, для которого в файле ini.coder прописано вот что:
ini.coder wrote:Delimiters:
1 0 ${DEL1} 0 =
3) в этом .ini набираем <TAB> abc <Enter> (т.е. клавишу TAB, текст abc и клавишу Enter) и ещё раз нажимаем клавишу TAB
В результате появляется совершенно неожиданный текст abc, появившийся как результат автодополнения к "слову" <TAB>abc
Другой пример:
В том же .ini файле нажимаем следующую последовательность клавиш:
<Shift+Home> <Del> <Space> def <Enter> <Shift+Home> <Del> <Space> <TAB>
В результате пробел на второй строке "дополняется" до <Space>def
Как-то это странно, в особенности учитывая наличие \t и пробела в списке разделителей слов в настройках редактора.

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

Post by Instructor »

DV
Не воспроизводится. Выложите/вышлите папку с AkelPad'ом.

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

Post by Cuprum »

Хочу добить тему подсветки классов и id в CSS и LESS.
При добавлении

Code: Select all

0	"(\.(\w|-)+)" "\1=(0,${AREA},0)" 
0	"(#(\w|-)+)" "\1=(0,${VAR},0)"
в QuotesRE css.coder-а также подсвечиваются и единицы измерения с точкой

Image


Как убрать такую подветку внутри {...}?
Правда LESS еще позволяет делать

Image

Это тоже надо учесть.
Тут видимо надо делать какую-то специальную проверку, но я не силен в регулярках...

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

Post by Skif_off »

Cuprum
А если добавить условие "в начале строки"

Code: Select all

0	"^\s*(\.(\w|-)+)"	"\1=(0,${AREA},0)"
0	"^\s*(#(\w|-)+)"	"\1=(0,${VAR},0)"
?
Вот еще не забудьте, хотя и не обязательно.

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

Post by Drugmix »

Skif_off
тогда вложенность не будет учитываться если точка не с начала строки идёт.
Предлагаю добавить positive look ahead {
, вообще по синтаксису CSS (и, вероятно, LESS тоже) она не обязательно должна идти на этой же строке. Вот такое употребление тоже валидно:

Code: Select all

.selector
{ property: value !important; }
а quotesRE правила, кажется, не умеют в мультстрочность, т.е. \s* перед (?=\{) должно бы и символ конца строки в себя включать, но как оно по факту в акелпаде будет работать - надо проверять.

Code: Select all

0   "\s*(\.(\w|-)+)\s*(?=\{)"   "\1=(0,${AREA},0)"
0   "\s*(#(\w|-)+)\s*(?=\{)"   "\1=(0,${VAR},0)"
В любом случае - так тоже не правильно, ведь селектор может быть комплексным, да ещё и порядок перечисления id и class может быть произвольным:

Code: Select all

#id1 #id2 .class1 .class2, .class1.class2 #id1 #id2
{property: value}
И ни предложенные мной правила, ни предложенные Skif_off правила здесь не сработают.

И тут логично предположить, что если в верхнее правило добавить условие, что после class может идти id, а в нижнее правило добавить условие, что после id может идти class, т.е. примерно вот так

Code: Select all

0   "\s*(\.(?:\w|-)+)\s*(#(?:\w|-)+)?\s*(?=\{)"   "\1=(0,${AREA},0) \2=(0,${VAR},0)"
0   "\s*(#(?:\w|-)+)\s*(\.(?:\w|-)+)\s*(?=\{)"   "\1=(0,${VAR},0) \2=(0,${AREA},0)"
- то это решит наши проблемы, но на самом деле нет: верхнее правило всегда будет перебивать нижнее. Единственный выход - объединить правила в одно и расписать вообще все возможные случаи употребления селекторов в нём. Такое правило будет очень длинным и очень сложным в составлении.

И тем самым мы снова возвращаемся к нашим баранам и моей просьбе к Instructor'у добавить каскадность работы QuotesRE правил.

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

Post by Cuprum »

Drugmix
Может лучше идти другим путем, отсеять все лишнее, что не является идентификатором CSS? По-русски: после # или точки не может сразу идти цифра или два дефиса подряд или дефис+цифра. Тут поподробнее. Тогда и проверять наличие скобок {} не придется. Правда, как такое правило записать регуляркой, хз.

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

Post by Skif_off »

Drugmix wrote:quotesRE правила, кажется, не умеют в мультстрочность, т.е. \s* перед (?=\{) должно бы и символ конца строки в себя включать, но как оно по факту в акелпаде будет работать - надо проверять.
Не умеют, по факту \s* сработает как "ноль или более пробелов и/или табов", поэтому можно оставить для тех, которые были приведены в качестве примеров, и копать произвольное перечисление: как минимум - точно известно, какие символы можно использовать для названия.

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

Post by Drugmix »

Cuprum wrote:Drugmix
Может лучше идти другим путем, отсеять все лишнее, что не является идентификатором CSS?
Skif_off wrote:поэтому можно оставить для тех, которые были приведены в качестве примеров, и копать произвольное перечисление: как минимум - точно известно, какие символы можно использовать для названия.
Так не получится: допустимые имена классов пересекаются с допустимыми именами значений для целого списка свойств.

Code: Select all

.55 { border-width: .55 em }

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

Post by Cuprum »

Drugmix
Так не получится: допустимые имена классов пересекаются с допустимыми именами значений для целого списка свойств.
Что-то я тут не понял. .55 это недопустимое имя для класса...

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

Post by Drugmix »

Cuprum
я прочитал как-то по диагонали и подумал, что наоборот может.
Хм, тогда должно быть проще.
Как-то так (не тестировал):

Code: Select all

0   "\s*(\.([a-z]|-(?!-|\d))(\w|-)*)"   "\1=(0,${AREA},0)"
Last edited by Drugmix on Wed Apr 02, 2014 10:59 pm, edited 1 time in total.

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

Post by Cuprum »

Drugmix
Да, все ближе к нужному варианту ;)
Я только немножко поправил, т. к. в вашем варианте также выбирались
.--class и .-9class что невалидно. Получилось так

Code: Select all

"\s*(\.(?!\d|--|-\d)(\w|-)+)"   "\1=(0,${AREA},0)"
Но все равно смущает несколько моментов. Хотя бы такой - если заменить
(\w|-)+ на [\w-]+ то перестает работать. Не знаете, почему ;) ? Ведь это синонимы.
Locked