Commit a03c6863ae4e008275cea9074b9177df7a83b665
1 parent
3d019121
Move QPDFObjectHandle dictionary methods implementation to QPDF_Dictionary.cc
Showing
2 changed files
with
117 additions
and
117 deletions
libqpdf/QPDFObjectHandle.cc
| ... | ... | @@ -974,7 +974,7 @@ QPDFObjectHandle::eraseItemAndGetOld(int at) |
| 974 | 974 | return result; |
| 975 | 975 | } |
| 976 | 976 | |
| 977 | -// Dictionary accessors | |
| 977 | +// Dictionary accessors are in QPDF_Dictionary.cc | |
| 978 | 978 | |
| 979 | 979 | QPDFObjectHandle::QPDFDictItems |
| 980 | 980 | QPDFObjectHandle::ditems() |
| ... | ... | @@ -982,59 +982,6 @@ QPDFObjectHandle::ditems() |
| 982 | 982 | return {*this}; |
| 983 | 983 | } |
| 984 | 984 | |
| 985 | -bool | |
| 986 | -QPDFObjectHandle::hasKey(std::string const& key) const | |
| 987 | -{ | |
| 988 | - auto dict = as_dictionary(strict); | |
| 989 | - if (dict) { | |
| 990 | - return dict.hasKey(key); | |
| 991 | - } else { | |
| 992 | - typeWarning("dictionary", "returning false for a key containment request"); | |
| 993 | - QTC::TC("qpdf", "QPDFObjectHandle dictionary false for hasKey"); | |
| 994 | - return false; | |
| 995 | - } | |
| 996 | -} | |
| 997 | - | |
| 998 | -QPDFObjectHandle | |
| 999 | -QPDFObjectHandle::getKey(std::string const& key) const | |
| 1000 | -{ | |
| 1001 | - if (auto dict = as_dictionary(strict)) { | |
| 1002 | - return dict.getKey(key); | |
| 1003 | - } | |
| 1004 | - typeWarning("dictionary", "returning null for attempted key retrieval"); | |
| 1005 | - QTC::TC("qpdf", "QPDFObjectHandle dictionary null for getKey"); | |
| 1006 | - static auto constexpr msg = " -> null returned from getting key $VD from non-Dictionary"sv; | |
| 1007 | - return QPDF_Null::create(obj, msg, ""); | |
| 1008 | -} | |
| 1009 | - | |
| 1010 | -QPDFObjectHandle | |
| 1011 | -QPDFObjectHandle::getKeyIfDict(std::string const& key) const | |
| 1012 | -{ | |
| 1013 | - return isNull() ? newNull() : getKey(key); | |
| 1014 | -} | |
| 1015 | - | |
| 1016 | -std::set<std::string> | |
| 1017 | -QPDFObjectHandle::getKeys() const | |
| 1018 | -{ | |
| 1019 | - if (auto dict = as_dictionary(strict)) { | |
| 1020 | - return dict.getKeys(); | |
| 1021 | - } | |
| 1022 | - typeWarning("dictionary", "treating as empty"); | |
| 1023 | - QTC::TC("qpdf", "QPDFObjectHandle dictionary empty set for getKeys"); | |
| 1024 | - return {}; | |
| 1025 | -} | |
| 1026 | - | |
| 1027 | -std::map<std::string, QPDFObjectHandle> | |
| 1028 | -QPDFObjectHandle::getDictAsMap() const | |
| 1029 | -{ | |
| 1030 | - if (auto dict = as_dictionary(strict)) { | |
| 1031 | - return dict.getAsMap(); | |
| 1032 | - } | |
| 1033 | - typeWarning("dictionary", "treating as empty"); | |
| 1034 | - QTC::TC("qpdf", "QPDFObjectHandle dictionary empty map for asMap"); | |
| 1035 | - return {}; | |
| 1036 | -} | |
| 1037 | - | |
| 1038 | 985 | // Array and Name accessors |
| 1039 | 986 | |
| 1040 | 987 | bool |
| ... | ... | @@ -1208,56 +1155,7 @@ QPDFObjectHandle::getUniqueResourceName( |
| 1208 | 1155 | " QPDFObjectHandle::getUniqueResourceName"); |
| 1209 | 1156 | } |
| 1210 | 1157 | |
| 1211 | -// Dictionary mutators | |
| 1212 | - | |
| 1213 | -void | |
| 1214 | -QPDFObjectHandle::replaceKey(std::string const& key, QPDFObjectHandle const& value) | |
| 1215 | -{ | |
| 1216 | - if (auto dict = as_dictionary(strict)) { | |
| 1217 | - checkOwnership(value); | |
| 1218 | - dict.replaceKey(key, value); | |
| 1219 | - return; | |
| 1220 | - } | |
| 1221 | - typeWarning("dictionary", "ignoring key replacement request"); | |
| 1222 | - QTC::TC("qpdf", "QPDFObjectHandle dictionary ignoring replaceKey"); | |
| 1223 | -} | |
| 1224 | - | |
| 1225 | -QPDFObjectHandle | |
| 1226 | -QPDFObjectHandle::replaceKeyAndGetNew(std::string const& key, QPDFObjectHandle const& value) | |
| 1227 | -{ | |
| 1228 | - replaceKey(key, value); | |
| 1229 | - return value; | |
| 1230 | -} | |
| 1231 | - | |
| 1232 | -QPDFObjectHandle | |
| 1233 | -QPDFObjectHandle::replaceKeyAndGetOld(std::string const& key, QPDFObjectHandle const& value) | |
| 1234 | -{ | |
| 1235 | - QPDFObjectHandle old = removeKeyAndGetOld(key); | |
| 1236 | - replaceKey(key, value); | |
| 1237 | - return old; | |
| 1238 | -} | |
| 1239 | - | |
| 1240 | -void | |
| 1241 | -QPDFObjectHandle::removeKey(std::string const& key) | |
| 1242 | -{ | |
| 1243 | - if (auto dict = as_dictionary(strict)) { | |
| 1244 | - dict.removeKey(key); | |
| 1245 | - return; | |
| 1246 | - } | |
| 1247 | - typeWarning("dictionary", "ignoring key removal request"); | |
| 1248 | - QTC::TC("qpdf", "QPDFObjectHandle dictionary ignoring removeKey"); | |
| 1249 | -} | |
| 1250 | - | |
| 1251 | -QPDFObjectHandle | |
| 1252 | -QPDFObjectHandle::removeKeyAndGetOld(std::string const& key) | |
| 1253 | -{ | |
| 1254 | - auto result = QPDFObjectHandle::newNull(); | |
| 1255 | - if (auto dict = as_dictionary(strict)) { | |
| 1256 | - result = dict.getKey(key); | |
| 1257 | - } | |
| 1258 | - removeKey(key); | |
| 1259 | - return result; | |
| 1260 | -} | |
| 1158 | +// Dictionary mutators are in QPDF_Dictionary.cc | |
| 1261 | 1159 | |
| 1262 | 1160 | // Stream accessors |
| 1263 | 1161 | |
| ... | ... | @@ -2346,19 +2244,6 @@ QPDFObjectHandle::isImage(bool exclude_imagemask) const |
| 2346 | 2244 | } |
| 2347 | 2245 | |
| 2348 | 2246 | void |
| 2349 | -QPDFObjectHandle::checkOwnership(QPDFObjectHandle const& item) const | |
| 2350 | -{ | |
| 2351 | - auto qpdf = getOwningQPDF(); | |
| 2352 | - auto item_qpdf = item.getOwningQPDF(); | |
| 2353 | - if ((qpdf != nullptr) && (item_qpdf != nullptr) && (qpdf != item_qpdf)) { | |
| 2354 | - QTC::TC("qpdf", "QPDFObjectHandle check ownership"); | |
| 2355 | - throw std::logic_error( | |
| 2356 | - "Attempting to add an object from a different QPDF. Use " | |
| 2357 | - "QPDF::copyForeignObject to add objects from another file."); | |
| 2358 | - } | |
| 2359 | -} | |
| 2360 | - | |
| 2361 | -void | |
| 2362 | 2247 | QPDFObjectHandle::assertPageObject() const |
| 2363 | 2248 | { |
| 2364 | 2249 | if (!isPageObject()) { | ... | ... |
libqpdf/QPDF_Dictionary.cc
| ... | ... | @@ -169,3 +169,118 @@ BaseDictionary::replaceKey(std::string const& key, QPDFObjectHandle value) |
| 169 | 169 | d->items[key] = value; |
| 170 | 170 | } |
| 171 | 171 | } |
| 172 | + | |
| 173 | +void | |
| 174 | +QPDFObjectHandle::checkOwnership(QPDFObjectHandle const& item) const | |
| 175 | +{ | |
| 176 | + auto qpdf = getOwningQPDF(); | |
| 177 | + auto item_qpdf = item.getOwningQPDF(); | |
| 178 | + if (qpdf && item_qpdf && qpdf != item_qpdf) { | |
| 179 | + QTC::TC("qpdf", "QPDFObjectHandle check ownership"); | |
| 180 | + throw std::logic_error( | |
| 181 | + "Attempting to add an object from a different QPDF. Use " | |
| 182 | + "QPDF::copyForeignObject to add objects from another file."); | |
| 183 | + } | |
| 184 | +} | |
| 185 | + | |
| 186 | +bool | |
| 187 | +QPDFObjectHandle::hasKey(std::string const& key) const | |
| 188 | +{ | |
| 189 | + auto dict = as_dictionary(strict); | |
| 190 | + if (dict) { | |
| 191 | + return dict.hasKey(key); | |
| 192 | + } else { | |
| 193 | + typeWarning("dictionary", "returning false for a key containment request"); | |
| 194 | + QTC::TC("qpdf", "QPDFObjectHandle dictionary false for hasKey"); | |
| 195 | + return false; | |
| 196 | + } | |
| 197 | +} | |
| 198 | + | |
| 199 | +QPDFObjectHandle | |
| 200 | +QPDFObjectHandle::getKey(std::string const& key) const | |
| 201 | +{ | |
| 202 | + if (auto dict = as_dictionary(strict)) { | |
| 203 | + return dict.getKey(key); | |
| 204 | + } | |
| 205 | + typeWarning("dictionary", "returning null for attempted key retrieval"); | |
| 206 | + QTC::TC("qpdf", "QPDFObjectHandle dictionary null for getKey"); | |
| 207 | + static auto constexpr msg = " -> null returned from getting key $VD from non-Dictionary"sv; | |
| 208 | + return QPDF_Null::create(obj, msg, ""); | |
| 209 | +} | |
| 210 | + | |
| 211 | +QPDFObjectHandle | |
| 212 | +QPDFObjectHandle::getKeyIfDict(std::string const& key) const | |
| 213 | +{ | |
| 214 | + return isNull() ? newNull() : getKey(key); | |
| 215 | +} | |
| 216 | + | |
| 217 | +std::set<std::string> | |
| 218 | +QPDFObjectHandle::getKeys() const | |
| 219 | +{ | |
| 220 | + if (auto dict = as_dictionary(strict)) { | |
| 221 | + return dict.getKeys(); | |
| 222 | + } | |
| 223 | + typeWarning("dictionary", "treating as empty"); | |
| 224 | + QTC::TC("qpdf", "QPDFObjectHandle dictionary empty set for getKeys"); | |
| 225 | + return {}; | |
| 226 | +} | |
| 227 | + | |
| 228 | +std::map<std::string, QPDFObjectHandle> | |
| 229 | +QPDFObjectHandle::getDictAsMap() const | |
| 230 | +{ | |
| 231 | + if (auto dict = as_dictionary(strict)) { | |
| 232 | + return dict.getAsMap(); | |
| 233 | + } | |
| 234 | + typeWarning("dictionary", "treating as empty"); | |
| 235 | + QTC::TC("qpdf", "QPDFObjectHandle dictionary empty map for asMap"); | |
| 236 | + return {}; | |
| 237 | +} | |
| 238 | + | |
| 239 | +void | |
| 240 | +QPDFObjectHandle::replaceKey(std::string const& key, QPDFObjectHandle const& value) | |
| 241 | +{ | |
| 242 | + if (auto dict = as_dictionary(strict)) { | |
| 243 | + checkOwnership(value); | |
| 244 | + dict.replaceKey(key, value); | |
| 245 | + return; | |
| 246 | + } | |
| 247 | + typeWarning("dictionary", "ignoring key replacement request"); | |
| 248 | + QTC::TC("qpdf", "QPDFObjectHandle dictionary ignoring replaceKey"); | |
| 249 | +} | |
| 250 | + | |
| 251 | +QPDFObjectHandle | |
| 252 | +QPDFObjectHandle::replaceKeyAndGetNew(std::string const& key, QPDFObjectHandle const& value) | |
| 253 | +{ | |
| 254 | + replaceKey(key, value); | |
| 255 | + return value; | |
| 256 | +} | |
| 257 | + | |
| 258 | +QPDFObjectHandle | |
| 259 | +QPDFObjectHandle::replaceKeyAndGetOld(std::string const& key, QPDFObjectHandle const& value) | |
| 260 | +{ | |
| 261 | + QPDFObjectHandle old = removeKeyAndGetOld(key); | |
| 262 | + replaceKey(key, value); | |
| 263 | + return old; | |
| 264 | +} | |
| 265 | + | |
| 266 | +void | |
| 267 | +QPDFObjectHandle::removeKey(std::string const& key) | |
| 268 | +{ | |
| 269 | + if (auto dict = as_dictionary(strict)) { | |
| 270 | + dict.removeKey(key); | |
| 271 | + return; | |
| 272 | + } | |
| 273 | + typeWarning("dictionary", "ignoring key removal request"); | |
| 274 | + QTC::TC("qpdf", "QPDFObjectHandle dictionary ignoring removeKey"); | |
| 275 | +} | |
| 276 | + | |
| 277 | +QPDFObjectHandle | |
| 278 | +QPDFObjectHandle::removeKeyAndGetOld(std::string const& key) | |
| 279 | +{ | |
| 280 | + auto result = QPDFObjectHandle::newNull(); | |
| 281 | + if (auto dict = as_dictionary(strict)) { | |
| 282 | + result = dict.getKey(key); | |
| 283 | + } | |
| 284 | + removeKey(key); | |
| 285 | + return result; | |
| 286 | +} | ... | ... |