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

Side by Side Diff: sky/engine/core/html/parser/HTMLTokenizer.cpp

Issue 678913002: Remove ScriptData* states (Closed) Base URL: git@github.com:domokit/mojo.git@master
Patch Set: Created 6 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
« no previous file with comments | « sky/engine/core/html/parser/HTMLTokenizer.h ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 /* 1 /*
2 * Copyright (C) 2008 Apple Inc. All Rights Reserved. 2 * Copyright (C) 2008 Apple Inc. All Rights Reserved.
3 * Copyright (C) 2009 Torch Mobile, Inc. http://www.torchmobile.com/ 3 * Copyright (C) 2009 Torch Mobile, Inc. http://www.torchmobile.com/
4 * Copyright (C) 2010 Google, Inc. All Rights Reserved. 4 * Copyright (C) 2010 Google, Inc. All Rights Reserved.
5 * 5 *
6 * Redistribution and use in source and binary forms, with or without 6 * Redistribution and use in source and binary forms, with or without
7 * modification, are permitted provided that the following conditions 7 * modification, are permitted provided that the following conditions
8 * are met: 8 * are met:
9 * 1. Redistributions of source code must retain the above copyright 9 * 1. Redistributions of source code must retain the above copyright
10 * notice, this list of conditions and the following disclaimer. 10 * notice, this list of conditions and the following disclaimer.
(...skipping 68 matching lines...) Expand 10 before | Expand all | Expand 10 after
79 return true; 79 return true;
80 80
81 return equal(string.impl(), vector.data(), vector.size()); 81 return equal(string.impl(), vector.data(), vector.size());
82 } 82 }
83 83
84 static inline bool isEndTagBufferingState(HTMLTokenizer::State state) 84 static inline bool isEndTagBufferingState(HTMLTokenizer::State state)
85 { 85 {
86 switch (state) { 86 switch (state) {
87 case HTMLTokenizer::RAWTEXTEndTagOpenState: 87 case HTMLTokenizer::RAWTEXTEndTagOpenState:
88 case HTMLTokenizer::RAWTEXTEndTagNameState: 88 case HTMLTokenizer::RAWTEXTEndTagNameState:
89 case HTMLTokenizer::ScriptDataEndTagOpenState:
90 case HTMLTokenizer::ScriptDataEndTagNameState:
91 case HTMLTokenizer::ScriptDataEscapedEndTagOpenState:
92 case HTMLTokenizer::ScriptDataEscapedEndTagNameState:
93 return true; 89 return true;
94 default: 90 default:
95 return false; 91 return false;
96 } 92 }
97 } 93 }
98 94
99 #define HTML_BEGIN_STATE(stateName) BEGIN_STATE(HTMLTokenizer, stateName) 95 #define HTML_BEGIN_STATE(stateName) BEGIN_STATE(HTMLTokenizer, stateName)
100 #define HTML_RECONSUME_IN(stateName) RECONSUME_IN(HTMLTokenizer, stateName) 96 #define HTML_RECONSUME_IN(stateName) RECONSUME_IN(HTMLTokenizer, stateName)
101 #define HTML_ADVANCE_TO(stateName) ADVANCE_TO(HTMLTokenizer, stateName) 97 #define HTML_ADVANCE_TO(stateName) ADVANCE_TO(HTMLTokenizer, stateName)
102 #define HTML_SWITCH_TO(stateName) SWITCH_TO(HTMLTokenizer, stateName) 98 #define HTML_SWITCH_TO(stateName) SWITCH_TO(HTMLTokenizer, stateName)
(...skipping 121 matching lines...) Expand 10 before | Expand all | Expand 10 after
224 HTML_ADVANCE_TO(RAWTEXTLessThanSignState); 220 HTML_ADVANCE_TO(RAWTEXTLessThanSignState);
225 else if (cc == kEndOfFileMarker) 221 else if (cc == kEndOfFileMarker)
226 return emitEndOfFile(source); 222 return emitEndOfFile(source);
227 else { 223 else {
228 bufferCharacter(cc); 224 bufferCharacter(cc);
229 HTML_ADVANCE_TO(RAWTEXTState); 225 HTML_ADVANCE_TO(RAWTEXTState);
230 } 226 }
231 } 227 }
232 END_STATE() 228 END_STATE()
233 229
234 HTML_BEGIN_STATE(ScriptDataState) {
235 if (cc == '<')
236 HTML_ADVANCE_TO(ScriptDataLessThanSignState);
237 else if (cc == kEndOfFileMarker)
238 return emitEndOfFile(source);
239 else {
240 bufferCharacter(cc);
241 HTML_ADVANCE_TO(ScriptDataState);
242 }
243 }
244 END_STATE()
245
246 HTML_BEGIN_STATE(TagOpenState) { 230 HTML_BEGIN_STATE(TagOpenState) {
247 if (cc == '!') 231 if (cc == '!')
248 HTML_ADVANCE_TO(MarkupDeclarationOpenState); 232 HTML_ADVANCE_TO(MarkupDeclarationOpenState);
249 else if (cc == '/') 233 else if (cc == '/')
250 HTML_ADVANCE_TO(EndTagOpenState); 234 HTML_ADVANCE_TO(EndTagOpenState);
251 else if (isASCIIUpper(cc)) { 235 else if (isASCIIUpper(cc)) {
252 m_token->beginStartTag(toLowerCase(cc)); 236 m_token->beginStartTag(toLowerCase(cc));
253 HTML_ADVANCE_TO(TagNameState); 237 HTML_ADVANCE_TO(TagNameState);
254 } else if (isASCIILower(cc)) { 238 } else if (isASCIILower(cc)) {
255 m_token->beginStartTag(cc); 239 m_token->beginStartTag(cc);
(...skipping 114 matching lines...) Expand 10 before | Expand all | Expand 10 after
370 bufferCharacter('<'); 354 bufferCharacter('<');
371 bufferCharacter('/'); 355 bufferCharacter('/');
372 m_token->appendToCharacter(m_temporaryBuffer); 356 m_token->appendToCharacter(m_temporaryBuffer);
373 m_bufferedEndTagName.clear(); 357 m_bufferedEndTagName.clear();
374 m_temporaryBuffer.clear(); 358 m_temporaryBuffer.clear();
375 HTML_RECONSUME_IN(RAWTEXTState); 359 HTML_RECONSUME_IN(RAWTEXTState);
376 } 360 }
377 } 361 }
378 END_STATE() 362 END_STATE()
379 363
380 HTML_BEGIN_STATE(ScriptDataLessThanSignState) {
381 if (cc == '/') {
382 m_temporaryBuffer.clear();
383 ASSERT(m_bufferedEndTagName.isEmpty());
384 HTML_ADVANCE_TO(ScriptDataEndTagOpenState);
385 } else if (cc == '!') {
386 bufferCharacter('<');
387 bufferCharacter('!');
388 HTML_ADVANCE_TO(ScriptDataEscapeStartState);
389 } else {
390 bufferCharacter('<');
391 HTML_RECONSUME_IN(ScriptDataState);
392 }
393 }
394 END_STATE()
395
396 HTML_BEGIN_STATE(ScriptDataEndTagOpenState) {
397 if (isASCIIUpper(cc)) {
398 m_temporaryBuffer.append(static_cast<LChar>(cc));
399 addToPossibleEndTag(static_cast<LChar>(toLowerCase(cc)));
400 HTML_ADVANCE_TO(ScriptDataEndTagNameState);
401 } else if (isASCIILower(cc)) {
402 m_temporaryBuffer.append(static_cast<LChar>(cc));
403 addToPossibleEndTag(static_cast<LChar>(cc));
404 HTML_ADVANCE_TO(ScriptDataEndTagNameState);
405 } else {
406 bufferCharacter('<');
407 bufferCharacter('/');
408 HTML_RECONSUME_IN(ScriptDataState);
409 }
410 }
411 END_STATE()
412
413 HTML_BEGIN_STATE(ScriptDataEndTagNameState) {
414 if (isASCIIUpper(cc)) {
415 m_temporaryBuffer.append(static_cast<LChar>(cc));
416 addToPossibleEndTag(static_cast<LChar>(toLowerCase(cc)));
417 HTML_ADVANCE_TO(ScriptDataEndTagNameState);
418 } else if (isASCIILower(cc)) {
419 m_temporaryBuffer.append(static_cast<LChar>(cc));
420 addToPossibleEndTag(static_cast<LChar>(cc));
421 HTML_ADVANCE_TO(ScriptDataEndTagNameState);
422 } else {
423 if (isTokenizerWhitespace(cc)) {
424 if (isAppropriateEndTag()) {
425 m_temporaryBuffer.append(static_cast<LChar>(cc));
426 FLUSH_AND_ADVANCE_TO(BeforeAttributeNameState);
427 }
428 } else if (cc == '/') {
429 if (isAppropriateEndTag()) {
430 m_temporaryBuffer.append(static_cast<LChar>(cc));
431 FLUSH_AND_ADVANCE_TO(SelfClosingStartTagState);
432 }
433 } else if (cc == '>') {
434 if (isAppropriateEndTag()) {
435 m_temporaryBuffer.append(static_cast<LChar>(cc));
436 return flushEmitAndResumeIn(source, HTMLTokenizer::DataState );
437 }
438 }
439 bufferCharacter('<');
440 bufferCharacter('/');
441 m_token->appendToCharacter(m_temporaryBuffer);
442 m_bufferedEndTagName.clear();
443 m_temporaryBuffer.clear();
444 HTML_RECONSUME_IN(ScriptDataState);
445 }
446 }
447 END_STATE()
448
449 HTML_BEGIN_STATE(ScriptDataEscapeStartState) {
450 if (cc == '-') {
451 bufferCharacter(cc);
452 HTML_ADVANCE_TO(ScriptDataEscapeStartDashState);
453 } else
454 HTML_RECONSUME_IN(ScriptDataState);
455 }
456 END_STATE()
457
458 HTML_BEGIN_STATE(ScriptDataEscapeStartDashState) {
459 if (cc == '-') {
460 bufferCharacter(cc);
461 HTML_ADVANCE_TO(ScriptDataEscapedDashDashState);
462 } else
463 HTML_RECONSUME_IN(ScriptDataState);
464 }
465 END_STATE()
466
467 HTML_BEGIN_STATE(ScriptDataEscapedState) {
468 if (cc == '-') {
469 bufferCharacter(cc);
470 HTML_ADVANCE_TO(ScriptDataEscapedDashState);
471 } else if (cc == '<')
472 HTML_ADVANCE_TO(ScriptDataEscapedLessThanSignState);
473 else if (cc == kEndOfFileMarker) {
474 parseError();
475 HTML_RECONSUME_IN(DataState);
476 } else {
477 bufferCharacter(cc);
478 HTML_ADVANCE_TO(ScriptDataEscapedState);
479 }
480 }
481 END_STATE()
482
483 HTML_BEGIN_STATE(ScriptDataEscapedDashState) {
484 if (cc == '-') {
485 bufferCharacter(cc);
486 HTML_ADVANCE_TO(ScriptDataEscapedDashDashState);
487 } else if (cc == '<')
488 HTML_ADVANCE_TO(ScriptDataEscapedLessThanSignState);
489 else if (cc == kEndOfFileMarker) {
490 parseError();
491 HTML_RECONSUME_IN(DataState);
492 } else {
493 bufferCharacter(cc);
494 HTML_ADVANCE_TO(ScriptDataEscapedState);
495 }
496 }
497 END_STATE()
498
499 HTML_BEGIN_STATE(ScriptDataEscapedDashDashState) {
500 if (cc == '-') {
501 bufferCharacter(cc);
502 HTML_ADVANCE_TO(ScriptDataEscapedDashDashState);
503 } else if (cc == '<')
504 HTML_ADVANCE_TO(ScriptDataEscapedLessThanSignState);
505 else if (cc == '>') {
506 bufferCharacter(cc);
507 HTML_ADVANCE_TO(ScriptDataState);
508 } else if (cc == kEndOfFileMarker) {
509 parseError();
510 HTML_RECONSUME_IN(DataState);
511 } else {
512 bufferCharacter(cc);
513 HTML_ADVANCE_TO(ScriptDataEscapedState);
514 }
515 }
516 END_STATE()
517
518 HTML_BEGIN_STATE(ScriptDataEscapedLessThanSignState) {
519 if (cc == '/') {
520 m_temporaryBuffer.clear();
521 ASSERT(m_bufferedEndTagName.isEmpty());
522 HTML_ADVANCE_TO(ScriptDataEscapedEndTagOpenState);
523 } else if (isASCIIUpper(cc)) {
524 bufferCharacter('<');
525 bufferCharacter(cc);
526 m_temporaryBuffer.clear();
527 m_temporaryBuffer.append(toLowerCase(cc));
528 HTML_ADVANCE_TO(ScriptDataDoubleEscapeStartState);
529 } else if (isASCIILower(cc)) {
530 bufferCharacter('<');
531 bufferCharacter(cc);
532 m_temporaryBuffer.clear();
533 m_temporaryBuffer.append(static_cast<LChar>(cc));
534 HTML_ADVANCE_TO(ScriptDataDoubleEscapeStartState);
535 } else {
536 bufferCharacter('<');
537 HTML_RECONSUME_IN(ScriptDataEscapedState);
538 }
539 }
540 END_STATE()
541
542 HTML_BEGIN_STATE(ScriptDataEscapedEndTagOpenState) {
543 if (isASCIIUpper(cc)) {
544 m_temporaryBuffer.append(static_cast<LChar>(cc));
545 addToPossibleEndTag(static_cast<LChar>(toLowerCase(cc)));
546 HTML_ADVANCE_TO(ScriptDataEscapedEndTagNameState);
547 } else if (isASCIILower(cc)) {
548 m_temporaryBuffer.append(static_cast<LChar>(cc));
549 addToPossibleEndTag(static_cast<LChar>(cc));
550 HTML_ADVANCE_TO(ScriptDataEscapedEndTagNameState);
551 } else {
552 bufferCharacter('<');
553 bufferCharacter('/');
554 HTML_RECONSUME_IN(ScriptDataEscapedState);
555 }
556 }
557 END_STATE()
558
559 HTML_BEGIN_STATE(ScriptDataEscapedEndTagNameState) {
560 if (isASCIIUpper(cc)) {
561 m_temporaryBuffer.append(static_cast<LChar>(cc));
562 addToPossibleEndTag(static_cast<LChar>(toLowerCase(cc)));
563 HTML_ADVANCE_TO(ScriptDataEscapedEndTagNameState);
564 } else if (isASCIILower(cc)) {
565 m_temporaryBuffer.append(static_cast<LChar>(cc));
566 addToPossibleEndTag(static_cast<LChar>(cc));
567 HTML_ADVANCE_TO(ScriptDataEscapedEndTagNameState);
568 } else {
569 if (isTokenizerWhitespace(cc)) {
570 if (isAppropriateEndTag()) {
571 m_temporaryBuffer.append(static_cast<LChar>(cc));
572 FLUSH_AND_ADVANCE_TO(BeforeAttributeNameState);
573 }
574 } else if (cc == '/') {
575 if (isAppropriateEndTag()) {
576 m_temporaryBuffer.append(static_cast<LChar>(cc));
577 FLUSH_AND_ADVANCE_TO(SelfClosingStartTagState);
578 }
579 } else if (cc == '>') {
580 if (isAppropriateEndTag()) {
581 m_temporaryBuffer.append(static_cast<LChar>(cc));
582 return flushEmitAndResumeIn(source, HTMLTokenizer::DataState );
583 }
584 }
585 bufferCharacter('<');
586 bufferCharacter('/');
587 m_token->appendToCharacter(m_temporaryBuffer);
588 m_bufferedEndTagName.clear();
589 m_temporaryBuffer.clear();
590 HTML_RECONSUME_IN(ScriptDataEscapedState);
591 }
592 }
593 END_STATE()
594
595 HTML_BEGIN_STATE(ScriptDataDoubleEscapeStartState) {
596 if (isTokenizerWhitespace(cc) || cc == '/' || cc == '>') {
597 bufferCharacter(cc);
598 if (temporaryBufferIs(HTMLNames::scriptTag.localName()))
599 HTML_ADVANCE_TO(ScriptDataDoubleEscapedState);
600 else
601 HTML_ADVANCE_TO(ScriptDataEscapedState);
602 } else if (isASCIIUpper(cc)) {
603 bufferCharacter(cc);
604 m_temporaryBuffer.append(toLowerCase(cc));
605 HTML_ADVANCE_TO(ScriptDataDoubleEscapeStartState);
606 } else if (isASCIILower(cc)) {
607 bufferCharacter(cc);
608 m_temporaryBuffer.append(static_cast<LChar>(cc));
609 HTML_ADVANCE_TO(ScriptDataDoubleEscapeStartState);
610 } else
611 HTML_RECONSUME_IN(ScriptDataEscapedState);
612 }
613 END_STATE()
614
615 HTML_BEGIN_STATE(ScriptDataDoubleEscapedState) {
616 if (cc == '-') {
617 bufferCharacter(cc);
618 HTML_ADVANCE_TO(ScriptDataDoubleEscapedDashState);
619 } else if (cc == '<') {
620 bufferCharacter(cc);
621 HTML_ADVANCE_TO(ScriptDataDoubleEscapedLessThanSignState);
622 } else if (cc == kEndOfFileMarker) {
623 parseError();
624 HTML_RECONSUME_IN(DataState);
625 } else {
626 bufferCharacter(cc);
627 HTML_ADVANCE_TO(ScriptDataDoubleEscapedState);
628 }
629 }
630 END_STATE()
631
632 HTML_BEGIN_STATE(ScriptDataDoubleEscapedDashState) {
633 if (cc == '-') {
634 bufferCharacter(cc);
635 HTML_ADVANCE_TO(ScriptDataDoubleEscapedDashDashState);
636 } else if (cc == '<') {
637 bufferCharacter(cc);
638 HTML_ADVANCE_TO(ScriptDataDoubleEscapedLessThanSignState);
639 } else if (cc == kEndOfFileMarker) {
640 parseError();
641 HTML_RECONSUME_IN(DataState);
642 } else {
643 bufferCharacter(cc);
644 HTML_ADVANCE_TO(ScriptDataDoubleEscapedState);
645 }
646 }
647 END_STATE()
648
649 HTML_BEGIN_STATE(ScriptDataDoubleEscapedDashDashState) {
650 if (cc == '-') {
651 bufferCharacter(cc);
652 HTML_ADVANCE_TO(ScriptDataDoubleEscapedDashDashState);
653 } else if (cc == '<') {
654 bufferCharacter(cc);
655 HTML_ADVANCE_TO(ScriptDataDoubleEscapedLessThanSignState);
656 } else if (cc == '>') {
657 bufferCharacter(cc);
658 HTML_ADVANCE_TO(ScriptDataState);
659 } else if (cc == kEndOfFileMarker) {
660 parseError();
661 HTML_RECONSUME_IN(DataState);
662 } else {
663 bufferCharacter(cc);
664 HTML_ADVANCE_TO(ScriptDataDoubleEscapedState);
665 }
666 }
667 END_STATE()
668
669 HTML_BEGIN_STATE(ScriptDataDoubleEscapedLessThanSignState) {
670 if (cc == '/') {
671 bufferCharacter(cc);
672 m_temporaryBuffer.clear();
673 HTML_ADVANCE_TO(ScriptDataDoubleEscapeEndState);
674 } else
675 HTML_RECONSUME_IN(ScriptDataDoubleEscapedState);
676 }
677 END_STATE()
678
679 HTML_BEGIN_STATE(ScriptDataDoubleEscapeEndState) {
680 if (isTokenizerWhitespace(cc) || cc == '/' || cc == '>') {
681 bufferCharacter(cc);
682 if (temporaryBufferIs(HTMLNames::scriptTag.localName()))
683 HTML_ADVANCE_TO(ScriptDataEscapedState);
684 else
685 HTML_ADVANCE_TO(ScriptDataDoubleEscapedState);
686 } else if (isASCIIUpper(cc)) {
687 bufferCharacter(cc);
688 m_temporaryBuffer.append(toLowerCase(cc));
689 HTML_ADVANCE_TO(ScriptDataDoubleEscapeEndState);
690 } else if (isASCIILower(cc)) {
691 bufferCharacter(cc);
692 m_temporaryBuffer.append(static_cast<LChar>(cc));
693 HTML_ADVANCE_TO(ScriptDataDoubleEscapeEndState);
694 } else
695 HTML_RECONSUME_IN(ScriptDataDoubleEscapedState);
696 }
697 END_STATE()
698
699 HTML_BEGIN_STATE(BeforeAttributeNameState) { 364 HTML_BEGIN_STATE(BeforeAttributeNameState) {
700 if (isTokenizerWhitespace(cc)) 365 if (isTokenizerWhitespace(cc))
701 HTML_ADVANCE_TO(BeforeAttributeNameState); 366 HTML_ADVANCE_TO(BeforeAttributeNameState);
702 else if (cc == '/') 367 else if (cc == '/')
703 HTML_ADVANCE_TO(SelfClosingStartTagState); 368 HTML_ADVANCE_TO(SelfClosingStartTagState);
704 else if (cc == '>') 369 else if (cc == '>')
705 return emitAndResumeIn(source, HTMLTokenizer::DataState); 370 return emitAndResumeIn(source, HTMLTokenizer::DataState);
706 else if (isASCIIUpper(cc)) { 371 else if (isASCIIUpper(cc)) {
707 m_token->addNewAttribute(); 372 m_token->addNewAttribute();
708 m_token->beginAttributeName(source.numberOfCharactersConsumed()); 373 m_token->beginAttributeName(source.numberOfCharactersConsumed());
(...skipping 385 matching lines...) Expand 10 before | Expand all | Expand 10 after
1094 759
1095 return true; 760 return true;
1096 } 761 }
1097 762
1098 inline void HTMLTokenizer::parseError() 763 inline void HTMLTokenizer::parseError()
1099 { 764 {
1100 notImplemented(); 765 notImplemented();
1101 } 766 }
1102 767
1103 } 768 }
OLDNEW
« no previous file with comments | « sky/engine/core/html/parser/HTMLTokenizer.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698