| 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 |  | 
	
		|  | 
	
		|  |