浏览代码

LibWeb: Change a few source end positions in HTMLTokenizer

This patch aims to fix wrong highlighting for some cases in HTML's
syntax highlighter. The values were somewhat experimentally determined
are are subject to change. Regardless, it should be more correct with
this patch than without it. :^)
Max Wipfli 4 年之前
父节点
当前提交
282a623853
共有 1 个文件被更改,包括 8 次插入5 次删除
  1. 8 5
      Userland/Libraries/LibWeb/HTML/Parser/HTMLTokenizer.cpp

+ 8 - 5
Userland/Libraries/LibWeb/HTML/Parser/HTMLTokenizer.cpp

@@ -276,6 +276,7 @@ _StartOfFunction:
                 {
                     log_parse_error();
                     create_new_token(HTMLToken::Type::Comment);
+                    m_current_token.m_start_position = nth_last_position(2);
                     RECONSUME_IN(BogusComment);
                 }
                 ON_EOF
@@ -301,7 +302,7 @@ _StartOfFunction:
                 }
                 ON('/')
                 {
-                    m_current_token.m_end_position = nth_last_position(1);
+                    m_current_token.m_end_position = nth_last_position(0);
                     SWITCH_TO(SelfClosingStartTag);
                 }
                 ON('>')
@@ -325,7 +326,7 @@ _StartOfFunction:
                 ON_EOF
                 {
                     log_parse_error();
-                    m_current_token.m_end_position = nth_last_position(1);
+                    m_current_token.m_end_position = nth_last_position(0);
                     EMIT_EOF;
                 }
                 ANYTHING_ELSE
@@ -370,6 +371,7 @@ _StartOfFunction:
                 DONT_CONSUME_NEXT_INPUT_CHARACTER;
                 if (consume_next_if_match("--")) {
                     create_new_token(HTMLToken::Type::Comment);
+                    m_current_token.m_start_position = nth_last_position(4);
                     SWITCH_TO(CommentStart);
                 }
                 if (consume_next_if_match("DOCTYPE", CaseSensitivity::CaseInsensitive)) {
@@ -1053,6 +1055,7 @@ _StartOfFunction:
                 }
                 ON('=')
                 {
+                    m_current_token.m_tag.attributes.last().name_end_position = nth_last_position(1);
                     SWITCH_TO(BeforeAttributeValue);
                 }
                 ON_ASCII_UPPER_ALPHA
@@ -1214,7 +1217,7 @@ _StartOfFunction:
             {
                 ON_WHITESPACE
                 {
-                    m_current_token.m_tag.attributes.last().value_end_position = nth_last_position(2);
+                    m_current_token.m_tag.attributes.last().value_end_position = nth_last_position(1);
                     SWITCH_TO(BeforeAttributeName);
                 }
                 ON('&')
@@ -1224,7 +1227,7 @@ _StartOfFunction:
                 }
                 ON('>')
                 {
-                    m_current_token.m_tag.attributes.last().value_end_position = nth_last_position(2);
+                    m_current_token.m_tag.attributes.last().value_end_position = nth_last_position(1);
                     SWITCH_TO_AND_EMIT_CURRENT_TOKEN(Data);
                 }
                 ON(0)
@@ -1274,7 +1277,7 @@ _StartOfFunction:
 
             BEGIN_STATE(AfterAttributeValueQuoted)
             {
-                m_current_token.m_tag.attributes.last().value_end_position = nth_last_position(2);
+                m_current_token.m_tag.attributes.last().value_end_position = nth_last_position(1);
                 ON_WHITESPACE
                 {
                     SWITCH_TO(BeforeAttributeName);