Changeset 61793 in webkit
- Timestamp:
- Jun 24, 2010 3:39:59 PM (14 years ago)
- Location:
- trunk/WebCore
- Files:
-
- 3 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/WebCore/ChangeLog
r61791 r61793 1 2010-06-24 Adam Barth <abarth@webkit.org> 2 3 Reviewed by Eric Seidel. 4 5 Sketch out BeforeHTMLMode state 6 https://bugs.webkit.org/show_bug.cgi?id=41133 7 8 In this patch, we switch the TreeBuidler over to using AtomicHTMLTokens 9 and sketch out another state. These states don't actually do anything 10 yet, I'm still just getting the structure of the spec into the code so 11 we can implement the details incrementally. 12 13 * html/HTMLTreeBuilder.cpp: 14 (WebCore::HTMLTreeBuilder::constructTreeFromToken): 15 (WebCore::HTMLTreeBuilder::processToken): 16 (WebCore::HTMLTreeBuilder::insertDoctype): 17 (WebCore::HTMLTreeBuilder::insertComment): 18 * html/HTMLTreeBuilder.h: 19 (WebCore::HTMLTreeBuilder::parseError): 20 1 21 2010-06-24 Adam Barth <abarth@webkit.org> 2 22 -
trunk/WebCore/html/HTMLTreeBuilder.cpp
r61791 r61793 207 207 } 208 208 209 PassRefPtr<Node> HTMLTreeBuilder::constructTreeFromToken(HTMLToken& token)209 PassRefPtr<Node> HTMLTreeBuilder::constructTreeFromToken(HTMLToken& rawToken) 210 210 { 211 211 // Make MSVC ignore our unreachable code for now. 212 212 if (true) 213 return passTokenToLegacyParser(token); 213 return passTokenToLegacyParser(rawToken); 214 215 AtomicHTMLToken token(rawToken); 214 216 215 217 // HTML5 expects the tokenizer to call the parser every time a character is … … 218 220 // the spec in only handling one character at a time. 219 221 if (token.type() == HTMLToken::Character) { 220 HTMLToken::DataVector characters = token.characters();221 HTMLToken::DataVector::const_iterator itr = characters.begin();222 for ( ;itr; ++itr)223 processToken(token, *itr);222 StringImpl* characters = token.characters().impl(); 223 // FIXME: Calling processToken for each character is probably slow. 224 for (unsigned i = 0; i < characters->length(); ++i) 225 processToken(token, (*characters)[i]); 224 226 return 0; // FIXME: Should we be returning the Text node? 225 227 } … … 227 229 } 228 230 229 PassRefPtr<Node> HTMLTreeBuilder::processToken( HTMLToken& token, UChar cc)231 PassRefPtr<Node> HTMLTreeBuilder::processToken(AtomicHTMLToken& token, UChar cc) 230 232 { 231 233 reprocessToken: … … 243 245 if (cc == '\t' || cc == '\x0A' || cc == '\x0C' || cc == '\x0D' || cc == ' ') 244 246 return 0; 245 // Fall through247 break; 246 248 case HTMLToken::StartTag: 247 249 case HTMLToken::EndTag: 248 250 case HTMLToken::EndOfFile: 249 notImplemented(); 250 setInsertionMode(BeforeHTMLMode); 251 goto reprocessToken; 251 break; 252 252 } 253 ASSERT_NOT_REACHED(); 254 break; 255 } 256 case BeforeHTMLMode: 253 notImplemented(); 254 parseError(token); 255 setInsertionMode(BeforeHTMLMode); 256 goto reprocessToken; 257 } 258 case BeforeHTMLMode: { 259 switch (token.type()) { 260 case HTMLToken::Uninitialized: 261 ASSERT_NOT_REACHED(); 262 break; 263 case HTMLToken::DOCTYPE: 264 parseError(token); 265 return 0; 266 case HTMLToken::Comment: 267 return insertComment(token); 268 case HTMLToken::Character: 269 if (cc == '\t' || cc == '\x0A' || cc == '\x0C' || cc == '\x0D' || cc == ' ') 270 return 0; 271 break; 272 case HTMLToken::StartTag: 273 if (token.name() == htmlTag) { 274 notImplemented(); 275 setInsertionMode(BeforeHeadMode); 276 return 0; 277 } 278 break; 279 case HTMLToken::EndTag: 280 if (token.name() == headTag || token.name() == bodyTag || token.name() == htmlTag || token.name() == brTag) 281 break; 282 parseError(token); 283 return 0; 284 case HTMLToken::EndOfFile: 285 break; 286 } 287 notImplemented(); 288 setInsertionMode(BeforeHeadMode); 289 goto reprocessToken; 290 } 257 291 case BeforeHeadMode: 258 292 case InHeadMode: … … 283 317 } 284 318 285 PassRefPtr<Node> HTMLTreeBuilder::insertDoctype( HTMLToken& token)319 PassRefPtr<Node> HTMLTreeBuilder::insertDoctype(AtomicHTMLToken& token) 286 320 { 287 321 ASSERT_UNUSED(token, token.type() == HTMLToken::DOCTYPE); … … 289 323 } 290 324 291 PassRefPtr<Node> HTMLTreeBuilder::insertComment( HTMLToken& token)325 PassRefPtr<Node> HTMLTreeBuilder::insertComment(AtomicHTMLToken& token) 292 326 { 293 327 ASSERT_UNUSED(token, token.type() == HTMLToken::Comment); -
trunk/WebCore/html/HTMLTreeBuilder.h
r61742 r61793 37 37 namespace WebCore { 38 38 39 class AtomicHTMLToken; 39 40 class Document; 40 41 class DocumentFragment; … … 100 101 101 102 PassRefPtr<Node> passTokenToLegacyParser(HTMLToken&); 102 PassRefPtr<Node> processToken( HTMLToken&, UChar cc = 0);103 PassRefPtr<Node> processToken(AtomicHTMLToken&, UChar cc = 0); 103 104 104 PassRefPtr<Node> insertDoctype(HTMLToken&); 105 PassRefPtr<Node> insertComment(HTMLToken&); 105 PassRefPtr<Node> insertDoctype(AtomicHTMLToken&); 106 PassRefPtr<Node> insertComment(AtomicHTMLToken&); 107 108 // FIXME: Implement error reporting. 109 void parseError(AtomicHTMLToken&) { } 106 110 107 111 void handleScriptStartTag();
Note: See TracChangeset
for help on using the changeset viewer.