aboutsummaryrefslogtreecommitdiffstats
path: root/libqpdf/QPDFJob_json.cc
diff options
context:
space:
mode:
authorJay Berkenbilt <ejb@ql.org>2022-01-30 00:26:11 +0100
committerJay Berkenbilt <ejb@ql.org>2022-01-31 21:57:45 +0100
commit11a86e444da4ffcb0d5aa5203fda2d0ebc001a7c (patch)
tree32850078ef94e211fa0a815630cfe5a5b2b2df30 /libqpdf/QPDFJob_json.cc
parent842a9d928e0061dfe04806eae2bc87ad4db47331 (diff)
downloadqpdf-11a86e444da4ffcb0d5aa5203fda2d0ebc001a7c.tar.zst
QPDFJob: autogenerate json init and declarations
Now still have to go through and implement the handlers.
Diffstat (limited to 'libqpdf/QPDFJob_json.cc')
-rw-r--r--libqpdf/QPDFJob_json.cc407
1 files changed, 346 insertions, 61 deletions
diff --git a/libqpdf/QPDFJob_json.cc b/libqpdf/QPDFJob_json.cc
index 0b2f049c..735e6a6f 100644
--- a/libqpdf/QPDFJob_json.cc
+++ b/libqpdf/QPDFJob_json.cc
@@ -23,20 +23,23 @@ namespace
void usage(std::string const& message);
void initHandlers();
- typedef std::function<void()> bare_arg_handler_t;
- typedef std::function<void(char const*)> param_arg_handler_t;
-
- void addBare(std::string const& key, bare_arg_handler_t);
- void addParameter(std::string const& key, bool required,
- param_arg_handler_t);
- void addChoices(std::string const& key,
- bool required, char const** choices,
- param_arg_handler_t);
+ typedef std::function<void()> bare_handler_t;
+ typedef std::function<void(char const*)> param_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,
- bare_arg_handler_t start_fn,
- bare_arg_handler_t end_fn);
+ bare_handler_t start_fn,
+ bare_handler_t end_fn);
void endDict();
+ bare_handler_t bindBare(void (Handlers::*f)());
+ setup_handler_t bindSetup(void (Handlers::*f)(std::string const&));
+
std::list<std::shared_ptr<JSONHandler>> json_handlers;
JSONHandler* jh; // points to last of json_handlers
std::shared_ptr<QPDFJob::Config> c_main;
@@ -61,6 +64,18 @@ Handlers::usage(std::string const& message)
throw QPDFUsage(message);
}
+Handlers::bare_handler_t
+Handlers::bindBare(void (Handlers::*f)())
+{
+ return std::bind(std::mem_fn(f), this);
+}
+
+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()
{
@@ -72,33 +87,6 @@ Handlers::initHandlers()
# include <qpdf/auto_job_json_init.hh>
- // QXXXQ
- auto empty = [](){};
- beginDict("input", empty, empty);
- beginDict("file", empty, empty);
- addParameter("name", true, [this](char const* p) {
- c_main->inputFile(p);
- });
- endDict(); // input.file
- endDict(); // input
- beginDict("output", empty, empty);
- beginDict("file", empty, empty);
- addParameter("name", true, [this](char const* p) {
- c_main->outputFile(p);
- });
- endDict(); // output.file
- beginDict("options", empty, empty);
- addBare("qdf", [this]() {
- c_main->qdf();
- });
- char const* choices[] = {"disable", "preserve", "generate", 0};
- addChoices("objectStreams", true, choices, [this](char const* p) {
- c_main->objectStreams(p);
- });
- endDict(); // output.options
- endDict(); // output
- // /QXXXQ
-
if (this->json_handlers.size() != 1)
{
throw std::logic_error("QPDFJob_json: json_handlers size != 1 at end");
@@ -106,7 +94,7 @@ Handlers::initHandlers()
}
void
-Handlers::addBare(std::string const& key, bare_arg_handler_t fn)
+Handlers::addBare(std::string const& key, bare_handler_t fn)
{
auto h = std::make_shared<JSONHandler>();
h->addBoolHandler([this, fn](std::string const& path, bool v){
@@ -123,29 +111,19 @@ Handlers::addBare(std::string const& key, bare_arg_handler_t fn)
}
void
-Handlers::addParameter(std::string const& key,
- bool required,
- param_arg_handler_t fn)
+Handlers::addParameter(std::string const& key, param_handler_t fn)
{
auto h = std::make_shared<JSONHandler>();
h->addStringHandler(
[fn](std::string const& path, std::string const& parameter){
fn(parameter.c_str());
});
- if (! required)
- {
- h->addNullHandler(
- [fn](std::string const& path){
- fn(nullptr);
- });
- }
jh->addDictKeyHandler(key, h);
}
void
-Handlers::addChoices(std::string const& key,
- bool required, char const** choices,
- param_arg_handler_t fn)
+Handlers::addChoices(std::string const& key, char const** choices,
+ param_handler_t fn)
{
auto h = std::make_shared<JSONHandler>();
h->addStringHandler(
@@ -183,20 +161,19 @@ Handlers::addChoices(std::string const& key,
}
fn(parameter.c_str());
});
- if (! required)
- {
- h->addNullHandler(
- [fn](std::string const& path){
- fn(nullptr);
- });
- }
jh->addDictKeyHandler(key, h);
}
void
+Handlers::doSetup(std::string const& key, setup_handler_t fn)
+{
+ fn(key);
+}
+
+void
Handlers::beginDict(std::string const& key,
- bare_arg_handler_t start_fn,
- bare_arg_handler_t end_fn)
+ bare_handler_t start_fn,
+ bare_handler_t end_fn)
{
auto new_jh = std::make_shared<JSONHandler>();
new_jh->addDictHandlers(
@@ -221,6 +198,314 @@ Handlers::handle(JSON& j)
}
void
+Handlers::beginInput()
+{
+ // nothing needed
+}
+
+void
+Handlers::endInput()
+{
+ // nothing needed
+}
+
+void
+Handlers::setupInputFileName(std::string const& key)
+{
+ addParameter(key, [this](char const* p) {
+ c_main->inputFile(p);
+ });
+}
+
+void
+Handlers::setupInputPassword(std::string const& key)
+{
+ // QXXXQ
+}
+
+void
+Handlers::setupInputEmpty(std::string const& key)
+{
+ addBare(key, [this]() {
+ c_main->emptyInput();
+ });
+}
+
+void
+Handlers::beginOutput()
+{
+ // nothing needed
+}
+
+void
+Handlers::endOutput()
+{
+ // nothing needed
+}
+
+void
+Handlers::setupOutputFileName(std::string const& key)
+{
+ addParameter(key, [this](char const* p) {
+ c_main->outputFile(p);
+ });
+}
+
+void
+Handlers::setupOutputReplaceInput(std::string const& key)
+{
+ addBare(key, [this]() {
+ c_main->replaceInput();
+ });
+}
+
+void
+Handlers::beginOutputOptions()
+{
+ // nothing needed
+}
+
+void
+Handlers::endOutputOptions()
+{
+ // nothing needed
+}
+
+void
+Handlers::beginOutputOptionsEncrypt()
+{
+ // QXXXQ
+}
+
+void
+Handlers::endOutputOptionsEncrypt()
+{
+ // QXXXQ
+}
+
+void
+Handlers::setupOutputOptionsEncryptKeyLength(std::string const& key)
+{
+ // QXXXQ
+}
+
+void
+Handlers::setupOutputOptionsEncryptUserPassword(std::string const& key)
+{
+ // QXXXQ
+}
+
+void
+Handlers::setupOutputOptionsEncryptOwnerPassword(std::string const& key)
+{
+ // QXXXQ
+}
+
+void
+Handlers::beginOutputOptionsEncrypt40Bit()
+{
+ // QXXXQ
+}
+
+void
+Handlers::endOutputOptionsEncrypt40Bit()
+{
+ // QXXXQ
+}
+
+void
+Handlers::beginOutputOptionsEncrypt128Bit()
+{
+ // QXXXQ
+}
+
+void
+Handlers::endOutputOptionsEncrypt128Bit()
+{
+ // QXXXQ
+}
+
+void
+Handlers::beginOutputOptionsEncrypt256Bit()
+{
+ // QXXXQ
+}
+
+void
+Handlers::endOutputOptionsEncrypt256Bit()
+{
+ // QXXXQ
+}
+
+void
+Handlers::beginOptions()
+{
+ // nothing needed
+}
+
+void
+Handlers::endOptions()
+{
+ // nothing needed
+}
+
+void
+Handlers::beginInspect()
+{
+ // nothing needed
+}
+
+void
+Handlers::endInspect()
+{
+ // nothing needed
+}
+
+void
+Handlers::beginTransform()
+{
+ // nothing needed
+}
+
+void
+Handlers::endTransform()
+{
+ // nothing needed
+}
+
+void
+Handlers::beginModify()
+{
+ // nothing needed
+}
+
+void
+Handlers::endModify()
+{
+ // nothing needed
+}
+
+void
+Handlers::beginModifyAddAttachment()
+{
+ // QXXXQ
+}
+
+void
+Handlers::endModifyAddAttachment()
+{
+ // QXXXQ
+}
+
+void
+Handlers::setupModifyAddAttachmentPath(std::string const& key)
+{
+ // QXXXQ
+}
+
+void
+Handlers::beginModifyCopyAttachmentsFrom()
+{
+ // QXXXQ
+}
+
+void
+Handlers::endModifyCopyAttachmentsFrom()
+{
+ // QXXXQ
+}
+
+void
+Handlers::setupModifyCopyAttachmentsFromPath(std::string const& key)
+{
+ // QXXXQ
+}
+
+void
+Handlers::setupModifyCopyAttachmentsFromPassword(std::string const& key)
+{
+ // QXXXQ
+}
+
+void
+Handlers::beginModifyPages()
+{
+ // QXXXQ
+}
+
+void
+Handlers::endModifyPages()
+{
+ // QXXXQ
+}
+
+void
+Handlers::setupModifyPagesFile(std::string const& key)
+{
+ // QXXXQ
+}
+
+void
+Handlers::setupModifyPagesPassword(std::string const& key)
+{
+ // QXXXQ
+}
+
+void
+Handlers::setupModifyPagesRange(std::string const& key)
+{
+ // QXXXQ
+}
+
+void
+Handlers::beginModifyOverlay()
+{
+ // QXXXQ
+}
+
+void
+Handlers::endModifyOverlay()
+{
+ // QXXXQ
+}
+
+void
+Handlers::setupModifyOverlayFile(std::string const& key)
+{
+ // QXXXQ
+}
+
+void
+Handlers::setupModifyOverlayPassword(std::string const& key)
+{
+ // QXXXQ
+}
+
+void
+Handlers::beginModifyUnderlay()
+{
+ // QXXXQ
+}
+
+void
+Handlers::endModifyUnderlay()
+{
+ // QXXXQ
+}
+
+void
+Handlers::setupModifyUnderlayFile(std::string const& key)
+{
+ // QXXXQ
+}
+
+void
+Handlers::setupModifyUnderlayPassword(std::string const& key)
+{
+ // QXXXQ
+}
+
+void
QPDFJob::initializeFromJson(std::string const& json)
{
std::list<std::string> errors;