From b5d41b16b874e322befbd3fa2dde07714f7090a3 Mon Sep 17 00:00:00 2001 From: Jay Berkenbilt Date: Wed, 26 Jan 2022 09:38:34 -0500 Subject: QPDFJob: convert under/overlay and rotate --- libqpdf/QPDFJob.cc | 13 ++----- libqpdf/QPDFJob_argv.cc | 72 +++++------------------------------ libqpdf/QPDFJob_config.cc | 88 +++++++++++++++++++++++++++++++++++++++++++ libqpdf/qpdf/auto_job_decl.hh | 5 --- libqpdf/qpdf/auto_job_init.hh | 10 ++--- 5 files changed, 105 insertions(+), 83 deletions(-) (limited to 'libqpdf') diff --git a/libqpdf/QPDFJob.cc b/libqpdf/QPDFJob.cc index 85df861b..025b7224 100644 --- a/libqpdf/QPDFJob.cc +++ b/libqpdf/QPDFJob.cc @@ -507,7 +507,7 @@ QPDFJob::parseRotationParameter(std::string const& parameter) bool range_valid = false; try { - parseNumrange(range.c_str(), 0, true); + QUtil::parse_numrange(range.c_str(), 0); range_valid = true; } catch (std::runtime_error const&) @@ -532,7 +532,7 @@ QPDFJob::parseRotationParameter(std::string const& parameter) } std::vector -QPDFJob::parseNumrange(char const* range, int max, bool throw_error) +QPDFJob::parseNumrange(char const* range, int max) { try { @@ -540,14 +540,7 @@ QPDFJob::parseNumrange(char const* range, int max, bool throw_error) } catch (std::runtime_error& e) { - if (throw_error) - { - throw(e); - } - else - { - throw ConfigError(e.what()); - } + throw ConfigError(e.what()); } return std::vector(); } diff --git a/libqpdf/QPDFJob_argv.cc b/libqpdf/QPDFJob_argv.cc index 7cd8e22e..d2b38211 100644 --- a/libqpdf/QPDFJob_argv.cc +++ b/libqpdf/QPDFJob_argv.cc @@ -36,7 +36,6 @@ namespace void usage(std::string const& message); void initOptionTables(); void doFinalChecks(); - void parseUnderOverlayOptions(QPDFJob::UnderOverlay*); QPDFArgParser ap; QPDFJob& o; @@ -44,6 +43,7 @@ namespace std::shared_ptr c_copy_att; std::shared_ptr c_att; std::shared_ptr c_pages; + std::shared_ptr c_uo; std::vector accumulated_args; // points to member in ap char* pages_password; }; @@ -321,7 +321,7 @@ ArgParser::argPagesPositional(char* arg) { try { - o.parseNumrange(range, 0, true); + QUtil::parse_numrange(range, 0); } catch (std::runtime_error& e1) { @@ -369,19 +369,15 @@ ArgParser::argEndPages() void ArgParser::argUnderlay() { - parseUnderOverlayOptions(&o.underlay); + this->c_uo = c_main->underlay(); + this->ap.selectOptionTable(O_UNDERLAY_OVERLAY); } void ArgParser::argOverlay() { - parseUnderOverlayOptions(&o.overlay); -} - -void -ArgParser::argRotate(char* parameter) -{ - o.parseRotationParameter(parameter); + this->c_uo = c_main->overlay(); + this->ap.selectOptionTable(O_UNDERLAY_OVERLAY); } void @@ -576,57 +572,14 @@ ArgParser::argEnd256BitEncryption() void ArgParser::argUOPositional(char* arg) { - if (! o.under_overlay->filename.empty()) - { - usage(o.under_overlay->which + " file already specified"); - } - else - { - o.under_overlay->filename = arg; - } -} - -void -ArgParser::argUOTo(char* parameter) -{ - o.parseNumrange(parameter, 0); - o.under_overlay->to_nr = parameter; -} - -void -ArgParser::argUOFrom(char* parameter) -{ - if (strlen(parameter)) - { - o.parseNumrange(parameter, 0); - } - o.under_overlay->from_nr = parameter; -} - -void -ArgParser::argUORepeat(char* parameter) -{ - if (strlen(parameter)) - { - o.parseNumrange(parameter, 0); - } - o.under_overlay->repeat_nr = parameter; -} - -void -ArgParser::argUOPassword(char* parameter) -{ - o.under_overlay->password = QUtil::make_shared_cstr(parameter); + c_uo->path(arg); } void ArgParser::argEndUnderlayOverlay() { - if (o.under_overlay->filename.empty()) - { - usage(o.under_overlay->which + " file not specified"); - } - o.under_overlay = 0; + c_uo->end(); + c_uo = nullptr; } void @@ -667,13 +620,6 @@ ArgParser::usage(std::string const& message) this->ap.usage(message); } -void -ArgParser::parseUnderOverlayOptions(QPDFJob::UnderOverlay* uo) -{ - o.under_overlay = uo; - this->ap.selectOptionTable(O_UNDERLAY_OVERLAY); -} - void ArgParser::parseOptions() { diff --git a/libqpdf/QPDFJob_config.cc b/libqpdf/QPDFJob_config.cc index 2110f005..c313c219 100644 --- a/libqpdf/QPDFJob_config.cc +++ b/libqpdf/QPDFJob_config.cc @@ -688,6 +688,13 @@ QPDFJob::Config::jobJsonFile(char const* parameter) return *this; } +QPDFJob::Config& +QPDFJob::Config::rotate(char const* parameter) +{ + o.parseRotationParameter(parameter); + return *this; +} + std::shared_ptr QPDFJob::Config::copyAttachmentsFrom() { @@ -875,3 +882,84 @@ QPDFJob::PagesConfig::pageSpec(std::string const& filename, QPDFJob::PageSpec(filename, password, range)); return *this; } + +std::shared_ptr +QPDFJob::Config::overlay() +{ + o.under_overlay = &o.overlay; + return std::shared_ptr(new UOConfig(*this)); +} + +std::shared_ptr +QPDFJob::Config::underlay() +{ + o.under_overlay = &o.underlay; + return std::shared_ptr(new UOConfig(*this)); +} + +QPDFJob::UOConfig::UOConfig(Config& c) : + config(c) +{ +} + +QPDFJob::Config& +QPDFJob::UOConfig::end() +{ + if (config.o.under_overlay->filename.empty()) + { + usage(config.o.under_overlay->which + " file not specified"); + } + config.o.under_overlay = 0; + return this->config; +} + +QPDFJob::UOConfig& +QPDFJob::UOConfig::path(char const* parameter) +{ + if (! config.o.under_overlay->filename.empty()) + { + usage(config.o.under_overlay->which + " file already specified"); + } + else + { + config.o.under_overlay->filename = parameter; + } + return *this; +} + +QPDFJob::UOConfig& +QPDFJob::UOConfig::to(char const* parameter) +{ + config.o.parseNumrange(parameter, 0); + config.o.under_overlay->to_nr = parameter; + return *this; +} + +QPDFJob::UOConfig& +QPDFJob::UOConfig::from(char const* parameter) +{ + if (strlen(parameter)) + { + config.o.parseNumrange(parameter, 0); + } + config.o.under_overlay->from_nr = parameter; + return *this; +} + +QPDFJob::UOConfig& +QPDFJob::UOConfig::repeat(char const* parameter) +{ + if (strlen(parameter)) + { + config.o.parseNumrange(parameter, 0); + } + config.o.under_overlay->repeat_nr = parameter; + return *this; +} + +QPDFJob::UOConfig& +QPDFJob::UOConfig::password(char const* parameter) +{ + config.o.under_overlay->password = QUtil::make_shared_cstr(parameter); + return *this; +} diff --git a/libqpdf/qpdf/auto_job_decl.hh b/libqpdf/qpdf/auto_job_decl.hh index d65df1d9..1dc3fef5 100644 --- a/libqpdf/qpdf/auto_job_decl.hh +++ b/libqpdf/qpdf/auto_job_decl.hh @@ -24,7 +24,6 @@ void argEncrypt(); void argOverlay(); void argPages(); void argUnderlay(); -void argRotate(char *); void argPagesPositional(char*); void argPagesPassword(char *); void argEndPages(); @@ -51,10 +50,6 @@ void argEnc256ForceR5(); void argEnc256AllowInsecure(); void argEnd256BitEncryption(); void argUOPositional(char*); -void argUOTo(char *); -void argUOFrom(char *); -void argUORepeat(char *); -void argUOPassword(char *); void argEndUnderlayOverlay(); void argAttPositional(char*); void argEndAttachment(); diff --git a/libqpdf/qpdf/auto_job_init.hh b/libqpdf/qpdf/auto_job_init.hh index bdf9cb0e..7c34e8b1 100644 --- a/libqpdf/qpdf/auto_job_init.hh +++ b/libqpdf/qpdf/auto_job_init.hh @@ -97,7 +97,7 @@ this->ap.addRequiredParameter("oi-min-width", [this](char *x){c_main->oiMinWidth this->ap.addRequiredParameter("password", [this](char *x){c_main->password(x);}, "password"); this->ap.addRequiredParameter("password-file", [this](char *x){c_main->passwordFile(x);}, "password"); this->ap.addRequiredParameter("remove-attachment", [this](char *x){c_main->removeAttachment(x);}, "attachment"); -this->ap.addRequiredParameter("rotate", p(&ArgParser::argRotate), "[+|-]angle"); +this->ap.addRequiredParameter("rotate", [this](char *x){c_main->rotate(x);}, "[+|-]angle"); this->ap.addRequiredParameter("show-attachment", [this](char *x){c_main->showAttachment(x);}, "attachment"); this->ap.addRequiredParameter("show-object", [this](char *x){c_main->showObject(x);}, "trailer"); this->ap.addChoices("compress-streams", [this](char *x){c_main->compressStreams(x);}, true, yn_choices); @@ -137,10 +137,10 @@ this->ap.addBare("force-R5", b(&ArgParser::argEnc256ForceR5)); this->ap.addBare("allow-insecure", b(&ArgParser::argEnc256AllowInsecure)); this->ap.registerOptionTable("underlay/overlay", b(&ArgParser::argEndUnderlayOverlay)); this->ap.addPositional(p(&ArgParser::argUOPositional)); -this->ap.addRequiredParameter("to", p(&ArgParser::argUOTo), "page-range"); -this->ap.addRequiredParameter("from", p(&ArgParser::argUOFrom), "page-range"); -this->ap.addRequiredParameter("repeat", p(&ArgParser::argUORepeat), "page-range"); -this->ap.addRequiredParameter("password", p(&ArgParser::argUOPassword), "password"); +this->ap.addRequiredParameter("to", [this](char *x){c_uo->to(x);}, "page-range"); +this->ap.addRequiredParameter("from", [this](char *x){c_uo->from(x);}, "page-range"); +this->ap.addRequiredParameter("repeat", [this](char *x){c_uo->repeat(x);}, "page-range"); +this->ap.addRequiredParameter("password", [this](char *x){c_uo->password(x);}, "password"); this->ap.registerOptionTable("attachment", b(&ArgParser::argEndAttachment)); this->ap.addPositional(p(&ArgParser::argAttPositional)); this->ap.addBare("replace", [this](){c_att->replace();}); -- cgit v1.2.3-54-g00ecf