public List<Token> Parse(string text) { sourceText = text ?? ""; sourceLength = sourceText.Length; currentOffset = 0; currentToken = null; result = new List<Token>(); while (currentOffset < sourceLength) { if (Matches("\r\n")) { StartToken(TokenType.NewLine, 2); } else if (Matches("\n") || Matches("\r")) { StartToken(TokenType.NewLine, 1); } else if (IsAtLineStart() && Matches("#")) { StartToken(TokenType.WordForm, 1); } else if (IsAtLineStart() && Matches("//")) { StartToken(TokenType.Example, 2); } else if (IsAtLineStart()) { StartToken(TokenType.Translation, 1); } else { ExtendToken(); } } return result; }
private void StartToken(TokenType tokenType, int length) { currentToken = new Token(sourceText, tokenType, currentOffset, length); result.Add(currentToken); currentOffset += length; }
private void WriteToken(HtmlTextWriter writer, Token token) { string divClass = null; if (token.Type == TokenType.WordForm) { divClass = CssWordForm; } if (token.Type == TokenType.Translation) { divClass = CssWordTranslation; } if (token.Type == TokenType.Example) { divClass = CssWordExample; } if (divClass != null) { writer.AddAttribute(HtmlTextWriterAttribute.Class, divClass); } writer.RenderBeginTag(HtmlTextWriterTag.Div); writer.WriteLine(token.Value); writer.RenderEndTag(); }