From bd4bc9445dd3869f7d5886328fab19f490e0c708 Mon Sep 17 00:00:00 2001 From: m-holger Date: Wed, 15 Oct 2025 23:09:10 +0100 Subject: [PATCH] Refactor `Linearization` methods: move logic from `QPDF` to `Lin`, add `linearized`, `check`, and `show_data` methods, update usage across the codebase, and streamline related logic. --- libqpdf/QPDF_linearization.cc | 36 +++++++++++++++++++++++++++--------- libqpdf/qpdf/QPDF_private.hh | 5 +++++ 2 files changed, 32 insertions(+), 9 deletions(-) diff --git a/libqpdf/QPDF_linearization.cc b/libqpdf/QPDF_linearization.cc index 950d65e..21a42c2 100644 --- a/libqpdf/QPDF_linearization.cc +++ b/libqpdf/QPDF_linearization.cc @@ -366,12 +366,18 @@ Lin::linearizationWarning(std::string_view msg) bool QPDF::checkLinearization() { + return m->lin.check(); +} + +bool +Lin::check() +{ try { - m->lin.readLinearizationData(); - m->lin.checkLinearizationInternal(); + readLinearizationData(); + checkLinearizationInternal(); return !m->linearization_warnings; } catch (std::runtime_error& e) { - m->lin.linearizationWarning( + linearizationWarning( "error encountered while checking linearization data: " + std::string(e.what())); return false; } @@ -380,6 +386,12 @@ QPDF::checkLinearization() bool QPDF::isLinearized() { + return m->lin.linearized(); +} + +bool +Lin::linearized() +{ // If the first object in the file is a dictionary with a suitable /Linearized key and has an /L // key that accurately indicates the file size, initialize m->lindict and return true. @@ -411,7 +423,7 @@ QPDF::isLinearized() continue; } - Dictionary candidate = getObject(toI(QUtil::string_to_ll(t1.getValue().data())), 0); + Dictionary candidate = qpdf.getObject(toI(QUtil::string_to_ll(t1.getValue().data())), 0); auto linkey = candidate["/Linearized"]; if (!(linkey.isNumber() && toI(floor(linkey.getNumericValue())) == 1)) { return false; @@ -432,7 +444,7 @@ void Lin::readLinearizationData() { util::assertion( - qpdf.isLinearized(), "called readLinearizationData for file that is not linearized" // + linearized(), "called readLinearizationData for file that is not linearized" // ); // This function throws an exception (which is trapped by checkLinearization()) for any errors @@ -1083,12 +1095,18 @@ Lin::checkHOutlines() void QPDF::showLinearizationData() { + m->lin.show_data(); +} + +void +Lin::show_data() +{ try { - m->lin.readLinearizationData(); - m->lin.checkLinearizationInternal(); - m->lin.dumpLinearizationDataInternal(); + readLinearizationData(); + checkLinearizationInternal(); + dumpLinearizationDataInternal(); } catch (QPDFExc& e) { - m->lin.linearizationWarning(e.what()); + linearizationWarning(e.what()); } } diff --git a/libqpdf/qpdf/QPDF_private.hh b/libqpdf/qpdf/QPDF_private.hh index 7ab1657..5c86d81 100644 --- a/libqpdf/qpdf/QPDF_private.hh +++ b/libqpdf/qpdf/QPDF_private.hh @@ -709,6 +709,10 @@ class QPDF::Doc::Linearization: Common { } + bool linearized(); + bool check(); + void show_data(); + // For QPDFWriter: template @@ -738,6 +742,7 @@ class QPDF::Doc::Linearization: Common int& O, bool compressed); + private: // methods to support linearization checking -- implemented in QPDF_linearization.cc void readLinearizationData(); -- libgit2 0.21.4