aboutsummaryrefslogtreecommitdiffstats
path: root/libqpdf
diff options
context:
space:
mode:
Diffstat (limited to 'libqpdf')
-rw-r--r--libqpdf/QPDFJob.cc13
-rw-r--r--libqpdf/QPDFJob_argv.cc72
-rw-r--r--libqpdf/QPDFJob_config.cc88
-rw-r--r--libqpdf/qpdf/auto_job_decl.hh5
-rw-r--r--libqpdf/qpdf/auto_job_init.hh10
5 files changed, 105 insertions, 83 deletions
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<int>
-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<int>();
}
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<QPDFJob::CopyAttConfig> c_copy_att;
std::shared_ptr<QPDFJob::AttConfig> c_att;
std::shared_ptr<QPDFJob::PagesConfig> c_pages;
+ std::shared_ptr<QPDFJob::UOConfig> c_uo;
std::vector<char*> 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
@@ -668,13 +621,6 @@ ArgParser::usage(std::string const& message)
}
void
-ArgParser::parseUnderOverlayOptions(QPDFJob::UnderOverlay* uo)
-{
- o.under_overlay = uo;
- this->ap.selectOptionTable(O_UNDERLAY_OVERLAY);
-}
-
-void
ArgParser::parseOptions()
{
try
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::CopyAttConfig>
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::UOConfig>
+QPDFJob::Config::overlay()
+{
+ o.under_overlay = &o.overlay;
+ return std::shared_ptr<UOConfig>(new UOConfig(*this));
+}
+
+std::shared_ptr<QPDFJob::UOConfig>
+QPDFJob::Config::underlay()
+{
+ o.under_overlay = &o.underlay;
+ return std::shared_ptr<UOConfig>(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();});