diff options
Diffstat (limited to 'libqpdf/JSON.cc')
-rw-r--r-- | libqpdf/JSON.cc | 24 |
1 files changed, 24 insertions, 0 deletions
diff --git a/libqpdf/JSON.cc b/libqpdf/JSON.cc index 71ea33d7..8549b7ed 100644 --- a/libqpdf/JSON.cc +++ b/libqpdf/JSON.cc @@ -1,6 +1,8 @@ #include <qpdf/JSON.hh> #include <qpdf/BufferInputSource.hh> +#include <qpdf/Pl_Base64.hh> +#include <qpdf/Pl_Concatenate.hh> #include <qpdf/Pl_String.hh> #include <qpdf/QTC.hh> #include <qpdf/QUtil.hh> @@ -168,6 +170,22 @@ JSON::JSON_null::write(Pipeline* p, size_t) const *p << "null"; } +JSON::JSON_blob::JSON_blob(std::function<void(Pipeline*)> fn) : + fn(fn) +{ +} + +void +JSON::JSON_blob::write(Pipeline* p, size_t) const +{ + *p << "\""; + Pl_Concatenate cat("blob concatenate", p); + Pl_Base64 base64("blob base64", &cat, Pl_Base64::a_encode); + fn(&base64); + base64.finish(); + *p << "\""; +} + void JSON::write(Pipeline* p, size_t depth) const { @@ -306,6 +324,12 @@ JSON::makeNull() return JSON(std::make_shared<JSON_null>()); } +JSON +JSON::makeBlob(std::function<void(Pipeline*)> fn) +{ + return JSON(std::make_shared<JSON_blob>(fn)); +} + bool JSON::isArray() const { |