private bool Match (Op op, string text, int ptr)
{
while (op != null) {
switch (op.Code) {
case OpCode.True:
return true;
case OpCode.End:
if (ptr == text.Length)
return true;
return false;
case OpCode.ExactString:
int length = op.Argument.Length;
if (ptr + length > text.Length)
return false;
string str = text.Substring (ptr, length);
if (ignore)
str = str.ToLowerInvariant ();
if (str != op.Argument)
return false;
ptr += length;
break;
case OpCode.AnyChar:
if (++ ptr > text.Length)
return false;
break;
case OpCode.AnyString:
while (ptr <= text.Length) {
if (Match (op.Next, text, ptr))
return true;
++ ptr;
}
return false;
}
op = op.Next;
}
return true;
}