internal static HebrewNumberParsingState ParseByChar(char ch, ref HebrewNumberParsingContext context) {
HebrewToken token;
if (ch == '\'') {
token = HebrewToken.SingleQuote;
} else if (ch == '\"') {
token = HebrewToken.DoubleQuote;
} else {
int index = (int)ch - minHebrewNumberCh;
if (index >= 0 && index < HebrewValues.Length ) {
token = HebrewValues[index].token;
if (token == HebrewToken.Invalid) {
return (HebrewNumberParsingState.NotHebrewDigit);
}
context.result += HebrewValues[index].value;
} else {
// Not in valid Hebrew digit range.
return (HebrewNumberParsingState.NotHebrewDigit);
}
}
context.state = m_numberPasingState[(int)context.state][(int)token];
if (context.state == HS._err) {
// Invalid Hebrew state. This indicates an incorrect Hebrew number.
return (HebrewNumberParsingState.InvalidHebrewNumber);
}
if (context.state == HS.END) {
// Reach a terminal state.
return (HebrewNumberParsingState.FoundEndOfHebrewNumber);
}
// We should continue to parse.
return (HebrewNumberParsingState.ContinueParsing);
}