View previous topic :: View next topic |
Author |
Message |
KF-121

Joined: 13 Feb 2006 Posts: 90
|
(Separately) Posted: Thu Jul 27, 2006 19:55 Post subject: |
|
|
sepa wrote: |
2KF-121
1. так и задумывалось, используй enter
2. если ты про QuickSearch то так и задумано
3. недостаток API листера. в плагин передается только строка и 4 атрибута:
lcs_findfirst Search from the beginning of the first displayed line (not set: find next)
lcs_matchcase The search string is to be treated case-sensitively.
lcs_wholewords Find whole words only.
lcs_backwards Search backwards towards the beginning of the file.
4. не дает работать? =)
5. подправил
6. подправил
7. ты выделять не забываешь?
8. ее и не делал и не собираюсь пока
9. пока не найти причину =(
10. ты чекбокс в опциях включал?
11. ты же тестер, сам знаешь что это плохое сообщение о баге =)
|
2. Ну и про QuickSearch тоже, и в основном поиске поже не работает. По крайней мере blabla*xxx не ищет!
3. А почемуже тогда это понимает родной листер? Надо предложить чтобы он поправил эту беду!
4. Да нет не мешает, но я думаю можно для Code Explorer`a придумать другое меню.
7. Конечно не забываю.
10. ОК поставил.
11. Так вот и не нашел из-за чего такая трабла, если кто знает подскажите.
А как прикрутить эти разборы функций к разным подсветкам?
Syn 0.7
[-]
1. При наведении в настройках на Edit Function RegEx, то вываливается ошибка "System Error. Code: 1400", Invalid Window Handle
2. При разборе функций отображается в Code Explorer слово Function а не имя ее
а пр такой строке (([fF])+unction|([Ss]+ub)), отобрадается F или f, в зависимости от того как написано слово. _________________ Во всем виновато КАКАДУ!
--------------------------------
IIIypuk©KF-121 |
|
Back to top |
|
 |
Lev

Joined: 02 Mar 2005 Posts: 392
|
(Separately) Posted: Thu Jul 27, 2006 21:22 Post subject: |
|
|
Quote: | При разборе функций отображается в Code Explorer слово Function а не имя ее | В данный момент именем функции считается содержимое вторых скобок регекспа
Хотелось бы завести поле для имени функции, типа:
FunctionName=$3 |
|
Back to top |
|
 |
Batya

Joined: 15 Dec 2004 Posts: 2229 Location: Москва, Россия
|
(Separately) Posted: Fri Jul 28, 2006 10:29 Post subject: |
|
|
sepa wrote: | Quote: | И, поскольку поиск по Ctrl+F -> F3 и F7 -> F5 работают независимо, то есть ли горячая клавиша для очистки поля быстрого поиска, чтобы работало F7 -> F3? |
не понял. один Search Next от Listera, другой от плагина и они не связаны. Когда у тебя не работает Shift-F3? если ты пользовался QuickSearch то в нем есть текст. Если Ctrl-R то тоже работает. А в листере нет SearchBack. |
В листере прямой поиск далее - F3 или F5, обратный поиск - Shift+F3 или Shift+F5.
В Syn же обратный поиск работает только по Shift+F3 при заполненном QuickSearch. |
|
Back to top |
|
 |
WhiteWind
Joined: 17 Jul 2006 Posts: 19
|
(Separately) Posted: Fri Jul 28, 2006 10:43 Post subject: |
|
|
Позиция окна Setup где-то внизу - половина окна скрыта краем экрана.
2Lev:
РегЭксп для C/C++ не будет работать, вот поправленый вариант:
Code: | ([A-Za-z]+)\s+([A-Za-z_][A-Za-z0-9_:]*)(\([^)]*\)) |
Мой РегЭксп для Паскаля:
Code: | (function|procedure)\s+([a-z_]+[a-z_0-9\.]+)\s*?(\([^\)]*?\))?\s*?(\:\s*?[0-9a-z]+)?\s*?\;?\s*?(\sbegin|\svar|\sconst|\stype|\{|//) |
|
|
Back to top |
|
 |
Lev

Joined: 02 Mar 2005 Posts: 392
|
(Separately) Posted: Fri Jul 28, 2006 19:11 Post subject: |
|
|
Quote: | РегЭксп для C/C++ не будет работать | угу, я их кинул, чтобы было от чего оттолкнуться.
попробовал использовать несохраняющие скобки (?:...), чтобы обойти проблему вторых скобок в определителе имени функции - в результате получаю ошибку, с дальнейшим закрытием тотала
образец вышибающего тотал регэкспа (для VB, VBS и т.п.):
Code: | ^(private|public|declare)?\s*(?:function|sub)\s*([A-Za-z]+[A-Za-z0-9_.]*\([^)]*\)) |
|
|
Back to top |
|
 |
sepa
Joined: 12 Jul 2006 Posts: 42
|
(Separately) Posted: Fri Jul 28, 2006 19:29 Post subject: |
|
|
Кто понимает о чем речь, и кому интересно дальнейшее развитие, выскажите свое мнение здесь _________________ Syn |
|
Back to top |
|
 |
Митяй

Joined: 05 Oct 2005 Posts: 102 Location: Москва
|
(Separately) Posted: Mon Jul 31, 2006 11:54 Post subject: |
|
|
Более точный код для функций и переменных в C++
Code: | FunctionDetect=[A-Za-z]+\s+([A-Za-z_][A-Za-z0-9_]*::)?([A-Za-z_][A-Za-z0-9_]*)(\([^)]*\))
VariableDetect=([A-Za-z]+)\s+([A-Za-z_][A-Za-z0-9_]*)(\[[^\]+]\])?
|
|
|
Back to top |
|
 |
sepa
Joined: 12 Jul 2006 Posts: 42
|
(Separately) Posted: Mon Jul 31, 2006 22:18 Post subject: |
|
|
Залажали значит scintill'у ! =) А я уже успел набросать листер на ней с табами. Ну ладно, тогда будем апдейтить этот.
2KF-121
2. blabla*xxx равносилен запросу "xxx". В твоем тексте есть xxx? У меня все нормально ищет
3. Дак родной листер полный доступ имеет к данным. А плагин может знать только то что ему передали и все. Предложить конечно можно, но как то там не очень работа движется по изменению API в версии 7. Ничего кардинально Гислер не решил менять.
4. ну я так и думал, но пока что CodeExplorer примитивный и там попап тот же что и на всех меню
7. я сам именно этой фишкой и пользуюсь а не Tab, Shift-Tab и все пашет вроде нормально. У кого нибудь еще Ctrl-Shift-U,I не работает?
9. нашел, теперь не падает.
10. работает?
Quote: | А как прикрутить эти разборы функций к разным подсветкам? |
так же как и раньше через опции (F9) или напрямую через дизайнер подсветок.
1. поподробней. просто мышку задержать над EditBox ?
2. почитай внимательней то, что я выше писал про создание DetectStrings. Он совершенно правильно выводит содержимое второй скобки.
Quote: | Хотелось бы завести поле для имени функции, типа:FunctionName=$3 |
Да но хотелось бы стандартизации общей. Каков твой случай, может его можно обойти по другому?
Quote: | В листере прямой поиск далее - F3 или F5, обратный поиск - Shift+F3 или Shift+F5. |
наконец понял о чем речь, буду фиксить
Quote: | Позиция окна Setup где-то внизу - половина окна скрыта краем экрана. |
поправил, теперь будет по центру окна плагина.
Спасибо за тесты регекспов. Охота их уже утвердить и засунуть в подсветки дистрибутива, для тех людей которые не умеют их писать. Забыл упомянуть что поиск идет с модификаторами I, M. Так что можно не использовать [A-Za-z] а просто [a-z], так же ^ значит начало текста/строки. Предварительные результаты:
Apache
FunctionDetect=(\<IfModule)\s+([a-z0-9_\.]+)\>
Cpp
FunctionDetect=[a-z]+\s+([a-z_][a-z0-9_]*: ?([a-z_][a-z0-9_]*)(\([^)]*\))
VariableDetect=([a-z]+)\s+([a-z_][a-z0-9_]*)(\[[^\]+]\])?
CSS
FunctionDetect=(.*?)([a-z0-9\.\, \:]+)\{
Delphi
FunctionDetect=(function|procedure)\s+([a-z_]+[a-z_0-9\.]+)\s*?(\([^\)]*?\))?\s*?(\:\s*?[0-9a-z]+)?\s*?\;?\s*?(\sbegin|\svar|\sconst|\stype|\{|//)
INI, Reg, Txt
FunctionDetect=(^)(\[[^\[\]]+\])\s
Java,Perl, VB
(function|sub)\s*?([a-z]+[a-z0-9_.]*?)\s*?(\([^)]\))?\s*?\{
JavaScript
FunctionDetect=(function)\s+([a-z_]+[a-z_0-9]+)\s*?(\([^\)]*?\))?\s\;?\s*?\{
PHP
FunctionDetect=(function)\s+([a-z_]+[a-z_0-9]+)\;?\s*?(\([^\)]*?\))?\s*?\{
VariableDetect=([^\$])(\$[a-z_]+[0-9a-z_]+)(\[[^\]\$]+\])?
Quote: | образец вышибающего тотал регэкспа (для VB, VBS и т.п.): | в приведеном тобой примере первые скобки не обязательны, соответственно проблема вторых скобок не стоит. "?" - значит что может быть, а может и НЕ быть. По поводу того что тотал падал, я наконец разобрался как ошибку перехватить в регекспе. Теперь будет окошко ошибки показывать. _________________ Syn |
|
Back to top |
|
 |
Митяй

Joined: 05 Oct 2005 Posts: 102 Location: Москва
|
(Separately) Posted: Tue Aug 01, 2006 11:29 Post subject: |
|
|
2sepa
Поставь RegExp`ы в [code], а то для C++ посередине строки смайлик  |
|
Back to top |
|
 |
Митяй

Joined: 05 Oct 2005 Posts: 102 Location: Москва
|
(Separately) Posted: Tue Aug 01, 2006 11:49 Post subject: |
|
|
Ещё более правильный код для C++:
Code: | FunctionDetect=^\s*[a-z_][a-z0-9_]+\s+([a-z_][a-z0-9_]*::)?~?([a-z_][a-z0-9_]*)(\([^)]*\)) |
Недостатки:
Код не распознаёт конструкторы и деструкторы:
Code: | TClass::TClass()
TClass::~TClass()
|
Добавляет function() если стоит код
Code: | if(i==0)
...
else
function(); |
Считает функцией конструкцию
В последнем случае слово function() добавляется в список столько раз, сколько раз был вызван return.
2sepa
Пускай одинаковые функции добавляются в список только 1 раз. |
|
Back to top |
|
 |
Борис
Joined: 13 Jul 2006 Posts: 10
|
(Separately) Posted: Tue Aug 01, 2006 15:30 Post subject: |
|
|
В файле Cpp.hgl ЕСТЬ Фрагмент
Code: |
<CustomData>
<Entry Name="CommentBlockStart" Value="/*"/>
<Entry Name="CommentBlockMid" Value="# "/>
<Entry Name="CommentBlockEnd" Value="*/"/>
<Entry Name="FunctionDetect" Value="FunctionDetect=^\s*[a-z_][a-z0-9_]+\s+([a-z_][a-z0-9_]*::)?~?([a-z_][a-z0-9_]*)(\([^)]*\))"/>
<Entry Name="VariableDetect" Value="VariableDetect=([a-z]+)\s+([a-z_][a-z0-9_]*)(\[[^\]+]\])?"/>
</CustomData>
|
а в CodeExplorer - функций ноль, переменных ноль. Как лечить? |
|
Back to top |
|
 |
Митяй

Joined: 05 Oct 2005 Posts: 102 Location: Москва
|
(Separately) Posted: Tue Aug 01, 2006 16:23 Post subject: |
|
|
2Борис
У меня по этим регэкспам всё находит. Ты другие пробовал?
А может у тебя просто имена функций не подходят под этот код. Определяются только те функции, которые объявлены и объявление должно стоять в начале строки. Например так:
|
|
Back to top |
|
 |
Борис
Joined: 13 Jul 2006 Posts: 10
|
(Separately) Posted: Tue Aug 01, 2006 16:31 Post subject: |
|
|
2Митяй
Например, есть у меня
Code: |
void CSortStringArray::Sort()
{
BOOL bNotDone = TRUE;
while(bNotDone)
{
bNotDone = FALSE;
for(INT pos = 0; pos < GetUpperBound(); pos++)
bNotDone |= CompareAndSwap(pos);
}
}
|
Вот тут и не находит |
|
Back to top |
|
 |
Митяй

Joined: 05 Oct 2005 Posts: 102 Location: Москва
|
(Separately) Posted: Tue Aug 01, 2006 16:35 Post subject: |
|
|
Понял. Неправильно. Правильно так:
Code: | <CustomData>
<Entry Name="CommentBlockStart" Value="/*"/>
<Entry Name="CommentBlockMid" Value="# "/>
<Entry Name="CommentBlockEnd" Value="*/"/>
<Entry Name="FunctionDetect" Value="^\s*[a-z_][a-z0-9_]+\s+([a-z_][a-z0-9_]*::)?~?([a-z_][a-z0-9_]*)(\([^)]*\))"/>
<Entry Name="VariableDetect" Value="([a-z]+)\s+([a-z_][a-z0-9_]*)(\[[^\]+]\])?"/>
</CustomData> |
"FunctionDetect=" в значение поля вписывать не надо. |
|
Back to top |
|
 |
Lev

Joined: 02 Mar 2005 Posts: 392
|
(Separately) Posted: Tue Aug 01, 2006 16:43 Post subject: |
|
|
Quote: | Java,Perl, VB
(function|sub)\s*?([a-z]+[a-z0-9_.]*?)\s*?(\([^)]\))?\s*?\{ |
ну и зачем Basic'у фигурные скобки?
мало того, что за подсветку для vbs выдаётся какая-то java подсветка реагирующая на расширение js, так теперь и новые стандарты языка пошли
Quote: | "?" - значит что может быть, а может и НЕ быть |
(?: ) - это группирующие несохраняющие скобки, номер им не присваивается и вторыми скобками в моём примере считаются скобки идущие за ними
Last edited by Lev on Tue Aug 01, 2006 17:10; edited 2 times in total |
|
Back to top |
|
 |
|