diff options
Diffstat (limited to 'libqpdf/QPDFJob_json.cc')
-rw-r--r-- | libqpdf/QPDFJob_json.cc | 407 |
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; |