Commit 2394dd8519feed0fd6e04eb903d75029316b36e7
1 parent
e2975b9e
QPDFJob increment: static functions to member functions
Convert remaining static functions that take QPDFJob& as a parameter to member functions. Utility functions that don't take QPDFJob& remain static functions and can probably just stay that way since the keep extra complexity out of QPDFJob.hh.
Showing
2 changed files
with
115 additions
and
53 deletions
include/qpdf/QPDFJob.hh
| @@ -23,9 +23,10 @@ | @@ -23,9 +23,10 @@ | ||
| 23 | #define QPDFJOB_HH | 23 | #define QPDFJOB_HH |
| 24 | 24 | ||
| 25 | #include <qpdf/DLL.h> | 25 | #include <qpdf/DLL.h> |
| 26 | +#include <qpdf/Constants.h> | ||
| 26 | #include <qpdf/PointerHolder.hh> | 27 | #include <qpdf/PointerHolder.hh> |
| 27 | #include <qpdf/QPDF.hh> | 28 | #include <qpdf/QPDF.hh> |
| 28 | -#include <qpdf/Constants.h> | 29 | +#include <qpdf/QPDFPageObjectHelper.hh> |
| 29 | 30 | ||
| 30 | #include <string> | 31 | #include <string> |
| 31 | #include <list> | 32 | #include <list> |
| @@ -169,6 +170,12 @@ class QPDFJob | @@ -169,6 +170,12 @@ class QPDFJob | ||
| 169 | std::string prefix; | 170 | std::string prefix; |
| 170 | }; | 171 | }; |
| 171 | 172 | ||
| 173 | + PointerHolder<QPDF> doProcessOnce( | ||
| 174 | + std::function<void(QPDF*, char const*)> fn, | ||
| 175 | + char const* password, bool empty); | ||
| 176 | + PointerHolder<QPDF> doProcess( | ||
| 177 | + std::function<void(QPDF*, char const*)> fn, | ||
| 178 | + char const* password, bool empty); | ||
| 172 | PointerHolder<QPDF> processFile( | 179 | PointerHolder<QPDF> processFile( |
| 173 | char const* filename, char const* password); | 180 | char const* filename, char const* password); |
| 174 | void validateUnderOverlay(QPDF& pdf, QPDFJob::UnderOverlay* uo); | 181 | void validateUnderOverlay(QPDF& pdf, QPDFJob::UnderOverlay* uo); |
| @@ -181,6 +188,7 @@ class QPDFJob | @@ -181,6 +188,7 @@ class QPDFJob | ||
| 181 | void writeOutfile(QPDF& pdf); | 188 | void writeOutfile(QPDF& pdf); |
| 182 | void doJSON(QPDF& pdf); | 189 | void doJSON(QPDF& pdf); |
| 183 | void doInspection(QPDF& pdf); | 190 | void doInspection(QPDF& pdf); |
| 191 | + void setQPDFOptions(QPDF& pdf); | ||
| 184 | void showEncryption(QPDF& pdf); | 192 | void showEncryption(QPDF& pdf); |
| 185 | void doCheck(QPDF& pdf); | 193 | void doCheck(QPDF& pdf); |
| 186 | void doShowObj(QPDF& pdf); | 194 | void doShowObj(QPDF& pdf); |
| @@ -189,6 +197,33 @@ class QPDFJob | @@ -189,6 +197,33 @@ class QPDFJob | ||
| 189 | void setEncryptionOptions(QPDF&, QPDFWriter&); | 197 | void setEncryptionOptions(QPDF&, QPDFWriter&); |
| 190 | void maybeFixWritePassword(int R, std::string& password); | 198 | void maybeFixWritePassword(int R, std::string& password); |
| 191 | 199 | ||
| 200 | + void doShowAttachment(QPDF& pdf); | ||
| 201 | + std::set<QPDFObjGen> getWantedJSONObjects(); | ||
| 202 | + void doJSONObjects(QPDF& pdf, JSON& j); | ||
| 203 | + void doJSONObjectinfo(QPDF& pdf, JSON& j); | ||
| 204 | + void doJSONPages(QPDF& pdf, JSON& j); | ||
| 205 | + void doJSONPageLabels(QPDF& pdf, JSON& j); | ||
| 206 | + void doJSONOutlines(QPDF& pdf, JSON& j); | ||
| 207 | + void doJSONAcroform(QPDF& pdf, JSON& j); | ||
| 208 | + void doJSONEncrypt(QPDF& pdf, JSON& j); | ||
| 209 | + void doJSONAttachments(QPDF& pdf, JSON& j); | ||
| 210 | + PointerHolder<QPDF> processInputSource( | ||
| 211 | + PointerHolder<InputSource> is, char const* password); | ||
| 212 | + void doUnderOverlayForPage( | ||
| 213 | + QPDF& pdf, | ||
| 214 | + QPDFJob::UnderOverlay& uo, | ||
| 215 | + std::map<int, std::vector<int> >& pagenos, | ||
| 216 | + size_t page_idx, | ||
| 217 | + std::map<int, QPDFObjectHandle>& fo, | ||
| 218 | + std::vector<QPDFPageObjectHelper>& pages, | ||
| 219 | + QPDFPageObjectHelper& dest_page, | ||
| 220 | + bool before); | ||
| 221 | + bool shouldRemoveUnreferencedResources(QPDF& pdf); | ||
| 222 | + void handlePageSpecs( | ||
| 223 | + QPDF& pdf, bool& warnings, | ||
| 224 | + std::vector<PointerHolder<QPDF>>& page_heap); | ||
| 225 | + void handleRotations(QPDF& pdf); | ||
| 226 | + | ||
| 192 | enum remove_unref_e { re_auto, re_yes, re_no }; | 227 | enum remove_unref_e { re_auto, re_yes, re_no }; |
| 193 | 228 | ||
| 194 | char const* password; | 229 | char const* password; |
libqpdf/QPDFJob.cc
| @@ -284,8 +284,10 @@ static void parse_version(std::string const& full_version_string, | @@ -284,8 +284,10 @@ static void parse_version(std::string const& full_version_string, | ||
| 284 | version = v; | 284 | version = v; |
| 285 | } | 285 | } |
| 286 | 286 | ||
| 287 | -static void set_qpdf_options(QPDF& pdf, QPDFJob& o) | 287 | +void |
| 288 | +QPDFJob::setQPDFOptions(QPDF& pdf) | ||
| 288 | { | 289 | { |
| 290 | + QPDFJob& o = *this; // QXXXQ | ||
| 289 | if (o.ignore_xref_streams) | 291 | if (o.ignore_xref_streams) |
| 290 | { | 292 | { |
| 291 | pdf.setIgnoreXRefStreams(true); | 293 | pdf.setIgnoreXRefStreams(true); |
| @@ -648,8 +650,10 @@ QPDFJob::doListAttachments(QPDF& pdf) | @@ -648,8 +650,10 @@ QPDFJob::doListAttachments(QPDF& pdf) | ||
| 648 | } | 650 | } |
| 649 | } | 651 | } |
| 650 | 652 | ||
| 651 | -static void do_show_attachment(QPDF& pdf, QPDFJob& o) | 653 | +void |
| 654 | +QPDFJob::doShowAttachment(QPDF& pdf) | ||
| 652 | { | 655 | { |
| 656 | + QPDFJob& o = *this; // QXXXQ | ||
| 653 | QPDFEmbeddedFileDocumentHelper efdh(pdf); | 657 | QPDFEmbeddedFileDocumentHelper efdh(pdf); |
| 654 | auto fs = efdh.getEmbeddedFile(o.attachment_to_show); | 658 | auto fs = efdh.getEmbeddedFile(o.attachment_to_show); |
| 655 | if (! fs) | 659 | if (! fs) |
| @@ -684,9 +688,10 @@ QPDFJob::parse_object_id(std::string const& objspec, | @@ -684,9 +688,10 @@ QPDFJob::parse_object_id(std::string const& objspec, | ||
| 684 | } | 688 | } |
| 685 | } | 689 | } |
| 686 | 690 | ||
| 687 | -static std::set<QPDFObjGen> | ||
| 688 | -get_wanted_json_objects(QPDFJob& o) | 691 | +std::set<QPDFObjGen> |
| 692 | +QPDFJob::getWantedJSONObjects() | ||
| 689 | { | 693 | { |
| 694 | + QPDFJob& o = *this; // QXXXQ | ||
| 690 | std::set<QPDFObjGen> wanted_og; | 695 | std::set<QPDFObjGen> wanted_og; |
| 691 | for (auto const& iter: o.json_objects) | 696 | for (auto const& iter: o.json_objects) |
| 692 | { | 697 | { |
| @@ -702,13 +707,15 @@ get_wanted_json_objects(QPDFJob& o) | @@ -702,13 +707,15 @@ get_wanted_json_objects(QPDFJob& o) | ||
| 702 | return wanted_og; | 707 | return wanted_og; |
| 703 | } | 708 | } |
| 704 | 709 | ||
| 705 | -static void do_json_objects(QPDF& pdf, QPDFJob& o, JSON& j) | 710 | +void |
| 711 | +QPDFJob::doJSONObjects(QPDF& pdf, JSON& j) | ||
| 706 | { | 712 | { |
| 713 | + QPDFJob& o = *this; // QXXXQ | ||
| 707 | // Add all objects. Do this first before other code below modifies | 714 | // Add all objects. Do this first before other code below modifies |
| 708 | // things by doing stuff like calling | 715 | // things by doing stuff like calling |
| 709 | // pushInheritedAttributesToPage. | 716 | // pushInheritedAttributesToPage. |
| 710 | bool all_objects = o.json_objects.empty(); | 717 | bool all_objects = o.json_objects.empty(); |
| 711 | - std::set<QPDFObjGen> wanted_og = get_wanted_json_objects(o); | 718 | + std::set<QPDFObjGen> wanted_og = getWantedJSONObjects(); |
| 712 | JSON j_objects = j.addDictionaryMember("objects", JSON::makeDictionary()); | 719 | JSON j_objects = j.addDictionaryMember("objects", JSON::makeDictionary()); |
| 713 | if (all_objects || o.json_objects.count("trailer")) | 720 | if (all_objects || o.json_objects.count("trailer")) |
| 714 | { | 721 | { |
| @@ -727,12 +734,14 @@ static void do_json_objects(QPDF& pdf, QPDFJob& o, JSON& j) | @@ -727,12 +734,14 @@ static void do_json_objects(QPDF& pdf, QPDFJob& o, JSON& j) | ||
| 727 | } | 734 | } |
| 728 | } | 735 | } |
| 729 | 736 | ||
| 730 | -static void do_json_objectinfo(QPDF& pdf, QPDFJob& o, JSON& j) | 737 | +void |
| 738 | +QPDFJob::doJSONObjectinfo(QPDF& pdf, JSON& j) | ||
| 731 | { | 739 | { |
| 740 | + QPDFJob& o = *this; // QXXXQ | ||
| 732 | // Do this first before other code below modifies things by doing | 741 | // Do this first before other code below modifies things by doing |
| 733 | // stuff like calling pushInheritedAttributesToPage. | 742 | // stuff like calling pushInheritedAttributesToPage. |
| 734 | bool all_objects = o.json_objects.empty(); | 743 | bool all_objects = o.json_objects.empty(); |
| 735 | - std::set<QPDFObjGen> wanted_og = get_wanted_json_objects(o); | 744 | + std::set<QPDFObjGen> wanted_og = getWantedJSONObjects(); |
| 736 | JSON j_objectinfo = j.addDictionaryMember( | 745 | JSON j_objectinfo = j.addDictionaryMember( |
| 737 | "objectinfo", JSON::makeDictionary()); | 746 | "objectinfo", JSON::makeDictionary()); |
| 738 | for (auto& obj: pdf.getAllObjects()) | 747 | for (auto& obj: pdf.getAllObjects()) |
| @@ -760,8 +769,10 @@ static void do_json_objectinfo(QPDF& pdf, QPDFJob& o, JSON& j) | @@ -760,8 +769,10 @@ static void do_json_objectinfo(QPDF& pdf, QPDFJob& o, JSON& j) | ||
| 760 | } | 769 | } |
| 761 | } | 770 | } |
| 762 | 771 | ||
| 763 | -static void do_json_pages(QPDF& pdf, QPDFJob& o, JSON& j) | 772 | +void |
| 773 | +QPDFJob::doJSONPages(QPDF& pdf, JSON& j) | ||
| 764 | { | 774 | { |
| 775 | + QPDFJob& o = *this; // QXXXQ | ||
| 765 | JSON j_pages = j.addDictionaryMember("pages", JSON::makeArray()); | 776 | JSON j_pages = j.addDictionaryMember("pages", JSON::makeArray()); |
| 766 | QPDFPageDocumentHelper pdh(pdf); | 777 | QPDFPageDocumentHelper pdh(pdf); |
| 767 | QPDFPageLabelDocumentHelper pldh(pdf); | 778 | QPDFPageLabelDocumentHelper pldh(pdf); |
| @@ -848,7 +859,8 @@ static void do_json_pages(QPDF& pdf, QPDFJob& o, JSON& j) | @@ -848,7 +859,8 @@ static void do_json_pages(QPDF& pdf, QPDFJob& o, JSON& j) | ||
| 848 | } | 859 | } |
| 849 | } | 860 | } |
| 850 | 861 | ||
| 851 | -static void do_json_page_labels(QPDF& pdf, QPDFJob& o, JSON& j) | 862 | +void |
| 863 | +QPDFJob::doJSONPageLabels(QPDF& pdf, JSON& j) | ||
| 852 | { | 864 | { |
| 853 | JSON j_labels = j.addDictionaryMember("pagelabels", JSON::makeArray()); | 865 | JSON j_labels = j.addDictionaryMember("pagelabels", JSON::makeArray()); |
| 854 | QPDFPageLabelDocumentHelper pldh(pdf); | 866 | QPDFPageLabelDocumentHelper pldh(pdf); |
| @@ -908,7 +920,8 @@ static void add_outlines_to_json( | @@ -908,7 +920,8 @@ static void add_outlines_to_json( | ||
| 908 | } | 920 | } |
| 909 | } | 921 | } |
| 910 | 922 | ||
| 911 | -static void do_json_outlines(QPDF& pdf, QPDFJob& o, JSON& j) | 923 | +void |
| 924 | +QPDFJob::doJSONOutlines(QPDF& pdf, JSON& j) | ||
| 912 | { | 925 | { |
| 913 | std::map<QPDFObjGen, int> page_numbers; | 926 | std::map<QPDFObjGen, int> page_numbers; |
| 914 | QPDFPageDocumentHelper dh(pdf); | 927 | QPDFPageDocumentHelper dh(pdf); |
| @@ -927,7 +940,8 @@ static void do_json_outlines(QPDF& pdf, QPDFJob& o, JSON& j) | @@ -927,7 +940,8 @@ static void do_json_outlines(QPDF& pdf, QPDFJob& o, JSON& j) | ||
| 927 | add_outlines_to_json(odh.getTopLevelOutlines(), j_outlines, page_numbers); | 940 | add_outlines_to_json(odh.getTopLevelOutlines(), j_outlines, page_numbers); |
| 928 | } | 941 | } |
| 929 | 942 | ||
| 930 | -static void do_json_acroform(QPDF& pdf, QPDFJob& o, JSON& j) | 943 | +void |
| 944 | +QPDFJob::doJSONAcroform(QPDF& pdf, JSON& j) | ||
| 931 | { | 945 | { |
| 932 | JSON j_acroform = j.addDictionaryMember( | 946 | JSON j_acroform = j.addDictionaryMember( |
| 933 | "acroform", JSON::makeDictionary()); | 947 | "acroform", JSON::makeDictionary()); |
| @@ -1030,8 +1044,10 @@ static void do_json_acroform(QPDF& pdf, QPDFJob& o, JSON& j) | @@ -1030,8 +1044,10 @@ static void do_json_acroform(QPDF& pdf, QPDFJob& o, JSON& j) | ||
| 1030 | } | 1044 | } |
| 1031 | } | 1045 | } |
| 1032 | 1046 | ||
| 1033 | -static void do_json_encrypt(QPDF& pdf, QPDFJob& o, JSON& j) | 1047 | +void |
| 1048 | +QPDFJob::doJSONEncrypt(QPDF& pdf, JSON& j) | ||
| 1034 | { | 1049 | { |
| 1050 | + QPDFJob& o = *this; // QXXXQ | ||
| 1035 | int R = 0; | 1051 | int R = 0; |
| 1036 | int P = 0; | 1052 | int P = 0; |
| 1037 | int V = 0; | 1053 | int V = 0; |
| @@ -1130,7 +1146,8 @@ static void do_json_encrypt(QPDF& pdf, QPDFJob& o, JSON& j) | @@ -1130,7 +1146,8 @@ static void do_json_encrypt(QPDF& pdf, QPDFJob& o, JSON& j) | ||
| 1130 | "filemethod", JSON::makeString(s_file_method)); | 1146 | "filemethod", JSON::makeString(s_file_method)); |
| 1131 | } | 1147 | } |
| 1132 | 1148 | ||
| 1133 | -static void do_json_attachments(QPDF& pdf, QPDFJob& o, JSON& j) | 1149 | +void |
| 1150 | +QPDFJob::doJSONAttachments(QPDF& pdf, JSON& j) | ||
| 1134 | { | 1151 | { |
| 1135 | JSON j_attachments = j.addDictionaryMember( | 1152 | JSON j_attachments = j.addDictionaryMember( |
| 1136 | "attachments", JSON::makeDictionary()); | 1153 | "attachments", JSON::makeDictionary()); |
| @@ -1528,35 +1545,35 @@ QPDFJob::doJSON(QPDF& pdf) | @@ -1528,35 +1545,35 @@ QPDFJob::doJSON(QPDF& pdf) | ||
| 1528 | // places: json_schema, doJSON, and initOptionTable. | 1545 | // places: json_schema, doJSON, and initOptionTable. |
| 1529 | if (all_keys || o.json_keys.count("objects")) | 1546 | if (all_keys || o.json_keys.count("objects")) |
| 1530 | { | 1547 | { |
| 1531 | - do_json_objects(pdf, o, j); | 1548 | + doJSONObjects(pdf, j); |
| 1532 | } | 1549 | } |
| 1533 | if (all_keys || o.json_keys.count("objectinfo")) | 1550 | if (all_keys || o.json_keys.count("objectinfo")) |
| 1534 | { | 1551 | { |
| 1535 | - do_json_objectinfo(pdf, o, j); | 1552 | + doJSONObjectinfo(pdf, j); |
| 1536 | } | 1553 | } |
| 1537 | if (all_keys || o.json_keys.count("pages")) | 1554 | if (all_keys || o.json_keys.count("pages")) |
| 1538 | { | 1555 | { |
| 1539 | - do_json_pages(pdf, o, j); | 1556 | + doJSONPages(pdf, j); |
| 1540 | } | 1557 | } |
| 1541 | if (all_keys || o.json_keys.count("pagelabels")) | 1558 | if (all_keys || o.json_keys.count("pagelabels")) |
| 1542 | { | 1559 | { |
| 1543 | - do_json_page_labels(pdf, o, j); | 1560 | + doJSONPageLabels(pdf, j); |
| 1544 | } | 1561 | } |
| 1545 | if (all_keys || o.json_keys.count("outlines")) | 1562 | if (all_keys || o.json_keys.count("outlines")) |
| 1546 | { | 1563 | { |
| 1547 | - do_json_outlines(pdf, o, j); | 1564 | + doJSONOutlines(pdf, j); |
| 1548 | } | 1565 | } |
| 1549 | if (all_keys || o.json_keys.count("acroform")) | 1566 | if (all_keys || o.json_keys.count("acroform")) |
| 1550 | { | 1567 | { |
| 1551 | - do_json_acroform(pdf, o, j); | 1568 | + doJSONAcroform(pdf, j); |
| 1552 | } | 1569 | } |
| 1553 | if (all_keys || o.json_keys.count("encrypt")) | 1570 | if (all_keys || o.json_keys.count("encrypt")) |
| 1554 | { | 1571 | { |
| 1555 | - do_json_encrypt(pdf, o, j); | 1572 | + doJSONEncrypt(pdf, j); |
| 1556 | } | 1573 | } |
| 1557 | if (all_keys || o.json_keys.count("attachments")) | 1574 | if (all_keys || o.json_keys.count("attachments")) |
| 1558 | { | 1575 | { |
| 1559 | - do_json_attachments(pdf, o, j); | 1576 | + doJSONAttachments(pdf, j); |
| 1560 | } | 1577 | } |
| 1561 | 1578 | ||
| 1562 | // Check against schema | 1579 | // Check against schema |
| @@ -1645,7 +1662,7 @@ QPDFJob::doInspection(QPDF& pdf) | @@ -1645,7 +1662,7 @@ QPDFJob::doInspection(QPDF& pdf) | ||
| 1645 | } | 1662 | } |
| 1646 | if (! o.attachment_to_show.empty()) | 1663 | if (! o.attachment_to_show.empty()) |
| 1647 | { | 1664 | { |
| 1648 | - do_show_attachment(pdf, o); | 1665 | + doShowAttachment(pdf); |
| 1649 | } | 1666 | } |
| 1650 | if (! pdf.getWarnings().empty()) | 1667 | if (! pdf.getWarnings().empty()) |
| 1651 | { | 1668 | { |
| @@ -1830,12 +1847,13 @@ ImageOptimizer::provideStreamData(int, int, Pipeline* pipeline) | @@ -1830,12 +1847,13 @@ ImageOptimizer::provideStreamData(int, int, Pipeline* pipeline) | ||
| 1830 | false, false); | 1847 | false, false); |
| 1831 | } | 1848 | } |
| 1832 | 1849 | ||
| 1833 | -static PointerHolder<QPDF> do_process_once( | 1850 | +PointerHolder<QPDF> |
| 1851 | +QPDFJob::doProcessOnce( | ||
| 1834 | std::function<void(QPDF*, char const*)> fn, | 1852 | std::function<void(QPDF*, char const*)> fn, |
| 1835 | - char const* password, QPDFJob& o, bool empty) | 1853 | + char const* password, bool empty) |
| 1836 | { | 1854 | { |
| 1837 | PointerHolder<QPDF> pdf = new QPDF; | 1855 | PointerHolder<QPDF> pdf = new QPDF; |
| 1838 | - set_qpdf_options(*pdf, o); | 1856 | + setQPDFOptions(*pdf); |
| 1839 | if (empty) | 1857 | if (empty) |
| 1840 | { | 1858 | { |
| 1841 | pdf->emptyPDF(); | 1859 | pdf->emptyPDF(); |
| @@ -1847,10 +1865,12 @@ static PointerHolder<QPDF> do_process_once( | @@ -1847,10 +1865,12 @@ static PointerHolder<QPDF> do_process_once( | ||
| 1847 | return pdf; | 1865 | return pdf; |
| 1848 | } | 1866 | } |
| 1849 | 1867 | ||
| 1850 | -static PointerHolder<QPDF> do_process( | 1868 | +PointerHolder<QPDF> |
| 1869 | +QPDFJob::doProcess( | ||
| 1851 | std::function<void(QPDF*, char const*)> fn, | 1870 | std::function<void(QPDF*, char const*)> fn, |
| 1852 | - char const* password, QPDFJob& o, bool empty) | 1871 | + char const* password, bool empty) |
| 1853 | { | 1872 | { |
| 1873 | + QPDFJob& o = *this; // QXXXQ | ||
| 1854 | // If a password has been specified but doesn't work, try other | 1874 | // If a password has been specified but doesn't work, try other |
| 1855 | // passwords that are equivalent in different character encodings. | 1875 | // passwords that are equivalent in different character encodings. |
| 1856 | // This makes it possible to open PDF files that were encrypted | 1876 | // This makes it possible to open PDF files that were encrypted |
| @@ -1878,7 +1898,7 @@ static PointerHolder<QPDF> do_process( | @@ -1878,7 +1898,7 @@ static PointerHolder<QPDF> do_process( | ||
| 1878 | { | 1898 | { |
| 1879 | // There is no password, or we're not doing recovery, so just | 1899 | // There is no password, or we're not doing recovery, so just |
| 1880 | // do the normal processing with the supplied password. | 1900 | // do the normal processing with the supplied password. |
| 1881 | - return do_process_once(fn, password, o, empty); | 1901 | + return doProcessOnce(fn, password, empty); |
| 1882 | } | 1902 | } |
| 1883 | 1903 | ||
| 1884 | // Get a list of otherwise encoded strings. Keep in scope for this | 1904 | // Get a list of otherwise encoded strings. Keep in scope for this |
| @@ -1912,7 +1932,7 @@ static PointerHolder<QPDF> do_process( | @@ -1912,7 +1932,7 @@ static PointerHolder<QPDF> do_process( | ||
| 1912 | { | 1932 | { |
| 1913 | try | 1933 | try |
| 1914 | { | 1934 | { |
| 1915 | - return do_process_once(fn, *iter, o, empty); | 1935 | + return doProcessOnce(fn, *iter, empty); |
| 1916 | } | 1936 | } |
| 1917 | catch (QPDFExc& e) | 1937 | catch (QPDFExc& e) |
| 1918 | { | 1938 | { |
| @@ -1941,20 +1961,20 @@ static PointerHolder<QPDF> do_process( | @@ -1941,20 +1961,20 @@ static PointerHolder<QPDF> do_process( | ||
| 1941 | PointerHolder<QPDF> | 1961 | PointerHolder<QPDF> |
| 1942 | QPDFJob::processFile(char const* filename, char const* password) | 1962 | QPDFJob::processFile(char const* filename, char const* password) |
| 1943 | { | 1963 | { |
| 1944 | - QPDFJob& o = *this; // QXXXQ | ||
| 1945 | auto f1 = std::mem_fn<void(char const*, char const*)>(&QPDF::processFile); | 1964 | auto f1 = std::mem_fn<void(char const*, char const*)>(&QPDF::processFile); |
| 1946 | auto fn = std::bind( | 1965 | auto fn = std::bind( |
| 1947 | f1, std::placeholders::_1, filename, std::placeholders::_2); | 1966 | f1, std::placeholders::_1, filename, std::placeholders::_2); |
| 1948 | - return do_process(fn, password, o, strcmp(filename, "") == 0); | 1967 | + return doProcess(fn, password, strcmp(filename, "") == 0); |
| 1949 | } | 1968 | } |
| 1950 | 1969 | ||
| 1951 | -static PointerHolder<QPDF> process_input_source( | ||
| 1952 | - PointerHolder<InputSource> is, char const* password, QPDFJob& o) | 1970 | +PointerHolder<QPDF> |
| 1971 | +QPDFJob::processInputSource( | ||
| 1972 | + PointerHolder<InputSource> is, char const* password) | ||
| 1953 | { | 1973 | { |
| 1954 | auto f1 = std::mem_fn(&QPDF::processInputSource); | 1974 | auto f1 = std::mem_fn(&QPDF::processInputSource); |
| 1955 | auto fn = std::bind( | 1975 | auto fn = std::bind( |
| 1956 | f1, std::placeholders::_1, is, std::placeholders::_2); | 1976 | f1, std::placeholders::_1, is, std::placeholders::_2); |
| 1957 | - return do_process(fn, password, o, false); | 1977 | + return doProcess(fn, password, false); |
| 1958 | } | 1978 | } |
| 1959 | 1979 | ||
| 1960 | void | 1980 | void |
| @@ -2035,9 +2055,9 @@ static QPDFAcroFormDocumentHelper* get_afdh_for_qpdf( | @@ -2035,9 +2055,9 @@ static QPDFAcroFormDocumentHelper* get_afdh_for_qpdf( | ||
| 2035 | return afdh_map[uid].getPointer(); | 2055 | return afdh_map[uid].getPointer(); |
| 2036 | } | 2056 | } |
| 2037 | 2057 | ||
| 2038 | -static void do_under_overlay_for_page( | 2058 | +void |
| 2059 | +QPDFJob::doUnderOverlayForPage( | ||
| 2039 | QPDF& pdf, | 2060 | QPDF& pdf, |
| 2040 | - QPDFJob& o, | ||
| 2041 | QPDFJob::UnderOverlay& uo, | 2061 | QPDFJob::UnderOverlay& uo, |
| 2042 | std::map<int, std::vector<int> >& pagenos, | 2062 | std::map<int, std::vector<int> >& pagenos, |
| 2043 | size_t page_idx, | 2063 | size_t page_idx, |
| @@ -2046,6 +2066,7 @@ static void do_under_overlay_for_page( | @@ -2046,6 +2066,7 @@ static void do_under_overlay_for_page( | ||
| 2046 | QPDFPageObjectHelper& dest_page, | 2066 | QPDFPageObjectHelper& dest_page, |
| 2047 | bool before) | 2067 | bool before) |
| 2048 | { | 2068 | { |
| 2069 | + QPDFJob& o = *this; // QXXXQ | ||
| 2049 | int pageno = 1 + QIntC::to_int(page_idx); | 2070 | int pageno = 1 + QIntC::to_int(page_idx); |
| 2050 | if (! pagenos.count(pageno)) | 2071 | if (! pagenos.count(pageno)) |
| 2051 | { | 2072 | { |
| @@ -2164,12 +2185,12 @@ QPDFJob::handleUnderOverlay(QPDF& pdf) | @@ -2164,12 +2185,12 @@ QPDFJob::handleUnderOverlay(QPDF& pdf) | ||
| 2164 | o.doIfVerbose([&](std::ostream& cout, std::string const& prefix) { | 2185 | o.doIfVerbose([&](std::ostream& cout, std::string const& prefix) { |
| 2165 | cout << " page " << 1+i << std::endl; | 2186 | cout << " page " << 1+i << std::endl; |
| 2166 | }); | 2187 | }); |
| 2167 | - do_under_overlay_for_page(pdf, o, o.underlay, underlay_pagenos, i, | ||
| 2168 | - underlay_fo, upages, main_pages.at(i), | ||
| 2169 | - true); | ||
| 2170 | - do_under_overlay_for_page(pdf, o, o.overlay, overlay_pagenos, i, | ||
| 2171 | - overlay_fo, opages, main_pages.at(i), | ||
| 2172 | - false); | 2188 | + doUnderOverlayForPage(pdf, o.underlay, underlay_pagenos, i, |
| 2189 | + underlay_fo, upages, main_pages.at(i), | ||
| 2190 | + true); | ||
| 2191 | + doUnderOverlayForPage(pdf, o.overlay, overlay_pagenos, i, | ||
| 2192 | + overlay_fo, opages, main_pages.at(i), | ||
| 2193 | + false); | ||
| 2173 | } | 2194 | } |
| 2174 | } | 2195 | } |
| 2175 | 2196 | ||
| @@ -2419,8 +2440,10 @@ QPDFJob::handleTransformations(QPDF& pdf) | @@ -2419,8 +2440,10 @@ QPDFJob::handleTransformations(QPDF& pdf) | ||
| 2419 | } | 2440 | } |
| 2420 | } | 2441 | } |
| 2421 | 2442 | ||
| 2422 | -static bool should_remove_unreferenced_resources(QPDF& pdf, QPDFJob& o) | 2443 | +bool |
| 2444 | +QPDFJob::shouldRemoveUnreferencedResources(QPDF& pdf) | ||
| 2423 | { | 2445 | { |
| 2446 | + QPDFJob& o = *this; // QXXXQ | ||
| 2424 | if (o.remove_unreferenced_page_resources == QPDFJob::re_no) | 2447 | if (o.remove_unreferenced_page_resources == QPDFJob::re_no) |
| 2425 | { | 2448 | { |
| 2426 | return false; | 2449 | return false; |
| @@ -2570,10 +2593,12 @@ static QPDFObjectHandle added_page(QPDF& pdf, QPDFPageObjectHelper page) | @@ -2570,10 +2593,12 @@ static QPDFObjectHandle added_page(QPDF& pdf, QPDFPageObjectHelper page) | ||
| 2570 | return added_page(pdf, page.getObjectHandle()); | 2593 | return added_page(pdf, page.getObjectHandle()); |
| 2571 | } | 2594 | } |
| 2572 | 2595 | ||
| 2573 | -static void handle_page_specs( | ||
| 2574 | - QPDF& pdf, QPDFJob& o, bool& warnings, | 2596 | +void |
| 2597 | +QPDFJob::handlePageSpecs( | ||
| 2598 | + QPDF& pdf, bool& warnings, | ||
| 2575 | std::vector<PointerHolder<QPDF>>& page_heap) | 2599 | std::vector<PointerHolder<QPDF>>& page_heap) |
| 2576 | { | 2600 | { |
| 2601 | + QPDFJob& o = *this; // QXXXQ | ||
| 2577 | // Parse all page specifications and translate them into lists of | 2602 | // Parse all page specifications and translate them into lists of |
| 2578 | // actual pages. | 2603 | // actual pages. |
| 2579 | 2604 | ||
| @@ -2668,7 +2693,7 @@ static void handle_page_specs( | @@ -2668,7 +2693,7 @@ static void handle_page_specs( | ||
| 2668 | is = fis; | 2693 | is = fis; |
| 2669 | fis->setFilename(page_spec.filename.c_str()); | 2694 | fis->setFilename(page_spec.filename.c_str()); |
| 2670 | } | 2695 | } |
| 2671 | - PointerHolder<QPDF> qpdf_ph = process_input_source(is, password, o); | 2696 | + PointerHolder<QPDF> qpdf_ph = processInputSource(is, password); |
| 2672 | page_heap.push_back(qpdf_ph); | 2697 | page_heap.push_back(qpdf_ph); |
| 2673 | page_spec_qpdfs[page_spec.filename] = qpdf_ph.getPointer(); | 2698 | page_spec_qpdfs[page_spec.filename] = qpdf_ph.getPointer(); |
| 2674 | if (cis) | 2699 | if (cis) |
| @@ -2705,7 +2730,7 @@ static void handle_page_specs( | @@ -2705,7 +2730,7 @@ static void handle_page_specs( | ||
| 2705 | if (remove_unreferenced.count(other_uuid) == 0) | 2730 | if (remove_unreferenced.count(other_uuid) == 0) |
| 2706 | { | 2731 | { |
| 2707 | remove_unreferenced[other_uuid] = | 2732 | remove_unreferenced[other_uuid] = |
| 2708 | - should_remove_unreferenced_resources(other, o); | 2733 | + shouldRemoveUnreferencedResources(other); |
| 2709 | } | 2734 | } |
| 2710 | if (cis) | 2735 | if (cis) |
| 2711 | { | 2736 | { |
| @@ -2946,8 +2971,10 @@ static void handle_page_specs( | @@ -2946,8 +2971,10 @@ static void handle_page_specs( | ||
| 2946 | } | 2971 | } |
| 2947 | } | 2972 | } |
| 2948 | 2973 | ||
| 2949 | -static void handle_rotations(QPDF& pdf, QPDFJob& o) | 2974 | +void |
| 2975 | +QPDFJob::handleRotations(QPDF& pdf) | ||
| 2950 | { | 2976 | { |
| 2977 | + QPDFJob& o = *this; // QXXXQ | ||
| 2951 | QPDFPageDocumentHelper dh(pdf); | 2978 | QPDFPageDocumentHelper dh(pdf); |
| 2952 | std::vector<QPDFPageObjectHelper> pages = dh.getAllPages(); | 2979 | std::vector<QPDFPageObjectHelper> pages = dh.getAllPages(); |
| 2953 | int npages = QIntC::to_int(pages.size()); | 2980 | int npages = QIntC::to_int(pages.size()); |
| @@ -3314,7 +3341,7 @@ QPDFJob::doSplitPages(QPDF& pdf, bool& warnings) | @@ -3314,7 +3341,7 @@ QPDFJob::doSplitPages(QPDF& pdf, bool& warnings) | ||
| 3314 | before = std::string(o.outfilename) + "-"; | 3341 | before = std::string(o.outfilename) + "-"; |
| 3315 | } | 3342 | } |
| 3316 | 3343 | ||
| 3317 | - if (should_remove_unreferenced_resources(pdf, o)) | 3344 | + if (shouldRemoveUnreferencedResources(pdf)) |
| 3318 | { | 3345 | { |
| 3319 | QPDFPageDocumentHelper dh(pdf); | 3346 | QPDFPageDocumentHelper dh(pdf); |
| 3320 | dh.removeUnreferencedResources(); | 3347 | dh.removeUnreferencedResources(); |
| @@ -3515,11 +3542,11 @@ QPDFJob::run() | @@ -3515,11 +3542,11 @@ QPDFJob::run() | ||
| 3515 | std::vector<PointerHolder<QPDF>> page_heap; | 3542 | std::vector<PointerHolder<QPDF>> page_heap; |
| 3516 | if (! o.page_specs.empty()) | 3543 | if (! o.page_specs.empty()) |
| 3517 | { | 3544 | { |
| 3518 | - handle_page_specs(pdf, o, other_warnings, page_heap); | 3545 | + handlePageSpecs(pdf, other_warnings, page_heap); |
| 3519 | } | 3546 | } |
| 3520 | if (! o.rotations.empty()) | 3547 | if (! o.rotations.empty()) |
| 3521 | { | 3548 | { |
| 3522 | - handle_rotations(pdf, o); | 3549 | + handleRotations(pdf); |
| 3523 | } | 3550 | } |
| 3524 | handleUnderOverlay(pdf); | 3551 | handleUnderOverlay(pdf); |
| 3525 | handleTransformations(pdf); | 3552 | handleTransformations(pdf); |