diff options
Diffstat (limited to 'plugins')
| -rw-r--r-- | plugins/SmileyAdd/src/regexp/WCMatcher.cpp | 27 | ||||
| -rw-r--r-- | plugins/SmileyAdd/src/regexp/WCPattern.cpp | 351 | 
2 files changed, 158 insertions, 220 deletions
| diff --git a/plugins/SmileyAdd/src/regexp/WCMatcher.cpp b/plugins/SmileyAdd/src/regexp/WCMatcher.cpp index 354c474bdd..8311c039ef 100644 --- a/plugins/SmileyAdd/src/regexp/WCMatcher.cpp +++ b/plugins/SmileyAdd/src/regexp/WCMatcher.cpp @@ -47,13 +47,11 @@ void WCMatcher::clearGroups()  }
  CMString WCMatcher::replaceWithGroups(const CMString & str)
  {
 -	CMString ret = L"";
 +	CMString ret;
  	CMString t = str;
 -	while (t.GetLength() > 0)
 -	{
 -		if (t[0] == '\\')
 -		{
 +	while (t.GetLength() > 0) {
 +		if (t[0] == '\\') {
  			t.Delete(0);
  			if (t.GetLength() == 0)
  				ret += L"\\";
 @@ -94,7 +92,7 @@ bool WCMatcher::matches()  	matchedSomething = false;
  	clearGroups();
  	lm = 0;
 -	return pat->head->match(*str, this, 0) == (int)str->GetLength();
 +	return pat->head->match(*str, this, 0) == str->GetLength();
  }
  bool WCMatcher::findFirstMatch()
 @@ -105,8 +103,7 @@ bool WCMatcher::findFirstMatch()  	start = 0;
  	lm = 0;
  	ends[0] = pat->head->match(*str, this, 0);
 -	if (ends[0] >= 0)
 -	{
 +	if (ends[0] >= 0) {
  		matchedSomething = true;
  		return 1;
  	}
 @@ -123,7 +120,7 @@ bool WCMatcher::findNextMatch()  	clearGroups();
  	starts[0] = e;
 -	if (e >= (int)str->GetLength()) return 0;
 +	if (e >= str->GetLength()) return 0;
  	start = e;
  	lm = e;
  	ends[0] = pat->head->match(*str, this, e);
 @@ -135,9 +132,8 @@ std::vector<CMString> WCMatcher::findAll()  	std::vector<CMString> ret;
  	reset();
  	while (findNextMatch())
 -	{
  		ret.push_back(getGroup());
 -	}
 +
  	return ret;
  }
 @@ -150,13 +146,15 @@ void WCMatcher::reset()  int WCMatcher::getStartingIndex(const int groupNum) const
  {
 -	if (groupNum < 0 || groupNum >= gc) return -1;
 +	if (groupNum < 0 || groupNum >= gc)
 +		return -1;
  	return starts[groupNum];
  }
  int WCMatcher::getEndingIndex(const int groupNum) const
  {
 -	if (groupNum < 0 || groupNum >= gc) return -1;
 +	if (groupNum < 0 || groupNum >= gc)
 +		return -1;
  	return ends[groupNum];
  }
 @@ -169,10 +167,9 @@ CMString WCMatcher::getGroup(const int groupNum) const  std::vector<CMString> WCMatcher::getGroups(const bool includeGroupZero) const
  {
 -	int i, start = (includeGroupZero ? 0 : 1);
  	std::vector<CMString> ret;
 -	for (i = start; i < gc; ++i)
 +	for (int i = (includeGroupZero ? 0 : 1); i < gc; ++i)
  		ret.push_back(getGroup(i));
  	return ret;
 diff --git a/plugins/SmileyAdd/src/regexp/WCPattern.cpp b/plugins/SmileyAdd/src/regexp/WCPattern.cpp index c6d3d500f9..15ea5d5149 100644 --- a/plugins/SmileyAdd/src/regexp/WCPattern.cpp +++ b/plugins/SmileyAdd/src/regexp/WCPattern.cpp @@ -283,28 +283,21 @@ NFAUNode * WCPattern::quantify(NFAUNode * newNode)  }
  CMString WCPattern::parseClass()
  {
 -	CMString t, ret = L"";
 +	CMString t, ret;
  	wchar_t ch, c1, c2;
  	bool inv = 0, neg = 0, quo = 0;
 -	if (curInd < pattern.GetLength() && pattern[curInd] == '^')
 -	{
 +	if (curInd < pattern.GetLength() && pattern[curInd] == '^') {
  		++curInd;
  		neg = 1;
  	}
 -	while (curInd < pattern.GetLength() && pattern[curInd] != ']')
 -	{
 +
 +	while (curInd < pattern.GetLength() && pattern[curInd] != ']') {
  		ch = pattern[curInd++];
 -		if (ch == '[')
 -		{
 +		if (ch == '[') {
  			t = parseClass();
  			ret = classUnion(ret, t);
  		}
 -		/*else if (ch == '-')
 -		{
 -		raiseError();
 -		curInd = pattern.GetLength();
 -		}*/
  		else if (ch == '&' && curInd < pattern.GetLength() && pattern[curInd] == '&') {
  			if (pattern[++curInd] != '[') {
  				raiseError();
 @@ -316,8 +309,7 @@ CMString WCPattern::parseClass()  				ret = classIntersect(ret, t);
  			}
  		}
 -		else if (ch == '\\')
 -		{
 +		else if (ch == '\\') {
  			t = parseEscape(inv, quo);
  			if (quo) {
  				raiseError();
 @@ -333,74 +325,60 @@ CMString WCPattern::parseClass()  				if (curInd >= pattern.GetLength()) raiseError();
  				else {
  					c2 = pattern[curInd++];
 -					if (c2 == '\\')
 -					{
 +					if (c2 == '\\') {
  						t = parseEscape(inv, quo);
 -						if (quo)
 -						{
 +						if (quo) {
  							raiseError();
  							curInd = pattern.GetLength();
  						}
  						else if (inv || t.GetLength() > 1) raiseError();
  						else ret = classUnion(ret, classCreateRange(c1, c2));
  					}
 -					else if (c2 == '[' || c2 == ']' || c2 == '-' || c2 == '&')
 -					{
 +					else if (c2 == '[' || c2 == ']' || c2 == '-' || c2 == '&') {
  						raiseError();
  						curInd = pattern.GetLength();
  					}
  					else ret = classUnion(ret, classCreateRange(c1, c2));
  				}
  			}
 -			else
 -			{
 -				ret = classUnion(ret, t);
 -			}
 +			else ret = classUnion(ret, t);
  		}
 -		else if (curInd < pattern.GetLength() && pattern[curInd] == '-')
 -		{
 +		else if (curInd < pattern.GetLength() && pattern[curInd] == '-') {
  			c1 = ch;
  			++curInd;
  			if (curInd >= pattern.GetLength()) raiseError();
 -			else
 -			{
 +			else {
  				c2 = pattern[curInd++];
 -				if (c2 == '\\')
 -				{
 +				if (c2 == '\\') {
  					t = parseEscape(inv, quo);
 -					if (quo)
 -					{
 +					if (quo) {
  						raiseError();
  						curInd = pattern.GetLength();
  					}
  					else if (inv || t.GetLength() > 1) raiseError();
  					else ret = classUnion(ret, classCreateRange(c1, c2));
  				}
 -				else if (c2 == '[' || c2 == ']' || c2 == '-' || c2 == '&')
 -				{
 +				else if (c2 == '[' || c2 == ']' || c2 == '-' || c2 == '&') {
  					raiseError();
  					curInd = pattern.GetLength();
  				}
 -				else
 -				{
 -					ret = classUnion(ret, classCreateRange(c1, c2));
 -				}
 +				else ret = classUnion(ret, classCreateRange(c1, c2));
  			}
  		}
  		else ret.AppendChar(ch);
  	}
 -	if (curInd >= pattern.GetLength() || pattern[curInd] != ']')
 -	{
 +
 +	if (curInd >= pattern.GetLength() || pattern[curInd] != ']') {
  		raiseError();
  		ret = L"";
  	}
 -	else
 -	{
 +	else {
  		++curInd;
  		if (neg) ret = classNegate(ret);
  	}
  	return ret;
  }
 +
  CMString WCPattern::parsePosix()
  {
  	CMString s7 = pattern.Mid(curInd, 7);
 @@ -414,21 +392,15 @@ CMString WCPattern::parsePosix()  	if (s7 == L"{Print}") { curInd += 7; return L"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789!\"#$%&'()*+,-./:;<=>?@[\\]^_`{|}~"; }
  	if (s7 == L"{Blank}") { curInd += 7; return L" \t"; }
  	if (s7 == L"{Space}") { curInd += 7; return L" \t\n\x0B\f\r"; }
 -	if (s7 == L"{Cntrl}")
 -	{
 -		TCHAR i;
 -		CMString s = L" ";
 -
 -		for (i = 0; i < 5; ++i) s += s;
 -		s += L" ";
 -		for (i = 0; i <= 0x1F; ++i)
 +	if (s7 == L"{Cntrl}") {
 +		CMString s(' ', 32+1);
 +		for (int i = 0; i <= 0x1F; ++i)
  			s.SetAt(i, i);
  		s.SetAt(0x20, 0x7F);
  		curInd += 7;
  		return s;
  	}
 -	if (s7 == L"{ASCII}")
 -	{
 +	if (s7 == L"{ASCII}") {
  		CMString s(' ', 0x80);
  		for (int i = 0; i <= 0x7f; ++i) s.SetAt(i, i);
  		curInd += 7;
 @@ -445,18 +417,15 @@ NFAUNode * WCPattern::parseBackref()  	int ci = curInd;
  	int oldRef = 0, ref = 0;
 -	while (ci < pattern.GetLength() && is_dig(pattern[ci]) && (ref < 10 || ref < groupCount))
 -	{
 +	while (ci < pattern.GetLength() && is_dig(pattern[ci]) && (ref < 10 || ref < groupCount)) {
  		oldRef = ref;
  		ref = ref * 10 + to_int(pattern[ci++]);
  	}
 -	if (ci == pattern.GetLength())
 -	{
 +	if (ci == pattern.GetLength()) {
  		oldRef = ref;
  		++ci;
  	}
 -	if (oldRef < 0 || ci <= curInd)
 -	{
 +	if (oldRef < 0 || ci <= curInd) {
  		raiseError();
  		return registerNode(new NFAReferenceUNode(-1));
  	}
 @@ -510,14 +479,12 @@ CMString WCPattern::parseHex()  	wchar_t ch4 = (ci + 3 < pattern.GetLength()) ? pattern[ci + 3] : USHRT_MAX;
  	CMString s = L" ";
 -	if (is_hex(ch1) && is_hex(ch2) && is_hex(ch3) && is_hex(ch4))
 -	{
 +	if (is_hex(ch1) && is_hex(ch2) && is_hex(ch3) && is_hex(ch4)) {
  		curInd += 2;
  		s.SetAt(0, (to_int(ch1) << 12 & 0xF000) | (to_int(ch2) << 8 & 0x0F00) |
  			(to_int(ch3) << 4 & 0x0F00) | (to_int(ch4) & 0x000F));
  	}
 -	else if (is_hex(ch1) && is_hex(ch2))
 -	{
 +	else if (is_hex(ch1) && is_hex(ch2)) {
  		curInd += 2;
  		s.SetAt(0, (to_int(ch1) << 4 & 0xF0) | (to_int(ch2) & 0x0F));
  	}
 @@ -568,7 +535,8 @@ CMString WCPattern::parseEscape(bool & inv, bool & quo)  	}
  	return classes;
  }
 -NFAUNode * WCPattern::parseRegisteredWCPattern(NFAUNode **end)
 +
 +NFAUNode* WCPattern::parseRegisteredWCPattern(NFAUNode **end)
  {
  	int i, j;
  	CMString s;
 @@ -576,25 +544,19 @@ NFAUNode * WCPattern::parseRegisteredWCPattern(NFAUNode **end)  	for (i = curInd; i < pattern.GetLength() && pattern[i] != '}'; ++i) {}
  	if (pattern[i] != '}') { raiseError(); return NULL; }
  	if (i == curInd + 1)   { raiseError(); return NULL; } // {}
 -	if (
 -		!(
 -		(pattern[curInd] >= 'a' && pattern[curInd] <= 'z') ||
 -		(pattern[curInd] >= 'A' && pattern[curInd] <= 'Z') ||
 -		(pattern[curInd] == '_')
 -		)
 -		)
 +	if ( !((pattern[curInd] >= 'a' && pattern[curInd] <= 'z') ||
 +		    (pattern[curInd] >= 'A' && pattern[curInd] <= 'Z') ||
 +		    (pattern[curInd] == '_')))
  	{
  		raiseError();
  		return NULL;
  	}
 -	for (j = curInd; !error && j < i; ++j)
 -	{
 -		if (
 -			!(
 -			(pattern[j] >= 'a' && pattern[j] <= 'z') ||
 -			(pattern[j] >= 'A' && pattern[j] <= 'Z') ||
 -			(pattern[j] >= '0' && pattern[j] <= '9') ||
 -			(pattern[j] == '_')))
 +
 +	for (j = curInd; !error && j < i; ++j) {
 +		if ( !((pattern[j] >= 'a' && pattern[j] <= 'z') ||
 +			    (pattern[j] >= 'A' && pattern[j] <= 'Z') ||
 +			    (pattern[j] >= '0' && pattern[j] <= '9') ||
 +			    (pattern[j] == '_')))
  		{
  			raiseError();
  			return NULL;
 @@ -602,8 +564,7 @@ NFAUNode * WCPattern::parseRegisteredWCPattern(NFAUNode **end)  	}
  	s = pattern.Mid(curInd, i - curInd);
  	if (registeredWCPatterns.find(s) == registeredWCPatterns.end()) raiseError();
 -	else
 -	{
 +	else {
  		unsigned long oflags = flags;
  		CMString op = pattern;
  		int ci = i + 1;
 @@ -625,16 +586,13 @@ NFAUNode * WCPattern::parseRegisteredWCPattern(NFAUNode **end)  // look behind should interpret everything as a literal (except \\) since the
  // pattern must have a concrete length
 -NFAUNode * WCPattern::parseBehind(const bool pos, NFAUNode ** end)
 +NFAUNode* WCPattern::parseBehind(const bool pos, NFAUNode ** end)
  {
 -	CMString t = L"";
 -	while (curInd < pattern.GetLength() && pattern[curInd] != ')')
 -	{
 +	CMString t;
 +	while (curInd < pattern.GetLength() && pattern[curInd] != ')') {
  		wchar_t ch = pattern[curInd++];
 -		if (ch == '\\')
 -		{
 -			if (curInd + 1 >= pattern.GetLength())
 -			{
 +		if (ch == '\\') {
 +			if (curInd + 1 >= pattern.GetLength()) {
  				raiseError();
  				return *end = registerNode(new NFACharUNode(' '));
  			}
 @@ -646,25 +604,22 @@ NFAUNode * WCPattern::parseBehind(const bool pos, NFAUNode ** end)  	else ++curInd;
  	return *end = registerNode(new NFALookBehindUNode(t, pos));
  }
 -NFAUNode * WCPattern::parseQuote()
 +
 +NFAUNode* WCPattern::parseQuote()
  {
  	bool done = 0;
 -	CMString s = L"";
 +	CMString s;
 -	while (!done)
 -	{
 -		if (curInd >= pattern.GetLength())
 -		{
 +	while (!done) {
 +		if (curInd >= pattern.GetLength()) {
  			raiseError();
  			done = 1;
  		}
 -		else if (pattern.Mid(curInd, 2) == L"\\E")
 -		{
 +		else if (pattern.Mid(curInd, 2) == L"\\E") {
  			curInd += 2;
  			done = 1;
  		}
 -		else if (pattern[curInd] == '\\')
 -		{
 +		else if (pattern[curInd] == '\\') {
  			s.AppendChar(pattern[++curInd]);
  			++curInd;
  		}
 @@ -682,10 +637,8 @@ NFAUNode * WCPattern::parse(const bool inParen, const bool inOr, NFAUNode ** end  	bool ahead = 0, pos = 0, noncap = 0, indep = 0;
  	unsigned long oldFlags = flags;
 -	if (inParen)
 -	{
 -		if (pattern[curInd] == '?')
 -		{
 +	if (inParen) {
 +		if (pattern[curInd] == '?') {
  			++curInd;
  			--groupCount;
  			if (pattern[curInd] == ':')   { noncap = 1; ++curInd;     grc = --nonCapGroupCount; }
 @@ -694,20 +647,15 @@ NFAUNode * WCPattern::parse(const bool inParen, const bool inOr, NFAUNode ** end  			else if (pattern.Mid(curInd, 2) == L"<=")  { curInd += 2;  return parseBehind(1, end); }
  			else if (pattern.Mid(curInd, 2) == L"<!")  { curInd += 2;  return parseBehind(0, end); }
  			else if (pattern[curInd] == '>')   { ++curInd;     indep = 1; }
 -			else
 -			{
 +			else {
  				bool negate = false, done = false;
 -				while (!done)
 -				{
 -					if (curInd >= pattern.GetLength())
 -					{
 +				while (!done) {
 +					if (curInd >= pattern.GetLength()) {
  						raiseError();
  						return NULL;
  					}
 -					else if (negate)
 -					{
 -						switch (pattern[curInd])
 -						{
 +					else if (negate) {
 +						switch (pattern[curInd]) {
  						case 'i': flags &= ~WCPattern::CASE_INSENSITIVE;   break;
  						case 'd': flags &= ~WCPattern::UNIX_LINE_MODE;     break;
  						case 'm': flags &= ~WCPattern::MULTILINE_MATCHING; break;
 @@ -718,13 +666,13 @@ NFAUNode * WCPattern::parse(const bool inParen, const bool inOr, NFAUNode ** end  							*end = registerNode(new NFALookBehindUNode(L"", true));
  							return *end;
  						case '-':
 -						default: raiseError(); return NULL;
 +						default:
 +							raiseError();
 +							return NULL;
  						}
  					}
 -					else
 -					{
 -						switch (pattern[curInd])
 -						{
 +					else {
 +						switch (pattern[curInd]) {
  						case 'i': flags |= WCPattern::CASE_INSENSITIVE;    break;
  						case 'd': flags |= WCPattern::UNIX_LINE_MODE;      break;
  						case 'm': flags |= WCPattern::MULTILINE_MATCHING;  break;
 @@ -735,7 +683,9 @@ NFAUNode * WCPattern::parse(const bool inParen, const bool inOr, NFAUNode ** end  							++curInd;
  							*end = registerNode(new NFALookBehindUNode(L"", true));
  							return *end;
 -						default:  raiseError(); return NULL;
 +						default:
 +							raiseError();
 +							return NULL;
  						}
  					}
  					++curInd;
 @@ -750,8 +700,8 @@ NFAUNode * WCPattern::parse(const bool inParen, const bool inOr, NFAUNode ** end  		else cur = start = registerNode(new NFAGroupHeadUNode(grc));
  	}
  	else cur = start = registerNode(new NFASubStartUNode);
 -	while (curInd < pattern.GetLength())
 -	{
 +
 +	while (curInd < pattern.GetLength()) {
  		wchar_t ch = pattern[curInd++];
  		next = NULL;
 @@ -846,33 +796,27 @@ NFAUNode * WCPattern::parse(const bool inParen, const bool inOr, NFAUNode ** end  			break;
  		case ')':
  			if (!inParen) raiseError();
 -			else if (inOr)
 -			{
 +			else if (inOr) {
  				--curInd;
  				cur = cur->next = registerNode(new NFAAcceptUNode);
  				flags = oldFlags;
  				return start;
  			}
 -			else
 -			{
 -				if (ahead)
 -				{
 +			else {
 +				if (ahead) {
  					cur = cur->next = registerNode(new NFAAcceptUNode);
  					flags = oldFlags;
  					return *end = registerNode(new NFALookAheadUNode(start, pos));
  				}
 -				else if (indep)
 -				{
 +				else if (indep) {
  					cur = cur->next = registerNode(new NFAAcceptUNode);
  					flags = oldFlags;
  					return *end = registerNode(new NFAPossessiveQuantifierUNode(this, start, 1, 1));
  				}
 -				else // capping or noncapping, it doesnt matter
 -				{
 +				else { // capping or noncapping, it doesnt matter
  					*end = cur = cur->next = registerNode(new NFAGroupTailUNode(grc));
  					next = quantifyGroup(start, *end, grc);
 -					if (next)
 -					{
 +					if (next) {
  						start = next;
  						*end = next->next;
  					}
 @@ -900,8 +844,7 @@ NFAUNode * WCPattern::parse(const bool inParen, const bool inOr, NFAUNode ** end  		if (next) cur = cur->next = quantify(next);
  	}
  	if (inParen) raiseError();
 -	else
 -	{
 +	else {
  		if (inOr) cur = cur->next = registerNode(new NFAAcceptUNode);
  		if (end) *end = cur;
  	}
 @@ -912,10 +855,10 @@ NFAUNode * WCPattern::parse(const bool inParen, const bool inOr, NFAUNode ** end  	return start;
  }
 -WCPattern * WCPattern::compile(const CMString & pattern, const unsigned long mode)
 +WCPattern* WCPattern::compile(const CMString & pattern, const unsigned long mode)
  {
 -	WCPattern * p = new WCPattern(pattern);
 -	NFAUNode * end;
 +	WCPattern *p = new WCPattern(pattern);
 +	NFAUNode *end;
  	p->flags = mode;
  	if ((mode & WCPattern::LITERAL) != 0) {
 @@ -948,7 +891,7 @@ WCPattern * WCPattern::compile(const CMString & pattern, const unsigned long mod  WCPattern * WCPattern::compileAndKeep(const CMString & pattern, const unsigned long mode)
  {
 -	WCPattern * ret = NULL;
 +	WCPattern *ret = NULL;
  	std::map<CMString, WCPattern*>::iterator it = compiledWCPatterns.find(pattern);
  	if (it != compiledWCPatterns.end())
  		ret = it->second;
 @@ -963,9 +906,8 @@ CMString WCPattern::replace(const CMString & pattern, const CMString & str,  	const CMString & replacementText, const unsigned long mode)
  {
  	CMString ret;
 -	WCPattern * p = WCPattern::compile(pattern, mode);
 -	if (p)
 -	{
 +	WCPattern *p = WCPattern::compile(pattern, mode);
 +	if (p) {
  		ret = p->replace(str, replacementText);
  		delete p;
  	}
 @@ -998,10 +940,8 @@ std::vector<CMString> WCPattern::findAll(const CMString & pattern, const CMStrin  bool WCPattern::matches(const CMString & pattern, const CMString & str, const unsigned long mode)
  {
  	bool ret = 0;
 -	WCPattern * p = compile(pattern, mode);
 -
 -	if (p)
 -	{
 +	WCPattern *p = compile(pattern, mode);
 +	if (p) {
  		ret = p->matches(str);
  		delete p;
  	}
 @@ -1011,8 +951,10 @@ bool WCPattern::matches(const CMString & pattern, const CMString & str, const un  bool WCPattern::registerWCPattern(const CMString & name, const CMString & pattern, const unsigned long mode)
  {
 -	WCPattern * p = WCPattern::compile(pattern, mode);
 -	if (!p) return 0;
 +	WCPattern *p = WCPattern::compile(pattern, mode);
 +	if (!p)
 +		return 0;
 +
  	WCPattern::registeredWCPatterns[name] = std::make_pair(pattern, mode);
  	delete p;
  	return 1;
 @@ -1022,6 +964,7 @@ void WCPattern::unregisterWCPatterns()  {
  	registeredWCPatterns.clear();
  }
 +
  void WCPattern::clearWCPatternCache()
  {
  	std::map<CMString, WCPattern*>::iterator it;
 @@ -1031,20 +974,18 @@ void WCPattern::clearWCPatternCache()  	compiledWCPatterns.clear();
  }
 -std::pair<CMString, int>  WCPattern::findNthMatch(const CMString & pattern, const CMString & str,
 +std::pair<CMString, int>  WCPattern::findNthMatch(const CMString &pattern, const CMString &str,
  	const int matchNum, const unsigned long mode)
  {
  	std::pair<CMString, int> ret;
  	WCPattern * p = WCPattern::compile(pattern, mode);
  	ret.second = -1;
 -	if (p)
 -	{
 +	if (p) {
  		int i = -1;
  		p->matcher->setString(str);
  		while (i < matchNum && p->matcher->findNextMatch()) { ++i; }
 -		if (i == matchNum && p->matcher->getStartingIndex() >= 0)
 -		{
 +		if (i == matchNum && p->matcher->getStartingIndex() >= 0) {
  			ret.first = p->matcher->getGroup(0);
  			ret.second = p->matcher->getStartingIndex();
  		}
 @@ -1056,22 +997,18 @@ std::pair<CMString, int>  WCPattern::findNthMatch(const CMString & pattern, cons  WCPattern::~WCPattern()
  {
 -	/*
 -	nodes.Empty();
 -	if (head) head->findAllNodes(nodes);
 -	*/
  	if (matcher) delete matcher;
  	for (std::map<NFAUNode*, bool>::iterator it = nodes.begin(); it != nodes.end(); ++it)
  		delete it->first;
  }
 +
  CMString WCPattern::replace(const CMString & str, const CMString & replacementText)
  {
  	int li = 0;
 -	CMString ret = L"";
 +	CMString ret;
  	matcher->setString(str);
 -	while (matcher->findNextMatch())
 -	{
 +	while (matcher->findNextMatch()) {
  		ret += str.Mid(li, matcher->getStartingIndex() - li);
  		ret += matcher->replaceWithGroups(replacementText);
  		li = matcher->getEndingIndex();
 @@ -1080,6 +1017,7 @@ CMString WCPattern::replace(const CMString & str, const CMString & replacementTe  	return ret;
  }
 +
  std::vector<CMString> WCPattern::split(const CMString & str, const bool keepEmptys, const unsigned long limit)
  {
  	unsigned long lim = (limit == 0 ? MAX_QMATCH : limit);
 @@ -1088,40 +1026,44 @@ std::vector<CMString> WCPattern::split(const CMString & str, const bool keepEmpt  	matcher->setString(str);
 -	while (matcher->findNextMatch() && ret.size() < lim)
 -	{
 +	while (matcher->findNextMatch() && ret.size() < lim) {
  		if (matcher->getStartingIndex() == 0 && keepEmptys) ret.push_back(L"");
 -		if ((matcher->getStartingIndex() != matcher->getEndingIndex()) || keepEmptys)
 -		{
 +		if ((matcher->getStartingIndex() != matcher->getEndingIndex()) || keepEmptys) {
  			if (li != matcher->getStartingIndex() || keepEmptys)
 -			{
  				ret.push_back(str.Mid(li, matcher->getStartingIndex() - li));
 -			}
 +
  			li = matcher->getEndingIndex();
  		}
  	}
 -	if (li < str.GetLength()) ret.push_back(str.Mid(li));
 +
 +	if (li < str.GetLength())
 +		ret.push_back(str.Mid(li));
  	return ret;
  }
 +
  std::vector<CMString> WCPattern::findAll(const CMString & str)
  {
  	matcher->setString(str);
  	return matcher->findAll();
  }
 +
  bool WCPattern::matches(const CMString & str)
  {
  	matcher->setString(str);
  	return matcher->matches();
  }
 +
  unsigned long WCPattern::getFlags() const
  {
  	return flags;
  }
 +
  CMString WCPattern::getWCPattern() const
  {
  	return pattern;
  }
 +
  WCMatcher * WCPattern::createWCMatcher(const CMString & str)
  {
  	return new WCMatcher(this, str);
 @@ -1166,21 +1108,21 @@ int NFAStartUNode::match(const CMString & str, WCMatcher * matcher, const int cu  	int ret = -1, ci = curInd;
  	matcher->starts[0] = curInd;
 -	if ((matcher->getFlags() & WCMatcher::MATCH_ENTIRE_STRING) == (unsigned int)WCMatcher::MATCH_ENTIRE_STRING)
 -	{
 -		if (curInd != 0)
 -		{
 +	if ((matcher->getFlags() & WCMatcher::MATCH_ENTIRE_STRING) == (unsigned int)WCMatcher::MATCH_ENTIRE_STRING) {
 +		if (curInd != 0) {
  			matcher->starts[0] = -1;
  			return -1;
  		}
  		return next->match(str, matcher, 0);
  	}
 -	while ((ret = next->match(str, matcher, ci)) == -1 && ci < str.GetLength())
 -	{
 +
 +	while ((ret = next->match(str, matcher, ci)) == -1 && ci < str.GetLength()) {
  		matcher->clearGroups();
  		matcher->starts[0] = ++ci;
  	}
 -	if (ret < 0) matcher->starts[0] = -1;
 +
 +	if (ret < 0)
 +		matcher->starts[0] = -1;
  	return ret;
  }
 @@ -1190,10 +1132,10 @@ NFAEndUNode::NFAEndUNode() { }  int NFAEndUNode::match(const CMString & str, WCMatcher * matcher, const int curInd) const
  {
  	matcher->ends[0] = curInd;
 -	if ((matcher->getFlags() & WCMatcher::MATCH_ENTIRE_STRING) != 0)
 -	{
 +	if ((matcher->getFlags() & WCMatcher::MATCH_ENTIRE_STRING) != 0) {
  		if (curInd == str.GetLength())
  			return curInd;
 +
  		matcher->ends[0] = -1;
  		return -1;
  	}
 @@ -1207,6 +1149,7 @@ void NFAQuantifierUNode::findAllNodes(std::map<NFAUNode*, bool> & soFar)  	inner->findAllNodes(soFar);
  	NFAUNode::findAllNodes(soFar);
  }
 +
  NFAQuantifierUNode::NFAQuantifierUNode(WCPattern * pat, NFAUNode * internal, const int minMatch, const int maxMatch)
  {
  	inner = internal;
 @@ -1220,9 +1163,7 @@ int NFAQuantifierUNode::match(const CMString & str, WCMatcher * matcher, const i  	int i0, i1, i2 = 0;
  	i0 = i1 = curInd;
 -	while (i2 < min)
 -	{
 -
 +	while (i2 < min) {
  		++i2;
  		i1 = inner->match(str, matcher, i0);
  		if (i1 <= i0) return i1; // i1 < i0 means i1 is -1
 @@ -1233,25 +1174,27 @@ int NFAQuantifierUNode::match(const CMString & str, WCMatcher * matcher, const i  }
  // NFAGreedyQuantifierUNode
 -NFAGreedyQuantifierUNode::NFAGreedyQuantifierUNode(WCPattern * pat, NFAUNode * internal, const int minMatch, const int maxMatch)
 -: NFAQuantifierUNode(pat, internal, minMatch, maxMatch) { }
 -int NFAGreedyQuantifierUNode::match(const CMString & str, WCMatcher * matcher, const int curInd) const
 +NFAGreedyQuantifierUNode::NFAGreedyQuantifierUNode(WCPattern *pat, NFAUNode *internal, const int minMatch, const int maxMatch) :
 +	NFAQuantifierUNode(pat, internal, minMatch, maxMatch)
 +{}
 +
 +int NFAGreedyQuantifierUNode::match(const CMString &str, WCMatcher *matcher, const int curInd) const
  {
  	int t = NFAQuantifierUNode::match(str, matcher, curInd);
  	if (t != -1) return matchInternal(str, matcher, t, min);
  	return t;
  }
 +
  int NFAGreedyQuantifierUNode::matchInternal(const CMString & str, WCMatcher * matcher, const int curInd, const int soFar) const
  {
 -	if (soFar >= max) return next->match(str, matcher, curInd);
 -
 -	int i, j;
 +	if (soFar >= max)
 +		return next->match(str, matcher, curInd);
 -	i = inner->match(str, matcher, curInd);
 -	if (i != -1)
 -	{
 -		j = matchInternal(str, matcher, i, soFar + 1);
 -		if (j != -1) return j;
 +	int i = inner->match(str, matcher, curInd);
 +	if (i != -1) {
 +		int j = matchInternal(str, matcher, i, soFar + 1);
 +		if (j != -1)
 +			return j;
  	}
  	return next->match(str, matcher, curInd);
  }
 @@ -1262,15 +1205,13 @@ NFALazyQuantifierUNode::NFALazyQuantifierUNode(WCPattern * pat, NFAUNode * inter  : NFAQuantifierUNode(pat, internal, minMatch, maxMatch) { }
  int NFALazyQuantifierUNode::match(const CMString & str, WCMatcher * matcher, const int curInd) const
  {
 -	int i, j, m = NFAQuantifierUNode::match(str, matcher, curInd);
 -
 -	if (m == -1) return -1;
 +	int m = NFAQuantifierUNode::match(str, matcher, curInd);
 +	if (m == -1)
 +		return -1;
 -	for (i = min; i < max; ++i)
 -	{
 -		j = next->match(str, matcher, m);
 -		if (j == -1)
 -		{
 +	for (int i = min; i < max; ++i) {
 +		int j = next->match(str, matcher, m);
 +		if (j == -1) {
  			j = inner->match(str, matcher, m);
  			// if j < m, then j is -1, so we bail.
  			// if j == m, then we would just go and call next->match on the same index,
 @@ -1290,13 +1231,14 @@ NFAPossessiveQuantifierUNode::NFAPossessiveQuantifierUNode(WCPattern * pat, NFAU  : NFAQuantifierUNode(pat, internal, minMatch, maxMatch) { }
  int NFAPossessiveQuantifierUNode::match(const CMString & str, WCMatcher * matcher, const int curInd) const
  {
 -	int i, j, m = NFAQuantifierUNode::match(str, matcher, curInd);
 +	int m = NFAQuantifierUNode::match(str, matcher, curInd);
 +	if (m == -1)
 +		return -1;
 -	if (m == -1) return -1;
 -	for (i = min; i < max; ++i)
 -	{
 -		j = inner->match(str, matcher, m);
 -		if (j <= m) return next->match(str, matcher, m);
 +	for (int i = min; i < max; ++i) {
 +		int j = inner->match(str, matcher, m);
 +		if (j <= m)
 +			return next->match(str, matcher, m);
  		m = j;
  	}
  	return next->match(str, matcher, m);
 @@ -1664,8 +1606,7 @@ int NFAGroupLoopUNode::matchPossessive(const CMString & str, WCMatcher * matcher  	matcher->groupIndeces[gi] = curInd;           // move along
  	++matcher->groups[gi];
  	int ret = inner->match(str, matcher, curInd); // try and match again
 -	if (ret < 0)
 -	{                                             // if we fail, back off, but to an extent
 +	if (ret < 0) {                                // if we fail, back off, but to an extent
  		--matcher->groups[gi];
  		matcher->groupIndeces[gi] = o;
  		if (matcher->groups[gi] == matcher->groupPos[gi]) ret = next->match(str, matcher, curInd);
 | 
