aboutsummaryrefslogtreecommitdiffstats
path: root/libqpdf
diff options
context:
space:
mode:
authorJay Berkenbilt <ejb@ql.org>2022-01-30 19:56:05 +0100
committerJay Berkenbilt <ejb@ql.org>2022-01-31 21:57:45 +0100
commitfa9676557e3065d75f732622bd498d5572ba686e (patch)
tree7421d5c17a5a3ca8ba6e4f63343da568e1e9844b /libqpdf
parent3b60224bae16f36e0b6caf13fe1e119b9fa1f6b1 (diff)
downloadqpdf-fa9676557e3065d75f732622bd498d5572ba686e.tar.zst
QDPFJob: incorporate change to JSONHandler for array start function
Diffstat (limited to 'libqpdf')
-rw-r--r--libqpdf/QPDFJob_json.cc59
-rw-r--r--libqpdf/qpdf/auto_job_json_decl.hh6
-rw-r--r--libqpdf/qpdf/auto_job_json_init.hh34
3 files changed, 83 insertions, 16 deletions
diff --git a/libqpdf/QPDFJob_json.cc b/libqpdf/QPDFJob_json.cc
index 8ebbb926..22a092d5 100644
--- a/libqpdf/QPDFJob_json.cc
+++ b/libqpdf/QPDFJob_json.cc
@@ -37,7 +37,10 @@ namespace
void beginDict(std::string const& key,
json_handler_t start_fn,
bare_handler_t end_fn);
- void endDict();
+ void beginArray(std::string const& key,
+ json_handler_t start_fn,
+ bare_handler_t end_fn);
+ void endContainer();
bare_handler_t bindBare(void (Handlers::*f)());
json_handler_t bindJSON(void (Handlers::*f)(JSON));
@@ -194,7 +197,23 @@ Handlers::beginDict(std::string const& key,
}
void
-Handlers::endDict()
+Handlers::beginArray(std::string const& key,
+ json_handler_t start_fn,
+ bare_handler_t end_fn)
+{
+ auto new_jh = std::make_shared<JSONHandler>();
+ auto item_jh = std::make_shared<JSONHandler>();
+ new_jh->addArrayHandlers(
+ [start_fn](std::string const&, JSON j){ start_fn(j); },
+ [end_fn](std::string const&){ end_fn(); },
+ item_jh);
+ this->jh->addDictKeyHandler(key, new_jh);
+ this->json_handlers.push_back(item_jh);
+ this->jh = item_jh.get();
+}
+
+void
+Handlers::endContainer()
{
this->json_handlers.pop_back();
this->jh = this->json_handlers.back().get();
@@ -405,6 +424,18 @@ Handlers::endInspect()
}
void
+Handlers::beginOptionsAddAttachmentArray(JSON)
+{
+ // QXXXQ
+}
+
+void
+Handlers::endOptionsAddAttachmentArray()
+{
+ // QXXXQ
+}
+
+void
Handlers::beginOptionsAddAttachment(JSON)
{
this->c_att = c_main->addAttachment();
@@ -426,6 +457,18 @@ Handlers::setupOptionsAddAttachmentPath(std::string const& key)
}
void
+Handlers::beginOptionsCopyAttachmentsFromArray(JSON)
+{
+ // QXXXQ
+}
+
+void
+Handlers::endOptionsCopyAttachmentsFromArray()
+{
+ // QXXXQ
+}
+
+void
Handlers::beginOptionsCopyAttachmentsFrom(JSON)
{
this->c_copy_att = c_main->copyAttachmentsFrom();
@@ -455,6 +498,18 @@ Handlers::setupOptionsCopyAttachmentsFromPassword(std::string const& key)
}
void
+Handlers::beginOptionsPagesArray(JSON)
+{
+ // QXXXQ
+}
+
+void
+Handlers::endOptionsPagesArray()
+{
+ // QXXXQ
+}
+
+void
Handlers::beginOptionsPages(JSON)
{
// QXXXQ
diff --git a/libqpdf/qpdf/auto_job_json_decl.hh b/libqpdf/qpdf/auto_job_json_decl.hh
index 446838e6..aa9b8137 100644
--- a/libqpdf/qpdf/auto_job_json_decl.hh
+++ b/libqpdf/qpdf/auto_job_json_decl.hh
@@ -28,13 +28,19 @@ void beginInspect(JSON);
void endInspect();
void beginOptions(JSON);
void endOptions();
+void beginOptionsAddAttachmentArray(JSON);
+void endOptionsAddAttachmentArray();
void beginOptionsAddAttachment(JSON);
void endOptionsAddAttachment();
void setupOptionsAddAttachmentPath(std::string const&);
+void beginOptionsCopyAttachmentsFromArray(JSON);
+void endOptionsCopyAttachmentsFromArray();
void beginOptionsCopyAttachmentsFrom(JSON);
void endOptionsCopyAttachmentsFrom();
void setupOptionsCopyAttachmentsFromPath(std::string const&);
void setupOptionsCopyAttachmentsFromPassword(std::string const&);
+void beginOptionsPagesArray(JSON);
+void endOptionsPagesArray();
void beginOptionsPages(JSON);
void endOptionsPages();
void setupOptionsPagesFile(std::string const&);
diff --git a/libqpdf/qpdf/auto_job_json_init.hh b/libqpdf/qpdf/auto_job_json_init.hh
index 7570a492..eb32fcb8 100644
--- a/libqpdf/qpdf/auto_job_json_init.hh
+++ b/libqpdf/qpdf/auto_job_json_init.hh
@@ -19,7 +19,7 @@ doSetup("filename", bindSetup(&Handlers::setupInputFilename));
doSetup("password", bindSetup(&Handlers::setupInputPassword));
addParameter("passwordFile", [this](char const* p) { c_main->passwordFile(p); });
doSetup("empty", bindSetup(&Handlers::setupInputEmpty));
-endDict(); // .input
+endContainer(); // .input
beginDict("output", bindJSON(&Handlers::beginOutput), bindBare(&Handlers::endOutput)); // .output
doSetup("filename", bindSetup(&Handlers::setupOutputFilename));
doSetup("replaceInput", bindSetup(&Handlers::setupOutputReplaceInput));
@@ -53,7 +53,7 @@ addChoices("annotate", yn_choices, [this](char const* p) { c_enc->annotate(p); }
addChoices("extract", yn_choices, [this](char const* p) { c_enc->extract(p); });
addChoices("modify", modify128_choices, [this](char const* p) { c_enc->modify(p); });
addChoices("print", print128_choices, [this](char const* p) { c_enc->print(p); });
-endDict(); // .output.options.encrypt.40bit
+endContainer(); // .output.options.encrypt.40bit
beginDict("128bit", bindJSON(&Handlers::beginOutputOptionsEncrypt128bit), bindBare(&Handlers::endOutputOptionsEncrypt128bit)); // .output.options.encrypt.128bit
addChoices("accessibility", yn_choices, [this](char const* p) { c_enc->accessibility(p); });
addChoices("annotate", yn_choices, [this](char const* p) { c_enc->annotate(p); });
@@ -66,7 +66,7 @@ addChoices("modify", modify128_choices, [this](char const* p) { c_enc->modify(p)
addChoices("print", print128_choices, [this](char const* p) { c_enc->print(p); });
addBare("forceV4", [this]() { c_enc->forceV4(); });
addChoices("useAes", yn_choices, [this](char const* p) { c_enc->useAes(p); });
-endDict(); // .output.options.encrypt.128bit
+endContainer(); // .output.options.encrypt.128bit
beginDict("256bit", bindJSON(&Handlers::beginOutputOptionsEncrypt256bit), bindBare(&Handlers::endOutputOptionsEncrypt256bit)); // .output.options.encrypt.256bit
addChoices("accessibility", yn_choices, [this](char const* p) { c_enc->accessibility(p); });
addChoices("annotate", yn_choices, [this](char const* p) { c_enc->annotate(p); });
@@ -79,10 +79,10 @@ addChoices("modify", modify128_choices, [this](char const* p) { c_enc->modify(p)
addChoices("print", print128_choices, [this](char const* p) { c_enc->print(p); });
addBare("allowInsecure", [this]() { c_enc->allowInsecure(); });
addBare("forceR5", [this]() { c_enc->forceR5(); });
-endDict(); // .output.options.encrypt.256bit
-endDict(); // .output.options.encrypt
-endDict(); // .output.options
-endDict(); // .output
+endContainer(); // .output.options.encrypt.256bit
+endContainer(); // .output.options.encrypt
+endContainer(); // .output.options
+endContainer(); // .output
beginDict("inspect", bindJSON(&Handlers::beginInspect), bindBare(&Handlers::endInspect)); // .inspect
addBare("check", [this]() { c_main->check(); });
addBare("checkLinearization", [this]() { c_main->checkLinearization(); });
@@ -103,7 +103,7 @@ addParameter("showAttachment", [this](char const* p) { c_main->showAttachment(p)
addBare("json", [this]() { c_main->json(); });
addChoices("jsonKey", json_key_choices, [this](char const* p) { c_main->jsonKey(p); });
addParameter("jsonObject", [this](char const* p) { c_main->jsonObject(p); });
-endDict(); // .inspect
+endContainer(); // .inspect
beginDict("options", bindJSON(&Handlers::beginOptions), bindBare(&Handlers::endOptions)); // .options
addBare("allowWeakCrypto", [this]() { c_main->allowWeakCrypto(); });
addBare("deterministicId", [this]() { c_main->deterministicId(); });
@@ -122,6 +122,7 @@ addParameter("compressionLevel", [this](char const* p) { c_main->compressionLeve
addBare("externalizeInlineImages", [this]() { c_main->externalizeInlineImages(); });
addParameter("iiMinBytes", [this](char const* p) { c_main->iiMinBytes(p); });
addChoices("removeUnreferencedResources", remove_unref_choices, [this](char const* p) { c_main->removeUnreferencedResources(p); });
+beginArray("options", bindJSON(&Handlers::beginOptionsAddAttachmentArray), bindBare(&Handlers::endOptionsAddAttachmentArray)); // .options.addAttachment[]
beginDict("addAttachment", bindJSON(&Handlers::beginOptionsAddAttachment), bindBare(&Handlers::endOptionsAddAttachment)); // .options.addAttachment
doSetup("path", bindSetup(&Handlers::setupOptionsAddAttachmentPath));
addParameter("creationdate", [this](char const* p) { c_att->creationdate(p); });
@@ -131,13 +132,16 @@ addParameter("key", [this](char const* p) { c_att->key(p); });
addParameter("mimetype", [this](char const* p) { c_att->mimetype(p); });
addParameter("moddate", [this](char const* p) { c_att->moddate(p); });
addBare("replace", [this]() { c_att->replace(); });
-endDict(); // .options.addAttachment
+endContainer(); // .options.addAttachment
+endContainer(); // .options.addAttachment[]
addParameter("removeAttachment", [this](char const* p) { c_main->removeAttachment(p); });
+beginArray("options", bindJSON(&Handlers::beginOptionsCopyAttachmentsFromArray), bindBare(&Handlers::endOptionsCopyAttachmentsFromArray)); // .options.copyAttachmentsFrom[]
beginDict("copyAttachmentsFrom", bindJSON(&Handlers::beginOptionsCopyAttachmentsFrom), bindBare(&Handlers::endOptionsCopyAttachmentsFrom)); // .options.copyAttachmentsFrom
doSetup("path", bindSetup(&Handlers::setupOptionsCopyAttachmentsFromPath));
doSetup("password", bindSetup(&Handlers::setupOptionsCopyAttachmentsFromPassword));
addParameter("prefix", [this](char const* p) { c_copy_att->prefix(p); });
-endDict(); // .options.copyAttachmentsFrom
+endContainer(); // .options.copyAttachmentsFrom
+endContainer(); // .options.copyAttachmentsFrom[]
addParameter("collate", [this](char const* p) { c_main->collate(p); });
addChoices("flattenAnnotations", flatten_choices, [this](char const* p) { c_main->flattenAnnotations(p); });
addBare("flattenRotation", [this]() { c_main->flattenRotation(); });
@@ -147,11 +151,13 @@ addParameter("oiMinArea", [this](char const* p) { c_main->oiMinArea(p); });
addParameter("oiMinHeight", [this](char const* p) { c_main->oiMinHeight(p); });
addParameter("oiMinWidth", [this](char const* p) { c_main->oiMinWidth(p); });
addBare("optimizeImages", [this]() { c_main->optimizeImages(); });
+beginArray("options", bindJSON(&Handlers::beginOptionsPagesArray), bindBare(&Handlers::endOptionsPagesArray)); // .options.pages[]
beginDict("pages", bindJSON(&Handlers::beginOptionsPages), bindBare(&Handlers::endOptionsPages)); // .options.pages
doSetup("file", bindSetup(&Handlers::setupOptionsPagesFile));
doSetup("password", bindSetup(&Handlers::setupOptionsPagesPassword));
doSetup("range", bindSetup(&Handlers::setupOptionsPagesRange));
-endDict(); // .options.pages
+endContainer(); // .options.pages
+endContainer(); // .options.pages[]
addBare("removePageLabels", [this]() { c_main->removePageLabels(); });
addParameter("rotate", [this](char const* p) { c_main->rotate(p); });
beginDict("overlay", bindJSON(&Handlers::beginOptionsOverlay), bindBare(&Handlers::endOptionsOverlay)); // .options.overlay
@@ -160,12 +166,12 @@ doSetup("password", bindSetup(&Handlers::setupOptionsOverlayPassword));
addParameter("from", [this](char const* p) { c_uo->from(p); });
addParameter("repeat", [this](char const* p) { c_uo->repeat(p); });
addParameter("to", [this](char const* p) { c_uo->to(p); });
-endDict(); // .options.overlay
+endContainer(); // .options.overlay
beginDict("underlay", bindJSON(&Handlers::beginOptionsUnderlay), bindBare(&Handlers::endOptionsUnderlay)); // .options.underlay
doSetup("file", bindSetup(&Handlers::setupOptionsUnderlayFile));
doSetup("password", bindSetup(&Handlers::setupOptionsUnderlayPassword));
addParameter("from", [this](char const* p) { c_uo->from(p); });
addParameter("repeat", [this](char const* p) { c_uo->repeat(p); });
addParameter("to", [this](char const* p) { c_uo->to(p); });
-endDict(); // .options.underlay
-endDict(); // .options
+endContainer(); // .options.underlay
+endContainer(); // .options