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

Side by Side Diff: Source/core/html/track/vtt/VTTToken.h

Issue 77553004: Defer setting type in the WebVTT tokenizer until emitting the token (Closed) Base URL: https://chromium.googlesource.com/chromium/blink.git@master
Patch Set: Created 7 years, 1 month 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 /* 1 /*
2 * Copyright (C) 2011 Google Inc. All rights reserved. 2 * Copyright (C) 2011 Google Inc. All rights reserved.
3 * 3 *
4 * Redistribution and use in source and binary forms, with or without 4 * Redistribution and use in source and binary forms, with or without
5 * modification, are permitted provided that the following conditions are 5 * modification, are permitted provided that the following conditions are
6 * met: 6 * met:
7 * 7 *
8 * * Redistributions of source code must retain the above copyright 8 * * Redistributions of source code must retain the above copyright
9 * notice, this list of conditions and the following disclaimer. 9 * notice, this list of conditions and the following disclaimer.
10 * * Redistributions in binary form must reproduce the above 10 * * Redistributions in binary form must reproduce the above
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after
49 class VTTToken { 49 class VTTToken {
50 WTF_MAKE_NONCOPYABLE(VTTToken); 50 WTF_MAKE_NONCOPYABLE(VTTToken);
51 WTF_MAKE_FAST_ALLOCATED; 51 WTF_MAKE_FAST_ALLOCATED;
52 public: 52 public:
53 typedef VTTTokenTypes Type; 53 typedef VTTTokenTypes Type;
54 54
55 VTTToken() { clear(); } 55 VTTToken() { clear(); }
56 56
57 void appendToName(UChar character) 57 void appendToName(UChar character)
58 { 58 {
59 ASSERT(m_type == VTTTokenTypes::StartTag || m_type == VTTTokenTypes::End Tag);
60 ASSERT(character); 59 ASSERT(character);
61 m_data.append(character); 60 m_data.append(character);
62 } 61 }
63 62
64 Type::Type type() const { return m_type; } 63 Type::Type type() const { return m_type; }
64 void setType(Type::Type type) { m_type = type; }
65 65
66 StringBuilder& name() 66 StringBuilder& name()
67 { 67 {
68 return m_data; 68 return m_data;
69 } 69 }
70 70
71 StringBuilder& characters() 71 StringBuilder& characters()
72 { 72 {
73 ASSERT(m_type == Type::Character || m_type == Type::TimestampTag);
74 return m_data; 73 return m_data;
75 } 74 }
76 75
77 // Starting a character token works slightly differently than starting
78 // other types of tokens because we want to save a per-character branch.
79 void ensureIsCharacterToken()
80 {
81 ASSERT(m_type == Type::Uninitialized || m_type == Type::Character);
82 m_type = Type::Character;
83 }
84
85 void appendToCharacter(char character) 76 void appendToCharacter(char character)
86 { 77 {
87 ASSERT(m_type == Type::Character);
88 m_data.append(character); 78 m_data.append(character);
89 } 79 }
90 80
91 void appendToCharacter(UChar character) 81 void appendToCharacter(UChar character)
92 { 82 {
93 ASSERT(m_type == Type::Character);
94 m_data.append(character); 83 m_data.append(character);
95 } 84 }
96 85
97 void appendToCharacter(const StringBuilder& characters) 86 void appendToCharacter(const StringBuilder& characters)
98 { 87 {
99 ASSERT(m_type == Type::Character);
100 m_data.append(characters); 88 m_data.append(characters);
101 } 89 }
102 90
103 void beginEmptyStartTag() 91 void beginEmptyStartTag()
104 { 92 {
105 ASSERT(m_type == Type::Uninitialized);
106 m_type = Type::StartTag;
107 m_data.clear(); 93 m_data.clear();
108 } 94 }
109 95
110 void beginStartTag(UChar character) 96 void beginStartTag(UChar character)
111 { 97 {
112 ASSERT(character); 98 ASSERT(character);
113 ASSERT(m_type == Type::Uninitialized);
114 m_type = Type::StartTag;
115 m_data.append(character); 99 m_data.append(character);
116 } 100 }
117 101
118 void beginEndTag(LChar character) 102 void beginEndTag(LChar character)
119 { 103 {
120 ASSERT(m_type == Type::Uninitialized);
121 m_type = Type::EndTag;
122 m_data.append(character); 104 m_data.append(character);
123 } 105 }
124 106
125 void beginTimestampTag(UChar character) 107 void beginTimestampTag(UChar character)
jochen (gone - plz use gerrit) 2013/11/20 14:09:37 what's the point of having all this different meth
126 { 108 {
127 ASSERT(character); 109 ASSERT(character);
128 ASSERT(m_type == Type::Uninitialized);
129 m_type = Type::TimestampTag;
130 m_data.append(character); 110 m_data.append(character);
131 } 111 }
132 112
133 void appendToTimestamp(UChar character) 113 void appendToTimestamp(UChar character)
134 { 114 {
135 ASSERT(character); 115 ASSERT(character);
136 ASSERT(m_type == Type::TimestampTag);
137 m_data.append(character); 116 m_data.append(character);
138 } 117 }
139 118
140 void appendToClass(UChar character) 119 void appendToClass(UChar character)
141 { 120 {
142 appendToStartType(character); 121 appendToStartType(character);
143 } 122 }
144 123
145 void addNewClass() 124 void addNewClass()
146 { 125 {
147 ASSERT(m_type == Type::StartTag);
148 if (!m_classes.isEmpty()) 126 if (!m_classes.isEmpty())
149 m_classes.append(' '); 127 m_classes.append(' ');
150 m_classes.append(m_currentBuffer); 128 m_classes.append(m_currentBuffer);
151 m_currentBuffer.clear(); 129 m_currentBuffer.clear();
152 } 130 }
153 131
154 StringBuilder& classes() 132 StringBuilder& classes()
155 { 133 {
156 return m_classes; 134 return m_classes;
157 } 135 }
158 136
159 void appendToAnnotation(UChar character) 137 void appendToAnnotation(UChar character)
160 { 138 {
161 appendToStartType(character); 139 appendToStartType(character);
162 } 140 }
163 141
164 void addNewAnnotation() 142 void addNewAnnotation()
165 { 143 {
166 ASSERT(m_type == Type::StartTag);
167 m_annotation.clear(); 144 m_annotation.clear();
168 m_annotation.append(m_currentBuffer); 145 m_annotation.append(m_currentBuffer);
169 m_currentBuffer.clear(); 146 m_currentBuffer.clear();
170 } 147 }
171 148
172 StringBuilder& annotation() 149 StringBuilder& annotation()
173 { 150 {
174 return m_annotation; 151 return m_annotation;
175 } 152 }
176 153
177 void clear() 154 void clear()
178 { 155 {
179 m_type = Type::Uninitialized; 156 m_type = Type::Uninitialized;
180 m_data.clear(); 157 m_data.clear();
181 m_annotation.clear(); 158 m_annotation.clear();
182 m_classes.clear(); 159 m_classes.clear();
183 m_currentBuffer.clear(); 160 m_currentBuffer.clear();
184 } 161 }
185 162
186 private: 163 private:
187 void appendToStartType(UChar character) 164 void appendToStartType(UChar character)
188 { 165 {
189 ASSERT(character); 166 ASSERT(character);
190 ASSERT(m_type == Type::StartTag);
191 m_currentBuffer.append(character); 167 m_currentBuffer.append(character);
192 } 168 }
193 169
194 Type::Type m_type; 170 Type::Type m_type;
195 StringBuilder m_data; 171 StringBuilder m_data;
196 StringBuilder m_annotation; 172 StringBuilder m_annotation;
197 StringBuilder m_classes; 173 StringBuilder m_classes;
198 StringBuilder m_currentBuffer; 174 StringBuilder m_currentBuffer;
199 }; 175 };
200 176
201 } 177 }
202 178
203 #endif 179 #endif
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698