textandlocutils/numbergrouping/src/RegularExpression.cpp
author hgs
Thu, 24 Jun 2010 11:25:56 +0800
changeset 41 ea44a32a96bc
parent 40 91ef7621b7fc
permissions -rw-r--r--
201024_03
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
40
91ef7621b7fc 201019_08
hgs
parents:
diff changeset
     1
/*
91ef7621b7fc 201019_08
hgs
parents:
diff changeset
     2
* Copyright (c) 2002 Nokia Corporation and/or its subsidiary(-ies).
91ef7621b7fc 201019_08
hgs
parents:
diff changeset
     3
* All rights reserved.
91ef7621b7fc 201019_08
hgs
parents:
diff changeset
     4
* This component and the accompanying materials are made available
91ef7621b7fc 201019_08
hgs
parents:
diff changeset
     5
* under the terms of the License "Eclipse Public License v1.0"
91ef7621b7fc 201019_08
hgs
parents:
diff changeset
     6
* which accompanies this distribution, and is available
91ef7621b7fc 201019_08
hgs
parents:
diff changeset
     7
* at the URL "http://www.eclipse.org/legal/epl-v10.html".
91ef7621b7fc 201019_08
hgs
parents:
diff changeset
     8
*
91ef7621b7fc 201019_08
hgs
parents:
diff changeset
     9
* Initial Contributors:
91ef7621b7fc 201019_08
hgs
parents:
diff changeset
    10
* Nokia Corporation - initial contribution.
91ef7621b7fc 201019_08
hgs
parents:
diff changeset
    11
*
91ef7621b7fc 201019_08
hgs
parents:
diff changeset
    12
* Contributors:
91ef7621b7fc 201019_08
hgs
parents:
diff changeset
    13
*
91ef7621b7fc 201019_08
hgs
parents:
diff changeset
    14
* Description: 
91ef7621b7fc 201019_08
hgs
parents:
diff changeset
    15
*
91ef7621b7fc 201019_08
hgs
parents:
diff changeset
    16
*/
91ef7621b7fc 201019_08
hgs
parents:
diff changeset
    17
91ef7621b7fc 201019_08
hgs
parents:
diff changeset
    18
#include "RegularExpression.h"
91ef7621b7fc 201019_08
hgs
parents:
diff changeset
    19
91ef7621b7fc 201019_08
hgs
parents:
diff changeset
    20
#define KNumOfRecognisedChars 13
91ef7621b7fc 201019_08
hgs
parents:
diff changeset
    21
91ef7621b7fc 201019_08
hgs
parents:
diff changeset
    22
// Panic is implemented in NumberGrouping.cpp
91ef7621b7fc 201019_08
hgs
parents:
diff changeset
    23
GLDEF_C void Panic(TNumberGroupingPanic aPanic);
91ef7621b7fc 201019_08
hgs
parents:
diff changeset
    24
91ef7621b7fc 201019_08
hgs
parents:
diff changeset
    25
CRegularExpression::CRegularExpression()
91ef7621b7fc 201019_08
hgs
parents:
diff changeset
    26
{
91ef7621b7fc 201019_08
hgs
parents:
diff changeset
    27
}
91ef7621b7fc 201019_08
hgs
parents:
diff changeset
    28
91ef7621b7fc 201019_08
hgs
parents:
diff changeset
    29
CRegularExpression* CRegularExpression::NewL(RPointerArray<TDesC>* aPatterns)
91ef7621b7fc 201019_08
hgs
parents:
diff changeset
    30
{
91ef7621b7fc 201019_08
hgs
parents:
diff changeset
    31
	CRegularExpression* s = NewLC(aPatterns);
91ef7621b7fc 201019_08
hgs
parents:
diff changeset
    32
	CleanupStack::Pop();
91ef7621b7fc 201019_08
hgs
parents:
diff changeset
    33
	return s;
91ef7621b7fc 201019_08
hgs
parents:
diff changeset
    34
}
91ef7621b7fc 201019_08
hgs
parents:
diff changeset
    35
91ef7621b7fc 201019_08
hgs
parents:
diff changeset
    36
CRegularExpression* CRegularExpression::NewLC(RPointerArray<TDesC>* aPatterns)
91ef7621b7fc 201019_08
hgs
parents:
diff changeset
    37
{
91ef7621b7fc 201019_08
hgs
parents:
diff changeset
    38
	CRegularExpression* s = new(ELeave)CRegularExpression();
91ef7621b7fc 201019_08
hgs
parents:
diff changeset
    39
	CleanupStack::PushL(s);
91ef7621b7fc 201019_08
hgs
parents:
diff changeset
    40
	s->ConstructL(aPatterns);
91ef7621b7fc 201019_08
hgs
parents:
diff changeset
    41
	return s;
91ef7621b7fc 201019_08
hgs
parents:
diff changeset
    42
}
91ef7621b7fc 201019_08
hgs
parents:
diff changeset
    43
91ef7621b7fc 201019_08
hgs
parents:
diff changeset
    44
void CRegularExpression::ConstructL(RPointerArray<TDesC>* aPatterns)
91ef7621b7fc 201019_08
hgs
parents:
diff changeset
    45
{
91ef7621b7fc 201019_08
hgs
parents:
diff changeset
    46
	GenerateStateTablesL(aPatterns);
91ef7621b7fc 201019_08
hgs
parents:
diff changeset
    47
}
91ef7621b7fc 201019_08
hgs
parents:
diff changeset
    48
91ef7621b7fc 201019_08
hgs
parents:
diff changeset
    49
CRegularExpression::~CRegularExpression()
91ef7621b7fc 201019_08
hgs
parents:
diff changeset
    50
{
91ef7621b7fc 201019_08
hgs
parents:
diff changeset
    51
	for(TInt i = 0; i < iStateMachines.Count(); i++)
91ef7621b7fc 201019_08
hgs
parents:
diff changeset
    52
		delete iStateMachines[i];
91ef7621b7fc 201019_08
hgs
parents:
diff changeset
    53
	
91ef7621b7fc 201019_08
hgs
parents:
diff changeset
    54
	iStateMachines.Close();
91ef7621b7fc 201019_08
hgs
parents:
diff changeset
    55
}
91ef7621b7fc 201019_08
hgs
parents:
diff changeset
    56
91ef7621b7fc 201019_08
hgs
parents:
diff changeset
    57
TInt CRegularExpression::Search(const TDesC& aString)
91ef7621b7fc 201019_08
hgs
parents:
diff changeset
    58
{
91ef7621b7fc 201019_08
hgs
parents:
diff changeset
    59
	return SearchFrom(0, aString);
91ef7621b7fc 201019_08
hgs
parents:
diff changeset
    60
}
91ef7621b7fc 201019_08
hgs
parents:
diff changeset
    61
91ef7621b7fc 201019_08
hgs
parents:
diff changeset
    62
TInt CRegularExpression::SearchFrom(TInt aIndex, const TDesC& aString)
91ef7621b7fc 201019_08
hgs
parents:
diff changeset
    63
{
91ef7621b7fc 201019_08
hgs
parents:
diff changeset
    64
	for(TInt i = aIndex; i < iStateMachines.Count(); ++i)
91ef7621b7fc 201019_08
hgs
parents:
diff changeset
    65
	{
91ef7621b7fc 201019_08
hgs
parents:
diff changeset
    66
		if(iStateMachines[i]->Matches(aString))
91ef7621b7fc 201019_08
hgs
parents:
diff changeset
    67
			return i;
91ef7621b7fc 201019_08
hgs
parents:
diff changeset
    68
	}
91ef7621b7fc 201019_08
hgs
parents:
diff changeset
    69
91ef7621b7fc 201019_08
hgs
parents:
diff changeset
    70
	return KErrNotFound;
91ef7621b7fc 201019_08
hgs
parents:
diff changeset
    71
}
91ef7621b7fc 201019_08
hgs
parents:
diff changeset
    72
91ef7621b7fc 201019_08
hgs
parents:
diff changeset
    73
// Do the parsing
91ef7621b7fc 201019_08
hgs
parents:
diff changeset
    74
void CRegularExpression::GenerateStateTablesL(RPointerArray<TDesC>* aPatterns)
91ef7621b7fc 201019_08
hgs
parents:
diff changeset
    75
{	
91ef7621b7fc 201019_08
hgs
parents:
diff changeset
    76
	for(TInt nPatternCount = 0; nPatternCount < aPatterns->Count(); ++nPatternCount)
91ef7621b7fc 201019_08
hgs
parents:
diff changeset
    77
	{
91ef7621b7fc 201019_08
hgs
parents:
diff changeset
    78
		const TDesC& desPattern = *((*aPatterns)[nPatternCount]) ;	// I know it looks horrific, but it makes the
91ef7621b7fc 201019_08
hgs
parents:
diff changeset
    79
																	// rest of the method _so_ much easier to read
91ef7621b7fc 201019_08
hgs
parents:
diff changeset
    80
		
91ef7621b7fc 201019_08
hgs
parents:
diff changeset
    81
		CStateMachine* StateMachine = CStateMachine::NewLC(KNumOfRecognisedChars, desPattern.Length());
91ef7621b7fc 201019_08
hgs
parents:
diff changeset
    82
		User::LeaveIfError(iStateMachines.Append(StateMachine));
91ef7621b7fc 201019_08
hgs
parents:
diff changeset
    83
		CleanupStack::Pop(); // now the ownership transfers to iStateMachines
91ef7621b7fc 201019_08
hgs
parents:
diff changeset
    84
91ef7621b7fc 201019_08
hgs
parents:
diff changeset
    85
		// parse the desPattern
91ef7621b7fc 201019_08
hgs
parents:
diff changeset
    86
91ef7621b7fc 201019_08
hgs
parents:
diff changeset
    87
		enum TParseState
91ef7621b7fc 201019_08
hgs
parents:
diff changeset
    88
		{
91ef7621b7fc 201019_08
hgs
parents:
diff changeset
    89
			EAny,
91ef7621b7fc 201019_08
hgs
parents:
diff changeset
    90
			EOpenBracketFound,
91ef7621b7fc 201019_08
hgs
parents:
diff changeset
    91
			EChoiceOrRange,
91ef7621b7fc 201019_08
hgs
parents:
diff changeset
    92
			EChoice,
91ef7621b7fc 201019_08
hgs
parents:
diff changeset
    93
			ERange,
91ef7621b7fc 201019_08
hgs
parents:
diff changeset
    94
			ELookingForCloseBracket
91ef7621b7fc 201019_08
hgs
parents:
diff changeset
    95
		};
91ef7621b7fc 201019_08
hgs
parents:
diff changeset
    96
91ef7621b7fc 201019_08
hgs
parents:
diff changeset
    97
		TParseState	parseState = EAny;
91ef7621b7fc 201019_08
hgs
parents:
diff changeset
    98
91ef7621b7fc 201019_08
hgs
parents:
diff changeset
    99
		TInt		nPatternIndex = 0;
91ef7621b7fc 201019_08
hgs
parents:
diff changeset
   100
		TInt		nState = 0;
91ef7621b7fc 201019_08
hgs
parents:
diff changeset
   101
91ef7621b7fc 201019_08
hgs
parents:
diff changeset
   102
		TBuf<10>	bufChoice;
91ef7621b7fc 201019_08
hgs
parents:
diff changeset
   103
		bufChoice.Zero();
91ef7621b7fc 201019_08
hgs
parents:
diff changeset
   104
91ef7621b7fc 201019_08
hgs
parents:
diff changeset
   105
		TBuf<20>	bufParsingError = _L("Parsing syntax error");
91ef7621b7fc 201019_08
hgs
parents:
diff changeset
   106
91ef7621b7fc 201019_08
hgs
parents:
diff changeset
   107
		while(nPatternIndex < desPattern.Length() )
91ef7621b7fc 201019_08
hgs
parents:
diff changeset
   108
		{
91ef7621b7fc 201019_08
hgs
parents:
diff changeset
   109
			TChar cChar = desPattern[nPatternIndex];
91ef7621b7fc 201019_08
hgs
parents:
diff changeset
   110
			TBool bEndOfParse = EFalse;
91ef7621b7fc 201019_08
hgs
parents:
diff changeset
   111
91ef7621b7fc 201019_08
hgs
parents:
diff changeset
   112
			if(nPatternIndex == desPattern.Length() - 1) // end of the parse
91ef7621b7fc 201019_08
hgs
parents:
diff changeset
   113
				bEndOfParse = ETrue;
91ef7621b7fc 201019_08
hgs
parents:
diff changeset
   114
		
91ef7621b7fc 201019_08
hgs
parents:
diff changeset
   115
			switch(cChar)
91ef7621b7fc 201019_08
hgs
parents:
diff changeset
   116
			{
91ef7621b7fc 201019_08
hgs
parents:
diff changeset
   117
			case '1':
91ef7621b7fc 201019_08
hgs
parents:
diff changeset
   118
			case '2':
91ef7621b7fc 201019_08
hgs
parents:
diff changeset
   119
			case '3':
91ef7621b7fc 201019_08
hgs
parents:
diff changeset
   120
			case '4':
91ef7621b7fc 201019_08
hgs
parents:
diff changeset
   121
			case '5':
91ef7621b7fc 201019_08
hgs
parents:
diff changeset
   122
			case '6':
91ef7621b7fc 201019_08
hgs
parents:
diff changeset
   123
			case '7':
91ef7621b7fc 201019_08
hgs
parents:
diff changeset
   124
			case '8':
91ef7621b7fc 201019_08
hgs
parents:
diff changeset
   125
			case '9':
91ef7621b7fc 201019_08
hgs
parents:
diff changeset
   126
			case '0':
91ef7621b7fc 201019_08
hgs
parents:
diff changeset
   127
				switch(parseState)
91ef7621b7fc 201019_08
hgs
parents:
diff changeset
   128
				{
91ef7621b7fc 201019_08
hgs
parents:
diff changeset
   129
				case EAny:
91ef7621b7fc 201019_08
hgs
parents:
diff changeset
   130
					iStateMachines[nPatternCount]->AddStateTransistionL(cChar, nState, bEndOfParse?
91ef7621b7fc 201019_08
hgs
parents:
diff changeset
   131
																					KStateMatched:
91ef7621b7fc 201019_08
hgs
parents:
diff changeset
   132
																					(nState + 1)); 
91ef7621b7fc 201019_08
hgs
parents:
diff changeset
   133
					++nState;
91ef7621b7fc 201019_08
hgs
parents:
diff changeset
   134
					break;
91ef7621b7fc 201019_08
hgs
parents:
diff changeset
   135
				case EOpenBracketFound:
91ef7621b7fc 201019_08
hgs
parents:
diff changeset
   136
					bufChoice.Append(cChar);
91ef7621b7fc 201019_08
hgs
parents:
diff changeset
   137
					parseState = EChoiceOrRange;					
91ef7621b7fc 201019_08
hgs
parents:
diff changeset
   138
					break;
91ef7621b7fc 201019_08
hgs
parents:
diff changeset
   139
				case EChoiceOrRange:
91ef7621b7fc 201019_08
hgs
parents:
diff changeset
   140
				case EChoice:
91ef7621b7fc 201019_08
hgs
parents:
diff changeset
   141
					bufChoice.Append(cChar);
91ef7621b7fc 201019_08
hgs
parents:
diff changeset
   142
					parseState = EChoice;
91ef7621b7fc 201019_08
hgs
parents:
diff changeset
   143
					break;
91ef7621b7fc 201019_08
hgs
parents:
diff changeset
   144
				case ERange:
91ef7621b7fc 201019_08
hgs
parents:
diff changeset
   145
					bufChoice.Append(cChar);
91ef7621b7fc 201019_08
hgs
parents:
diff changeset
   146
					parseState = ELookingForCloseBracket;
91ef7621b7fc 201019_08
hgs
parents:
diff changeset
   147
					break;
91ef7621b7fc 201019_08
hgs
parents:
diff changeset
   148
				//case ELookingForCloseBracket:						
91ef7621b7fc 201019_08
hgs
parents:
diff changeset
   149
				default:
91ef7621b7fc 201019_08
hgs
parents:
diff changeset
   150
					User::Panic(bufParsingError, KErrSyntaxError);
91ef7621b7fc 201019_08
hgs
parents:
diff changeset
   151
					break;
91ef7621b7fc 201019_08
hgs
parents:
diff changeset
   152
				}
91ef7621b7fc 201019_08
hgs
parents:
diff changeset
   153
				break;
91ef7621b7fc 201019_08
hgs
parents:
diff changeset
   154
			case '[':
91ef7621b7fc 201019_08
hgs
parents:
diff changeset
   155
				switch(parseState)
91ef7621b7fc 201019_08
hgs
parents:
diff changeset
   156
				{
91ef7621b7fc 201019_08
hgs
parents:
diff changeset
   157
				case EAny:						
91ef7621b7fc 201019_08
hgs
parents:
diff changeset
   158
					bufChoice.Zero();
91ef7621b7fc 201019_08
hgs
parents:
diff changeset
   159
					parseState = EOpenBracketFound;
91ef7621b7fc 201019_08
hgs
parents:
diff changeset
   160
					break;
91ef7621b7fc 201019_08
hgs
parents:
diff changeset
   161
				//case EOpenBracketFound:			
91ef7621b7fc 201019_08
hgs
parents:
diff changeset
   162
				//case EChoiceOrRange:			
91ef7621b7fc 201019_08
hgs
parents:
diff changeset
   163
				//case EChoice:					
91ef7621b7fc 201019_08
hgs
parents:
diff changeset
   164
				//case ERange:					
91ef7621b7fc 201019_08
hgs
parents:
diff changeset
   165
				//case ELookingForCloseBracket:	
91ef7621b7fc 201019_08
hgs
parents:
diff changeset
   166
				default:
91ef7621b7fc 201019_08
hgs
parents:
diff changeset
   167
					User::Panic(bufParsingError, KErrSyntaxError);
91ef7621b7fc 201019_08
hgs
parents:
diff changeset
   168
					break;
91ef7621b7fc 201019_08
hgs
parents:
diff changeset
   169
				
91ef7621b7fc 201019_08
hgs
parents:
diff changeset
   170
    			}	
91ef7621b7fc 201019_08
hgs
parents:
diff changeset
   171
				break;
91ef7621b7fc 201019_08
hgs
parents:
diff changeset
   172
			case ']':
91ef7621b7fc 201019_08
hgs
parents:
diff changeset
   173
				switch(parseState)
91ef7621b7fc 201019_08
hgs
parents:
diff changeset
   174
				{
91ef7621b7fc 201019_08
hgs
parents:
diff changeset
   175
				case EChoice:
91ef7621b7fc 201019_08
hgs
parents:
diff changeset
   176
					{
91ef7621b7fc 201019_08
hgs
parents:
diff changeset
   177
						for(TInt i = 0; i < bufChoice.Length(); ++i)
91ef7621b7fc 201019_08
hgs
parents:
diff changeset
   178
						{
91ef7621b7fc 201019_08
hgs
parents:
diff changeset
   179
							TChar cChar = bufChoice[i];
91ef7621b7fc 201019_08
hgs
parents:
diff changeset
   180
							
91ef7621b7fc 201019_08
hgs
parents:
diff changeset
   181
							iStateMachines[nPatternCount]->AddStateTransistionL(cChar.GetNumericValue(), 
91ef7621b7fc 201019_08
hgs
parents:
diff changeset
   182
																				nState, 
91ef7621b7fc 201019_08
hgs
parents:
diff changeset
   183
																				bEndOfParse?
91ef7621b7fc 201019_08
hgs
parents:
diff changeset
   184
																					KStateMatched:
91ef7621b7fc 201019_08
hgs
parents:
diff changeset
   185
																					(nState + 1));
91ef7621b7fc 201019_08
hgs
parents:
diff changeset
   186
						}
91ef7621b7fc 201019_08
hgs
parents:
diff changeset
   187
						
91ef7621b7fc 201019_08
hgs
parents:
diff changeset
   188
						++nState;
91ef7621b7fc 201019_08
hgs
parents:
diff changeset
   189
						parseState = EAny;
91ef7621b7fc 201019_08
hgs
parents:
diff changeset
   190
					}
91ef7621b7fc 201019_08
hgs
parents:
diff changeset
   191
					break;
91ef7621b7fc 201019_08
hgs
parents:
diff changeset
   192
				case ELookingForCloseBracket:
91ef7621b7fc 201019_08
hgs
parents:
diff changeset
   193
					{
91ef7621b7fc 201019_08
hgs
parents:
diff changeset
   194
						TChar cTopOfRange = bufChoice[1];
91ef7621b7fc 201019_08
hgs
parents:
diff changeset
   195
						TChar cBottomOfRange = bufChoice[0];
91ef7621b7fc 201019_08
hgs
parents:
diff changeset
   196
91ef7621b7fc 201019_08
hgs
parents:
diff changeset
   197
						TInt nTopOfRange = cTopOfRange.GetNumericValue();		// if they're not there then something
91ef7621b7fc 201019_08
hgs
parents:
diff changeset
   198
						TInt nBottomOfRange = cBottomOfRange.GetNumericValue();	// is seriously amiss...
91ef7621b7fc 201019_08
hgs
parents:
diff changeset
   199
						
91ef7621b7fc 201019_08
hgs
parents:
diff changeset
   200
						if(nTopOfRange < nBottomOfRange)
91ef7621b7fc 201019_08
hgs
parents:
diff changeset
   201
							User::Panic(bufParsingError, KErrSyntaxError);
91ef7621b7fc 201019_08
hgs
parents:
diff changeset
   202
					
91ef7621b7fc 201019_08
hgs
parents:
diff changeset
   203
						for(TInt i = nBottomOfRange; i <= nTopOfRange; ++i)
91ef7621b7fc 201019_08
hgs
parents:
diff changeset
   204
						{
91ef7621b7fc 201019_08
hgs
parents:
diff changeset
   205
							iStateMachines[nPatternCount]->AddStateTransistionL(i, nState, bEndOfParse?
91ef7621b7fc 201019_08
hgs
parents:
diff changeset
   206
																							KStateMatched:
91ef7621b7fc 201019_08
hgs
parents:
diff changeset
   207
																							(nState + 1));
91ef7621b7fc 201019_08
hgs
parents:
diff changeset
   208
						}
91ef7621b7fc 201019_08
hgs
parents:
diff changeset
   209
						++nState;
91ef7621b7fc 201019_08
hgs
parents:
diff changeset
   210
						parseState = EAny;
91ef7621b7fc 201019_08
hgs
parents:
diff changeset
   211
					}
91ef7621b7fc 201019_08
hgs
parents:
diff changeset
   212
					break;
91ef7621b7fc 201019_08
hgs
parents:
diff changeset
   213
				//case EAny:						
91ef7621b7fc 201019_08
hgs
parents:
diff changeset
   214
				//case EOpenBracketFound:			
91ef7621b7fc 201019_08
hgs
parents:
diff changeset
   215
				//case EChoiceOrRange:			
91ef7621b7fc 201019_08
hgs
parents:
diff changeset
   216
				//case ERange:		
91ef7621b7fc 201019_08
hgs
parents:
diff changeset
   217
				default:
91ef7621b7fc 201019_08
hgs
parents:
diff changeset
   218
					User::Panic(bufParsingError, KErrSyntaxError);
91ef7621b7fc 201019_08
hgs
parents:
diff changeset
   219
					break;
91ef7621b7fc 201019_08
hgs
parents:
diff changeset
   220
				}	
91ef7621b7fc 201019_08
hgs
parents:
diff changeset
   221
				break;
91ef7621b7fc 201019_08
hgs
parents:
diff changeset
   222
			case '-':
91ef7621b7fc 201019_08
hgs
parents:
diff changeset
   223
				switch(parseState)
91ef7621b7fc 201019_08
hgs
parents:
diff changeset
   224
				{
91ef7621b7fc 201019_08
hgs
parents:
diff changeset
   225
				case EChoiceOrRange:			
91ef7621b7fc 201019_08
hgs
parents:
diff changeset
   226
					parseState = ERange;
91ef7621b7fc 201019_08
hgs
parents:
diff changeset
   227
					break;	
91ef7621b7fc 201019_08
hgs
parents:
diff changeset
   228
				//case EAny:						
91ef7621b7fc 201019_08
hgs
parents:
diff changeset
   229
				//case EOpenBracketFound:			
91ef7621b7fc 201019_08
hgs
parents:
diff changeset
   230
				//case ELookingForCloseBracket:	
91ef7621b7fc 201019_08
hgs
parents:
diff changeset
   231
				//case ERange:					
91ef7621b7fc 201019_08
hgs
parents:
diff changeset
   232
				//case EChoice:
91ef7621b7fc 201019_08
hgs
parents:
diff changeset
   233
				default:
91ef7621b7fc 201019_08
hgs
parents:
diff changeset
   234
					User::Panic(bufParsingError, KErrSyntaxError);
91ef7621b7fc 201019_08
hgs
parents:
diff changeset
   235
					break;
91ef7621b7fc 201019_08
hgs
parents:
diff changeset
   236
				}
91ef7621b7fc 201019_08
hgs
parents:
diff changeset
   237
				break;
91ef7621b7fc 201019_08
hgs
parents:
diff changeset
   238
			case '.':
91ef7621b7fc 201019_08
hgs
parents:
diff changeset
   239
			case '+':
91ef7621b7fc 201019_08
hgs
parents:
diff changeset
   240
				switch(parseState)
91ef7621b7fc 201019_08
hgs
parents:
diff changeset
   241
				{
91ef7621b7fc 201019_08
hgs
parents:
diff changeset
   242
				case EAny:						
91ef7621b7fc 201019_08
hgs
parents:
diff changeset
   243
					iStateMachines[nPatternCount]->AddStateTransistionL(cChar, nState, bEndOfParse?
91ef7621b7fc 201019_08
hgs
parents:
diff changeset
   244
																					KStateMatched:
91ef7621b7fc 201019_08
hgs
parents:
diff changeset
   245
																					(nState + 1));
91ef7621b7fc 201019_08
hgs
parents:
diff changeset
   246
					++nState;
91ef7621b7fc 201019_08
hgs
parents:
diff changeset
   247
					break;
91ef7621b7fc 201019_08
hgs
parents:
diff changeset
   248
				//case EOpenBracketFound:			
91ef7621b7fc 201019_08
hgs
parents:
diff changeset
   249
				//case EChoiceOrRange:			
91ef7621b7fc 201019_08
hgs
parents:
diff changeset
   250
				//case ELookingForCloseBracket:	
91ef7621b7fc 201019_08
hgs
parents:
diff changeset
   251
				//case ERange:					
91ef7621b7fc 201019_08
hgs
parents:
diff changeset
   252
				//case EChoice:
91ef7621b7fc 201019_08
hgs
parents:
diff changeset
   253
				default:
91ef7621b7fc 201019_08
hgs
parents:
diff changeset
   254
					User::Panic(bufParsingError, KErrSyntaxError);
91ef7621b7fc 201019_08
hgs
parents:
diff changeset
   255
					break;					
91ef7621b7fc 201019_08
hgs
parents:
diff changeset
   256
				}
91ef7621b7fc 201019_08
hgs
parents:
diff changeset
   257
				break;
91ef7621b7fc 201019_08
hgs
parents:
diff changeset
   258
			default:
91ef7621b7fc 201019_08
hgs
parents:
diff changeset
   259
				User::Panic(bufParsingError, KErrSyntaxError);
91ef7621b7fc 201019_08
hgs
parents:
diff changeset
   260
				break;
91ef7621b7fc 201019_08
hgs
parents:
diff changeset
   261
			}
91ef7621b7fc 201019_08
hgs
parents:
diff changeset
   262
91ef7621b7fc 201019_08
hgs
parents:
diff changeset
   263
			++nPatternIndex;
91ef7621b7fc 201019_08
hgs
parents:
diff changeset
   264
		}
91ef7621b7fc 201019_08
hgs
parents:
diff changeset
   265
91ef7621b7fc 201019_08
hgs
parents:
diff changeset
   266
		if(parseState != EAny)
91ef7621b7fc 201019_08
hgs
parents:
diff changeset
   267
			User::Panic(bufParsingError, KErrSyntaxError);
91ef7621b7fc 201019_08
hgs
parents:
diff changeset
   268
	}
91ef7621b7fc 201019_08
hgs
parents:
diff changeset
   269
}
91ef7621b7fc 201019_08
hgs
parents:
diff changeset
   270
91ef7621b7fc 201019_08
hgs
parents:
diff changeset
   271
void CRegularExpression::GetWildcardVersionOfPattern( 
91ef7621b7fc 201019_08
hgs
parents:
diff changeset
   272
    TInt aPatternIndex, TText aWildcard, TDes& aWildcardedPattern) const
91ef7621b7fc 201019_08
hgs
parents:
diff changeset
   273
    {
91ef7621b7fc 201019_08
hgs
parents:
diff changeset
   274
    __ASSERT_ALWAYS( (0 <= aPatternIndex) && (aPatternIndex < iStateMachines.Count()),
91ef7621b7fc 201019_08
hgs
parents:
diff changeset
   275
        Panic(ENumberGroupingNoSuchStateMachine) );
91ef7621b7fc 201019_08
hgs
parents:
diff changeset
   276
    iStateMachines[aPatternIndex]->GetWildcardVersionOfPattern( aWildcard, aWildcardedPattern );
91ef7621b7fc 201019_08
hgs
parents:
diff changeset
   277
    }
91ef7621b7fc 201019_08
hgs
parents:
diff changeset
   278
91ef7621b7fc 201019_08
hgs
parents:
diff changeset
   279
// End of File