Coder plugin (2)

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

Post by YuS »

Infocatcher wrote:Пока что вот такое придумалось:
Да, вариант с пробельными символами самый трудный... если его вообще можно как-то исключить, надо подумать...

Кстати, в список исключений можно ещё добавить вот это:

Code: Select all

var n = a/(2/i);
но этот момент, как раз обойти несложно, как-то так:

Code: Select all

"(?<!\w)/([^\\/]|\\/?)++/(?=[gmi]|\W)"
а вот пробельные символы как учесть... А вообще, такой синтаксис (с пробелами) допустимо использовать как нерегулярку? Т.е. как сам js воспринимает такое выражение:

Code: Select all

var n = 1 / 2 / i;
?

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

Post by YuS »

YuS wrote:
Infocatcher wrote:Пока что вот такое придумалось:
...
а вот пробельные символы как учесть...
?
В общем, тоже придумалось:
Меняем Pattern в "QuotesRE:" на такой:

Code: Select all

"([^\w\s]\s*|^\s*)\K/(?!=)([^\\/]|\\/?)++/(?=[gmi]|\s*[^\w\s])"
js.coder

Image
Last edited by YuS on Sat Oct 24, 2015 3:11 pm, edited 1 time in total.

Offline
Posts: 2248
Joined: Tue Aug 07, 2007 2:03 pm
Location: Vinnitsa, Ukraine

Post by FeyFre »

YuS wrote:Т.е. как сам js воспринимает такое выражение:

Code: Select all

var n = 1 / 2 / i;
?
Число, тут думать даже нечего.

Code: Select all

7 Lexical Conventions

	The source text of an ECMAScript program is first converted into a sequence of input elements, which are tokens, line terminators, comments, or white space. The source text is scanned from left to right, repeatedly taking the longest possible sequence of characters as the next input element.

	There are two goal symbols for the lexical grammar. The InputElementDiv symbol is used in those syntactic grammar contexts where a leading division (/) or division-assignment (/=) operator is permitted. The InputElementRegExp symbol is used in other syntactic grammar contexts.

	NOTE	There are no syntactic grammar contexts where both a leading division or division-assignment, and a leading RegularExpressionLiteral are permitted. This is not affected by semicolon insertion (see 7.9); in examples such as the following:
	a = b
	/hi/g.exec(c).map(d);
where the first non-whitespace, non-comment character after a LineTerminator is slash (/) and the syntactic context allows division or division-assignment, no semicolon is inserted at the LineTerminator. That is, the above example is interpreted in the same way as:
	a = b / hi / g.exec(c).map(d);

	Syntax

	InputElementDiv ::
		WhiteSpace
		LineTerminator
		Comment
		Token
		DivPunctuator

	InputElementRegExp ::
		WhiteSpace
		LineTerminator
		Comment
		Token
		RegularExpressionLiteral

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

Post by YuS »

FeyFre wrote:Число, тут думать даже нечего.

А если кто хочет подумать :D привожу параграф 7 из стандарта
Дык ить, уже придумалось, осталось только протестировать на всевозможных crazy - codes :)

Но, всё же, формулировка вводит в ступор своей "четкостью" изложения:
Символ InputElementRegExp используется в других синтаксических контекстах грамматики.
Тут бы уточнения не помешали, но видимо их просто нет. :)
Кстати, спасибо, за цитату. Ещё один момент надо дополнить в регулярку: вот такое сочетание "/=", является явным признаком не регэкспа. Будем исправлять...

Offline
Posts: 2248
Joined: Tue Aug 07, 2007 2:03 pm
Location: Vinnitsa, Ukraine

Post by FeyFre »

вот такое сочетание "/=", является явным признаком не регэкспа. Будем исправлять...
Чегось? /=/ - не регэксп?
Проблема в том, что понять в контретном месть может тут быть регексп или нет может можно если парсить граматику, а не раскрашивать каждый тип элемента начиная просмотр файла сначала.

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

Post by YuS »

FeyFre wrote: Чегось? /=/ - не регэксп?
Уж насколько ясный и четкий, приведенный выше стандарт, настолько и понимаю его. А что не так:
There are two goal symbols for the lexical grammar. The InputElementDiv symbol is used in those syntactic grammar contexts where a leading division (/) or division-assignment (/=) operator is permitted. The InputElementRegExp symbol is used in other syntactic grammar contexts.
?
FeyFre wrote: Проблема в том, что понять в контретном месть может тут быть регексп или нет может можно если парсить граматику, а не раскрашивать каждый тип элемента начиная просмотр файла сначала.
Наверное, да, надо контекст окружающий парсить, чтобы понять допускается такое применение или нет. Только для этого инструмент регэкспов, не совсем подходит...
Ну или предложите, как это можно сделать... критика должна быть конструктивной :)

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

Post by Infocatcher »

YuS wrote:Наверное, да, надо контекст окружающий парсить, чтобы понять допускается такое применение или нет. Только для этого инструмент регэкспов, не совсем подходит...
Я вот такую жесть делал.
Там все портят возможные комментарии со штуками типа

Code: Select all

var n = 1 /* а тут какие-то пояснения */
    /i/m;
Там на самом деле деление, но чтобы это понять, надо отбросить комментарий.

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

Post by YuS »

Infocatcher wrote: Там все портят возможные комментарии со штуками типа

Code: Select all

var n = 1 /* а тут какие-то пояснения */
    /i/m;
Там на самом деле деление, но чтобы это понять, надо отбросить комментарий.
Вот-вот, об этом и говорю... с точки зрения синтаксиса, вроде всё верно, но шаблон из QuotesRE, в принципе, не сможет такое, у него, если не ошибаюсь, построчный парсинг. Тут надо что-то другое изобретать, или попросить Александра, чтобы подсказал чем это можно сделать или может быть, чтобы добавил какие-то необходимые для этого функции в Coder.

PS Кстати, надо бы добавить этот пример в собрание crazy - codes, на будущее, чтобы не забылось.

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

Post by Cuprum »

Instructor
Можно ли добавить в js.coder подсветку нативных

Code: Select all

;--Methods from Prototypes--
1	0	${OP}	0	apply
1	0	${OP}	0	bind
1	0	${OP}	0	call
1	0	${OP}	0	charAt
1	0	${OP}	0	charCodeAt
1	0	${OP}	0	clear
1	0	${OP}	0	codePointAt
1	0	${OP}	0	concat
1	0	${OP}	0	copyWithin
1	0	${OP}	0	delete
1	0	${OP}	0	endsWith
1	0	${OP}	0	entries
1	0	${OP}	0	every
1	0	${OP}	0	exec
1	0	${OP}	0	fill
1	0	${OP}	0	filter
1	0	${OP}	0	find
1	0	${OP}	0	findIndex
1	0	${OP}	0	forEach
1	0	${OP}	0	get
1	0	${OP}	0	has
1	0	${OP}	0	hasOwnProperty
1	0	${OP}	0	includes
1	0	${OP}	0	indexOf
1	0	${OP}	0	isPrototypeOf
1	0	${OP}	0	join
1	0	${OP}	0	keys
1	0	${OP}	0	lastIndexOf
1	0	${OP}	0	localeCompare
1	0	${OP}	0	map
1	0	${OP}	0	match
1	0	${OP}	0	normalize
1	0	${OP}	0	pop
1	0	${OP}	0	propertyIsEnumerable
1	0	${OP}	0	push
1	0	${OP}	0	reduce
1	0	${OP}	0	reduceRight
1	0	${OP}	0	repeat
1	0	${OP}	0	replace
1	0	${OP}	0	reverse
1	0	${OP}	0	search
1	0	${OP}	0	set
1	0	${OP}	0	shift
1	0	${OP}	0	slice
1	0	${OP}	0	some
1	0	${OP}	0	sort
1	0	${OP}	0	splice
1	0	${OP}	0	split
1	0	${OP}	0	startsWith
1	0	${OP}	0	substring
1	0	${OP}	0	test
1	0	${OP}	0	toExponential
1	0	${OP}	0	toFixed
1	0	${OP}	0	toLocaleLowerCase
1	0	${OP}	0	toLocaleString
1	0	${OP}	0	toLocaleUpperCase
1	0	${OP}	0	toLowerCase
1	0	${OP}	0	toPrecision
1	0	${OP}	0	toString
1	0	${OP}	0	toUpperCase
1	0	${OP}	0	trim
1	0	${OP}	0	unshift
1	0	${OP}	0	valueOf
1	0	${OP}	0	values

Правда, чтобы исключить "лишнюю раскраску" надо позволить им светиться, видимо, только после таких символов слева: ., ), }, ]. Такое можно устроить?
Прошу прошения, конечно же, перед методом должна быть только точка. А ), }, ... и пр. - что предшествует точке. Если упрощать, то их можно в расчет не брать.

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

Post by Cuprum »

Instructor
В css.coder в секции Words некоторые свойства повторяются из-за разных случаев подсветки. Соотвественно, в окне подсказки со звездочкой они тоже выводятся по 2 раза. Можно ли как-то это учитывать и в подсказке при любом количестве дублей у слова показывать его только единожды?

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

Post by Drugmix »

Instructor,
До моего сведения было донесено ваше решение удалить файл ahk.coder из http://akelpad.sourceforge.net/files/plugs/Coder/, так как он содержал не стандартные переменные.

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

Похоже, что использование однострочных комментариев в конце строк с правилами внутри .coder файлов (что активно эксплуатируется мной в ahk.coder) не совсем явно допустимая возможность.

Вы бы не могли как-то пролить свет на статус таких комментариев?

Они допустимы, допустимы-но-нежелательны или недопустимы?

Если допустимы-но-нежелательны - ок, будем знать, но лучше тогда сразу во всех .coder-файлах было бы проставить нули в качестве значений для новых добавленных столбцов (а то новые столбцы вроде как и не обязательны к заполнению, но получается, что если значения у них не заданы, а вместо них идёт комментарий - жди беды).

Если допустимы, то: во-первых хорошо бы добавить в coder проверку, что если в строке присутствует '\s(;.*$)' - это надо трактовать как комментарий, а не как значение для одного из столбцов, а во-вторых, следует добавить правил (в Quotes: или QuotesRE:) для раскраски таких кусков как комментариев.

Если недопустимы - ладно. Хотя лучше бы coder тогда сразу ругался бы на них - я бы их даже не начинал бы тогда использовать.

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

Post by Skif_off »

Для подсветки SFV-файлов (с контрольными суммами CRC32) используется правило:

Code: Select all

0	"(^.+)[ \t]([\da-f]{8})$"	"\1=(0,0,0) \2=(0,${OP},0)"
оно вдруг не работает, если строка начинается с цифр, причём как-то хитро:

04072010483 (2).jpg AFD00B17
04072010483.jpg 8E4517FB

Как можно победить?

Добавлено:
Дошло, срабатывает первое правило из Quotes, надо думать.

Добавлено:
Пока сделал так

Code: Select all

; MD5, SHA1, SHA256, SHA512
1	"^([A-Fa-f0-9]{128}|[A-Fa-f0-9]{64}|[A-Fa-f0-9]{40}|[A-Fa-f0-9]{32})[ \t]"	"\1=(0,${OP},0)"	0	0
; For SFV (CRC32)
1	"(^.+)[ \t]([A-Fa-f0-9]{8})$"	"\1=(0,0,0) \2=(0,${OP},0)"	0	0
Идеи приветствуются.

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

Post by Instructor »

Cuprum wrote:В css.coder в секции Words некоторые свойства повторяются из-за разных случаев подсветки.
См. Coder 19.1.
Cuprum wrote:Можно ли добавить в js.coder подсветку нативных методов...
Добавлены методы без подсветки, т.е. для AutoComplete.


Drugmix
Новый файл был мне выслан и залит.
Они допустимы, допустимы-но-нежелательны или недопустимы?
"допустимы-но-нежелательны" просто всё, что идёт в строке после обработки всех колонок, игнорируется.

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

Post by Instructor »

Изменено: одно и тоже, подряд идущее, слово из базы HighLight'а не добавляется в список AutoComplete.

Changed: same, consecutive word from HighLight base not added to the AutoComplete list.


Coder plugin v19.1

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

Post by Skif_off »

Infocatcher
Прошёлся по файлам контрольных сумм Total Commander и Double Commander, получается

первое правило в Quotes закомментировал, в Files

Code: Select all

*.blake2s
*.blake2sp
*.crc32
*.haval
*.md4
*.md5
*.ripemd128
*.ripemd160
*.sfv
*.sha
*.sha1
*.sha256
*.sha384
*.sha512
*.tiger
в QuotesRE

Code: Select all

; BLAKE2S, BLAKE2SP, CRC32, HAVAL, MD4, MD5, RIPEMD128, RIPEMD160, SHA (SHA1), SHA256, SHA384, SHA512, TIGER, MD5, SHA256, SHA512
1	"^([A-Fa-f0-9]{128}|[A-Fa-f0-9]{96}|[A-Fa-f0-9]{64}|[A-Fa-f0-9]{48}|[A-Fa-f0-9]{40}|[A-Fa-f0-9]{32}|[A-Fa-f0-9]{8})[ \t](\*)"	"\1=(0,${IF},0) \2=(2,${DEL1},0)"	0	0
; For SFV (CRC32)
1	"^(.+)[ \t]([A-Fa-f0-9]{8})$"	"\1=(0,0,0) \2=(0,${IF},0)"	0	0
Вам регулярные выражения знакомы больше, нет ли идей, как оптимизировать?
Locked