Kaynağa Gözat

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.
Rodrigo Tobar 2 yıl önce
ebeveyn
işleme
d9718064d1
1 değiştirilmiş dosya ile 15 ekleme ve 12 silme
  1. 15 12
      Userland/Libraries/LibPDF/Parser.cpp

+ 15 - 12
Userland/Libraries/LibPDF/Parser.cpp

@@ -39,18 +39,21 @@ void Parser::set_document(WeakPtr<Document> const& document)
 
 DeprecatedString Parser::parse_comment()
 {
-    if (!m_reader.matches('%'))
-        return {};
-
-    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;
+    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();
+        });
+        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<Value> Parser::parse_value(CanBeIndirectValue can_be_indirect_value)