diff --git a/Userland/Libraries/LibWeb/HTML/Parser/HTMLToken.cpp b/Userland/Libraries/LibWeb/HTML/Parser/HTMLToken.cpp
index fe2ae1f057..7a81844fd2 100644
--- a/Userland/Libraries/LibWeb/HTML/Parser/HTMLToken.cpp
+++ b/Userland/Libraries/LibWeb/HTML/Parser/HTMLToken.cpp
@@ -57,9 +57,11 @@ String HTMLToken::to_string() const
builder.append("' }");
}
- builder.appendff("@{}:{}-{}:{}",
- m_start_position.line, m_start_position.column,
- m_end_position.line, m_end_position.column);
+ if (type() == HTMLToken::Type::Character) {
+ builder.appendff("@{}:{}", m_start_position.line, m_start_position.column);
+ } else {
+ builder.appendff("@{}:{}-{}:{}", m_start_position.line, m_start_position.column, m_end_position.line, m_end_position.column);
+ }
return builder.to_string();
}
diff --git a/Userland/Libraries/LibWeb/HTML/Parser/HTMLTokenizer.cpp b/Userland/Libraries/LibWeb/HTML/Parser/HTMLTokenizer.cpp
index 638ba37bea..7f9d17873c 100644
--- a/Userland/Libraries/LibWeb/HTML/Parser/HTMLTokenizer.cpp
+++ b/Userland/Libraries/LibWeb/HTML/Parser/HTMLTokenizer.cpp
@@ -207,6 +207,15 @@ Optional HTMLTokenizer::peek_code_point(size_t offset) const
return *it;
}
+HTMLToken::Position HTMLTokenizer::nth_last_position(size_t n)
+{
+ if (n + 1 > m_source_positions.size()) {
+ dbgln_if(TOKENIZER_TRACE_DEBUG, "(Tokenizer::nth_last_position) Invalid position requested: {}th-last of {}. Returning (0-0).", n, m_source_positions.size());
+ return HTMLToken::Position { 0, 0 };
+ };
+ return m_source_positions.at(m_source_positions.size() - 1 - n);
+}
+
Optional HTMLTokenizer::next_token()
{
{
@@ -2639,7 +2648,7 @@ void HTMLTokenizer::will_emit(HTMLToken& token)
{
if (token.is_start_tag())
m_last_emitted_start_tag = token;
- token.m_end_position = m_source_positions.last();
+ token.m_end_position = nth_last_position(0);
}
bool HTMLTokenizer::current_end_tag_token_is_appropriate() const
diff --git a/Userland/Libraries/LibWeb/HTML/Parser/HTMLTokenizer.h b/Userland/Libraries/LibWeb/HTML/Parser/HTMLTokenizer.h
index 0024bcb08f..284b83e34b 100644
--- a/Userland/Libraries/LibWeb/HTML/Parser/HTMLTokenizer.h
+++ b/Userland/Libraries/LibWeb/HTML/Parser/HTMLTokenizer.h
@@ -147,7 +147,7 @@ private:
bool consumed_as_part_of_an_attribute() const;
void restore_to(const Utf8CodePointIterator& new_iterator);
- auto& nth_last_position(size_t n = 0) { return m_source_positions.at(m_source_positions.size() - 1 - n); }
+ HTMLToken::Position nth_last_position(size_t n = 0);
State m_state { State::Data };
State m_return_state { State::Data };