XBrackets plugin
- Author
- Message
-
Offline
- Posts: 1250
- Joined: Thu Nov 16, 2006 11:53 am
- Location: Kyiv, Ukraine
XBrackets v.6.2
- исправлено: изменение цветовой темы не обрабатывалось должным образом
+ несколько исправлений/улучшений
+ новая настройка: Считать " " парой скобок
+ несколько исправлений/улучшений ещё раз
+ теперь галочки для пар " ", ' ' и < > поддерживают три состояния:
[v] Автозакрытие + подсветка
[o] Только подсветка
[ ] Выкл.
- исправлено: изменение цветовой темы не обрабатывалось должным образом
+ несколько исправлений/улучшений
+ новая настройка: Считать " " парой скобок
+ несколько исправлений/улучшений ещё раз
+ теперь галочки для пар " ", ' ' и < > поддерживают три состояния:
[v] Автозакрытие + подсветка
[o] Только подсветка
[ ] Выкл.
-
Offline
- Posts: 294
- Joined: Tue Jul 27, 2010 11:18 pm
DV
В 6.2 не подсвечиваются скобки/кавычки вокруг некоторых наборов символов, например: ^\d+ (при этом вокруг d+ и ^\d - подсвечиваются)
В строчке'.' не подсвечивается, а та же точка на отдельной строке - нормально...
В 6.2 не подсвечиваются скобки/кавычки вокруг некоторых наборов символов, например: ^\d+ (при этом вокруг d+ и ^\d - подсвечиваются)
В строчке
Code: Select all
.connectServer('.', 'root\\cimv2')
-
Offline
- Posts: 1250
- Joined: Thu Nov 16, 2006 11:53 am
- Location: Kyiv, Ukraine
Правильно, это из-за неоднозначности:Serge Yolkin wrote:не подсвечиваются скобки/кавычки вокруг некоторых наборов символов, например: ^\d+ (при этом вокруг d+ и ^\d - подсвечиваются)
В строчке'.' не подсвечивается, а та же точка на отдельной строке - нормально...Code: Select all
.connectServer('.', 'root\\cimv2')
1. В случае "^\d+" оба символа ^ и + являются разделителями, т.е. парная кавычка с равной вероятностью может находиться как левее, так и правее, например:
" ... "^\d+" ... "
2. В случае ('.' также имеем два разделителя: слева символ скобки ( и справа - точку .
Для иллюстрации рассмотрим кусочек текста из приведенной строки:
('.', '
Какие из двух кавычек предпочесть для установления взаимосвязи между ними?
'.' или ', ' ?
3. В случае '.' с первой кавычкой в начале строки или со второй кавычкой в конце строки ситуация является более однозначной: скорее всего, парная кавычка находится на той же строке.
А вот в случае '.' в обрамлении пробелов слева и справа ситуация неоднозначна.
При неоднозначности принимается решение не подсвечивать ничего, чтобы не ошибиться.
Подробнее см. реализацию функции getDuplicatedPairDirection и использование переменной nDuplicatedPairDirection.
Этот алгоритм не менялся с конца 2011-года, примерно с версии 4.8.
-
Offline
- Posts: 294
- Joined: Tue Jul 27, 2010 11:18 pm
ну-у-у.. тогда могу предположить, чтоDV wrote:Этот алгоритм не менялся с конца 2011-года
Code: Select all
highlight.quote_detect_lines=1
highlight.quote_max_lines=1
-
Offline
- Posts: 874
- Joined: Sat Jan 16, 2010 2:03 pm
Serge Yolkin
1. Предположения с режимами highlight/quote не кажутся правдоподобными, т.к., судя по пояснениям, все вертится только вокруг "Delimiters".
2. Определение "исправить ситуацию" не корректно (between two evils 'tis not worth choosing). Но повлиять на ситуацию вы, тем не менее, можете даже сейчас (например через Coder-плагин).
3. Если используются разделители из синтаксической темы (см. в настройках Coder), то поведение подсветки, например, парных кавычек, будет отличаться. Скажем, при принудительном использовании "1с" или "txt" - ваш пример не будет подсвечиваться (как и при выключенном Coder), а вот при принудительном использовании "cpp", "perl" пример уже "подсветится". Из-за различного набора "Delimiters". Т.е. можно, например, подставить "что-нибудь этакое" в графу "Псевдоним для неизвестного файла".
4. Если без Coder, то можно разделители в настройках самого редактора "проредить", но это уж совсем себя надо не любить.
1. Предположения с режимами highlight/quote не кажутся правдоподобными, т.к., судя по пояснениям, все вертится только вокруг "Delimiters".
2. Определение "исправить ситуацию" не корректно (between two evils 'tis not worth choosing). Но повлиять на ситуацию вы, тем не менее, можете даже сейчас (например через Coder-плагин).
3. Если используются разделители из синтаксической темы (см. в настройках Coder), то поведение подсветки, например, парных кавычек, будет отличаться. Скажем, при принудительном использовании "1с" или "txt" - ваш пример не будет подсвечиваться (как и при выключенном Coder), а вот при принудительном использовании "cpp", "perl" пример уже "подсветится". Из-за различного набора "Delimiters". Т.е. можно, например, подставить "что-нибудь этакое" в графу "Псевдоним для неизвестного файла".
4. Если без Coder, то можно разделители в настройках самого редактора "проредить", но это уж совсем себя надо не любить.
-
Offline
- Posts: 1250
- Joined: Thu Nov 16, 2006 11:53 am
- Location: Kyiv, Ukraine
Serge Yolkin,
Вот, нашёл, откуда это всё пошло.
См. первые три сообщения... И это были вы!
http://akelpad.sourceforge.net/forum/vi ... &start=198
Суть была в том, что подсвечивалась неправильная пара кавычек, и тогда я специально добавил ещё проверки, чтобы исключить ситуации с ошибочной подсветкой... А чтобы совсем её исключить, при неоднозначной ситуации ничего не подсвечивается.
Теоретически, что ещё можно было бы сделать, так это подсчитывать количество кавычек в близлежащих строках, чтобы определиться с началом и концом всех кавычек. Но на практике это отягощается двумя факторами: 1. кавычка может быть экранирована 2. кавычка может находиться внутри другой пары кавычек (одинарная внутри пары двойных или наоборот) - и тут опять возникнет неоднозначность: что считать началом или концом той пары кавычек, в которой находится другая кавычка? Короче говоря, всё это, конечно, интересно, но чересчур нетривиально.
Вот, нашёл, откуда это всё пошло.
См. первые три сообщения... И это были вы!
http://akelpad.sourceforge.net/forum/vi ... &start=198
Суть была в том, что подсвечивалась неправильная пара кавычек, и тогда я специально добавил ещё проверки, чтобы исключить ситуации с ошибочной подсветкой... А чтобы совсем её исключить, при неоднозначной ситуации ничего не подсвечивается.
Теоретически, что ещё можно было бы сделать, так это подсчитывать количество кавычек в близлежащих строках, чтобы определиться с началом и концом всех кавычек. Но на практике это отягощается двумя факторами: 1. кавычка может быть экранирована 2. кавычка может находиться внутри другой пары кавычек (одинарная внутри пары двойных или наоборот) - и тут опять возникнет неоднозначность: что считать началом или концом той пары кавычек, в которой находится другая кавычка? Короче говоря, всё это, конечно, интересно, но чересчур нетривиально.
-
Offline
- Posts: 294
- Joined: Tue Jul 27, 2010 11:18 pm
Ну, вот...
5.9 - всё было хорошо;
6.1 - эту версию я пропустил, по крайней мере, её нет в бэкапе;
6.2 - всё сломалось.
Новые версии накатывались поверх, INIшник не менялся:Откатился на 5.9...
5.9 - всё было хорошо;
6.1 - эту версию я пропустил, по крайней мере, её нет в бэкапе;
6.2 - всё сломалось.
Новые версии накатывались поверх, INIшник не менялся:
Code: Select all
[Options]
autocomplete.all_autobr=0
autobrackets.next_char_ok=.,!?:;()[]{}<>=«»`
autocomplete.ovr_autobr=0
autobrackets.prev_char_ok=!;()[]{}<>=«»`
autocomplete.sel_autobr=2
comment1FileExts=hta; htm; html; js; shtml; wsf; xhtml
common.user_brpairs= «» ``
highlight.br_max_lines=0
highlight.hlt_bothbr=1
highlight.hlt_style=3
highlight.quote_detect_lines=1
highlight.quote_max_lines=1
highlightBkRGB=FFFFFF00
highlightRGB=99CCFF00
htmlFileExts=hta; htm; html; shtml; wsf; xaml; xhtml; xml; xsl; xslt; xspf;
optionsFlags=12571
-
Offline
- Posts: 1250
- Joined: Thu Nov 16, 2006 11:53 am
- Location: Kyiv, Ukraine
Прошу привести парочку детальных примеров: что конкретно было хорошо, и что (и как именно) сломалось.Serge Yolkin wrote:5.9 - всё было хорошо;
6.2 - всё сломалось.
Только одного примера будет мало.
Недетализированного примера будет мало. Вот почему: для той же строки
Code: Select all
.connectServer('.', 'root\\cimv2')
-
Offline
- Posts: 294
- Joined: Tue Jul 27, 2010 11:18 pm
DV
Это фрагмент .coder файла:раньше (когда было хорошо) кавычки "обратный штрих" (`) подсвечивались вокруг всех пяти приведенных регулярок, сейчас (когда стало плохо) - только вокруг первой и последней.
Вероятно, хотя и не уверен, - сломался упрощенный механизм поиска кавычек только в одной строке (только от начала строки), который я когда-то и выпросил
P.S. Coder не отключал - собственно, я его никогда не отключаю...
не?
Это фрагмент .coder файла:
Code: Select all
0 `\b(\w+\.){2,}(com|net|org|ru)\b` `\0=(0,${NUM},0)`
0 `(mshta)((\.)(exe))?\s+(javascript\:)(".+")` `\1=(0,${TAG},0) \3=(0,${DEL2},0) \4=(0,${TAG},0) \5=(0,${DEL2},0) \6=(0,${STR},0)`
0 `\b([\w()\-]+?)\[(\.)(bat|cmd|com|exe)\]` `\1=(0,${TAG},0) \2=(0,${DEL2},0) \3=(0,${TAG},0)`
0 `(?<!\.)\b([\w()\-]+?)(\.)(bat|cmd|com|exe)` `\1=(0,${TAG},0) \2=(0,${DEL2},0) \3=(0,${TAG},0)`
0 `(^|\s)(Cmd)\s` `\2=(2,${TAG},0)`
Вероятно, хотя и не уверен, - сломался упрощенный механизм поиска кавычек только в одной строке (только от начала строки), который я когда-то и выпросил
P.S. Coder не отключал - собственно, я его никогда не отключаю...
аXBrackets берёт информацию о парных кавычках из Coder
Code: Select all
common.user_brpairs=
-
Offline
- Posts: 1250
- Joined: Thu Nov 16, 2006 11:53 am
- Location: Kyiv, Ukraine
При включенном Coder у меня все пары `` подсвечиваются.Serge Yolkin wrote:Это фрагмент .coder файла:(...)
Вывод (одно из трёх):
1) возможно, нужно перегенерить кеш плагина Coder
2) возможно, файл coder.coder был стёрт. Тогда его нужно восстановить
3) возможно, из вашего файла coder.coder пропала строка
Code: Select all
5 3 ${STR} 0 "`" "`" "" "" ""
Здесь я выразился неполно.Serge Yolkin wrote:аXBrackets берёт информацию о парных кавычках из Coderне?Code: Select all
common.user_brpairs=
Следует понимать так: при включенном плагине Coder плагин XBrackets сначала "спрашивает" у Coder, есть ли у плагина Coder информация о паре скобок или кавычек, одной из которых является текущая скобка или кавычка возле каретки. Если плагин Coder располагает информацией о такой паре скобок или кавычек, то XBrackets их подсвечивает. Если же плагин Coder выключен или не знает о парной скобке или кавычке, то XBrackets ищет парную скобку или кавычку самостоятельно. А делается это всё только для тех пар скобок и кавычек, которые указаны в настройках XBrackets (в том числе в common.user_brpairs).
-
Offline
- Posts: 1250
- Joined: Thu Nov 16, 2006 11:53 am
- Location: Kyiv, Ukraine
Если плагин Coder выключен или не знает о парной скобке или кавычке, то XBrackets ищет парную скобку или кавычку самостоятельно.Serge Yolkin wrote:в используемых файлах .CODER совсем нет секций Quotes:, только QuotesRE:, но кавычки ` добавлены в common.user_brpairs плагина (.INI выше приводил, там видно). Теперь так работать не будет?
При неоднозначности нахождения парной скобки или кавычки плагин XBrackets принимает решение не подсвечивать ничего, чтобы не ошибиться.
Без помощи Coder (когда в соответствующем файле .coder указаны ` ` как кавычки) ни одна версия XBrackets за последние пару лет не подсвечивала первую пару кавычек в строке
Code: Select all
0 `(?<!\.)\b([\w()\-]+?)(\.)(bat|cmd|com|exe)` `\1=(0,${TAG},0) \2=(0,${DEL2},0) \3=(0,${TAG},0)`
Вторая пара `( ... )` подсвечивается, поскольку находится в самом конце строки. В этом случае XBrackets соображает, что правее конца строки ничего не может быть, и трактует `( ... )` как пару кавычек в конце строки.
Хотя... Все эти выкладки наводят меня на мысль, что алгоритм определения парных кавычек можно несколько улучшить без очень больших изменений. Попробую, посмотрю, что выйдет.
-
Offline
- Posts: 1250
- Joined: Thu Nov 16, 2006 11:53 am
- Location: Kyiv, Ukraine
Да уж, без очень больших изменений - это вовсе не значит, что на это требуется мало времени... Очень много сижу под отладкой, чтобы выявить всевозможные условия и "краевые эффекты" для нового алгоритма поиска. Теперь применяется "оценочное" сравнение, которое при неоднозначности "взвешивает" обе найденные пары кавычек для принятия решения. Пример (символ | обозначает положение каретки):DV wrote:алгоритм определения парных кавычек можно несколько улучшить без очень больших изменений
Code: Select all
`-`| `-`
Недостатком такого подхода было и остаётся несимметричное поведение в особых случаях. Например, пусть есть строка, расположение кавычек в которой сводится к следующему:
Code: Select all
` ` `
* Однако, поведение будет другим при указании значения highlight.quote_detect_lines больше 1. Тогда XBrackets будет искать парную кавычку и в соседней строке - и, при нахождении оной, "взвешивать" обе найденные пары кавычек для принятия решения о том, которую из них подсвечивать. Если "вес" обеих пар будет одинаковым, ничего не подсветится (из-за неоднозначности). Пример подобной неоднозначности (символ | обозначает положение каретки):
Code: Select all
`
`|
`