aboutsummaryrefslogtreecommitdiffstats
path: root/libqpdf/QPDFJob_config.cc
diff options
context:
space:
mode:
authorJay Berkenbilt <ejb@ql.org>2024-01-02 00:55:45 +0100
committerJay Berkenbilt <ejb@ql.org>2024-01-02 00:57:32 +0100
commitd8d70ecca264fa5c681dca992a03cfa4c46b3f43 (patch)
treef9960a48f4550f6a9fc2d09cef27fba66852bdd5 /libqpdf/QPDFJob_config.cc
parent9db5d75b2b40083f339525f7a59b4408cb1b5d2c (diff)
downloadqpdf-d8d70ecca264fa5c681dca992a03cfa4c46b3f43.tar.zst
Support comma-separated numeric values with --collate (fixes #505)
Diffstat (limited to 'libqpdf/QPDFJob_config.cc')
-rw-r--r--libqpdf/QPDFJob_config.cc31
1 files changed, 28 insertions, 3 deletions
diff --git a/libqpdf/QPDFJob_config.cc b/libqpdf/QPDFJob_config.cc
index 4798ce9b..a0dc10f6 100644
--- a/libqpdf/QPDFJob_config.cc
+++ b/libqpdf/QPDFJob_config.cc
@@ -98,8 +98,27 @@ QPDFJob::Config::collate()
QPDFJob::Config*
QPDFJob::Config::collate(std::string const& parameter)
{
- auto n = (parameter.empty() ? 1 : QUtil::string_to_uint(parameter.c_str()));
- o.m->collate = QIntC::to_size(n);
+ if (parameter.empty()) {
+ o.m->collate.push_back(1);
+ return this;
+ }
+ size_t pos = 0;
+ // Parse a,b,c
+ while (true) {
+ auto end = parameter.find(',', pos);
+ auto n = parameter.substr(pos, end);
+ if (n.empty()) {
+ usage("--collate: trailing comma");
+ }
+ o.m->collate.push_back(QIntC::to_size(QUtil::string_to_uint(n.c_str())));
+ if (end == std::string::npos) {
+ break;
+ }
+ pos = end + 1;
+ }
+ if (o.m->collate.empty()) {
+ o.m->collate.push_back(1);
+ }
return this;
}
@@ -932,9 +951,15 @@ QPDFJob::Config::pages()
QPDFJob::Config*
QPDFJob::PagesConfig::endPages()
{
- if (this->config->o.m->page_specs.empty()) {
+ auto n_specs = config->o.m->page_specs.size();
+ if (n_specs == 0) {
usage("--pages: no page specifications given");
}
+ auto n_collate = config->o.m->collate.size();
+ if (!(n_collate == 0 || n_collate == 1 || n_collate == n_specs)) {
+ usage("--pages: if --collate has more than one value, it must have one value per page "
+ "specification");
+ }
return this->config;
}