Commit c2ab0441b5d2c03a732d68e2ed36a19343ccbb5a
1 parent
a7b69751
Refactor QPDF_Array::getJSON
Showing
2 changed files
with
23 additions
and
9 deletions
libqpdf/QPDF_Array.cc
| @@ -151,20 +151,33 @@ QPDF_Array::unparse() | @@ -151,20 +151,33 @@ QPDF_Array::unparse() | ||
| 151 | JSON | 151 | JSON |
| 152 | QPDF_Array::getJSON(int json_version) | 152 | QPDF_Array::getJSON(int json_version) |
| 153 | { | 153 | { |
| 154 | + static const JSON j_null = JSON::makeNull(); | ||
| 155 | + JSON j_array = JSON::makeArray(); | ||
| 154 | if (sparse) { | 156 | if (sparse) { |
| 155 | - JSON j = JSON::makeArray(); | ||
| 156 | - for (int i = 0; i < sp_size; ++i) { | ||
| 157 | - j.addArrayElement(at(i).getJSON(json_version)); | 157 | + int next = 0; |
| 158 | + for (auto& item: sp_elements) { | ||
| 159 | + int key = item.first; | ||
| 160 | + for (int j = next; j < key; ++j) { | ||
| 161 | + j_array.addArrayElement(j_null); | ||
| 162 | + } | ||
| 163 | + auto og = item.second->getObjGen(); | ||
| 164 | + j_array.addArrayElement( | ||
| 165 | + og.isIndirect() ? JSON::makeString(og.unparse(' ') + " R") | ||
| 166 | + : item.second->getJSON(json_version)); | ||
| 167 | + next = ++key; | ||
| 168 | + } | ||
| 169 | + for (int j = next; j < sp_size; ++j) { | ||
| 170 | + j_array.addArrayElement(j_null); | ||
| 158 | } | 171 | } |
| 159 | - return j; | ||
| 160 | } else { | 172 | } else { |
| 161 | - JSON j = JSON::makeArray(); | ||
| 162 | - size_t size = elements.size(); | ||
| 163 | - for (int i = 0; i < int(size); ++i) { | ||
| 164 | - j.addArrayElement(at(i).getJSON(json_version)); | 173 | + for (auto const& item: elements) { |
| 174 | + auto og = item->getObjGen(); | ||
| 175 | + j_array.addArrayElement( | ||
| 176 | + og.isIndirect() ? JSON::makeString(og.unparse(' ') + " R") | ||
| 177 | + : item->getJSON(json_version)); | ||
| 165 | } | 178 | } |
| 166 | - return j; | ||
| 167 | } | 179 | } |
| 180 | + return j_array; | ||
| 168 | } | 181 | } |
| 169 | 182 | ||
| 170 | QPDFObjectHandle | 183 | QPDFObjectHandle |
libqpdf/QPDF_Null.cc
| @@ -50,5 +50,6 @@ QPDF_Null::unparse() | @@ -50,5 +50,6 @@ QPDF_Null::unparse() | ||
| 50 | JSON | 50 | JSON |
| 51 | QPDF_Null::getJSON(int json_version) | 51 | QPDF_Null::getJSON(int json_version) |
| 52 | { | 52 | { |
| 53 | + // If this is updated, QPDF_Array::getJSON must also be updated. | ||
| 53 | return JSON::makeNull(); | 54 | return JSON::makeNull(); |
| 54 | } | 55 | } |