Commit bd4bc9445dd3869f7d5886328fab19f490e0c708
1 parent
26edf767
Refactor `Linearization` methods: move logic from `QPDF` to `Lin`, add `lineariz…
…ed`, `check`, and `show_data` methods, update usage across the codebase, and streamline related logic.
Showing
2 changed files
with
32 additions
and
9 deletions
libqpdf/QPDF_linearization.cc
| ... | ... | @@ -366,12 +366,18 @@ Lin::linearizationWarning(std::string_view msg) |
| 366 | 366 | bool |
| 367 | 367 | QPDF::checkLinearization() |
| 368 | 368 | { |
| 369 | + return m->lin.check(); | |
| 370 | +} | |
| 371 | + | |
| 372 | +bool | |
| 373 | +Lin::check() | |
| 374 | +{ | |
| 369 | 375 | try { |
| 370 | - m->lin.readLinearizationData(); | |
| 371 | - m->lin.checkLinearizationInternal(); | |
| 376 | + readLinearizationData(); | |
| 377 | + checkLinearizationInternal(); | |
| 372 | 378 | return !m->linearization_warnings; |
| 373 | 379 | } catch (std::runtime_error& e) { |
| 374 | - m->lin.linearizationWarning( | |
| 380 | + linearizationWarning( | |
| 375 | 381 | "error encountered while checking linearization data: " + std::string(e.what())); |
| 376 | 382 | return false; |
| 377 | 383 | } |
| ... | ... | @@ -380,6 +386,12 @@ QPDF::checkLinearization() |
| 380 | 386 | bool |
| 381 | 387 | QPDF::isLinearized() |
| 382 | 388 | { |
| 389 | + return m->lin.linearized(); | |
| 390 | +} | |
| 391 | + | |
| 392 | +bool | |
| 393 | +Lin::linearized() | |
| 394 | +{ | |
| 383 | 395 | // If the first object in the file is a dictionary with a suitable /Linearized key and has an /L |
| 384 | 396 | // key that accurately indicates the file size, initialize m->lindict and return true. |
| 385 | 397 | |
| ... | ... | @@ -411,7 +423,7 @@ QPDF::isLinearized() |
| 411 | 423 | continue; |
| 412 | 424 | } |
| 413 | 425 | |
| 414 | - Dictionary candidate = getObject(toI(QUtil::string_to_ll(t1.getValue().data())), 0); | |
| 426 | + Dictionary candidate = qpdf.getObject(toI(QUtil::string_to_ll(t1.getValue().data())), 0); | |
| 415 | 427 | auto linkey = candidate["/Linearized"]; |
| 416 | 428 | if (!(linkey.isNumber() && toI(floor(linkey.getNumericValue())) == 1)) { |
| 417 | 429 | return false; |
| ... | ... | @@ -432,7 +444,7 @@ void |
| 432 | 444 | Lin::readLinearizationData() |
| 433 | 445 | { |
| 434 | 446 | util::assertion( |
| 435 | - qpdf.isLinearized(), "called readLinearizationData for file that is not linearized" // | |
| 447 | + linearized(), "called readLinearizationData for file that is not linearized" // | |
| 436 | 448 | ); |
| 437 | 449 | |
| 438 | 450 | // This function throws an exception (which is trapped by checkLinearization()) for any errors |
| ... | ... | @@ -1083,12 +1095,18 @@ Lin::checkHOutlines() |
| 1083 | 1095 | void |
| 1084 | 1096 | QPDF::showLinearizationData() |
| 1085 | 1097 | { |
| 1098 | + m->lin.show_data(); | |
| 1099 | +} | |
| 1100 | + | |
| 1101 | +void | |
| 1102 | +Lin::show_data() | |
| 1103 | +{ | |
| 1086 | 1104 | try { |
| 1087 | - m->lin.readLinearizationData(); | |
| 1088 | - m->lin.checkLinearizationInternal(); | |
| 1089 | - m->lin.dumpLinearizationDataInternal(); | |
| 1105 | + readLinearizationData(); | |
| 1106 | + checkLinearizationInternal(); | |
| 1107 | + dumpLinearizationDataInternal(); | |
| 1090 | 1108 | } catch (QPDFExc& e) { |
| 1091 | - m->lin.linearizationWarning(e.what()); | |
| 1109 | + linearizationWarning(e.what()); | |
| 1092 | 1110 | } |
| 1093 | 1111 | } |
| 1094 | 1112 | ... | ... |
libqpdf/qpdf/QPDF_private.hh
| ... | ... | @@ -709,6 +709,10 @@ class QPDF::Doc::Linearization: Common |
| 709 | 709 | { |
| 710 | 710 | } |
| 711 | 711 | |
| 712 | + bool linearized(); | |
| 713 | + bool check(); | |
| 714 | + void show_data(); | |
| 715 | + | |
| 712 | 716 | // For QPDFWriter: |
| 713 | 717 | |
| 714 | 718 | template <typename T> |
| ... | ... | @@ -738,6 +742,7 @@ class QPDF::Doc::Linearization: Common |
| 738 | 742 | int& O, |
| 739 | 743 | bool compressed); |
| 740 | 744 | |
| 745 | + private: | |
| 741 | 746 | // methods to support linearization checking -- implemented in QPDF_linearization.cc |
| 742 | 747 | |
| 743 | 748 | void readLinearizationData(); | ... | ... |