diff options
author | Jay Berkenbilt <ejb@ql.org> | 2022-01-29 14:54:08 +0100 |
---|---|---|
committer | Jay Berkenbilt <ejb@ql.org> | 2022-01-31 21:57:45 +0100 |
commit | 0c8e9e591268983765dd510c02d259ac7733b664 (patch) | |
tree | 3eca41c51e326d0adfc5818ef6acfbc9a1a7799d /libqpdf/QPDFJob_json.cc | |
parent | 7eeaf58bb70ff9ce85d9d0580c5a2abcab8c6832 (diff) | |
download | qpdf-0c8e9e591268983765dd510c02d259ac7733b664.tar.zst |
QPDFJob: prepare for automatically generated json handlers
Diffstat (limited to 'libqpdf/QPDFJob_json.cc')
-rw-r--r-- | libqpdf/QPDFJob_json.cc | 167 |
1 files changed, 96 insertions, 71 deletions
diff --git a/libqpdf/QPDFJob_json.cc b/libqpdf/QPDFJob_json.cc index 74fd27bd..2d6b265e 100644 --- a/libqpdf/QPDFJob_json.cc +++ b/libqpdf/QPDFJob_json.cc @@ -7,6 +7,100 @@ static JSON JOB_SCHEMA = JSON::parse(QPDFJob::json_job_schema_v1().c_str()); +namespace +{ + class Handlers + { + public: + Handlers(JSONHandler& jh, std::shared_ptr<QPDFJob::Config> c_main); + void handle(JSON&); + + private: +//# include <qpdf/auto_job_json_decl.hh> + + void usage(std::string const& message); + void initHandlers(); + + JSONHandler& jh; + std::shared_ptr<QPDFJob::Config> c_main; + std::shared_ptr<QPDFJob::CopyAttConfig> c_copy_att; + std::shared_ptr<QPDFJob::AttConfig> c_att; + std::shared_ptr<QPDFJob::PagesConfig> c_pages; + std::shared_ptr<QPDFJob::UOConfig> c_uo; + std::shared_ptr<QPDFJob::EncConfig> c_enc; + }; +} + +Handlers::Handlers(JSONHandler& jh, std::shared_ptr<QPDFJob::Config> c_main) : + jh(jh), + c_main(c_main) +{ + initHandlers(); +} + +void +Handlers::initHandlers() +{ +//# include <qpdf/auto_job_json_init.hh> + jh.addDictHandlers( + [](std::string const&){}, + [](std::string const&){}); + + auto input = std::make_shared<JSONHandler>(); + auto input_file = std::make_shared<JSONHandler>(); + auto input_file_name = std::make_shared<JSONHandler>(); + auto output = std::make_shared<JSONHandler>(); + auto output_file = std::make_shared<JSONHandler>(); + auto output_file_name = std::make_shared<JSONHandler>(); + auto output_options = std::make_shared<JSONHandler>(); + auto output_options_qdf = std::make_shared<JSONHandler>(); + + input->addDictHandlers( + [](std::string const&){}, + [](std::string const&){}); + input_file->addDictHandlers( + [](std::string const&){}, + [](std::string const&){}); + output->addDictHandlers( + [](std::string const&){}, + [](std::string const&){}); + output_file->addDictHandlers( + [](std::string const&){}, + [](std::string const&){}); + output_options->addDictHandlers( + [](std::string const&){}, + [](std::string const&){}); + + jh.addDictKeyHandler("input", input); + input->addDictKeyHandler("file", input_file); + input_file->addDictKeyHandler("name", input_file_name); + jh.addDictKeyHandler("output", output); + output->addDictKeyHandler("file", output_file); + output_file->addDictKeyHandler("name", output_file_name); + output->addDictKeyHandler("options", output_options); + output_options->addDictKeyHandler("qdf", output_options_qdf); + + input_file_name->addStringHandler( + [this](std::string const&, std::string const& v) { + c_main->inputFile(v.c_str()); + }); + output_file_name->addStringHandler( + [this](std::string const&, std::string const& v) { + c_main->outputFile(v.c_str()); + }); + output_options_qdf->addBoolHandler( + [this](std::string const&, bool v) { + // QXXXQ require v to be true + c_main->qdf(); + }); +} + +void +Handlers::handle(JSON& j) +{ + jh.handle(".", j); +} + void QPDFJob::initializeFromJson(std::string const& json) { @@ -25,75 +119,6 @@ QPDFJob::initializeFromJson(std::string const& json) } JSONHandler jh; - { - jh.addDictHandlers( - [](std::string const&){}, - [](std::string const&){}); - - auto input = std::make_shared<JSONHandler>(); - auto input_file = std::make_shared<JSONHandler>(); - auto input_file_name = std::make_shared<JSONHandler>(); - auto output = std::make_shared<JSONHandler>(); - auto output_file = std::make_shared<JSONHandler>(); - auto output_file_name = std::make_shared<JSONHandler>(); - auto output_options = std::make_shared<JSONHandler>(); - auto output_options_qdf = std::make_shared<JSONHandler>(); - - input->addDictHandlers( - [](std::string const&){}, - [](std::string const&){}); - input_file->addDictHandlers( - [](std::string const&){}, - [](std::string const&){}); - output->addDictHandlers( - [](std::string const&){}, - [](std::string const&){}); - output_file->addDictHandlers( - [](std::string const&){}, - [](std::string const&){}); - output_options->addDictHandlers( - [](std::string const&){}, - [](std::string const&){}); - - jh.addDictKeyHandler("input", input); - input->addDictKeyHandler("file", input_file); - input_file->addDictKeyHandler("name", input_file_name); - jh.addDictKeyHandler("output", output); - output->addDictKeyHandler("file", output_file); - output_file->addDictKeyHandler("name", output_file_name); - output->addDictKeyHandler("options", output_options); - output_options->addDictKeyHandler("qdf", output_options_qdf); - - input_file_name->addStringHandler( - [this](std::string const&, std::string const& v) { - config()->inputFile(v.c_str()); - }); - output_file_name->addStringHandler( - [this](std::string const&, std::string const& v) { - config()->outputFile(v.c_str()); - }); - output_options_qdf->addBoolHandler( - [this](std::string const&, bool v) { - // QXXXQ require v to be true - config()->qdf(); - }); - } - - // { - // "input": { - // "file": { - // "name": "/home/ejb/source/examples/pdf/minimal.pdf" - // } - // }, - // "output": { - // "file": { - // "name": "/tmp/a.pdf" - // }, - // "options": { - // "qdf": true - // } - // } - // } - - jh.handle(".", j); + Handlers h(jh, config()); + h.handle(j); } |