Index: lib/src/token.dart |
diff --git a/lib/src/token.dart b/lib/src/token.dart |
index e4f25e5db98f7c3d647c55dfabcf8815f8288afa..9a2843c5f8cee0fb00371b1a15796c61f96cbc99 100644 |
--- a/lib/src/token.dart |
+++ b/lib/src/token.dart |
@@ -47,8 +47,25 @@ class EndTagToken extends TagToken { |
} |
abstract class StringToken extends Token { |
- String data; |
- StringToken(this.data); |
+ 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 { |
@@ -64,6 +81,13 @@ 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 { |
@@ -103,7 +127,7 @@ class TagAttribute { |
int startValue; |
int endValue; |
- TagAttribute(this.name, [this.value = '']); |
+ TagAttribute(); |
} |
class TokenKind { |