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:
villa 1996-06-10 08:06:06 +00:00
parent 84b7a30800
commit e96e638f19
6 changed files with 33 additions and 11 deletions

View File

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

View File

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

View File

@ -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,9 +438,17 @@ 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 (!casesens) lin.lower(); if (regexp)
if ((ret = lin.find(text)) != -1) {
return i; if (match(txt, lin))
return i;
}
else
{
if (!casesens) lin.lower();
if ((ret = lin.find(text)) != -1)
return i;
}
} }
return -1l; return -1l;
} }

View File

@ -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);

View File

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

View File

@ -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);