aboutsummaryrefslogtreecommitdiffstats
path: root/libqpdf
diff options
context:
space:
mode:
authorJay Berkenbilt <ejb@ql.org>2022-01-26 19:39:22 +0100
committerJay Berkenbilt <ejb@ql.org>2022-01-30 19:11:03 +0100
commit1258054543d2956081c40b3166e9d5043deb6640 (patch)
tree16e862c888e780f84c45cfa218cdc4c56b80a418 /libqpdf
parent901e3e4fbfb22566c44c5ab305c93f70c7b0aa49 (diff)
downloadqpdf-1258054543d2956081c40b3166e9d5043deb6640.tar.zst
QPDFJob: eliminate most access to QPDFJob members from ArgParser
All that's left now is input and output handling.
Diffstat (limited to 'libqpdf')
-rw-r--r--libqpdf/QPDFJob.cc2
-rw-r--r--libqpdf/QPDFJob_argv.cc34
-rw-r--r--libqpdf/QPDFJob_config.cc18
-rw-r--r--libqpdf/qpdf/auto_job_decl.hh2
-rw-r--r--libqpdf/qpdf/auto_job_init.hh4
-rw-r--r--libqpdf/qpdf/auto_job_schema.hh6
6 files changed, 26 insertions, 40 deletions
diff --git a/libqpdf/QPDFJob.cc b/libqpdf/QPDFJob.cc
index 025b7224..28f5f8c6 100644
--- a/libqpdf/QPDFJob.cc
+++ b/libqpdf/QPDFJob.cc
@@ -626,7 +626,7 @@ void
QPDFJob::checkConfiguration()
{
auto usage = [](char const* msg){
- throw std::runtime_error(msg);
+ throw QPDFJob::ConfigError(msg);
};
QPDFJob& o = *this; // QXXXQ
diff --git a/libqpdf/QPDFJob_argv.cc b/libqpdf/QPDFJob_argv.cc
index 8882a7d7..c4a7834a 100644
--- a/libqpdf/QPDFJob_argv.cc
+++ b/libqpdf/QPDFJob_argv.cc
@@ -35,7 +35,6 @@ namespace
void usage(std::string const& message);
void initOptionTables();
- void doFinalChecks();
QPDFArgParser ap;
QPDFJob& o;
@@ -67,8 +66,6 @@ ArgParser::initOptionTables()
{
# include <qpdf/auto_job_init.hh>
- this->ap.addFinalCheck(
- QPDFArgParser::bindBare(&ArgParser::doFinalChecks, this));
// add_help is defined in auto_job_help.hh
add_help(this->ap);
}
@@ -91,6 +88,18 @@ ArgParser::argPositional(char* arg)
}
void
+ArgParser::argEmpty()
+{
+ o.infilename = QUtil::make_shared_cstr("");
+}
+
+void
+ArgParser::argReplaceInput()
+{
+ o.replace_input = true;
+}
+
+void
ArgParser::argVersion()
{
auto whoami = this->ap.getProgname();
@@ -247,10 +256,6 @@ ArgParser::argEncPositional(char* arg)
void
ArgParser::argPages()
{
- if (! o.page_specs.empty())
- {
- usage("the --pages may only be specified one time");
- }
this->accumulated_args.clear();
this->c_pages = c_main->pages();
this->ap.selectOptionTable(O_PAGES);
@@ -480,19 +485,6 @@ ArgParser::parseOptions()
}
void
-ArgParser::doFinalChecks()
-{
- try
- {
- o.checkConfiguration();
- }
- catch (std::runtime_error& e)
- {
- usage(e.what());
- }
-}
-
-void
QPDFJob::initializeFromArgv(int argc, char* argv[], char const* progname_env)
{
if (progname_env == nullptr)
@@ -502,6 +494,8 @@ QPDFJob::initializeFromArgv(int argc, char* argv[], char const* progname_env)
QPDFArgParser qap(argc, argv, progname_env);
setMessagePrefix(qap.getProgname());
ArgParser ap(qap, config(), *this);
+ qap.addFinalCheck(
+ QPDFArgParser::bindBare(&QPDFJob::checkConfiguration, this));
ap.parseOptions();
}
diff --git a/libqpdf/QPDFJob_config.cc b/libqpdf/QPDFJob_config.cc
index 85aa3a3b..9eb03ae3 100644
--- a/libqpdf/QPDFJob_config.cc
+++ b/libqpdf/QPDFJob_config.cc
@@ -89,13 +89,6 @@ QPDFJob::Config::deterministicId()
}
QPDFJob::Config&
-QPDFJob::Config::empty()
-{
- o.infilename = QUtil::make_shared_cstr("");
- return *this;
-}
-
-QPDFJob::Config&
QPDFJob::Config::encryptionFilePassword(char const* parameter)
{
o.encryption_file_password = QUtil::make_shared_cstr(parameter);
@@ -376,13 +369,6 @@ QPDFJob::Config::removePageLabels()
}
QPDFJob::Config&
-QPDFJob::Config::replaceInput()
-{
- o.replace_input = true;
- return *this;
-}
-
-QPDFJob::Config&
QPDFJob::Config::requiresPassword()
{
o.check_requires_password = true;
@@ -860,6 +846,10 @@ QPDFJob::PagesConfig::PagesConfig(Config& c) :
std::shared_ptr<QPDFJob::PagesConfig>
QPDFJob::Config::pages()
{
+ if (! o.page_specs.empty())
+ {
+ usage("--pages may only be specified one time");
+ }
return std::shared_ptr<PagesConfig>(new PagesConfig(*this));
}
diff --git a/libqpdf/qpdf/auto_job_decl.hh b/libqpdf/qpdf/auto_job_decl.hh
index 1f868187..86b5b293 100644
--- a/libqpdf/qpdf/auto_job_decl.hh
+++ b/libqpdf/qpdf/auto_job_decl.hh
@@ -20,9 +20,11 @@ void argJobJsonHelp();
void argPositional(char*);
void argAddAttachment();
void argCopyAttachmentsFrom();
+void argEmpty();
void argEncrypt();
void argOverlay();
void argPages();
+void argReplaceInput();
void argUnderlay();
void argPagesPositional(char*);
void argPagesPassword(char *);
diff --git a/libqpdf/qpdf/auto_job_init.hh b/libqpdf/qpdf/auto_job_init.hh
index 7fc044dc..b6750f43 100644
--- a/libqpdf/qpdf/auto_job_init.hh
+++ b/libqpdf/qpdf/auto_job_init.hh
@@ -37,7 +37,7 @@ this->ap.addBare("coalesce-contents", [this](){c_main->coalesceContents();});
this->ap.addBare("copy-attachments-from", b(&ArgParser::argCopyAttachmentsFrom));
this->ap.addBare("decrypt", [this](){c_main->decrypt();});
this->ap.addBare("deterministic-id", [this](){c_main->deterministicId();});
-this->ap.addBare("empty", [this](){c_main->empty();});
+this->ap.addBare("empty", b(&ArgParser::argEmpty));
this->ap.addBare("encrypt", b(&ArgParser::argEncrypt));
this->ap.addBare("externalize-inline-images", [this](){c_main->externalizeInlineImages();});
this->ap.addBare("filtered-stream-data", [this](){c_main->filteredStreamData();});
@@ -63,7 +63,7 @@ this->ap.addBare("qdf", [this](){c_main->qdf();});
this->ap.addBare("raw-stream-data", [this](){c_main->rawStreamData();});
this->ap.addBare("recompress-flate", [this](){c_main->recompressFlate();});
this->ap.addBare("remove-page-labels", [this](){c_main->removePageLabels();});
-this->ap.addBare("replace-input", [this](){c_main->replaceInput();});
+this->ap.addBare("replace-input", b(&ArgParser::argReplaceInput));
this->ap.addBare("requires-password", [this](){c_main->requiresPassword();});
this->ap.addBare("show-encryption", [this](){c_main->showEncryption();});
this->ap.addBare("show-encryption-key", [this](){c_main->showEncryptionKey();});
diff --git a/libqpdf/qpdf/auto_job_schema.hh b/libqpdf/qpdf/auto_job_schema.hh
index 376d0c19..bab83daa 100644
--- a/libqpdf/qpdf/auto_job_schema.hh
+++ b/libqpdf/qpdf/auto_job_schema.hh
@@ -5,14 +5,13 @@ static constexpr char const* JOB_SCHEMA_DATA = R"({
"password": "specify password",
"passwordFile": "read password from a file"
},
- "empty": "empty input file"
+ "empty": "qxxxq empty"
},
"output": {
"file": {
"name": "output filename"
},
- "replaceInput": "replace input with output",
- "splitPages": "write pages to separate files",
+ "replaceInput": "qxxxq replace input",
"options": {
"qdf": "enable viewing PDF code in a text editor",
"preserveUnreferenced": "preserve unreferenced objects",
@@ -34,6 +33,7 @@ static constexpr char const* JOB_SCHEMA_DATA = R"({
"minVersion": "set minimum PDF version",
"forceVersion": "set output PDF version",
"progress": "show progress when writing",
+ "splitPages": "write pages to separate files",
"encrypt": {
"keyLength": "key length: 48, 128, 256",
"userPassword": "user password",