Commit 9013b7ca919c13b03488056dff55ffbf5215f008

Authored by Jay Berkenbilt
1 parent edef2cd3

QPDFJob: move placeholder json to a separate source file

include/qpdf/QPDFJob.hh
... ... @@ -80,7 +80,6 @@ class QPDFJob
80 80 void initializeFromArgv(int argc, char* argv[],
81 81 char const* progname_env = nullptr);
82 82  
83   - // QXXXQ
84 83 QPDF_DLL
85 84 void initializeFromJson(std::string const& json);
86 85  
... ... @@ -323,6 +322,11 @@ class QPDFJob
323 322 QPDF_DLL
324 323 static std::string json_out_schema_v1();
325 324  
  325 + // Provide a string that is the help information for the version 1
  326 + // of JSON format for QPDFJob.
  327 + QPDF_DLL
  328 + static std::string json_job_schema_v1();
  329 +
326 330 private:
327 331 struct RotationSpec
328 332 {
... ...
libqpdf/QPDFJob.cc
... ... @@ -33,6 +33,8 @@
33 33 #include <qpdf/QPDFWriter.hh>
34 34 #include <qpdf/QIntC.hh>
35 35  
  36 +#include <qpdf/auto_job_schema.hh> // JOB_SCHEMA_DATA
  37 +
36 38 QPDFJob::ConfigError::ConfigError(std::string const& msg) :
37 39 std::runtime_error(msg)
38 40 {
... ... @@ -478,6 +480,12 @@ QPDFJob::config()
478 480 return std::shared_ptr<Config>(new Config(*this));
479 481 }
480 482  
  483 +std::string
  484 +QPDFJob::json_job_schema_v1()
  485 +{
  486 + return JOB_SCHEMA_DATA;
  487 +}
  488 +
481 489 void
482 490 QPDFJob::parseRotationParameter(std::string const& parameter)
483 491 {
... ...
libqpdf/QPDFJob_argv.cc
... ... @@ -16,10 +16,6 @@
16 16 #include <qpdf/QPDFArgParser.hh>
17 17 #include <qpdf/QPDFJob.hh>
18 18 #include <qpdf/QIntC.hh>
19   -#include <qpdf/JSONHandler.hh>
20   -
21   -#include <qpdf/auto_job_schema.hh>
22   -static JSON JOB_SCHEMA = JSON::parse(JOB_SCHEMA_DATA);
23 19  
24 20 namespace
25 21 {
... ... @@ -468,7 +464,7 @@ ArgParser::argEndCopyAttachment()
468 464 void
469 465 ArgParser::argJobJsonHelp()
470 466 {
471   - std::cout << JOB_SCHEMA_DATA << std::endl;
  467 + std::cout << QPDFJob::json_job_schema_v1() << std::endl;
472 468 }
473 469  
474 470 void
... ... @@ -504,94 +500,3 @@ QPDFJob::initializeFromArgv(int argc, char* argv[], char const* progname_env)
504 500 QPDFArgParser::bindBare(&QPDFJob::checkConfiguration, this));
505 501 ap.parseOptions();
506 502 }
507   -
508   -void
509   -QPDFJob::initializeFromJson(std::string const& json)
510   -{
511   - std::list<std::string> errors;
512   - JSON j = JSON::parse(json);
513   - if (! j.checkSchema(JOB_SCHEMA, JSON::f_optional, errors))
514   - {
515   - std::ostringstream msg;
516   - msg << this->m->message_prefix
517   - << ": job json has errors:";
518   - for (auto const& error: errors)
519   - {
520   - msg << std::endl << " " << error;
521   - }
522   - throw std::runtime_error(msg.str());
523   - }
524   -
525   - JSONHandler jh;
526   - {
527   - jh.addDictHandlers(
528   - [](std::string const&){},
529   - [](std::string const&){});
530   -
531   - auto input = std::make_shared<JSONHandler>();
532   - auto input_file = std::make_shared<JSONHandler>();
533   - auto input_file_name = std::make_shared<JSONHandler>();
534   - auto output = std::make_shared<JSONHandler>();
535   - auto output_file = std::make_shared<JSONHandler>();
536   - auto output_file_name = std::make_shared<JSONHandler>();
537   - auto output_options = std::make_shared<JSONHandler>();
538   - auto output_options_qdf = std::make_shared<JSONHandler>();
539   -
540   - input->addDictHandlers(
541   - [](std::string const&){},
542   - [](std::string const&){});
543   - input_file->addDictHandlers(
544   - [](std::string const&){},
545   - [](std::string const&){});
546   - output->addDictHandlers(
547   - [](std::string const&){},
548   - [](std::string const&){});
549   - output_file->addDictHandlers(
550   - [](std::string const&){},
551   - [](std::string const&){});
552   - output_options->addDictHandlers(
553   - [](std::string const&){},
554   - [](std::string const&){});
555   -
556   - jh.addDictKeyHandler("input", input);
557   - input->addDictKeyHandler("file", input_file);
558   - input_file->addDictKeyHandler("name", input_file_name);
559   - jh.addDictKeyHandler("output", output);
560   - output->addDictKeyHandler("file", output_file);
561   - output_file->addDictKeyHandler("name", output_file_name);
562   - output->addDictKeyHandler("options", output_options);
563   - output_options->addDictKeyHandler("qdf", output_options_qdf);
564   -
565   - input_file_name->addStringHandler(
566   - [this](std::string const&, std::string const& v) {
567   - config()->inputFile(v.c_str());
568   - });
569   - output_file_name->addStringHandler(
570   - [this](std::string const&, std::string const& v) {
571   - config()->outputFile(v.c_str());
572   - });
573   - output_options_qdf->addBoolHandler(
574   - [this](std::string const&, bool v) {
575   - // QXXXQ require v to be true
576   - config()->qdf();
577   - });
578   - }
579   -
580   - // {
581   - // "input": {
582   - // "file": {
583   - // "name": "/home/ejb/source/examples/pdf/minimal.pdf"
584   - // }
585   - // },
586   - // "output": {
587   - // "file": {
588   - // "name": "/tmp/a.pdf"
589   - // },
590   - // "options": {
591   - // "qdf": true
592   - // }
593   - // }
594   - // }
595   -
596   - jh.handle(".", j);
597   -}
... ...
libqpdf/QPDFJob_json.cc 0 → 100644
  1 +#include <qpdf/QPDFJob.hh>
  2 +#include <qpdf/JSONHandler.hh>
  3 +
  4 +#include <memory>
  5 +#include <stdexcept>
  6 +#include <sstream>
  7 +
  8 +static JSON JOB_SCHEMA = JSON::parse(QPDFJob::json_job_schema_v1().c_str());
  9 +
  10 +void
  11 +QPDFJob::initializeFromJson(std::string const& json)
  12 +{
  13 + std::list<std::string> errors;
  14 + JSON j = JSON::parse(json);
  15 + if (! j.checkSchema(JOB_SCHEMA, JSON::f_optional, errors))
  16 + {
  17 + std::ostringstream msg;
  18 + msg << this->m->message_prefix
  19 + << ": job json has errors:";
  20 + for (auto const& error: errors)
  21 + {
  22 + msg << std::endl << " " << error;
  23 + }
  24 + throw std::runtime_error(msg.str());
  25 + }
  26 +
  27 + JSONHandler jh;
  28 + {
  29 + jh.addDictHandlers(
  30 + [](std::string const&){},
  31 + [](std::string const&){});
  32 +
  33 + auto input = std::make_shared<JSONHandler>();
  34 + auto input_file = std::make_shared<JSONHandler>();
  35 + auto input_file_name = std::make_shared<JSONHandler>();
  36 + auto output = std::make_shared<JSONHandler>();
  37 + auto output_file = std::make_shared<JSONHandler>();
  38 + auto output_file_name = std::make_shared<JSONHandler>();
  39 + auto output_options = std::make_shared<JSONHandler>();
  40 + auto output_options_qdf = std::make_shared<JSONHandler>();
  41 +
  42 + input->addDictHandlers(
  43 + [](std::string const&){},
  44 + [](std::string const&){});
  45 + input_file->addDictHandlers(
  46 + [](std::string const&){},
  47 + [](std::string const&){});
  48 + output->addDictHandlers(
  49 + [](std::string const&){},
  50 + [](std::string const&){});
  51 + output_file->addDictHandlers(
  52 + [](std::string const&){},
  53 + [](std::string const&){});
  54 + output_options->addDictHandlers(
  55 + [](std::string const&){},
  56 + [](std::string const&){});
  57 +
  58 + jh.addDictKeyHandler("input", input);
  59 + input->addDictKeyHandler("file", input_file);
  60 + input_file->addDictKeyHandler("name", input_file_name);
  61 + jh.addDictKeyHandler("output", output);
  62 + output->addDictKeyHandler("file", output_file);
  63 + output_file->addDictKeyHandler("name", output_file_name);
  64 + output->addDictKeyHandler("options", output_options);
  65 + output_options->addDictKeyHandler("qdf", output_options_qdf);
  66 +
  67 + input_file_name->addStringHandler(
  68 + [this](std::string const&, std::string const& v) {
  69 + config()->inputFile(v.c_str());
  70 + });
  71 + output_file_name->addStringHandler(
  72 + [this](std::string const&, std::string const& v) {
  73 + config()->outputFile(v.c_str());
  74 + });
  75 + output_options_qdf->addBoolHandler(
  76 + [this](std::string const&, bool v) {
  77 + // QXXXQ require v to be true
  78 + config()->qdf();
  79 + });
  80 + }
  81 +
  82 + // {
  83 + // "input": {
  84 + // "file": {
  85 + // "name": "/home/ejb/source/examples/pdf/minimal.pdf"
  86 + // }
  87 + // },
  88 + // "output": {
  89 + // "file": {
  90 + // "name": "/tmp/a.pdf"
  91 + // },
  92 + // "options": {
  93 + // "qdf": true
  94 + // }
  95 + // }
  96 + // }
  97 +
  98 + jh.handle(".", j);
  99 +}
... ...
libqpdf/build.mk
... ... @@ -74,6 +74,7 @@ SRCS_libqpdf = \
74 74 libqpdf/QPDFJob.cc \
75 75 libqpdf/QPDFJob_argv.cc \
76 76 libqpdf/QPDFJob_config.cc \
  77 + libqpdf/QPDFJob_json.cc \
77 78 libqpdf/QPDFMatrix.cc \
78 79 libqpdf/QPDFNameTreeObjectHelper.cc \
79 80 libqpdf/QPDFNumberTreeObjectHelper.cc \
... ...