public void parseText(string text, IParseVisitor visitor) { int startIndex = 0; while (startIndex < text.Length) { int endIndex = getToken(text, startIndex); handleToken(text, startIndex, endIndex, visitor); startIndex = endIndex + 1; } }
private void handleToken(string text, int startIndex, int endIndex, IParseVisitor visitor) { string token = text.Substring(startIndex, endIndex - startIndex + 1); if (token[0] == '$') { switch (token) { case "$name$": visitor.Name(); break; case "$type$": visitor.Type(); break; case "$version$": visitor.Version(); break; case "$primary$": visitor.Primary(); break; case "$beginbold$": visitor.BeginBold(); break; case "$endbold$": visitor.EndBold(); break; case "$beginitalic$": visitor.BeginItalic(); break; case "$enditalic$": visitor.EndItalic(); break; case "$ip$": visitor.IP(); break; case "$$": visitor.Text("$"); break; default: throw new SyntaxErrorException("Invalid token: " + token + ".", startIndex); } } else { visitor.Text(token); } }