private void Parse(string patString)
{
pattern = new ShExpTokens[patString.Length + 2]; // 2 for the start, end
match = null;
int i = 0;
pattern[i++] = ShExpTokens.Start;
for (int j = 0; j < patString.Length; j++)
{
switch (patString[j])
{
case '?':
pattern[i++] = ShExpTokens.Question;
break;
case '*':
pattern[i++] = ShExpTokens.Asterisk;
break;
case '^':
if (j < patString.Length - 1)
{
j++;
}
else
{
pattern = null;
if (Logging.On) Logging.PrintWarning(Logging.Web, SR.GetString(SR.net_log_shell_expression_pattern_format_warning, patString));
throw new FormatException(SR.GetString(SR.net_format_shexp, patString));
}
switch (patString[j])
{
case '.':
pattern[i++] = ShExpTokens.AugmentedDot;
break;
case '?':
pattern[i++] = ShExpTokens.AugmentedQuestion;
break;
case '*':
pattern[i++] = ShExpTokens.AugmentedAsterisk;
break;
default:
pattern = null;
if (Logging.On) Logging.PrintWarning(Logging.Web, SR.GetString(SR.net_log_shell_expression_pattern_format_warning, patString));
throw new FormatException(SR.GetString(SR.net_format_shexp, patString));
}
break;
default:
pattern[i++] = (ShExpTokens) (int) char.ToLowerInvariant(patString[j]);
break;
}
}
pattern[i++] = ShExpTokens.End;
match = new int[i];
}
}