aboutsummaryrefslogtreecommitdiffstats
path: root/libqpdf
diff options
context:
space:
mode:
authorJay Berkenbilt <ejb@ql.org>2022-01-26 01:01:10 +0100
committerJay Berkenbilt <ejb@ql.org>2022-01-30 19:11:03 +0100
commit41c5af8f2664cef36d4a1253ba5251603a937605 (patch)
tree60109db66fc61d98eb833eef252ec7e9ac54fbef /libqpdf
parent9373881cca0c781c66b2b50b962bdbc26364abe5 (diff)
downloadqpdf-41c5af8f2664cef36d4a1253ba5251603a937605.tar.zst
QPDFJob: convert pages
Diffstat (limited to 'libqpdf')
-rw-r--r--libqpdf/QPDFJob_argv.cc10
-rw-r--r--libqpdf/QPDFJob_config.cc31
2 files changed, 36 insertions, 5 deletions
diff --git a/libqpdf/QPDFJob_argv.cc b/libqpdf/QPDFJob_argv.cc
index a32818ba..063f77d8 100644
--- a/libqpdf/QPDFJob_argv.cc
+++ b/libqpdf/QPDFJob_argv.cc
@@ -46,6 +46,7 @@ namespace
std::shared_ptr<QPDFJob::Config> c_main;
std::shared_ptr<QPDFJob::CopyAttConfig> c_copy_att;
std::shared_ptr<QPDFJob::AttConfig> c_att;
+ std::shared_ptr<QPDFJob::PagesConfig> c_pages;
std::vector<char*> accumulated_args; // points to member in ap
char* pages_password;
};
@@ -310,6 +311,7 @@ ArgParser::argPages()
usage("the --pages may only be specified one time");
}
this->accumulated_args.clear();
+ this->c_pages = c_main->pages();
this->ap.selectOptionTable(O_PAGES);
}
@@ -402,7 +404,7 @@ ArgParser::argPagesPositional(char* arg)
{
range = "1-z";
}
- o.page_specs.push_back(QPDFJob::PageSpec(file, this->pages_password, range));
+ this->c_pages->pageSpec(file, this->pages_password, range);
this->accumulated_args.clear();
this->pages_password = nullptr;
if (next_file != nullptr)
@@ -415,10 +417,8 @@ void
ArgParser::argEndPages()
{
argPagesPositional(nullptr);
- if (o.page_specs.empty())
- {
- usage("--pages: no page specifications given");
- }
+ c_pages->end();
+ c_pages = nullptr;
}
void
diff --git a/libqpdf/QPDFJob_config.cc b/libqpdf/QPDFJob_config.cc
index 7342aeea..c4961fd3 100644
--- a/libqpdf/QPDFJob_config.cc
+++ b/libqpdf/QPDFJob_config.cc
@@ -657,3 +657,34 @@ QPDFJob::AttConfig::end()
this->config.o.attachments_to_add.push_back(this->att);
return this->config;
}
+
+QPDFJob::PagesConfig::PagesConfig(Config& c) :
+ config(c)
+{
+}
+
+std::shared_ptr<QPDFJob::PagesConfig>
+QPDFJob::Config::pages()
+{
+ return std::shared_ptr<PagesConfig>(new PagesConfig(*this));
+}
+
+QPDFJob::Config&
+QPDFJob::PagesConfig::end()
+{
+ if (this->config.o.page_specs.empty())
+ {
+ throw QPDFJob::ConfigError("--pages: no page specifications given");
+ }
+ return this->config;
+}
+
+QPDFJob::PagesConfig&
+QPDFJob::PagesConfig::pageSpec(std::string const& filename,
+ char const* password,
+ std::string const& range)
+{
+ this->config.o.page_specs.push_back(
+ QPDFJob::PageSpec(filename, password, range));
+ return *this;
+}