aboutsummaryrefslogtreecommitdiffstats
path: root/libqpdf/QPDFJob_json.cc
diff options
context:
space:
mode:
authorJay Berkenbilt <ejb@ql.org>2022-01-29 14:54:08 +0100
committerJay Berkenbilt <ejb@ql.org>2022-01-31 21:57:45 +0100
commit0c8e9e591268983765dd510c02d259ac7733b664 (patch)
tree3eca41c51e326d0adfc5818ef6acfbc9a1a7799d /libqpdf/QPDFJob_json.cc
parent7eeaf58bb70ff9ce85d9d0580c5a2abcab8c6832 (diff)
downloadqpdf-0c8e9e591268983765dd510c02d259ac7733b664.tar.zst
QPDFJob: prepare for automatically generated json handlers
Diffstat (limited to 'libqpdf/QPDFJob_json.cc')
-rw-r--r--libqpdf/QPDFJob_json.cc167
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);
}