aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorm-holger <m-holger@kubitscheck.org>2023-02-09 13:43:56 +0100
committerm-holger <m-holger@kubitscheck.org>2023-02-18 09:33:08 +0100
commitda14ab4dc7b1caee1708483cf714683f7d811ca7 (patch)
treef405b14968fcf9158df4a5d15efeafe6a0e3f366
parentdab27c9bb35c26e30e22f2e53299ee9566cadefd (diff)
downloadqpdf-da14ab4dc7b1caee1708483cf714683f7d811ca7.tar.zst
Move definition of QPDF::JSONReactor into QPDF_json
Allow access to private header files when defining data members.
-rw-r--r--include/qpdf/QPDF.hh69
-rw-r--r--libqpdf/QPDF_json.cc74
-rw-r--r--libqpdf/qpdf/QPDFValue.hh25
3 files changed, 84 insertions, 84 deletions
diff --git a/include/qpdf/QPDF.hh b/include/qpdf/QPDF.hh
index b227bb37..54af0d17 100644
--- a/include/qpdf/QPDF.hh
+++ b/include/qpdf/QPDF.hh
@@ -32,7 +32,6 @@
#include <memory>
#include <stdio.h>
#include <string>
-#include <variant>
#include <vector>
#include <qpdf/Buffer.hh>
@@ -51,7 +50,6 @@ class BitStream;
class BitWriter;
class QPDFLogger;
class QPDFParser;
-struct JSON_Descr;
class QPDF
{
@@ -1110,72 +1108,7 @@ class QPDF
std::set<QPDFObjGen>::const_iterator iter;
};
- class JSONReactor: public JSON::Reactor
- {
- public:
- JSONReactor(
- QPDF&, std::shared_ptr<InputSource> is, bool must_be_complete);
- virtual ~JSONReactor() = default;
- virtual void dictionaryStart() override;
- virtual void arrayStart() override;
- virtual void containerEnd(JSON const& value) override;
- virtual void topLevelScalar() override;
- virtual bool
- dictionaryItem(std::string const& key, JSON const& value) override;
- virtual bool arrayItem(JSON const& value) override;
-
- bool anyErrors() const;
-
- private:
- enum state_e {
- st_initial,
- st_top,
- st_qpdf,
- st_qpdf_meta,
- st_objects,
- st_trailer,
- st_object_top,
- st_stream,
- st_object,
- st_ignore,
- };
-
- void containerStart();
- void nestedState(std::string const& key, JSON const& value, state_e);
- void setObjectDescription(QPDFObjectHandle& oh, JSON const& value);
- QPDFObjectHandle makeObject(JSON const& value);
- void error(qpdf_offset_t offset, std::string const& message);
- QPDFObjectHandle reserveObject(int obj, int gen);
- void replaceObject(
- QPDFObjectHandle to_replace,
- QPDFObjectHandle replacement,
- JSON const& value);
-
- QPDF& pdf;
- std::shared_ptr<InputSource> is;
- bool must_be_complete;
- std::shared_ptr<std::variant<std::string, JSON_Descr>> descr;
- bool errors;
- bool parse_error;
- bool saw_qpdf;
- bool saw_qpdf_meta;
- bool saw_objects;
- bool saw_json_version;
- bool saw_pdf_version;
- bool saw_trailer;
- state_e state;
- state_e next_state;
- std::string cur_object;
- bool saw_value;
- bool saw_stream;
- bool saw_dict;
- bool saw_data;
- bool saw_datafile;
- bool this_stream_needs_data;
- std::vector<state_e> state_stack;
- std::vector<QPDFObjectHandle> object_stack;
- std::set<QPDFObjGen> reserved;
- };
+ class JSONReactor;
void parse(char const* password);
void inParse(bool);
diff --git a/libqpdf/QPDF_json.cc b/libqpdf/QPDF_json.cc
index fb858557..f13b9517 100644
--- a/libqpdf/QPDF_json.cc
+++ b/libqpdf/QPDF_json.cc
@@ -223,13 +223,79 @@ provide_data(
};
}
+class QPDF::JSONReactor: public JSON::Reactor
+{
+ public:
+ JSONReactor(QPDF&, std::shared_ptr<InputSource> is, bool must_be_complete);
+ virtual ~JSONReactor() = default;
+ virtual void dictionaryStart() override;
+ virtual void arrayStart() override;
+ virtual void containerEnd(JSON const& value) override;
+ virtual void topLevelScalar() override;
+ virtual bool
+ dictionaryItem(std::string const& key, JSON const& value) override;
+ virtual bool arrayItem(JSON const& value) override;
+
+ bool anyErrors() const;
+
+ private:
+ enum state_e {
+ st_initial,
+ st_top,
+ st_qpdf,
+ st_qpdf_meta,
+ st_objects,
+ st_trailer,
+ st_object_top,
+ st_stream,
+ st_object,
+ st_ignore,
+ };
+
+ void containerStart();
+ void nestedState(std::string const& key, JSON const& value, state_e);
+ void setObjectDescription(QPDFObjectHandle& oh, JSON const& value);
+ QPDFObjectHandle makeObject(JSON const& value);
+ void error(qpdf_offset_t offset, std::string const& message);
+ QPDFObjectHandle reserveObject(int obj, int gen);
+ void replaceObject(
+ QPDFObjectHandle to_replace,
+ QPDFObjectHandle replacement,
+ JSON const& value);
+
+ QPDF& pdf;
+ std::shared_ptr<InputSource> is;
+ bool must_be_complete;
+ std::shared_ptr<QPDFValue::Description> descr;
+ bool errors;
+ bool parse_error;
+ bool saw_qpdf;
+ bool saw_qpdf_meta;
+ bool saw_objects;
+ bool saw_json_version;
+ bool saw_pdf_version;
+ bool saw_trailer;
+ state_e state;
+ state_e next_state;
+ std::string cur_object;
+ bool saw_value;
+ bool saw_stream;
+ bool saw_dict;
+ bool saw_data;
+ bool saw_datafile;
+ bool this_stream_needs_data;
+ std::vector<state_e> state_stack;
+ std::vector<QPDFObjectHandle> object_stack;
+ std::set<QPDFObjGen> reserved;
+};
+
QPDF::JSONReactor::JSONReactor(
QPDF& pdf, std::shared_ptr<InputSource> is, bool must_be_complete) :
pdf(pdf),
is(is),
must_be_complete(must_be_complete),
- descr(std::make_shared<std::variant<std::string, JSON_Descr>>(
- JSON_Descr(std::make_shared<std::string>(is->getName()), ""))),
+ descr(std::make_shared<QPDFValue::Description>(QPDFValue::JSON_Descr(
+ std::make_shared<std::string>(is->getName()), ""))),
errors(false),
parse_error(false),
saw_qpdf(false),
@@ -679,10 +745,10 @@ QPDF::JSONReactor::arrayItem(JSON const& value)
void
QPDF::JSONReactor::setObjectDescription(QPDFObjectHandle& oh, JSON const& value)
{
- auto j_descr = std::get<JSON_Descr>(*descr);
+ auto j_descr = std::get<QPDFValue::JSON_Descr>(*descr);
if (j_descr.object != cur_object) {
descr = std::make_shared<QPDFValue::Description>(
- JSON_Descr(j_descr.input, cur_object));
+ QPDFValue::JSON_Descr(j_descr.input, cur_object));
}
oh.getObjectPtr()->setDescription(&pdf, descr, value.getStart());
diff --git a/libqpdf/qpdf/QPDFValue.hh b/libqpdf/qpdf/QPDFValue.hh
index 2e0c5e8d..9a1a6df1 100644
--- a/libqpdf/qpdf/QPDFValue.hh
+++ b/libqpdf/qpdf/QPDFValue.hh
@@ -14,18 +14,6 @@ class QPDF;
class QPDFObjectHandle;
class QPDFObject;
-struct JSON_Descr
-{
- JSON_Descr(std::shared_ptr<std::string> input, std::string const& object) :
- input(input),
- object(object)
- {
- }
-
- std::shared_ptr<std::string> input;
- std::string object;
-};
-
class QPDFValue
{
friend class QPDFObject;
@@ -37,6 +25,19 @@ class QPDFValue
virtual std::string unparse() = 0;
virtual JSON getJSON(int json_version) = 0;
+ struct JSON_Descr
+ {
+ JSON_Descr(
+ std::shared_ptr<std::string> input, std::string const& object) :
+ input(input),
+ object(object)
+ {
+ }
+
+ std::shared_ptr<std::string> input;
+ std::string object;
+ };
+
using Description = std::variant<std::string, JSON_Descr>;
virtual void