1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73
|
/***************************************************************
* Name: TextFileSearcherText
* Purpose: TextFileSearcherText is used to search text files
* for text pattern.
* Author: Jerome ANTOINE
* Created: 2007-04-07
* Copyright: Jerome ANTOINE
* License: GPL
**************************************************************/
#include "TextFileSearcherText.h"
TextFileSearcherText::TextFileSearcherText(const wxString& searchText, bool matchCase, bool matchWordBegin,
bool matchWord)
:TextFileSearcher(searchText, matchCase, matchWordBegin, matchWord)
{
if ( matchCase == false )
{
m_SearchText.LowerCase();
}
}
bool TextFileSearcherText::MatchLine(wxString line)
{
bool match = false;
if ( m_MatchCase == false )
{
line.LowerCase();
}
int pos = line.Find(m_SearchText.c_str());
int nextPos;
while ( (match == false) && (pos >= 0) )
{
char c = ' '; // c is either the preceeding char or a virtual char
// that matches systematically the required conditions
match = true; // pos > 0 => expr found => Matches. Let's test start word
// and whole words conditions.
if ( (m_MatchWordBegin == true) || (m_MatchWord == true) )
{
if ( pos > 0 )
{
c = line.GetChar(pos - 1);
}
//match = (__iscsym(c) == 0);
match = !(isalnum(c) || ( c == '_' ));
}
if ( (match == true) && (m_MatchWord == true) )
{
c = ' ';
if ( (pos + m_SearchText.Length()) < line.Length() )
{
c = line.GetChar(pos + m_SearchText.Length());
}
match = !(isalnum(c) || ( c == '_' ));
}
nextPos = line.Mid(pos+1).Find(m_SearchText.c_str());
if ( nextPos >= 0 )
{
pos += nextPos + 1;
}
else
{
pos = -1;
}
}
return match;
}
|