From 79187e585a7c1ac26fe8b2a347a9546885a973e5 Mon Sep 17 00:00:00 2001 From: Jay Berkenbilt Date: Sun, 23 Jan 2022 19:29:18 -0500 Subject: [PATCH] QPDFJob: begin configuration API with verbose --- include/qpdf/QPDFJob.hh | 26 +++++++++++++++++++++++++- libqpdf/QPDFJob.cc | 14 ++++++++++---- libqpdf/QPDFJob_argv.cc | 11 +++++++---- libqpdf/QPDFJob_config.cc | 7 +++++++ 4 files changed, 49 insertions(+), 9 deletions(-) diff --git a/include/qpdf/QPDFJob.hh b/include/qpdf/QPDFJob.hh index 523ff357..3b92aea0 100644 --- a/include/qpdf/QPDFJob.hh +++ b/include/qpdf/QPDFJob.hh @@ -97,6 +97,30 @@ class QPDFJob QPDF_DLL bool createsOutput() const; + // CONFIGURATION + // (implemented in QPDFJob_config.cc) + + // Configuration is performed by calling methods XXX QXXXQ document + class Config + { + friend class QPDFJob; + public: + QPDF_DLL + Config& verbose(bool); + + private: + Config() = delete; + Config(QPDFJob& job) : + o(job) + { + } + QPDFJob& o; + }; + friend class Config; + + QPDF_DLL + Config config(); + // QXXXQ set options -- implemented in QPDFJob_options.cc // QXXXQ these will not be in the final interface @@ -220,7 +244,6 @@ class QPDFJob bool linearize; bool decrypt; int split_pages; - bool verbose; bool progress; bool suppress_warnings; bool warnings_exit_zero; @@ -410,6 +433,7 @@ class QPDFJob std::ostream* cout; std::ostream* cerr; unsigned long encryption_status; + bool verbose; }; std::shared_ptr m; }; diff --git a/libqpdf/QPDFJob.cc b/libqpdf/QPDFJob.cc index 8c185366..487201f8 100644 --- a/libqpdf/QPDFJob.cc +++ b/libqpdf/QPDFJob.cc @@ -324,7 +324,8 @@ QPDFJob::Members::Members() : warnings(false), cout(&std::cout), cerr(&std::cerr), - encryption_status(0) + encryption_status(0), + verbose(false) { } @@ -333,7 +334,6 @@ QPDFJob::QPDFJob() : linearize(false), decrypt(false), split_pages(0), - verbose(false), progress(false), suppress_warnings(false), warnings_exit_zero(false), @@ -447,12 +447,18 @@ void QPDFJob::doIfVerbose( std::function fn) { - if (this->verbose && (this->m->cout != nullptr)) + if (this->m->verbose && (this->m->cout != nullptr)) { fn(*(this->m->cout), this->m->message_prefix); } } +QPDFJob::Config +QPDFJob::config() +{ + return Config(*this); +} + void QPDFJob::run() { @@ -596,7 +602,7 @@ QPDFJob::checkConfiguration() usage("--split-pages may not be used when" " writing to standard output"); } - if (o.verbose) + if (this->m->verbose) { usage("--verbose may not be used when" " writing to standard output"); diff --git a/libqpdf/QPDFJob_argv.cc b/libqpdf/QPDFJob_argv.cc index f19026d1..87f5af2a 100644 --- a/libqpdf/QPDFJob_argv.cc +++ b/libqpdf/QPDFJob_argv.cc @@ -26,7 +26,7 @@ namespace class ArgParser { public: - ArgParser(QPDFArgParser& ap, QPDFJob& o); + ArgParser(QPDFArgParser& ap, QPDFJob::Config& jc, QPDFJob& o); void parseOptions(); private: @@ -42,14 +42,16 @@ namespace QPDFArgParser ap; QPDFJob& o; + QPDFJob::Config& jc; std::vector accumulated_args; // points to member in ap char* pages_password; }; } -ArgParser::ArgParser(QPDFArgParser& ap, QPDFJob& o) : +ArgParser::ArgParser(QPDFArgParser& ap, QPDFJob::Config& jc, QPDFJob& o) : ap(ap), o(o), + jc(jc), pages_password(nullptr) { initOptionTables(); @@ -803,7 +805,7 @@ void ArgParser::argVerbose() { // QXXXQ @TRIVIAL - o.verbose = true; + jc.verbose(true); } void @@ -1558,7 +1560,8 @@ QPDFJob::initializeFromArgv(int argc, char* argv[], char const* progname_env) } QPDFArgParser qap(argc, argv, progname_env); setMessagePrefix(qap.getProgname()); - ArgParser ap(qap, *this); + auto jc = config(); + ArgParser ap(qap, jc, *this); ap.parseOptions(); } diff --git a/libqpdf/QPDFJob_config.cc b/libqpdf/QPDFJob_config.cc index 0dfc7e14..07500f05 100644 --- a/libqpdf/QPDFJob_config.cc +++ b/libqpdf/QPDFJob_config.cc @@ -1 +1,8 @@ #include + +QPDFJob::Config& +QPDFJob::Config::verbose(bool) +{ + o.m->verbose = true; + return *this; +}