// Remove strings ("..." and '...')
.replace(/"(\\.|[^"\\\n\r])*"/g, escaper)
.replace(/'(\\.|[^'\\\n\r])*'/g, escaper)
// Try remove simple regular expressions like /x*/ and /\/*x/
// We search for invalid divisions:
// x = /./; -> =
// if(/a/.test(b)) -> (
// a = [/a/, /b/] -> [ ,
// x = a && /b/test(c) -> & |
// x = a ? /b/ : /c/ -> ? :
// x = !/a/.test(b) -> !
.replace(
/([=(\[,&|?:!]\s*((\/\/[^\n\r]*[\n\r]+|\/\*[\s\S]*?\*\/)\s*)*)\/([^*\\\/\n\r]|\\[^\n\r])(\\\/|[^\/\n\r])*\//g,
// special chars line comments block comments regexp begin regexp end
function(s, prefix) {
return prefix + escaper(s.substr(prefix.length));
}
);
То есть сначала исключаются строки, потом ищутся некорректные операции деления.
Так что если есть символ из набора + пробелы или комментарии + «/», то это начало регулярного выражения.
Причем внутри все «/» должны экранироваться и не должно быть экранирования завершающего «/». Ну, и там еще учитывается, что «*» не может быть первым символом. Впрочем, там еще и не должно быть «?» и «+», надо будет добавить.
А еще в том примере не должно быть «\» перед «//» в комментарии.
Quotes:
;======================================================================
;Flags Font Color Color Quote Quote Escape Quote Quote
; style text bkgrnd start end char include exclude
;======================================================================
;397=1+4+8+128+256
397 2 ${TAG} 0 "" "(" "" "" ""
Приоритет у "Quotes:" выше, чем у "Words:", поэтому секция "Words:" не может исключить "Quotes:".
Может приведете конкретный пример?
Posted: Thu Jun 30, 2011 3:55 pm
by Bingo
Приоритет у "Quotes:" выше, чем у "Words:"
Я так и подумал. Просто хотел для AutoIt-а замутить подсветку встроенных ф-ций одним цветом, ф-ций из идущих в дистрибутиве библиотек - другим, а пользовательских - третьим, чтоб сразу было видно откуда у них ноги растут. Ну ладно, тогда HighLight_BasicTextColor под эту задачу поменяю.