Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(411)

Side by Side Diff: lib/src/token.dart

Issue 987433005: remove most string concat, fixes #7 (Closed) Base URL: git@github.com:dart-lang/html.git@master
Patch Set: Created 5 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 /// This library contains token types used by the html5 tokenizer. 1 /// This library contains token types used by the html5 tokenizer.
2 library token; 2 library token;
3 3
4 import 'dart:collection'; 4 import 'dart:collection';
5 import 'package:source_span/source_span.dart'; 5 import 'package:source_span/source_span.dart';
6 6
7 /// An html5 token. 7 /// An html5 token.
8 abstract class Token { 8 abstract class Token {
9 FileSpan span; 9 FileSpan span;
10 10
(...skipping 29 matching lines...) Expand all
40 } 40 }
41 41
42 class EndTagToken extends TagToken { 42 class EndTagToken extends TagToken {
43 EndTagToken(String name, {bool selfClosing: false}) 43 EndTagToken(String name, {bool selfClosing: false})
44 : super(name, selfClosing); 44 : super(name, selfClosing);
45 45
46 int get kind => TokenKind.endTag; 46 int get kind => TokenKind.endTag;
47 } 47 }
48 48
49 abstract class StringToken extends Token { 49 abstract class StringToken extends Token {
50 String data; 50 StringBuffer _buffer;
51 StringToken(this.data); 51
52 String _string;
53 String get data {
54 if (_string == null) {
55 _string = _buffer.toString();
56 _buffer = null;
57 }
58 return _string;
59 }
60
61 StringToken(string)
62 : _string = string,
63 _buffer = string == null ? new StringBuffer() : null;
64
65 StringToken add(String data) {
66 _buffer.write(data);
67 return this;
68 }
52 } 69 }
53 70
54 class ParseErrorToken extends StringToken { 71 class ParseErrorToken extends StringToken {
55 /// Extra information that goes along with the error message. 72 /// Extra information that goes along with the error message.
56 Map messageParams; 73 Map messageParams;
57 74
58 ParseErrorToken(String data, {this.messageParams}) : super(data); 75 ParseErrorToken(String data, {this.messageParams}) : super(data);
59 76
60 int get kind => TokenKind.parseError; 77 int get kind => TokenKind.parseError;
61 } 78 }
62 79
63 class CharactersToken extends StringToken { 80 class CharactersToken extends StringToken {
64 CharactersToken([String data]) : super(data); 81 CharactersToken([String data]) : super(data);
65 82
66 int get kind => TokenKind.characters; 83 int get kind => TokenKind.characters;
84
85 /// Replaces the token's [data]. This should only be used to wholly replace
86 /// data, not to append data.
87 void replaceData(String newData) {
88 _string = newData;
89 _buffer = null;
90 }
67 } 91 }
68 92
69 class SpaceCharactersToken extends StringToken { 93 class SpaceCharactersToken extends StringToken {
70 SpaceCharactersToken([String data]) : super(data); 94 SpaceCharactersToken([String data]) : super(data);
71 95
72 int get kind => TokenKind.spaceCharacters; 96 int get kind => TokenKind.spaceCharacters;
73 } 97 }
74 98
75 class CommentToken extends StringToken { 99 class CommentToken extends StringToken {
76 CommentToken([String data]) : super(data); 100 CommentToken([String data]) : super(data);
(...skipping 19 matching lines...) Expand all
96 String name; 120 String name;
97 String value; 121 String value;
98 122
99 // The spans of the attribute. This is not used unless we are computing an 123 // The spans of the attribute. This is not used unless we are computing an
100 // attribute span on demand. 124 // attribute span on demand.
101 int start; 125 int start;
102 int end; 126 int end;
103 int startValue; 127 int startValue;
104 int endValue; 128 int endValue;
105 129
106 TagAttribute(this.name, [this.value = '']); 130 TagAttribute();
107 } 131 }
108 132
109 class TokenKind { 133 class TokenKind {
110 static const int spaceCharacters = 0; 134 static const int spaceCharacters = 0;
111 static const int characters = 1; 135 static const int characters = 1;
112 static const int startTag = 2; 136 static const int startTag = 2;
113 static const int endTag = 3; 137 static const int endTag = 3;
114 static const int comment = 4; 138 static const int comment = 4;
115 static const int doctype = 5; 139 static const int doctype = 5;
116 static const int parseError = 6; 140 static const int parseError = 6;
117 } 141 }
OLDNEW
« no previous file with comments | « lib/parser.dart ('k') | lib/src/tokenizer.dart » ('j') | lib/src/tokenizer.dart » ('J')

Powered by Google App Engine
This is Rietveld 408576698