Aggiunta regexp alla ricerca nelle viswin-
Primo commit in diretta da Windows git-svn-id: svn://10.65.10.50/trunk@2979 c028cbd2-c16b-5b4b-a496-9718f37d4682
This commit is contained in:
		
							parent
							
								
									84b7a30800
								
							
						
					
					
						commit
						e96e638f19
					
				| @ -1,3 +1,4 @@ | |||||||
| #define F_STRING 101 | #define F_STRING 101 | ||||||
| #define F_DIRECT 102 | #define F_DIRECT 102 | ||||||
|  | #define F_REGEXP 104 | ||||||
| #define F_CASE   103 | #define F_CASE   103 | ||||||
| @ -17,7 +17,12 @@ END | |||||||
| 
 | 
 | ||||||
| BOOLEAN F_CASE | BOOLEAN F_CASE | ||||||
| BEGIN | BEGIN | ||||||
|   PROMPT 36 2 "Maiuscolo/Minuscolo" |   PROMPT 2 2 "Maiuscolo/Minuscolo" | ||||||
|  | END | ||||||
|  | 
 | ||||||
|  | BOOLEAN F_REGEXP | ||||||
|  | BEGIN | ||||||
|  |   PROMPT 36 2 "Espress. regolare" | ||||||
| END | END | ||||||
| 
 | 
 | ||||||
| BUTTON DLG_OK 10 2 | BUTTON DLG_OK 10 2 | ||||||
|  | |||||||
| @ -2,6 +2,7 @@ | |||||||
| 
 | 
 | ||||||
| #include <text.h> | #include <text.h> | ||||||
| #include <xvtility.h> | #include <xvtility.h> | ||||||
|  | #include <regexp.h> | ||||||
| 
 | 
 | ||||||
| static char TEXT_TMP[513]; | static char TEXT_TMP[513]; | ||||||
| 
 | 
 | ||||||
| @ -425,7 +426,8 @@ long TTextfile::search( | |||||||
|   //
 |   //
 | ||||||
|   // @flag TRUE | Ricerca dalla posizione indicata all'inizio della riga (default)
 |   // @flag TRUE | Ricerca dalla posizione indicata all'inizio della riga (default)
 | ||||||
|   // @flag FALSE | Ricerca dalla posizione indicata alla fine della riga
 |   // @flag FALSE | Ricerca dalla posizione indicata alla fine della riga
 | ||||||
|   bool casesens)        // @parm Indica se ricerca il testo con criterio case sensitive (default FALSE)
 |   bool casesens,        // @parm Indica se ricerca il testo con criterio case sensitive (default FALSE)
 | ||||||
|  |   bool regexp)          // @parm indica se considerare la stringa un'espressione regolare (def. FALSE)
 | ||||||
| 
 | 
 | ||||||
|   // @comm Cerca in una riga per volta rispettando i formati
 |   // @comm Cerca in una riga per volta rispettando i formati
 | ||||||
| {                         | {                         | ||||||
| @ -436,10 +438,18 @@ long TTextfile::search( | |||||||
|   for (long i = from; down ? (i < lines()) : (i >= 0); down ? i++ : i--) |   for (long i = from; down ? (i < lines()) : (i >= 0); down ? i++ : i--) | ||||||
|   {               |   {               | ||||||
|     lin = line(i);   |     lin = line(i);   | ||||||
|  |     if (regexp)  | ||||||
|  |     {  | ||||||
|  |       if (match(txt, lin)) | ||||||
|  |         return i;  | ||||||
|  |     } | ||||||
|  |     else | ||||||
|  |     { | ||||||
|       if (!casesens) lin.lower(); |       if (!casesens) lin.lower(); | ||||||
|       if ((ret = lin.find(text)) != -1) |       if ((ret = lin.find(text)) != -1) | ||||||
|         return i; |         return i; | ||||||
|     } |     } | ||||||
|  |   }      | ||||||
|   return -1l; |   return -1l; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | |||||||
| @ -180,7 +180,8 @@ public: | |||||||
|   void destroy();  |   void destroy();  | ||||||
| 
 | 
 | ||||||
|   // @cmember Cerca una stringa di testo all'interno di una riga
 |   // @cmember Cerca una stringa di testo all'interno di una riga
 | ||||||
|   long search (const char* txt, int& pos, long from = 0, bool down = TRUE, bool casesens = FALSE); |   long search (const char* txt, int& pos, long from = 0, bool down = TRUE,  | ||||||
|  |                bool casesens = FALSE, bool regexp = FALSE); | ||||||
|   // @cmember Sostituisce un testo all'interno di una riga
 |   // @cmember Sostituisce un testo all'interno di una riga
 | ||||||
|   int replace(long line, const char* txt, int pos = 0, int len = -1); |   int replace(long line, const char* txt, int pos = 0, int len = -1); | ||||||
| 
 | 
 | ||||||
|  | |||||||
| @ -2371,9 +2371,10 @@ long TViswin::search( | |||||||
|   //
 |   //
 | ||||||
|   // @flag TRUE | Ricerca dalla posizione indicata all'inizio della riga (default)
 |   // @flag TRUE | Ricerca dalla posizione indicata all'inizio della riga (default)
 | ||||||
|   // @flag FALSE | Ricerca dalla posizione indicata alla fine della riga
 |   // @flag FALSE | Ricerca dalla posizione indicata alla fine della riga
 | ||||||
|   bool cs)              // @parm Indica se ricerca il testo con criterio case sensitive (default FALSE)
 |   bool cs,              // @parm Indica se ricerca il testo con criterio case sensitive (default FALSE)      
 | ||||||
|  |   bool regx)            // @parm indica se considerare espressioni regolari (def FALSE)
 | ||||||
| { | { | ||||||
|   return _txt.search(txt,pos,from,down, cs);                         |   return _txt.search(txt,pos,from,down, cs, regx);                         | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| // @doc INTERNAL
 | // @doc INTERNAL
 | ||||||
| @ -2412,9 +2413,12 @@ void TViswin::find() | |||||||
|     _txt_to_find    = m.get(F_STRING); |     _txt_to_find    = m.get(F_STRING); | ||||||
|     _down_dir       = m.get(F_DIRECT) == "D"; |     _down_dir       = m.get(F_DIRECT) == "D"; | ||||||
|     _case_sensitive = m.get_bool(F_CASE);   |     _case_sensitive = m.get_bool(F_CASE);   | ||||||
|  |     _regexp         = m.get_bool(F_REGEXP); | ||||||
|  |      | ||||||
|     int x;  |     int x;  | ||||||
|      |      | ||||||
|     long l = search(_txt_to_find, x, _point.y, _down_dir, _case_sensitive); |     long l = search(_txt_to_find, x, _point.y, _down_dir, _case_sensitive, | ||||||
|  |                     _regexp); | ||||||
|     if (l == -1l) |     if (l == -1l) | ||||||
|     {  |     {  | ||||||
|       _last_found.y = -1l; |       _last_found.y = -1l; | ||||||
|  | |||||||
| @ -316,7 +316,8 @@ public: | |||||||
|   void add_line(const char* l);                                        |   void add_line(const char* l);                                        | ||||||
|    |    | ||||||
|   // @cmember Funzione di ricerca non interattiva
 |   // @cmember Funzione di ricerca non interattiva
 | ||||||
|   long search (const char* txt,  int& pos, long from = 0, bool down = TRUE, bool casesens = FALSE); |   long search (const char* txt,  int& pos, long from = 0, bool down = TRUE,  | ||||||
|  |                bool casesens = FALSE, bool regx = FALSE); | ||||||
|   // @cmember Funzione di sostituzione di un testo all'interno di una riga non interattiva
 |   // @cmember Funzione di sostituzione di un testo all'interno di una riga non interattiva
 | ||||||
|   int replace(long line, const char* txt, int pos = 0, int len = -1); |   int replace(long line, const char* txt, int pos = 0, int len = -1); | ||||||
| 
 | 
 | ||||||
|  | |||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user