public string Parse(string text, GetValueForKeyFunc getValueForKeyFunc) { using (var reader = new StringReader(text)) { var parser = new NamedFieldParser(getValueForKeyFunc); do { parser.Current = reader.Read(); switch (parser.State) { case ParsingState.Text: HandleRegularCharacter(parser); break; case ParsingState.StartOfExpression: HandleStartOfExpression(parser); break; case ParsingState.Expression: HandleFieldExpression(parser); break; case ParsingState.EndOfExpression: HandleEndOfExpression(parser); break; } } while (parser.State != ParsingState.EndOfFile); return parser.FormattedText.ToString(); } }
public string Parse(string text, GetValueForKeyFunc getValueForKeyFunc) { using (var reader = new StringReader(text)) { var parser = new NamedFieldParser(getValueForKeyFunc); do { parser.Current = reader.Read(); switch (parser.State) { case ParsingState.Text: HandleRegularCharacter(parser); break; case ParsingState.StartOfExpression: HandleStartOfExpression(parser); break; case ParsingState.Expression: HandleFieldExpression(parser); break; case ParsingState.EndOfExpression: HandleEndOfExpression(parser); break; } } while (parser.State != ParsingState.EndOfFile); return(parser.FormattedText.ToString()); } }
private static void HandleEndOfExpression(NamedFieldParser parser) { if (parser.Current != CloseBrace) { throw new FormatException("Unescaped closing brace found at position " + parser.Position + "."); } parser.FormattedText.Append((char)CloseBrace); parser.State = ParsingState.Text; }
private static void HandleFieldExpression(NamedFieldParser parser) { switch (parser.Current) { case NoMoreText: throw new FormatException("Opening brace with field expression '" + parser.FieldExpression + "' has no closing brace at position " + parser.Position + "."); case CloseBrace: InsertValueForPlaceholder(parser); parser.State = ParsingState.Text; break; default: parser.FieldExpression.Append((char)parser.Current); break; } }
private static void HandleStartOfExpression(NamedFieldParser parser) { switch (parser.Current) { case NoMoreText: case CloseBrace: throw new FormatException("Opening brace with no field name specified at position " + parser.Position + "."); case OpenBrace: parser.FormattedText.Append((char)OpenBrace); parser.State = ParsingState.Text; break; default: parser.FieldExpression.Append((char)parser.Current); parser.State = ParsingState.Expression; break; } }
private static void HandleRegularCharacter(NamedFieldParser parser) { switch (parser.Current) { case NoMoreText: parser.State = ParsingState.EndOfFile; break; case OpenBrace: parser.State = ParsingState.StartOfExpression; break; case CloseBrace: parser.State = ParsingState.EndOfExpression; break; default: parser.FormattedText.Append((char)parser.Current); break; } }
private static void HandleFieldExpression(NamedFieldParser parser) { switch (parser.Current) { case NoMoreText: throw new FormatException("Opening brace with field expression '" + parser.FieldExpression + "' has no closing brace at position " + parser.Position + "."); case CloseBrace: InsertValueForPlaceholder(parser); parser.State = ParsingState.Text; break; default: parser.FieldExpression.Append((char) parser.Current); break; } }
private static void HandleEndOfExpression(NamedFieldParser parser) { if (parser.Current != CloseBrace) throw new FormatException("Unescaped closing brace found at position " + parser.Position + "."); parser.FormattedText.Append((char) CloseBrace); parser.State = ParsingState.Text; }
private static void InsertValueForPlaceholder(NamedFieldParser parser) { parser.FormattedText.Append(parser.GetValueForKeyFunc(parser.FieldExpression.ToString())); parser.FieldExpression.Clear(); }
private static void HandleStartOfExpression(NamedFieldParser parser) { switch (parser.Current) { case NoMoreText: case CloseBrace: throw new FormatException("Opening brace with no field name specified at position " + parser.Position + "."); case OpenBrace: parser.FormattedText.Append((char) OpenBrace); parser.State = ParsingState.Text; break; default: parser.FieldExpression.Append((char)parser.Current); parser.State = ParsingState.Expression; break; } }
private static void HandleRegularCharacter(NamedFieldParser parser) { switch (parser.Current) { case NoMoreText: parser.State = ParsingState.EndOfFile; break; case OpenBrace: parser.State = ParsingState.StartOfExpression; break; case CloseBrace: parser.State = ParsingState.EndOfExpression; break; default: parser.FormattedText.Append((char) parser.Current); break; } }