aboutsummaryrefslogtreecommitdiffstats
path: root/libqpdf/QPDFJob_json.cc
diff options
context:
space:
mode:
Diffstat (limited to 'libqpdf/QPDFJob_json.cc')
-rw-r--r--libqpdf/QPDFJob_json.cc170
1 files changed, 91 insertions, 79 deletions
diff --git a/libqpdf/QPDFJob_json.cc b/libqpdf/QPDFJob_json.cc
index 368b2a0a..967f0cc9 100644
--- a/libqpdf/QPDFJob_json.cc
+++ b/libqpdf/QPDFJob_json.cc
@@ -27,24 +27,20 @@ namespace
typedef std::function<void()> bare_handler_t;
typedef std::function<void(char const*)> param_handler_t;
typedef std::function<void(JSON)> json_handler_t;
- typedef std::function<void(std::string const& key)> setup_handler_t;
-
- void addBare(std::string const& key, bare_handler_t);
- void addParameter(std::string const& key, param_handler_t);
- void addChoices(std::string const& key, char const** choices,
- param_handler_t);
- void doSetup(std::string const& key, setup_handler_t);
- void beginDict(std::string const& key,
- json_handler_t start_fn,
+
+ void addBare(bare_handler_t);
+ void addParameter(param_handler_t);
+ void addChoices(char const** choices, param_handler_t);
+ void pushKey(std::string const& key);
+ void beginDict(json_handler_t start_fn,
bare_handler_t end_fn);
- void beginArray(std::string const& key,
- json_handler_t start_fn,
+ void beginArray(json_handler_t start_fn,
bare_handler_t end_fn);
- void endContainer();
+ void ignoreItem();
+ void popHandler();
bare_handler_t bindBare(void (Handlers::*f)());
json_handler_t bindJSON(void (Handlers::*f)(JSON));
- setup_handler_t bindSetup(void (Handlers::*f)(std::string const&));
std::list<std::shared_ptr<JSONHandler>> json_handlers;
bool partial;
@@ -84,12 +80,6 @@ Handlers::bindJSON(void (Handlers::*f)(JSON))
return std::bind(std::mem_fn(f), this, std::placeholders::_1);
}
-Handlers::setup_handler_t
-Handlers::bindSetup(void (Handlers::*f)(std::string const&))
-{
- return std::bind(std::mem_fn(f), this, std::placeholders::_1);
-}
-
void
Handlers::initHandlers()
{
@@ -113,10 +103,9 @@ Handlers::initHandlers()
}
void
-Handlers::addBare(std::string const& key, bare_handler_t fn)
+Handlers::addBare(bare_handler_t fn)
{
- auto h = std::make_shared<JSONHandler>();
- h->addBoolHandler([this, fn](std::string const& path, bool v){
+ jh->addBoolHandler([this, fn](std::string const& path, bool v){
if (! v)
{
usage(path + ": value must be true");
@@ -126,26 +115,22 @@ Handlers::addBare(std::string const& key, bare_handler_t fn)
fn();
}
});
- jh->addDictKeyHandler(key, h);
}
void
-Handlers::addParameter(std::string const& key, param_handler_t fn)
+Handlers::addParameter(param_handler_t fn)
{
- auto h = std::make_shared<JSONHandler>();
- h->addStringHandler(
+ jh->addStringHandler(
[fn](std::string const& path, std::string const& parameter){
fn(parameter.c_str());
});
- jh->addDictKeyHandler(key, h);
}
void
-Handlers::addChoices(std::string const& key, char const** choices,
+Handlers::addChoices(char const** choices,
param_handler_t fn)
{
- auto h = std::make_shared<JSONHandler>();
- h->addStringHandler(
+ jh->addStringHandler(
[fn, choices, this](
std::string const& path, std::string const& parameter){
@@ -180,47 +165,45 @@ Handlers::addChoices(std::string const& key, char const** choices,
}
fn(parameter.c_str());
});
- jh->addDictKeyHandler(key, h);
}
void
-Handlers::doSetup(std::string const& key, setup_handler_t fn)
+Handlers::pushKey(std::string const& key)
{
- fn(key);
+ auto new_jh = std::make_shared<JSONHandler>();
+ this->jh->addDictKeyHandler(key, new_jh);
+ this->json_handlers.push_back(new_jh);
+ this->jh = new_jh.get();
}
void
-Handlers::beginDict(std::string const& key,
- json_handler_t start_fn,
- bare_handler_t end_fn)
+Handlers::beginDict(json_handler_t start_fn, bare_handler_t end_fn)
{
- auto new_jh = std::make_shared<JSONHandler>();
- new_jh->addDictHandlers(
+ jh->addDictHandlers(
[start_fn](std::string const&, JSON j){ start_fn(j); },
[end_fn](std::string const&){ end_fn(); });
- this->jh->addDictKeyHandler(key, new_jh);
- this->json_handlers.push_back(new_jh);
- this->jh = new_jh.get();
}
void
-Handlers::beginArray(std::string const& key,
- json_handler_t start_fn,
- bare_handler_t end_fn)
+Handlers::beginArray(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(
+ 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()
+Handlers::ignoreItem()
+{
+ jh->addAnyHandler([](std::string const&, JSON){});
+}
+
+void
+Handlers::popHandler()
{
this->json_handlers.pop_back();
this->jh = this->json_handlers.back().get();
@@ -245,25 +228,25 @@ Handlers::endInput()
}
void
-Handlers::setupInputFilename(std::string const& key)
+Handlers::setupInputFilename()
{
- addParameter(key, [this](char const* p) {
+ addParameter([this](char const* p) {
c_main->inputFile(p);
});
}
void
-Handlers::setupInputPassword(std::string const& key)
+Handlers::setupInputPassword()
{
- addParameter(key, [this](char const* p) {
+ addParameter([this](char const* p) {
c_main->password(p);
});
}
void
-Handlers::setupInputEmpty(std::string const& key)
+Handlers::setupInputEmpty()
{
- addBare(key, [this]() {
+ addBare([this]() {
c_main->emptyInput();
});
}
@@ -281,17 +264,17 @@ Handlers::endOutput()
}
void
-Handlers::setupOutputFilename(std::string const& key)
+Handlers::setupOutputFilename()
{
- addParameter(key, [this](char const* p) {
+ addParameter([this](char const* p) {
c_main->outputFile(p);
});
}
void
-Handlers::setupOutputReplaceInput(std::string const& key)
+Handlers::setupOutputReplaceInput()
{
- addBare(key, [this]() {
+ addBare([this]() {
c_main->replaceInput();
});
}
@@ -359,15 +342,17 @@ Handlers::endOutputOptionsEncrypt()
}
void
-Handlers::setupOutputOptionsEncryptUserPassword(std::string const& key)
+Handlers::setupOutputOptionsEncryptUserPassword()
{
- // Key handled in beginOutputOptionsEncrypt
+ // handled in beginOutputOptionsEncrypt
+ ignoreItem();
}
void
-Handlers::setupOutputOptionsEncryptOwnerPassword(std::string const& key)
+Handlers::setupOutputOptionsEncryptOwnerPassword()
{
- // Key handled in beginOutputOptionsEncrypt
+ // handled in beginOutputOptionsEncrypt
+ ignoreItem();
}
void
@@ -431,6 +416,30 @@ Handlers::endInspect()
}
void
+Handlers::beginInspectJsonKeyArray(JSON)
+{
+ // nothing needed
+}
+
+void
+Handlers::endInspectJsonKeyArray()
+{
+ // nothing needed
+}
+
+void
+Handlers::beginInspectJsonObjectArray(JSON)
+{
+ // nothing needed
+}
+
+void
+Handlers::endInspectJsonObjectArray()
+{
+ // nothing needed
+}
+
+void
Handlers::beginOptionsAddAttachmentArray(JSON)
{
// nothing needed
@@ -456,9 +465,9 @@ Handlers::endOptionsAddAttachment()
}
void
-Handlers::setupOptionsAddAttachmentPath(std::string const& key)
+Handlers::setupOptionsAddAttachmentPath()
{
- addParameter(key, [this](char const* p) {
+ addParameter([this](char const* p) {
c_att->path(p);
});
}
@@ -489,17 +498,17 @@ Handlers::endOptionsCopyAttachmentsFrom()
}
void
-Handlers::setupOptionsCopyAttachmentsFromPath(std::string const& key)
+Handlers::setupOptionsCopyAttachmentsFromPath()
{
- addParameter(key, [this](char const* p) {
+ addParameter([this](char const* p) {
c_copy_att->path(p);
});
}
void
-Handlers::setupOptionsCopyAttachmentsFromPassword(std::string const& key)
+Handlers::setupOptionsCopyAttachmentsFromPassword()
{
- addParameter(key, [this](char const* p) {
+ addParameter([this](char const* p) {
c_copy_att->password(p);
});
}
@@ -554,21 +563,24 @@ Handlers::endOptionsPages()
}
void
-Handlers::setupOptionsPagesFile(std::string const& key)
+Handlers::setupOptionsPagesFile()
{
// handled in beginOptionsPages
+ ignoreItem();
}
void
-Handlers::setupOptionsPagesPassword(std::string const& key)
+Handlers::setupOptionsPagesPassword()
{
// handled in beginOptionsPages
+ ignoreItem();
}
void
-Handlers::setupOptionsPagesRange(std::string const& key)
+Handlers::setupOptionsPagesRange()
{
// handled in beginOptionsPages
+ ignoreItem();
}
void
@@ -585,17 +597,17 @@ Handlers::endOptionsOverlay()
}
void
-Handlers::setupOptionsOverlayFile(std::string const& key)
+Handlers::setupOptionsOverlayFile()
{
- addParameter(key, [this](char const* p) {
+ addParameter([this](char const* p) {
c_uo->path(p);
});
}
void
-Handlers::setupOptionsOverlayPassword(std::string const& key)
+Handlers::setupOptionsOverlayPassword()
{
- addParameter(key, [this](char const* p) {
+ addParameter([this](char const* p) {
c_uo->password(p);
});
}
@@ -614,17 +626,17 @@ Handlers::endOptionsUnderlay()
}
void
-Handlers::setupOptionsUnderlayFile(std::string const& key)
+Handlers::setupOptionsUnderlayFile()
{
- addParameter(key, [this](char const* p) {
+ addParameter([this](char const* p) {
c_uo->path(p);
});
}
void
-Handlers::setupOptionsUnderlayPassword(std::string const& key)
+Handlers::setupOptionsUnderlayPassword()
{
- addParameter(key, [this](char const* p) {
+ addParameter([this](char const* p) {
c_uo->password(p);
});
}