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