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 | 151 | JSON |
| 152 | 152 | QPDF_Array::getJSON(int json_version) |
| 153 | 153 | { |
| 154 | + static const JSON j_null = JSON::makeNull(); | |
| 155 | + JSON j_array = JSON::makeArray(); | |
| 154 | 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 | 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 | 183 | QPDFObjectHandle | ... | ... |