private Token CloseTag() { Match('['); Match('/'); Mark(); while (IsTagNameChar()) { Consume(); } var token = new Token(GetMark(), TokenEndTag); Match(']'); return token; }
private Token Attribute() { Match('='); while (IsInRange(WhitespaceChars)) { Consume(); } Token token; if (IsInRange(QuoteChars)) { Consume(); Mark(); while (!IsInRange(QuoteChars)) { if (La(1) == '\\') { Consume(); } Consume(); } token = new Token(GetMark().Replace("\\\"", "\"").Replace("\\'", "'"), TokenAttribute); Consume(); } else { Mark(); while (!IsInRange(WhitespaceChars) && La(1) != ']' && La(1) != char.MaxValue) { Consume(); } token = new Token(GetMark(), TokenAttribute); } while (IsInRange(WhitespaceChars)) { Consume(); } return token; }