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_DIRECT 102
#define F_REGEXP 104
#define F_CASE 103

View File

@ -17,7 +17,12 @@ END
BOOLEAN F_CASE
BEGIN
PROMPT 36 2 "Maiuscolo/Minuscolo"
PROMPT 2 2 "Maiuscolo/Minuscolo"
END
BOOLEAN F_REGEXP
BEGIN
PROMPT 36 2 "Espress. regolare"
END
BUTTON DLG_OK 10 2

View File

@ -2,6 +2,7 @@
#include <text.h>
#include <xvtility.h>
#include <regexp.h>
static char TEXT_TMP[513];
@ -425,7 +426,8 @@ long TTextfile::search(
//
// @flag TRUE | Ricerca dalla posizione indicata all'inizio della riga (default)
// @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
{
@ -436,10 +438,18 @@ long TTextfile::search(
for (long i = from; down ? (i < lines()) : (i >= 0); down ? i++ : i--)
{
lin = line(i);
if (regexp)
{
if (match(txt, lin))
return i;
}
else
{
if (!casesens) lin.lower();
if ((ret = lin.find(text)) != -1)
return i;
}
}
return -1l;
}

View File

@ -180,7 +180,8 @@ public:
void destroy();
// @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
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 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
@ -2412,9 +2413,12 @@ void TViswin::find()
_txt_to_find = m.get(F_STRING);
_down_dir = m.get(F_DIRECT) == "D";
_case_sensitive = m.get_bool(F_CASE);
_regexp = m.get_bool(F_REGEXP);
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)
{
_last_found.y = -1l;

View File

@ -316,7 +316,8 @@ public:
void add_line(const char* l);
// @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
int replace(long line, const char* txt, int pos = 0, int len = -1);