diff --git a/Libraries/LibWeb/HTML/Parser/HTMLParser.cpp b/Libraries/LibWeb/HTML/Parser/HTMLParser.cpp index 32e2fa99476..68acd5225c7 100644 --- a/Libraries/LibWeb/HTML/Parser/HTMLParser.cpp +++ b/Libraries/LibWeb/HTML/Parser/HTMLParser.cpp @@ -199,6 +199,13 @@ void HTMLParser::run(HTMLTokenizer::StopAtInsertionPoint stop_at_insertion_point dbgln_if(HTML_PARSER_DEBUG, "[{}] {}", insertion_mode_name(), token.to_string()); + if (m_next_line_feed_can_be_ignored) { + m_next_line_feed_can_be_ignored = false; + if (token.is_character() && token.code_point() == '\n') { + continue; + } + } + // https://html.spec.whatwg.org/multipage/parsing.html#tree-construction-dispatcher // As each token is emitted from the tokenizer, the user agent must follow the appropriate steps from the following list, known as the tree construction dispatcher: if (m_stack_of_open_elements.is_empty() @@ -2017,20 +2024,13 @@ void HTMLParser::handle_in_body(HTMLToken& token) // Insert an HTML element for the token. (void)insert_html_element(token); - // AD-HOC: We move this step before handling LINE FEED below, to ensure the flag is updated before - // we process the next token. This is necessary due to how we implement token reprocessing. - // Set the frameset-ok flag to "not ok". - m_frameset_ok = false; - // If the next token is a U+000A LINE FEED (LF) character token, // then ignore that token and move on to the next one. // (Newlines at the start of pre blocks are ignored as an authoring convenience.) - auto next_token = m_tokenizer.next_token(); - if (next_token.has_value() && next_token.value().is_character() && next_token.value().code_point() == '\n') { - // Ignore it. - } else if (next_token.has_value()) { - process_using_the_rules_for(m_insertion_mode, next_token.value()); - } + m_next_line_feed_can_be_ignored = true; + + // Set the frameset-ok flag to "not ok". + m_frameset_ok = false; return; } @@ -2567,16 +2567,14 @@ void HTMLParser::handle_in_body(HTMLToken& token) // 1. Insert an HTML element for the token. (void)insert_html_element(token); - // FIXME: 2. If the next token is a U+000A LINE FEED (LF) character token, then ignore that token and move on to the next one. (Newlines at the start of textarea elements are ignored as an authoring convenience.) + // 2. If the next token is a U+000A LINE FEED (LF) character token, + // then ignore that token and move on to the next one. + // (Newlines at the start of textarea elements are ignored as an authoring convenience.) + m_next_line_feed_can_be_ignored = true; // 3. Switch the tokenizer to the RCDATA state. m_tokenizer.switch_to({}, HTMLTokenizer::State::RCDATA); - // If the next token is a U+000A LINE FEED (LF) character token, - // then ignore that token and move on to the next one. - // (Newlines at the start of pre blocks are ignored as an authoring convenience.) - auto next_token = m_tokenizer.next_token(); - // 4. Let the original insertion mode be the current insertion mode. m_original_insertion_mode = m_insertion_mode; @@ -2585,13 +2583,6 @@ void HTMLParser::handle_in_body(HTMLToken& token) // 6. Switch the insertion mode to "text". m_insertion_mode = InsertionMode::Text; - - // FIXME: This step is not in the spec. - if (next_token.has_value() && next_token.value().is_character() && next_token.value().code_point() == '\n') { - // Ignore it. - } else if (next_token.has_value()) { - process_using_the_rules_for(m_insertion_mode, next_token.value()); - } return; } diff --git a/Libraries/LibWeb/HTML/Parser/HTMLParser.h b/Libraries/LibWeb/HTML/Parser/HTMLParser.h index 387f800af4c..45b53fc99a0 100644 --- a/Libraries/LibWeb/HTML/Parser/HTMLParser.h +++ b/Libraries/LibWeb/HTML/Parser/HTMLParser.h @@ -187,6 +187,8 @@ private: HTMLTokenizer m_tokenizer; + bool m_next_line_feed_can_be_ignored { false }; + bool m_foster_parenting { false }; bool m_frameset_ok { true }; bool m_parsing_fragment { false }; diff --git a/Tests/LibWeb/Text/expected/wpt-import/html/syntax/parsing/html5lib_html5test-com-write_single.txt b/Tests/LibWeb/Text/expected/wpt-import/html/syntax/parsing/html5lib_html5test-com-write_single.txt index 517aaeec95b..430552acf7f 100644 --- a/Tests/LibWeb/Text/expected/wpt-import/html/syntax/parsing/html5lib_html5test-com-write_single.txt +++ b/Tests/LibWeb/Text/expected/wpt-import/html/syntax/parsing/html5lib_html5test-com-write_single.txt @@ -2,8 +2,8 @@ Harness status: OK Found 24 tests -17 Pass -7 Fail +19 Pass +5 Fail Pass html5lib_html5test-com.html 71bd5e6b9e907e65295b6d670627e0da4a8a65ed Pass html5lib_html5test-com.html 32cd504d36a6db3584b716b3681ab4b0741423b3 Pass html5lib_html5test-com.html f0bf0506a2d3e5ca4aa5f14a1f260e405882827e @@ -18,8 +18,8 @@ Fail html5lib_html5test-com.html bcbeb84f40e56a642b794d514e97e3ec303d4a79 Pass html5lib_html5test-com.html 1cbb987dd0a35af3a5b2e4fc11eba36a60eba03d Pass html5lib_html5test-com.html 5b5e75eca2f5c80e1c4d5676254b9891090e288e Pass html5lib_html5test-com.html 93e966e2edad3297ecb159f3983bdd2dc84f829e -Fail html5lib_html5test-com.html 7a02a2d7ab875dbeedc9a34c6c27b6119bd6d1f0 -Fail html5lib_html5test-com.html 46615acdb9dd6231e2a65fed5bcce7e19f086d03 +Pass html5lib_html5test-com.html 7a02a2d7ab875dbeedc9a34c6c27b6119bd6d1f0 +Pass html5lib_html5test-com.html 46615acdb9dd6231e2a65fed5bcce7e19f086d03 Pass html5lib_html5test-com.html 381de12234a699cbfb775b3ca7c679f357e7403e Pass html5lib_html5test-com.html 72736fc894b2077928559cc4284a102635cac898 Pass html5lib_html5test-com.html 290d5e7fa9684038411e78c4b0e0ade83150eeea diff --git a/Tests/LibWeb/Text/expected/wpt-import/html/syntax/parsing/html5lib_plain-text-unsafe-write_single.txt b/Tests/LibWeb/Text/expected/wpt-import/html/syntax/parsing/html5lib_plain-text-unsafe-write_single.txt index d8a23674e40..7749a3260fb 100644 --- a/Tests/LibWeb/Text/expected/wpt-import/html/syntax/parsing/html5lib_plain-text-unsafe-write_single.txt +++ b/Tests/LibWeb/Text/expected/wpt-import/html/syntax/parsing/html5lib_plain-text-unsafe-write_single.txt @@ -2,8 +2,8 @@ Harness status: OK Found 33 tests -30 Pass -3 Fail +32 Pass +1 Fail Pass html5lib_plain-text-unsafe.html 7e4ca4cb5e73852744a876bf8652dd2c8998d94a Pass html5lib_plain-text-unsafe.html e552342bdd3ac62316bd91126556512683f3d4a9 Pass html5lib_plain-text-unsafe.html 9112cef60139e6988b66334e522777329051442a @@ -28,8 +28,8 @@ Pass html5lib_plain-text-unsafe.html a1e08cb99d89381a1c997fcd60bad23c029c4500 Pass html5lib_plain-text-unsafe.html 26d850208425cc885d4d0143909cf341f61fa1f1 Pass html5lib_plain-text-unsafe.html 68f0365c01dc386c706edd2b18672f9d85caaa2e Fail html5lib_plain-text-unsafe.html e415a2e7cf090e2c308af905d52c5f8163ae52ce -Fail html5lib_plain-text-unsafe.html 822702de65b80ec8e79da19335ab9d6a49f6ec6a -Fail html5lib_plain-text-unsafe.html ee8b017ab043ff51b593787961626acb4c6488cd +Pass html5lib_plain-text-unsafe.html 822702de65b80ec8e79da19335ab9d6a49f6ec6a +Pass html5lib_plain-text-unsafe.html ee8b017ab043ff51b593787961626acb4c6488cd Pass html5lib_plain-text-unsafe.html 304960c795639128844445166238350682ba0516 Pass html5lib_plain-text-unsafe.html 275bb0b518ec00b1e64a28cb9088989371fca9d9 Pass html5lib_plain-text-unsafe.html 068ac565b7c7bdad572f26dafb4580483cdbc6f7 diff --git a/Tests/LibWeb/Text/expected/wpt-import/html/syntax/parsing/html5lib_tests1-write_single.txt b/Tests/LibWeb/Text/expected/wpt-import/html/syntax/parsing/html5lib_tests1-write_single.txt index 7fb17502587..3783cf2f69b 100644 --- a/Tests/LibWeb/Text/expected/wpt-import/html/syntax/parsing/html5lib_tests1-write_single.txt +++ b/Tests/LibWeb/Text/expected/wpt-import/html/syntax/parsing/html5lib_tests1-write_single.txt @@ -2,8 +2,7 @@ Harness status: OK Found 112 tests -111 Pass -1 Fail +112 Pass Pass html5lib_tests1.html 4235382bf15f93f7dd1096832ae74cc71edef4d7 Pass html5lib_tests1.html ad8515e9db0abd26469d0d2e46b42cebf606d4f3 Pass html5lib_tests1.html 2433aa5c088d78da9e7824e499f639177f56625d @@ -92,7 +91,7 @@ Pass html5lib_tests1.html 06ed0f32cfd261010c9d810ff8317ef96b47c04c Pass html5lib_tests1.html 44ea84c7e4e401c9d3f96d7cc39709e4be81edc8 Pass html5lib_tests1.html 67af290f1b04c4b1a67131edba1ee832c690432c Pass html5lib_tests1.html 2f1899f72fafcb062418e8ce892188040de4708c -Fail html5lib_tests1.html ed2a4958c832ef6cec993cb52afc808132714d0a +Pass html5lib_tests1.html ed2a4958c832ef6cec993cb52afc808132714d0a Pass html5lib_tests1.html c7943ccd9d880664b0894a2035e1f2a837f37c7a Pass html5lib_tests1.html bbc836b1f494223d4eb8982930d693489d135740 Pass html5lib_tests1.html 617fdf08035740698b2f0f4c3874dbb469fd1848 diff --git a/Tests/LibWeb/Text/expected/wpt-import/html/syntax/parsing/html5lib_tests16-write_single.txt b/Tests/LibWeb/Text/expected/wpt-import/html/syntax/parsing/html5lib_tests16-write_single.txt index 9f119ba9f8e..bc5f0902737 100644 --- a/Tests/LibWeb/Text/expected/wpt-import/html/syntax/parsing/html5lib_tests16-write_single.txt +++ b/Tests/LibWeb/Text/expected/wpt-import/html/syntax/parsing/html5lib_tests16-write_single.txt @@ -2,8 +2,8 @@ Harness status: OK Found 191 tests -183 Pass -8 Fail +185 Pass +6 Fail Pass html5lib_tests16.html 6d8b9d29f1890d59ef2453cff3f6d57b7e398c5c Pass html5lib_tests16.html 5d4ac4961f9d52a42f309886d16fbe9c55c198bb Pass html5lib_tests16.html 132c6e3cd2659e15b69904c67981a04e81fabe78 @@ -92,7 +92,7 @@ Pass html5lib_tests16.html ae3967a139a3ecf61ecbc59c8c769a2731626fac Pass html5lib_tests16.html 3586a5a4a1d1d69b139d139b0823af4753bc3e8d Pass html5lib_tests16.html 0e99e2603bc91553c252713108e30495d71c3f37 Pass html5lib_tests16.html f9858d096fa1e68cce0742d125c551878d2d7020 -Fail html5lib_tests16.html 225e87bce5a4518c3e5cd248ef93ebc39dba14e0 +Pass html5lib_tests16.html 225e87bce5a4518c3e5cd248ef93ebc39dba14e0 Fail html5lib_tests16.html bb08b00b361470ce18b435c97aff4449dc98cc51 Fail html5lib_tests16.html cd74b727c1c8233f98e325293a2307e882e10f41 Fail html5lib_tests16.html 367bf426c092467300f78e5d7526b5a95b490871 @@ -186,7 +186,7 @@ Pass html5lib_tests16.html 5423bb28649f37e70a0559cba78c3b253a60c277 Pass html5lib_tests16.html 2c091a50dfd31e766a5a629c0b7c21973e33319d Pass html5lib_tests16.html 920feb4f9d1032dcec2abc5c526e4996f642968b Pass html5lib_tests16.html 31b9b446263cd5b7a844d43f2a235ed9b0c53efb -Fail html5lib_tests16.html dbb5127246fee18718bcffc6cf0730674d12b98a +Pass html5lib_tests16.html dbb5127246fee18718bcffc6cf0730674d12b98a Fail html5lib_tests16.html 3872a4cfeba7651f0671de7e5f3922fd5053837b Pass html5lib_tests16.html 2fbcb2db61b6416cdf46e0526e1929d146ab3da7 Pass html5lib_tests16.html 999da234e770bbf681a819423d04ea57415d9bbc diff --git a/Tests/LibWeb/Text/expected/wpt-import/html/syntax/parsing/html5lib_tests2-write_single.txt b/Tests/LibWeb/Text/expected/wpt-import/html/syntax/parsing/html5lib_tests2-write_single.txt index ad0316d6fc6..1d1e028460f 100644 --- a/Tests/LibWeb/Text/expected/wpt-import/html/syntax/parsing/html5lib_tests2-write_single.txt +++ b/Tests/LibWeb/Text/expected/wpt-import/html/syntax/parsing/html5lib_tests2-write_single.txt @@ -2,10 +2,10 @@ Harness status: OK Found 63 tests -61 Pass -2 Fail +62 Pass +1 Fail Pass html5lib_tests2.html e070301fb578bd639ecbc7ec720fa60222d05826 -Fail html5lib_tests2.html aaf24dabcb42470e447d241a40def0d136c12b93 +Pass html5lib_tests2.html aaf24dabcb42470e447d241a40def0d136c12b93 Pass html5lib_tests2.html b6c1142484570bb90c36e454ee193cca17bb618a Pass html5lib_tests2.html 1977644a94de1a04245dfef3f3db69c7ac41aa6f Pass html5lib_tests2.html fb0d7207ed9fbc3fe5d1e0f85ad18c247dfb05a3 diff --git a/Tests/LibWeb/Text/expected/wpt-import/html/syntax/parsing/html5lib_tests3-write_single.txt b/Tests/LibWeb/Text/expected/wpt-import/html/syntax/parsing/html5lib_tests3-write_single.txt index b2b76d77d50..19c1957e4a5 100644 --- a/Tests/LibWeb/Text/expected/wpt-import/html/syntax/parsing/html5lib_tests3-write_single.txt +++ b/Tests/LibWeb/Text/expected/wpt-import/html/syntax/parsing/html5lib_tests3-write_single.txt @@ -2,27 +2,26 @@ Harness status: OK Found 24 tests -15 Pass -9 Fail +24 Pass Pass html5lib_tests3.html 9af28bba864ad2e398d95249fdcd40491e91b23f Pass html5lib_tests3.html be8bf339f25c34d94456b39ceeed74a25167df40 Pass html5lib_tests3.html b77d2b4c52c8d57dae80409a39f5e21cb8e5b3bc Pass html5lib_tests3.html 7902929c3aa85bf8ffc8d7fa228921acec21808e -Fail html5lib_tests3.html 16dda22403dee14d6d8627d9139b8c5296f24b61 -Fail html5lib_tests3.html 7022e121d090113a9b6a1f29e8c620b5b6c9b67c -Fail html5lib_tests3.html 8b5088252a41409e5f5989408f09af986573b007 -Fail html5lib_tests3.html 692cef68475bc2c58dc3a1d6fc804ab69df37117 +Pass html5lib_tests3.html 16dda22403dee14d6d8627d9139b8c5296f24b61 +Pass html5lib_tests3.html 7022e121d090113a9b6a1f29e8c620b5b6c9b67c +Pass html5lib_tests3.html 8b5088252a41409e5f5989408f09af986573b007 +Pass html5lib_tests3.html 692cef68475bc2c58dc3a1d6fc804ab69df37117 Pass html5lib_tests3.html 88bbb8a76e9880c09e8ffcd626660106cf27abce Pass html5lib_tests3.html b43510ea21c96a96255b45aef578af5cbc78475e Pass html5lib_tests3.html 5227d81a48fc519767baaca384b9687dad7ba1bf -Fail html5lib_tests3.html 5bb12f29d0f7c9c30bc8ceb14578c60df73dca2c +Pass html5lib_tests3.html 5bb12f29d0f7c9c30bc8ceb14578c60df73dca2c Pass html5lib_tests3.html 9ba44cced626432a79929642154346ab9d01403a Pass html5lib_tests3.html f9031fcb39c793e24b116a1e041dd93ed638a0f4 -Fail html5lib_tests3.html 45ec5c450b3039007112fcb053c2a82ce2e93f17 +Pass html5lib_tests3.html 45ec5c450b3039007112fcb053c2a82ce2e93f17 Pass html5lib_tests3.html 6a66abfc230b8cfc93c57210ae370b1d5e744b5a -Fail html5lib_tests3.html ed9cc49cd8a577e1e6343808c328e242b53ee42d -Fail html5lib_tests3.html 32c5a1be682ae34b4195cd0481ee6c53c806abeb -Fail html5lib_tests3.html daf731117bb7cf43f750f187cbb3528f07c9a012 +Pass html5lib_tests3.html ed9cc49cd8a577e1e6343808c328e242b53ee42d +Pass html5lib_tests3.html 32c5a1be682ae34b4195cd0481ee6c53c806abeb +Pass html5lib_tests3.html daf731117bb7cf43f750f187cbb3528f07c9a012 Pass html5lib_tests3.html 948e2378d0e6bd68dbc278a993c2774c22b30370 Pass html5lib_tests3.html f7fd80272bb4ab6e3bb871de5f7688912740c39f Pass html5lib_tests3.html 9eddcf7971dc65d05f25aa4c412acf09a789e5b3 diff --git a/Tests/LibWeb/Text/expected/wpt-import/html/syntax/parsing/html5lib_tests5-write_single.txt b/Tests/LibWeb/Text/expected/wpt-import/html/syntax/parsing/html5lib_tests5-write_single.txt index 6432832510a..5439baec99c 100644 --- a/Tests/LibWeb/Text/expected/wpt-import/html/syntax/parsing/html5lib_tests5-write_single.txt +++ b/Tests/LibWeb/Text/expected/wpt-import/html/syntax/parsing/html5lib_tests5-write_single.txt @@ -2,8 +2,8 @@ Harness status: OK Found 16 tests -13 Pass -3 Fail +14 Pass +2 Fail Pass html5lib_tests5.html c482a88c4feb445945f19c77eda5e460cd6db344 Pass html5lib_tests5.html b28eaef63aeeb165eceb56152d50767327f975fa Pass html5lib_tests5.html 20c1b55aabcd426fa5975648f21cff40fa3fc2e3 @@ -12,7 +12,7 @@ Pass html5lib_tests5.html 283a0f4eb33a3ee80f718020268bf1794a758ec9 Pass html5lib_tests5.html bde8b7a035edd6f123f45708ac10b4f60e81edf4 Pass html5lib_tests5.html 6ace30add7690cda74de9830481c95bef1f5976d Pass html5lib_tests5.html 3c5f82c8db30cc1cce4c7fa8a5d18cf13ce8d007 -Fail html5lib_tests5.html 9cac6179dc295f43afd5a41ed98aef3a9d5a08de +Pass html5lib_tests5.html 9cac6179dc295f43afd5a41ed98aef3a9d5a08de Pass html5lib_tests5.html 021a5fbf8c725781d08dce099d21f7023c9bb26d Pass html5lib_tests5.html 412eae0c0e6e5da254550debd587ff86cff55c0c Pass html5lib_tests5.html 410a64500216425d811748b0258c92a49fbad0ff diff --git a/Tests/LibWeb/Text/expected/wpt-import/html/syntax/parsing/html5lib_tests7-write_single.txt b/Tests/LibWeb/Text/expected/wpt-import/html/syntax/parsing/html5lib_tests7-write_single.txt index 9fc53276982..e142e75628b 100644 --- a/Tests/LibWeb/Text/expected/wpt-import/html/syntax/parsing/html5lib_tests7-write_single.txt +++ b/Tests/LibWeb/Text/expected/wpt-import/html/syntax/parsing/html5lib_tests7-write_single.txt @@ -2,8 +2,7 @@ Harness status: OK Found 33 tests -32 Pass -1 Fail +33 Pass Pass html5lib_tests7.html 7cb496e242a4dc9aed321252b5ca6ebf4f02ebcd Pass html5lib_tests7.html c0cffec1e999db2aefb2f6beb679fd9620566dbd Pass html5lib_tests7.html 7c644a6da21bfd551385b0a5044b82cf7be0a22f @@ -19,7 +18,7 @@ Pass html5lib_tests7.html 37b910b755c2df155a3129d5a1150f0c0fdd7934 Pass html5lib_tests7.html 868bff3a23219b836fdc702063d637f817ce65e1 Pass html5lib_tests7.html a33a56f5571b4bcb23138ffb60df3824f5c53773 Pass html5lib_tests7.html facf5e60205451cf740f64628b8608f0aee30f3a -Fail html5lib_tests7.html 8ba11b54fa74a1c229d079b2902d6e33e139f33b +Pass html5lib_tests7.html 8ba11b54fa74a1c229d079b2902d6e33e139f33b Pass html5lib_tests7.html 84e2152c284f4dfee7d8d12846c08b2c025578a6 Pass html5lib_tests7.html 8e3432411baa59cbef731ab3ba2703cb5d518453 Pass html5lib_tests7.html e2f6144290512430ad25bbf9598eae77288c7b7a diff --git a/Tests/LibWeb/Text/expected/wpt-import/html/webappapis/dynamic-markup-insertion/document-write/045.txt b/Tests/LibWeb/Text/expected/wpt-import/html/webappapis/dynamic-markup-insertion/document-write/045.txt index 629b03ec0a1..ca8e708f49d 100644 --- a/Tests/LibWeb/Text/expected/wpt-import/html/webappapis/dynamic-markup-insertion/document-write/045.txt +++ b/Tests/LibWeb/Text/expected/wpt-import/html/webappapis/dynamic-markup-insertion/document-write/045.txt @@ -2,5 +2,5 @@ Harness status: OK Found 1 tests -1 Fail -Fail document.write \ No newline at end of file +1 Pass +Pass document.write \ No newline at end of file