From d9718064d1ac1f165fd6d69eb552a4918f3d1198 Mon Sep 17 00:00:00 2001 From: Rodrigo Tobar Date: Sun, 11 Dec 2022 22:20:53 +0800 Subject: [PATCH] LibPDF: Add support for multi-line comments The code parsing comments parsed only a single line of comments, but callers assumed they parsed all comments that appeared contiguously in a block. The latter is an easier to understand API, so this commit changes the parse_comment function to parse entire blocks of comments instead of single lines. --- Userland/Libraries/LibPDF/Parser.cpp | 25 ++++++++++++++----------- 1 file changed, 14 insertions(+), 11 deletions(-) diff --git a/Userland/Libraries/LibPDF/Parser.cpp b/Userland/Libraries/LibPDF/Parser.cpp index 9599ba899c..2ee0261007 100644 --- a/Userland/Libraries/LibPDF/Parser.cpp +++ b/Userland/Libraries/LibPDF/Parser.cpp @@ -39,18 +39,21 @@ void Parser::set_document(WeakPtr const& document) DeprecatedString Parser::parse_comment() { - if (!m_reader.matches('%')) - return {}; + StringBuilder comment; + while (true) { + if (!m_reader.matches('%')) + break; - m_reader.consume(); - auto comment_start_offset = m_reader.offset(); - m_reader.move_until([&](auto) { - return m_reader.matches_eol(); - }); - DeprecatedString str = StringView(m_reader.bytes().slice(comment_start_offset, m_reader.offset() - comment_start_offset)); - m_reader.consume_eol(); - m_reader.consume_whitespace(); - return str; + m_reader.consume(); + auto comment_start_offset = m_reader.offset(); + m_reader.move_until([&](auto) { + return m_reader.matches_eol(); + }); + comment.append(m_reader.bytes().slice(comment_start_offset, m_reader.offset() - comment_start_offset)); + m_reader.consume_eol(); + m_reader.consume_whitespace(); + } + return comment.to_deprecated_string(); } PDFErrorOr Parser::parse_value(CanBeIndirectValue can_be_indirect_value)