Commit d8fdf632a979a7adb4a6423fd55ef1971fb06afd

Authored by Jay Berkenbilt
1 parent e80fad86

Use replaceKeyAndGet in a few places in existing code

libqpdf/QPDFAcroFormDocumentHelper.cc
... ... @@ -40,9 +40,9 @@ QPDFAcroFormDocumentHelper::getOrCreateAcroForm()
40 40 {
41 41 auto acroform = this->qpdf.getRoot().getKey("/AcroForm");
42 42 if (!acroform.isDictionary()) {
43   - acroform =
44   - this->qpdf.makeIndirectObject(QPDFObjectHandle::newDictionary());
45   - this->qpdf.getRoot().replaceKey("/AcroForm", acroform);
  43 + acroform = this->qpdf.getRoot().replaceKeyAndGet(
  44 + "/AcroForm",
  45 + this->qpdf.makeIndirectObject(QPDFObjectHandle::newDictionary()));
46 46 }
47 47 return acroform;
48 48 }
... ... @@ -53,8 +53,8 @@ QPDFAcroFormDocumentHelper::addFormField(QPDFFormFieldObjectHelper ff)
53 53 auto acroform = getOrCreateAcroForm();
54 54 auto fields = acroform.getKey("/Fields");
55 55 if (!fields.isArray()) {
56   - fields = QPDFObjectHandle::newArray();
57   - acroform.replaceKey("/Fields", fields);
  56 + fields =
  57 + acroform.replaceKeyAndGet("/Fields", QPDFObjectHandle::newArray());
58 58 }
59 59 fields.appendItem(ff.getObjectHandle());
60 60 std::set<QPDFObjGen> visited;
... ... @@ -877,8 +877,8 @@ QPDFAcroFormDocumentHelper::transformAnnotations(
877 877 }
878 878 dr.makeResourcesIndirect(this->qpdf);
879 879 if (!dr.isIndirect()) {
880   - dr = this->qpdf.makeIndirectObject(dr);
881   - acroform.replaceKey("/DR", dr);
  880 + dr = acroform.replaceKeyAndGet(
  881 + "/DR", this->qpdf.makeIndirectObject(dr));
882 882 }
883 883 // Merge the other document's /DR, creating a conflict
884 884 // map. mergeResources checks to make sure both objects
... ... @@ -1099,9 +1099,7 @@ QPDFAcroFormDocumentHelper::transformAnnotations(
1099 1099 auto apdict = ah.getAppearanceDictionary();
1100 1100 std::vector<QPDFObjectHandle> streams;
1101 1101 auto replace_stream = [](auto& dict, auto& key, auto& old) {
1102   - auto new_stream = old.copyStream();
1103   - dict.replaceKey(key, new_stream);
1104   - return new_stream;
  1102 + return dict.replaceKeyAndGet(key, old.copyStream());
1105 1103 };
1106 1104 if (apdict.isDictionary()) {
1107 1105 for (auto& ap : apdict.ditems()) {
... ...
libqpdf/QPDFEFStreamObjectHelper.cc
... ... @@ -28,8 +28,8 @@ QPDFEFStreamObjectHelper::setParam(
28 28 {
29 29 auto params = this->oh.getDict().getKey("/Params");
30 30 if (!params.isDictionary()) {
31   - params = QPDFObjectHandle::newDictionary();
32   - this->oh.getDict().replaceKey("/Params", params);
  31 + params = this->oh.getDict().replaceKeyAndGet(
  32 + "/Params", QPDFObjectHandle::newDictionary());
33 33 }
34 34 params.replaceKey(pkey, pval);
35 35 }
... ...
libqpdf/QPDFEmbeddedFileDocumentHelper.cc
... ... @@ -62,8 +62,8 @@ QPDFEmbeddedFileDocumentHelper::initEmbeddedFiles()
62 62 auto root = qpdf.getRoot();
63 63 auto names = root.getKey("/Names");
64 64 if (!names.isDictionary()) {
65   - names = QPDFObjectHandle::newDictionary();
66   - root.replaceKey("/Names", names);
  65 + names =
  66 + root.replaceKeyAndGet("/Names", QPDFObjectHandle::newDictionary());
67 67 }
68 68 auto embedded_files = names.getKey("/EmbeddedFiles");
69 69 if (!embedded_files.isDictionary()) {
... ...
libqpdf/QPDFJob.cc
... ... @@ -1958,8 +1958,8 @@ QPDFJob::doUnderOverlayForPage(
1958 1958 QPDFObjectHandle resources = dest_page.getAttribute("/Resources", true);
1959 1959 if (!resources.isDictionary()) {
1960 1960 QTC::TC("qpdf", "QPDFJob overlay page with no resources");
1961   - resources = QPDFObjectHandle::newDictionary();
1962   - dest_page.getObjectHandle().replaceKey("/Resources", resources);
  1961 + resources = dest_page.getObjectHandle().replaceKeyAndGet(
  1962 + "/Resources", QPDFObjectHandle::newDictionary());
1963 1963 }
1964 1964 for (std::vector<int>::iterator iter = pagenos[pageno].begin();
1965 1965 iter != pagenos[pageno].end();
... ...
libqpdf/QPDFObjectHandle.cc
... ... @@ -1172,8 +1172,7 @@ QPDFObjectHandle::mergeResources(
1172 1172 // subdictionaries just to get this shallow copy
1173 1173 // functionality.
1174 1174 QTC::TC("qpdf", "QPDFObjectHandle replace with copy");
1175   - this_val = this_val.shallowCopy();
1176   - replaceKey(rtype, this_val);
  1175 + this_val = replaceKeyAndGet(rtype, this_val.shallowCopy());
1177 1176 }
1178 1177 std::map<QPDFObjGen, std::string> og_to_name;
1179 1178 std::set<std::string> rnames;
... ...
libqpdf/QPDFPageObjectHelper.cc
... ... @@ -597,8 +597,7 @@ QPDFPageObjectHelper::removeUnreferencedResourcesHelper(
597 597 for (auto const& iter : to_filter) {
598 598 QPDFObjectHandle dict = resources.getKey(iter);
599 599 if (dict.isDictionary()) {
600   - dict = dict.shallowCopy();
601   - resources.replaceKey(iter, dict);
  600 + dict = resources.replaceKeyAndGet(iter, dict.shallowCopy());
602 601 rdicts.push_back(dict);
603 602 auto keys = dict.getKeys();
604 603 known_names.insert(keys.begin(), keys.end());
... ... @@ -1113,8 +1112,8 @@ QPDFPageObjectHelper::copyAnnotations(
1113 1112 afdh->addAndRenameFormFields(new_fields);
1114 1113 auto annots = this->oh.getKey("/Annots");
1115 1114 if (!annots.isArray()) {
1116   - annots = QPDFObjectHandle::newArray();
1117   - this->oh.replaceKey("/Annots", annots);
  1115 + annots =
  1116 + this->oh.replaceKeyAndGet("/Annots", QPDFObjectHandle::newArray());
1118 1117 }
1119 1118 for (auto const& annot : new_annots) {
1120 1119 annots.appendItem(annot);
... ...
libqpdf/QPDFWriter.cc
... ... @@ -1662,8 +1662,8 @@ QPDFWriter::unparseObject(
1662 1662 "qpdf",
1663 1663 "QPDFWriter create Extensions",
1664 1664 this->m->qdf_mode ? 0 : 1);
1665   - extensions = QPDFObjectHandle::newDictionary();
1666   - object.replaceKey("/Extensions", extensions);
  1665 + extensions = object.replaceKeyAndGet(
  1666 + "/Extensions", QPDFObjectHandle::newDictionary());
1667 1667 }
1668 1668 } else if (!have_extensions_other) {
1669 1669 // We have Extensions dictionary and don't want one.
... ... @@ -2387,8 +2387,7 @@ QPDFWriter::prepareFileForWrite()
2387 2387 if (oh.isIndirect()) {
2388 2388 QTC::TC("qpdf", "QPDFWriter make Extensions direct");
2389 2389 extensions_indirect = true;
2390   - oh = oh.shallowCopy();
2391   - root.replaceKey(key, oh);
  2390 + oh = root.replaceKeyAndGet(key, oh.shallowCopy());
2392 2391 }
2393 2392 if (oh.hasKey("/ADBE")) {
2394 2393 QPDFObjectHandle adbe = oh.getKey("/ADBE");
... ...