| Index: mojo/public/dart/third_party/html/lib/src/token.dart
|
| diff --git a/mojo/public/dart/third_party/html/lib/src/token.dart b/mojo/public/dart/third_party/html/lib/src/token.dart
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..9a2843c5f8cee0fb00371b1a15796c61f96cbc99
|
| --- /dev/null
|
| +++ b/mojo/public/dart/third_party/html/lib/src/token.dart
|
| @@ -0,0 +1,141 @@
|
| +/// This library contains token types used by the html5 tokenizer.
|
| +library token;
|
| +
|
| +import 'dart:collection';
|
| +import 'package:source_span/source_span.dart';
|
| +
|
| +/// An html5 token.
|
| +abstract class Token {
|
| + FileSpan span;
|
| +
|
| + int get kind;
|
| +}
|
| +
|
| +abstract class TagToken extends Token {
|
| + String name;
|
| +
|
| + bool selfClosing;
|
| +
|
| + TagToken(this.name, this.selfClosing);
|
| +}
|
| +
|
| +class StartTagToken extends TagToken {
|
| + /// The tag's attributes. A map from the name to the value, where the name
|
| + /// can be a [String] or [AttributeName].
|
| + LinkedHashMap<dynamic, String> data;
|
| +
|
| + /// The attribute spans if requested. Otherwise null.
|
| + List<TagAttribute> attributeSpans;
|
| +
|
| + bool selfClosingAcknowledged;
|
| +
|
| + /// The namespace. This is filled in later during tree building.
|
| + String namespace;
|
| +
|
| + StartTagToken(String name, {this.data, bool selfClosing: false,
|
| + this.selfClosingAcknowledged: false, this.namespace})
|
| + : super(name, selfClosing);
|
| +
|
| + int get kind => TokenKind.startTag;
|
| +}
|
| +
|
| +class EndTagToken extends TagToken {
|
| + EndTagToken(String name, {bool selfClosing: false})
|
| + : super(name, selfClosing);
|
| +
|
| + int get kind => TokenKind.endTag;
|
| +}
|
| +
|
| +abstract class StringToken extends Token {
|
| + StringBuffer _buffer;
|
| +
|
| + String _string;
|
| + String get data {
|
| + if (_string == null) {
|
| + _string = _buffer.toString();
|
| + _buffer = null;
|
| + }
|
| + return _string;
|
| + }
|
| +
|
| + StringToken(string)
|
| + : _string = string,
|
| + _buffer = string == null ? new StringBuffer() : null;
|
| +
|
| + StringToken add(String data) {
|
| + _buffer.write(data);
|
| + return this;
|
| + }
|
| +}
|
| +
|
| +class ParseErrorToken extends StringToken {
|
| + /// Extra information that goes along with the error message.
|
| + Map messageParams;
|
| +
|
| + ParseErrorToken(String data, {this.messageParams}) : super(data);
|
| +
|
| + int get kind => TokenKind.parseError;
|
| +}
|
| +
|
| +class CharactersToken extends StringToken {
|
| + CharactersToken([String data]) : super(data);
|
| +
|
| + int get kind => TokenKind.characters;
|
| +
|
| + /// Replaces the token's [data]. This should only be used to wholly replace
|
| + /// data, not to append data.
|
| + void replaceData(String newData) {
|
| + _string = newData;
|
| + _buffer = null;
|
| + }
|
| +}
|
| +
|
| +class SpaceCharactersToken extends StringToken {
|
| + SpaceCharactersToken([String data]) : super(data);
|
| +
|
| + int get kind => TokenKind.spaceCharacters;
|
| +}
|
| +
|
| +class CommentToken extends StringToken {
|
| + CommentToken([String data]) : super(data);
|
| +
|
| + int get kind => TokenKind.comment;
|
| +}
|
| +
|
| +class DoctypeToken extends Token {
|
| + String publicId;
|
| + String systemId;
|
| + String name = "";
|
| + bool correct;
|
| +
|
| + DoctypeToken({this.publicId, this.systemId, this.correct: false});
|
| +
|
| + int get kind => TokenKind.doctype;
|
| +}
|
| +
|
| +/// These are used by the tokenizer to build up the attribute map.
|
| +/// They're also used by [StartTagToken.attributeSpans] if attribute spans are
|
| +/// requested.
|
| +class TagAttribute {
|
| + String name;
|
| + String value;
|
| +
|
| + // The spans of the attribute. This is not used unless we are computing an
|
| + // attribute span on demand.
|
| + int start;
|
| + int end;
|
| + int startValue;
|
| + int endValue;
|
| +
|
| + TagAttribute();
|
| +}
|
| +
|
| +class TokenKind {
|
| + static const int spaceCharacters = 0;
|
| + static const int characters = 1;
|
| + static const int startTag = 2;
|
| + static const int endTag = 3;
|
| + static const int comment = 4;
|
| + static const int doctype = 5;
|
| + static const int parseError = 6;
|
| +}
|
|
|