AkelPad Forum Index AkelPad
Support forum
 
 FAQFAQ   SearchSearch   MemberlistMemberlist   UsergroupsUsergroups   RegisterRegister 
 ProfileProfile   Log in to check your private messagesLog in to check your private messages   Log inLog in 

XBrackets plugin
Goto page Previous  1, 2, 3 ... 21, 22, 23, 24  Next
 
Post new topic   Reply to topic    AkelPad Forum Index -> Plugins
View previous topic :: View next topic  
Author Message
DV



Joined: 16 Nov 2006
Posts: 989
Location: Kyiv, Ukraine

PostPosted: Fri Mar 27, 2015 8:53 am    Post subject: Reply with quote

XBrackets v.6.1
+ добавлена информация про лицензию
Back to top
View user's profile Send private message
DV



Joined: 16 Nov 2006
Posts: 989
Location: Kyiv, Ukraine

PostPosted: Tue Apr 14, 2015 6:45 pm    Post subject: Reply with quote

XBrackets v.6.2
- исправлено: изменение цветовой темы не обрабатывалось должным образом
+ несколько исправлений/улучшений
+ новая настройка: Считать " " парой скобок
+ несколько исправлений/улучшений ещё раз
+ теперь галочки для пар " ", ' ' и < > поддерживают три состояния:
[v] Автозакрытие + подсветка
[o] Только подсветка
[ ] Выкл.
Back to top
View user's profile Send private message
Serge Yolkin



Joined: 27 Jul 2010
Posts: 294

PostPosted: Wed Apr 15, 2015 12:49 pm    Post subject: Reply with quote

DV
В 6.2 не подсвечиваются скобки/кавычки вокруг некоторых наборов символов, например: ^\d+ (при этом вокруг d+ и ^\d - подсвечиваются)

В строчке
Code:
.connectServer('.', 'root\\cimv2')
'.' не подсвечивается, а та же точка на отдельной строке - нормально...
Back to top
View user's profile Send private message
DV



Joined: 16 Nov 2006
Posts: 989
Location: Kyiv, Ukraine

PostPosted: Wed Apr 15, 2015 2:45 pm    Post subject: Reply with quote

Serge Yolkin wrote:
не подсвечиваются скобки/кавычки вокруг некоторых наборов символов, например: ^\d+ (при этом вокруг d+ и ^\d - подсвечиваются)
В строчке
Code:
.connectServer('.', 'root\\cimv2')
'.' не подсвечивается, а та же точка на отдельной строке - нормально...

Правильно, это из-за неоднозначности:

1. В случае "^\d+" оба символа ^ и + являются разделителями, т.е. парная кавычка с равной вероятностью может находиться как левее, так и правее, например:
" ... "^\d+" ... "

2. В случае ('.' также имеем два разделителя: слева символ скобки ( и справа - точку .
Для иллюстрации рассмотрим кусочек текста из приведенной строки:
('.', '
Какие из двух кавычек предпочесть для установления взаимосвязи между ними?
'.' или ', ' ?

3. В случае '.' с первой кавычкой в начале строки или со второй кавычкой в конце строки ситуация является более однозначной: скорее всего, парная кавычка находится на той же строке.
А вот в случае '.' в обрамлении пробелов слева и справа ситуация неоднозначна.

При неоднозначности принимается решение не подсвечивать ничего, чтобы не ошибиться.
Подробнее см. реализацию функции getDuplicatedPairDirection и использование переменной nDuplicatedPairDirection.
Этот алгоритм не менялся с конца 2011-года, примерно с версии 4.8.
Back to top
View user's profile Send private message
Serge Yolkin



Joined: 27 Jul 2010
Posts: 294

PostPosted: Wed Apr 15, 2015 4:17 pm    Post subject: Reply with quote

DV wrote:
Этот алгоритм не менялся с конца 2011-года
ну-у-у.. тогда могу предположить, что
Code:
highlight.quote_detect_lines=1
highlight.quote_max_lines=1
как-то исправляли ситуацию, а теперь - нет.
Back to top
View user's profile Send private message
opk44



Joined: 16 Jan 2010
Posts: 533

PostPosted: Wed Apr 15, 2015 5:23 pm    Post subject: Reply with quote

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, то можно разделители в настройках самого редактора "проредить", но это уж совсем себя надо не любить.
Back to top
View user's profile Send private message
DV



Joined: 16 Nov 2006
Posts: 989
Location: Kyiv, Ukraine

PostPosted: Wed Apr 15, 2015 6:51 pm    Post subject: Reply with quote

Serge Yolkin,
Вот, нашёл, откуда это всё пошло.
См. первые три сообщения... И это были вы! Smile
http://akelpad.sourceforge.net/forum/viewtopic.php?t=76&postdays=0&postorder=asc&start=198
Суть была в том, что подсвечивалась неправильная пара кавычек, и тогда я специально добавил ещё проверки, чтобы исключить ситуации с ошибочной подсветкой... А чтобы совсем её исключить, при неоднозначной ситуации ничего не подсвечивается.

Теоретически, что ещё можно было бы сделать, так это подсчитывать количество кавычек в близлежащих строках, чтобы определиться с началом и концом всех кавычек. Но на практике это отягощается двумя факторами: 1. кавычка может быть экранирована 2. кавычка может находиться внутри другой пары кавычек (одинарная внутри пары двойных или наоборот) - и тут опять возникнет неоднозначность: что считать началом или концом той пары кавычек, в которой находится другая кавычка? Короче говоря, всё это, конечно, интересно, но чересчур нетривиально.
Back to top
View user's profile Send private message
Serge Yolkin



Joined: 27 Jul 2010
Posts: 294

PostPosted: Mon Apr 20, 2015 9:08 am    Post subject: Reply with quote

DV
Ну, да! Оттуда и пошло. И работало все эти годы. А тут - сломалось. Вот доберусь на днях до настольника с бэкапом - скажу точно до какой версии все было хорошо. А то последние месяц-полтора немного занят и невнимателен.
Back to top
View user's profile Send private message
Serge Yolkin



Joined: 27 Jul 2010
Posts: 294

PostPosted: Wed Apr 22, 2015 10:48 am    Post subject: Reply with quote

Ну, вот...
5.9 - всё было хорошо;
6.1 - эту версию я пропустил, по крайней мере, её нет в бэкапе;
6.2 - всё сломалось.
Новые версии накатывались поверх, INIшник не менялся:
Code:
[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
Откатился на 5.9...
Back to top
View user's profile Send private message
DV



Joined: 16 Nov 2006
Posts: 989
Location: Kyiv, Ukraine

PostPosted: Wed Apr 22, 2015 2:36 pm    Post subject: Reply with quote

Serge Yolkin wrote:
5.9 - всё было хорошо;
6.2 - всё сломалось.

Прошу привести парочку детальных примеров: что конкретно было хорошо, и что (и как именно) сломалось.
Только одного примера будет мало.
Недетализированного примера будет мало. Вот почему: для той же строки
Code:
.connectServer('.', 'root\\cimv2')

подсветка парных кавычек в '.' не работает в том случае, когда Сoder неактивен (в этом случае XBrackets не может определиться с парными кавычками самостоятельно). Если же указать в качестве Syntax theme, к примеру, C++, то тогда парные кавычки подсвечиваются (в этом случае XBrackets берёт информацию о парных кавычках из Coder).
Back to top
View user's profile Send private message
Serge Yolkin



Joined: 27 Jul 2010
Posts: 294

PostPosted: Thu Apr 23, 2015 12:12 pm    Post subject: Reply with quote

DV
Это фрагмент .coder файла:
Code:
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)`
раньше (когда было хорошо) кавычки "обратный штрих" (`) подсвечивались вокруг всех пяти приведенных регулярок, сейчас (когда стало плохо) - только вокруг первой и последней.

Вероятно, хотя и не уверен, - сломался упрощенный механизм поиска кавычек только в одной строке (только от начала строки), который я когда-то и выпросил Smile

P.S. Coder не отключал - собственно, я его никогда не отключаю...

Quote:
XBrackets берёт информацию о парных кавычках из Coder
а
Code:
common.user_brpairs=
не?
Back to top
View user's profile Send private message
DV



Joined: 16 Nov 2006
Posts: 989
Location: Kyiv, Ukraine

PostPosted: Thu Apr 23, 2015 2:35 pm    Post subject: Reply with quote

Serge Yolkin wrote:
Это фрагмент .coder файлаSad...)

При включенном Coder у меня все пары `` подсвечиваются.
Вывод (одно из трёх):
1) возможно, нужно перегенерить кеш плагина Coder
2) возможно, файл coder.coder был стёрт. Тогда его нужно восстановить
3) возможно, из вашего файла coder.coder пропала строка
Code:
5   3   ${STR}   0   "`"   "`"   ""   ""   ""


Serge Yolkin wrote:
Quote:
XBrackets берёт информацию о парных кавычках из Coder
а
Code:
common.user_brpairs=
не?

Здесь я выразился неполно.
Следует понимать так: при включенном плагине Coder плагин XBrackets сначала "спрашивает" у Coder, есть ли у плагина Coder информация о паре скобок или кавычек, одной из которых является текущая скобка или кавычка возле каретки. Если плагин Coder располагает информацией о такой паре скобок или кавычек, то XBrackets их подсвечивает. Если же плагин Coder выключен или не знает о парной скобке или кавычке, то XBrackets ищет парную скобку или кавычку самостоятельно. А делается это всё только для тех пар скобок и кавычек, которые указаны в настройках XBrackets (в том числе в common.user_brpairs).
Back to top
View user's profile Send private message
Serge Yolkin



Joined: 27 Jul 2010
Posts: 294

PostPosted: Thu Apr 23, 2015 3:58 pm    Post subject: Reply with quote

1) кэш отключен совсем
2) файл на месте
3) в используемых файлах .CODER совсем нет секций Quotes:, только QuotesRE:, но кавычки ` добавлены в common.user_brpairs плагина (.INI выше приводил, там видно). Теперь так работать не будет?
Back to top
View user's profile Send private message
DV



Joined: 16 Nov 2006
Posts: 989
Location: Kyiv, Ukraine

PostPosted: Thu Apr 23, 2015 6:52 pm    Post subject: Reply with quote

Serge Yolkin wrote:
в используемых файлах .CODER совсем нет секций Quotes:, только QuotesRE:, но кавычки ` добавлены в common.user_brpairs плагина (.INI выше приводил, там видно). Теперь так работать не будет?

Если плагин Coder выключен или не знает о парной скобке или кавычке, то XBrackets ищет парную скобку или кавычку самостоятельно.
При неоднозначности нахождения парной скобки или кавычки плагин XBrackets принимает решение не подсвечивать ничего, чтобы не ошибиться.

Без помощи Coder (когда в соответствующем файле .coder указаны ` ` как кавычки) ни одна версия XBrackets за последние пару лет не подсвечивала первую пару кавычек в строке
Code:
0 `(?<!\.)\b([\w()\-]+?)(\.)(bat|cmd|com|exe)`      `\1=(0,${TAG},0) \2=(0,${DEL2},0) \3=(0,${TAG},0)`

Чтобы быть абсолютно точным, первая пара кавычек могла бы быть подсвечена только в том случае, если бы в настройках AkelPad из Редактор 2 -> Разделители слов были убраны круглые скобки (). Тогда круглые скобки не считались бы разделителями и тогда XBrackets посчитал бы `( ... )` парой кавычек.
Вторая пара `( ... )` подсвечивается, поскольку находится в самом конце строки. В этом случае XBrackets соображает, что правее конца строки ничего не может быть, и трактует `( ... )` как пару кавычек в конце строки.

Хотя... Все эти выкладки наводят меня на мысль, что алгоритм определения парных кавычек можно несколько улучшить без очень больших изменений. Попробую, посмотрю, что выйдет.
Back to top
View user's profile Send private message
DV



Joined: 16 Nov 2006
Posts: 989
Location: Kyiv, Ukraine

PostPosted: Sat Apr 25, 2015 8:10 pm    Post subject: Reply with quote

DV wrote:
алгоритм определения парных кавычек можно несколько улучшить без очень больших изменений

Да уж, без очень больших изменений - это вовсе не значит, что на это требуется мало времени... Очень много сижу под отладкой, чтобы выявить всевозможные условия и "краевые эффекты" для нового алгоритма поиска. Теперь применяется "оценочное" сравнение, которое при неоднозначности "взвешивает" обе найденные пары кавычек для принятия решения. Пример (символ | обозначает положение каретки):
Code:
`-`| `-`

В данном случае и пробел и минус являются разделителями, так что налицо неоднозначность. Однако, поскольку `-` находится у края строки, то "вес" такой пары кавычек выше, чем у ` ` в середине строки.
Недостатком такого подхода было и остаётся несимметричное поведение в особых случаях. Например, пусть есть строка, расположение кавычек в которой сводится к следующему:
Code:
` ` `

В результате, если щёлкнуть по кавычке в начале строки, то подсветится 1-я и 2-я кавычка. А если щёлкнуть по кавычке в конце строки, то подсветится 2-я и 3-я кавычка. Причина та же самая, что и в предыдущем примере: наличие кавычки у края строки воспринимается как найденная открывающая или закрывающая кавычка.
* Однако, поведение будет другим при указании значения highlight.quote_detect_lines больше 1. Тогда XBrackets будет искать парную кавычку и в соседней строке - и, при нахождении оной, "взвешивать" обе найденные пары кавычек для принятия решения о том, которую из них подсвечивать. Если "вес" обеих пар будет одинаковым, ничего не подсветится (из-за неоднозначности). Пример подобной неоднозначности (символ | обозначает положение каретки):
Code:
`
`|
`
Back to top
View user's profile Send private message
Display posts from previous:   
Post new topic   Reply to topic    AkelPad Forum Index -> Plugins All times are GMT
Goto page Previous  1, 2, 3 ... 21, 22, 23, 24  Next
Page 22 of 24

 
Jump to:  
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum


SourceForge.net Logo Powered by phpBB © 2001, 2005 phpBB Group