aboutsummaryrefslogtreecommitdiffstats
path: root/libqpdf/QPDF_Dictionary.cc
diff options
context:
space:
mode:
authorJay Berkenbilt <ejb@ql.org>2024-02-17 20:15:48 +0100
committerJay Berkenbilt <ejb@ql.org>2024-02-17 20:15:48 +0100
commite362bce8e86f4912eaa008bac06f9e2c19b72d3f (patch)
tree42fcd9eed699714f98ddee634763e4d670a2652b /libqpdf/QPDF_Dictionary.cc
parent5a29b7f9dd353c7baf2ca738bd2a56582a6525ea (diff)
parent413aba5bf2ef239d3abf024de3c819e153171035 (diff)
downloadqpdf-e362bce8e86f4912eaa008bac06f9e2c19b72d3f.tar.zst
Merge branch 'jw' from #1146 into work
Diffstat (limited to 'libqpdf/QPDF_Dictionary.cc')
-rw-r--r--libqpdf/QPDF_Dictionary.cc31
1 files changed, 17 insertions, 14 deletions
diff --git a/libqpdf/QPDF_Dictionary.cc b/libqpdf/QPDF_Dictionary.cc
index f7e32fc9..9332b1d3 100644
--- a/libqpdf/QPDF_Dictionary.cc
+++ b/libqpdf/QPDF_Dictionary.cc
@@ -1,5 +1,6 @@
#include <qpdf/QPDF_Dictionary.hh>
+#include <qpdf/JSON_writer.hh>
#include <qpdf/QPDFObject_private.hh>
#include <qpdf/QPDF_Name.hh>
#include <qpdf/QPDF_Null.hh>
@@ -67,28 +68,30 @@ QPDF_Dictionary::unparse()
return result;
}
-JSON
-QPDF_Dictionary::getJSON(int json_version)
+void
+QPDF_Dictionary::writeJSON(int json_version, JSON::Writer& p)
{
- JSON j = JSON::makeDictionary();
+ p.writeStart('{');
for (auto& iter: this->items) {
if (!iter.second.isNull()) {
+ p.writeNext();
if (json_version == 1) {
- j.addDictionaryMember(
- QPDF_Name::normalizeName(iter.first), iter.second.getJSON(json_version));
+ p << "\"" << JSON::Writer::encode_string(QPDF_Name::normalizeName(iter.first))
+ << "\": ";
+ } else if (auto res = QPDF_Name::analyzeJSONEncoding(iter.first); res.first) {
+ if (res.second) {
+ p << "\"" << iter.first << "\": ";
+ } else {
+ p << "\"" << JSON::Writer::encode_string(iter.first) << "\": ";
+ }
} else {
- bool has_8bit_chars;
- bool is_valid_utf8;
- bool is_utf16;
- QUtil::analyze_encoding(iter.first, has_8bit_chars, is_valid_utf8, is_utf16);
- std::string key = !has_8bit_chars || is_valid_utf8
- ? iter.first
- : "n:" + QPDF_Name::normalizeName(iter.first);
- j.addDictionaryMember(key, iter.second.getJSON(json_version));
+ p << "\"n:" << JSON::Writer::encode_string(QPDF_Name::normalizeName(iter.first))
+ << "\": ";
}
+ iter.second.writeJSON(json_version, p);
}
}
- return j;
+ p.writeEnd('}');
}
bool