Remove ScriptData* states In the new parsing.md spec, we parse <script> the same way as <style> so we don't need all these tokenizer states. R=eseidel@chromium.org Review URL: https://codereview.chromium.org/678913002
diff --git a/sky/engine/core/html/parser/BackgroundHTMLParser.cpp b/sky/engine/core/html/parser/BackgroundHTMLParser.cpp index 6721307..4807d1b 100644 --- a/sky/engine/core/html/parser/BackgroundHTMLParser.cpp +++ b/sky/engine/core/html/parser/BackgroundHTMLParser.cpp
@@ -113,22 +113,11 @@ { if (token.type() == HTMLToken::StartTag) { const String& tagName = token.data(); - // FIXME: This is just a copy of Tokenizer::updateStateFor which uses threadSafeMatches. - if (threadSafeMatch(tagName, HTMLNames::scriptTag)) - m_tokenizer->setState(HTMLTokenizer::ScriptDataState); - else if (threadSafeMatch(tagName, HTMLNames::styleTag)) + if (threadSafeMatch(tagName, HTMLNames::scriptTag) || threadSafeMatch(tagName, HTMLNames::styleTag)) m_tokenizer->setState(HTMLTokenizer::RAWTEXTState); } - if (token.type() == HTMLToken::EndTag) { - const String& tagName = token.data(); - if (threadSafeMatch(tagName, HTMLNames::scriptTag)) { - m_tokenizer->setState(HTMLTokenizer::DataState); - return false; - } - } - - return true; + return token.type() != HTMLToken::EndTag || !threadSafeMatch(token.data(), HTMLNames::scriptTag); } void BackgroundHTMLParser::pumpTokenizer()
diff --git a/sky/engine/core/html/parser/HTMLTokenizer.cpp b/sky/engine/core/html/parser/HTMLTokenizer.cpp index 8fbf9ac..7e765b2 100644 --- a/sky/engine/core/html/parser/HTMLTokenizer.cpp +++ b/sky/engine/core/html/parser/HTMLTokenizer.cpp
@@ -86,10 +86,6 @@ switch (state) { case HTMLTokenizer::RAWTEXTEndTagOpenState: case HTMLTokenizer::RAWTEXTEndTagNameState: - case HTMLTokenizer::ScriptDataEndTagOpenState: - case HTMLTokenizer::ScriptDataEndTagNameState: - case HTMLTokenizer::ScriptDataEscapedEndTagOpenState: - case HTMLTokenizer::ScriptDataEscapedEndTagNameState: return true; default: return false; @@ -231,18 +227,6 @@ } END_STATE() - HTML_BEGIN_STATE(ScriptDataState) { - if (cc == '<') - HTML_ADVANCE_TO(ScriptDataLessThanSignState); - else if (cc == kEndOfFileMarker) - return emitEndOfFile(source); - else { - bufferCharacter(cc); - HTML_ADVANCE_TO(ScriptDataState); - } - } - END_STATE() - HTML_BEGIN_STATE(TagOpenState) { if (cc == '!') HTML_ADVANCE_TO(MarkupDeclarationOpenState); @@ -377,325 +361,6 @@ } END_STATE() - HTML_BEGIN_STATE(ScriptDataLessThanSignState) { - if (cc == '/') { - m_temporaryBuffer.clear(); - ASSERT(m_bufferedEndTagName.isEmpty()); - HTML_ADVANCE_TO(ScriptDataEndTagOpenState); - } else if (cc == '!') { - bufferCharacter('<'); - bufferCharacter('!'); - HTML_ADVANCE_TO(ScriptDataEscapeStartState); - } else { - bufferCharacter('<'); - HTML_RECONSUME_IN(ScriptDataState); - } - } - END_STATE() - - HTML_BEGIN_STATE(ScriptDataEndTagOpenState) { - if (isASCIIUpper(cc)) { - m_temporaryBuffer.append(static_cast<LChar>(cc)); - addToPossibleEndTag(static_cast<LChar>(toLowerCase(cc))); - HTML_ADVANCE_TO(ScriptDataEndTagNameState); - } else if (isASCIILower(cc)) { - m_temporaryBuffer.append(static_cast<LChar>(cc)); - addToPossibleEndTag(static_cast<LChar>(cc)); - HTML_ADVANCE_TO(ScriptDataEndTagNameState); - } else { - bufferCharacter('<'); - bufferCharacter('/'); - HTML_RECONSUME_IN(ScriptDataState); - } - } - END_STATE() - - HTML_BEGIN_STATE(ScriptDataEndTagNameState) { - if (isASCIIUpper(cc)) { - m_temporaryBuffer.append(static_cast<LChar>(cc)); - addToPossibleEndTag(static_cast<LChar>(toLowerCase(cc))); - HTML_ADVANCE_TO(ScriptDataEndTagNameState); - } else if (isASCIILower(cc)) { - m_temporaryBuffer.append(static_cast<LChar>(cc)); - addToPossibleEndTag(static_cast<LChar>(cc)); - HTML_ADVANCE_TO(ScriptDataEndTagNameState); - } else { - if (isTokenizerWhitespace(cc)) { - if (isAppropriateEndTag()) { - m_temporaryBuffer.append(static_cast<LChar>(cc)); - FLUSH_AND_ADVANCE_TO(BeforeAttributeNameState); - } - } else if (cc == '/') { - if (isAppropriateEndTag()) { - m_temporaryBuffer.append(static_cast<LChar>(cc)); - FLUSH_AND_ADVANCE_TO(SelfClosingStartTagState); - } - } else if (cc == '>') { - if (isAppropriateEndTag()) { - m_temporaryBuffer.append(static_cast<LChar>(cc)); - return flushEmitAndResumeIn(source, HTMLTokenizer::DataState); - } - } - bufferCharacter('<'); - bufferCharacter('/'); - m_token->appendToCharacter(m_temporaryBuffer); - m_bufferedEndTagName.clear(); - m_temporaryBuffer.clear(); - HTML_RECONSUME_IN(ScriptDataState); - } - } - END_STATE() - - HTML_BEGIN_STATE(ScriptDataEscapeStartState) { - if (cc == '-') { - bufferCharacter(cc); - HTML_ADVANCE_TO(ScriptDataEscapeStartDashState); - } else - HTML_RECONSUME_IN(ScriptDataState); - } - END_STATE() - - HTML_BEGIN_STATE(ScriptDataEscapeStartDashState) { - if (cc == '-') { - bufferCharacter(cc); - HTML_ADVANCE_TO(ScriptDataEscapedDashDashState); - } else - HTML_RECONSUME_IN(ScriptDataState); - } - END_STATE() - - HTML_BEGIN_STATE(ScriptDataEscapedState) { - if (cc == '-') { - bufferCharacter(cc); - HTML_ADVANCE_TO(ScriptDataEscapedDashState); - } else if (cc == '<') - HTML_ADVANCE_TO(ScriptDataEscapedLessThanSignState); - else if (cc == kEndOfFileMarker) { - parseError(); - HTML_RECONSUME_IN(DataState); - } else { - bufferCharacter(cc); - HTML_ADVANCE_TO(ScriptDataEscapedState); - } - } - END_STATE() - - HTML_BEGIN_STATE(ScriptDataEscapedDashState) { - if (cc == '-') { - bufferCharacter(cc); - HTML_ADVANCE_TO(ScriptDataEscapedDashDashState); - } else if (cc == '<') - HTML_ADVANCE_TO(ScriptDataEscapedLessThanSignState); - else if (cc == kEndOfFileMarker) { - parseError(); - HTML_RECONSUME_IN(DataState); - } else { - bufferCharacter(cc); - HTML_ADVANCE_TO(ScriptDataEscapedState); - } - } - END_STATE() - - HTML_BEGIN_STATE(ScriptDataEscapedDashDashState) { - if (cc == '-') { - bufferCharacter(cc); - HTML_ADVANCE_TO(ScriptDataEscapedDashDashState); - } else if (cc == '<') - HTML_ADVANCE_TO(ScriptDataEscapedLessThanSignState); - else if (cc == '>') { - bufferCharacter(cc); - HTML_ADVANCE_TO(ScriptDataState); - } else if (cc == kEndOfFileMarker) { - parseError(); - HTML_RECONSUME_IN(DataState); - } else { - bufferCharacter(cc); - HTML_ADVANCE_TO(ScriptDataEscapedState); - } - } - END_STATE() - - HTML_BEGIN_STATE(ScriptDataEscapedLessThanSignState) { - if (cc == '/') { - m_temporaryBuffer.clear(); - ASSERT(m_bufferedEndTagName.isEmpty()); - HTML_ADVANCE_TO(ScriptDataEscapedEndTagOpenState); - } else if (isASCIIUpper(cc)) { - bufferCharacter('<'); - bufferCharacter(cc); - m_temporaryBuffer.clear(); - m_temporaryBuffer.append(toLowerCase(cc)); - HTML_ADVANCE_TO(ScriptDataDoubleEscapeStartState); - } else if (isASCIILower(cc)) { - bufferCharacter('<'); - bufferCharacter(cc); - m_temporaryBuffer.clear(); - m_temporaryBuffer.append(static_cast<LChar>(cc)); - HTML_ADVANCE_TO(ScriptDataDoubleEscapeStartState); - } else { - bufferCharacter('<'); - HTML_RECONSUME_IN(ScriptDataEscapedState); - } - } - END_STATE() - - HTML_BEGIN_STATE(ScriptDataEscapedEndTagOpenState) { - if (isASCIIUpper(cc)) { - m_temporaryBuffer.append(static_cast<LChar>(cc)); - addToPossibleEndTag(static_cast<LChar>(toLowerCase(cc))); - HTML_ADVANCE_TO(ScriptDataEscapedEndTagNameState); - } else if (isASCIILower(cc)) { - m_temporaryBuffer.append(static_cast<LChar>(cc)); - addToPossibleEndTag(static_cast<LChar>(cc)); - HTML_ADVANCE_TO(ScriptDataEscapedEndTagNameState); - } else { - bufferCharacter('<'); - bufferCharacter('/'); - HTML_RECONSUME_IN(ScriptDataEscapedState); - } - } - END_STATE() - - HTML_BEGIN_STATE(ScriptDataEscapedEndTagNameState) { - if (isASCIIUpper(cc)) { - m_temporaryBuffer.append(static_cast<LChar>(cc)); - addToPossibleEndTag(static_cast<LChar>(toLowerCase(cc))); - HTML_ADVANCE_TO(ScriptDataEscapedEndTagNameState); - } else if (isASCIILower(cc)) { - m_temporaryBuffer.append(static_cast<LChar>(cc)); - addToPossibleEndTag(static_cast<LChar>(cc)); - HTML_ADVANCE_TO(ScriptDataEscapedEndTagNameState); - } else { - if (isTokenizerWhitespace(cc)) { - if (isAppropriateEndTag()) { - m_temporaryBuffer.append(static_cast<LChar>(cc)); - FLUSH_AND_ADVANCE_TO(BeforeAttributeNameState); - } - } else if (cc == '/') { - if (isAppropriateEndTag()) { - m_temporaryBuffer.append(static_cast<LChar>(cc)); - FLUSH_AND_ADVANCE_TO(SelfClosingStartTagState); - } - } else if (cc == '>') { - if (isAppropriateEndTag()) { - m_temporaryBuffer.append(static_cast<LChar>(cc)); - return flushEmitAndResumeIn(source, HTMLTokenizer::DataState); - } - } - bufferCharacter('<'); - bufferCharacter('/'); - m_token->appendToCharacter(m_temporaryBuffer); - m_bufferedEndTagName.clear(); - m_temporaryBuffer.clear(); - HTML_RECONSUME_IN(ScriptDataEscapedState); - } - } - END_STATE() - - HTML_BEGIN_STATE(ScriptDataDoubleEscapeStartState) { - if (isTokenizerWhitespace(cc) || cc == '/' || cc == '>') { - bufferCharacter(cc); - if (temporaryBufferIs(HTMLNames::scriptTag.localName())) - HTML_ADVANCE_TO(ScriptDataDoubleEscapedState); - else - HTML_ADVANCE_TO(ScriptDataEscapedState); - } else if (isASCIIUpper(cc)) { - bufferCharacter(cc); - m_temporaryBuffer.append(toLowerCase(cc)); - HTML_ADVANCE_TO(ScriptDataDoubleEscapeStartState); - } else if (isASCIILower(cc)) { - bufferCharacter(cc); - m_temporaryBuffer.append(static_cast<LChar>(cc)); - HTML_ADVANCE_TO(ScriptDataDoubleEscapeStartState); - } else - HTML_RECONSUME_IN(ScriptDataEscapedState); - } - END_STATE() - - HTML_BEGIN_STATE(ScriptDataDoubleEscapedState) { - if (cc == '-') { - bufferCharacter(cc); - HTML_ADVANCE_TO(ScriptDataDoubleEscapedDashState); - } else if (cc == '<') { - bufferCharacter(cc); - HTML_ADVANCE_TO(ScriptDataDoubleEscapedLessThanSignState); - } else if (cc == kEndOfFileMarker) { - parseError(); - HTML_RECONSUME_IN(DataState); - } else { - bufferCharacter(cc); - HTML_ADVANCE_TO(ScriptDataDoubleEscapedState); - } - } - END_STATE() - - HTML_BEGIN_STATE(ScriptDataDoubleEscapedDashState) { - if (cc == '-') { - bufferCharacter(cc); - HTML_ADVANCE_TO(ScriptDataDoubleEscapedDashDashState); - } else if (cc == '<') { - bufferCharacter(cc); - HTML_ADVANCE_TO(ScriptDataDoubleEscapedLessThanSignState); - } else if (cc == kEndOfFileMarker) { - parseError(); - HTML_RECONSUME_IN(DataState); - } else { - bufferCharacter(cc); - HTML_ADVANCE_TO(ScriptDataDoubleEscapedState); - } - } - END_STATE() - - HTML_BEGIN_STATE(ScriptDataDoubleEscapedDashDashState) { - if (cc == '-') { - bufferCharacter(cc); - HTML_ADVANCE_TO(ScriptDataDoubleEscapedDashDashState); - } else if (cc == '<') { - bufferCharacter(cc); - HTML_ADVANCE_TO(ScriptDataDoubleEscapedLessThanSignState); - } else if (cc == '>') { - bufferCharacter(cc); - HTML_ADVANCE_TO(ScriptDataState); - } else if (cc == kEndOfFileMarker) { - parseError(); - HTML_RECONSUME_IN(DataState); - } else { - bufferCharacter(cc); - HTML_ADVANCE_TO(ScriptDataDoubleEscapedState); - } - } - END_STATE() - - HTML_BEGIN_STATE(ScriptDataDoubleEscapedLessThanSignState) { - if (cc == '/') { - bufferCharacter(cc); - m_temporaryBuffer.clear(); - HTML_ADVANCE_TO(ScriptDataDoubleEscapeEndState); - } else - HTML_RECONSUME_IN(ScriptDataDoubleEscapedState); - } - END_STATE() - - HTML_BEGIN_STATE(ScriptDataDoubleEscapeEndState) { - if (isTokenizerWhitespace(cc) || cc == '/' || cc == '>') { - bufferCharacter(cc); - if (temporaryBufferIs(HTMLNames::scriptTag.localName())) - HTML_ADVANCE_TO(ScriptDataEscapedState); - else - HTML_ADVANCE_TO(ScriptDataDoubleEscapedState); - } else if (isASCIIUpper(cc)) { - bufferCharacter(cc); - m_temporaryBuffer.append(toLowerCase(cc)); - HTML_ADVANCE_TO(ScriptDataDoubleEscapeEndState); - } else if (isASCIILower(cc)) { - bufferCharacter(cc); - m_temporaryBuffer.append(static_cast<LChar>(cc)); - HTML_ADVANCE_TO(ScriptDataDoubleEscapeEndState); - } else - HTML_RECONSUME_IN(ScriptDataDoubleEscapedState); - } - END_STATE() - HTML_BEGIN_STATE(BeforeAttributeNameState) { if (isTokenizerWhitespace(cc)) HTML_ADVANCE_TO(BeforeAttributeNameState);
diff --git a/sky/engine/core/html/parser/HTMLTokenizer.h b/sky/engine/core/html/parser/HTMLTokenizer.h index 3e31f96..302b648 100644 --- a/sky/engine/core/html/parser/HTMLTokenizer.h +++ b/sky/engine/core/html/parser/HTMLTokenizer.h
@@ -46,30 +46,12 @@ DataState, CharacterReferenceInDataState, RAWTEXTState, - ScriptDataState, TagOpenState, EndTagOpenState, TagNameState, RAWTEXTLessThanSignState, RAWTEXTEndTagOpenState, RAWTEXTEndTagNameState, - ScriptDataLessThanSignState, - ScriptDataEndTagOpenState, - ScriptDataEndTagNameState, - ScriptDataEscapeStartState, - ScriptDataEscapeStartDashState, - ScriptDataEscapedState, - ScriptDataEscapedDashState, - ScriptDataEscapedDashDashState, - ScriptDataEscapedLessThanSignState, - ScriptDataEscapedEndTagOpenState, - ScriptDataEscapedEndTagNameState, - ScriptDataDoubleEscapeStartState, - ScriptDataDoubleEscapedState, - ScriptDataDoubleEscapedDashState, - ScriptDataDoubleEscapedDashDashState, - ScriptDataDoubleEscapedLessThanSignState, - ScriptDataDoubleEscapeEndState, BeforeAttributeNameState, AttributeNameState, AfterAttributeNameState,