From e96e638f19a89554db339d4db8a0fec322ec080f Mon Sep 17 00:00:00 2001 From: villa Date: Mon, 10 Jun 1996 08:06:06 +0000 Subject: [PATCH] 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 --- include/bagn005.h | 1 + include/bagn005.uml | 7 ++++++- include/text.cpp | 18 ++++++++++++++---- include/text.h | 3 ++- include/viswin.cpp | 12 ++++++++---- include/viswin.h | 3 ++- 6 files changed, 33 insertions(+), 11 deletions(-) diff --git a/include/bagn005.h b/include/bagn005.h index d0f189125..60676a707 100755 --- a/include/bagn005.h +++ b/include/bagn005.h @@ -1,3 +1,4 @@ #define F_STRING 101 #define F_DIRECT 102 +#define F_REGEXP 104 #define F_CASE 103 \ No newline at end of file diff --git a/include/bagn005.uml b/include/bagn005.uml index 31386fa5f..f439732ca 100755 --- a/include/bagn005.uml +++ b/include/bagn005.uml @@ -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 diff --git a/include/text.cpp b/include/text.cpp index 6ef34b1d0..18af04cd2 100755 --- a/include/text.cpp +++ b/include/text.cpp @@ -2,6 +2,7 @@ #include #include +#include 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,9 +438,17 @@ long TTextfile::search( for (long i = from; down ? (i < lines()) : (i >= 0); down ? i++ : i--) { lin = line(i); - if (!casesens) lin.lower(); - if ((ret = lin.find(text)) != -1) - return i; + if (regexp) + { + if (match(txt, lin)) + return i; + } + else + { + if (!casesens) lin.lower(); + if ((ret = lin.find(text)) != -1) + return i; + } } return -1l; } diff --git a/include/text.h b/include/text.h index ed9723878..5f1910fdf 100755 --- a/include/text.h +++ b/include/text.h @@ -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); diff --git a/include/viswin.cpp b/include/viswin.cpp index f2e642b6c..2f3e27fc0 100755 --- a/include/viswin.cpp +++ b/include/viswin.cpp @@ -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 @@ -2411,10 +2412,13 @@ void TViswin::find() { _txt_to_find = m.get(F_STRING); _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; - 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; diff --git a/include/viswin.h b/include/viswin.h index e2d5d4ca9..d4ac625bc 100755 --- a/include/viswin.h +++ b/include/viswin.h @@ -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);