Use fluent appendItem

This commit is contained in:
Jay Berkenbilt 2022-04-29 20:41:16 -04:00
parent ab9d557cb0
commit 2878c186bf
4 changed files with 41 additions and 40 deletions

View File

@ -208,9 +208,8 @@ NNTreeIterator::resetLimits(
} }
} }
if (first.isInitialized() && last.isInitialized()) { if (first.isInitialized() && last.isInitialized()) {
auto limits = QPDFObjectHandle::newArray(); auto limits =
limits.appendItem(first); QPDFObjectHandle::newArray().appendItem(first).appendItem(last);
limits.appendItem(last);
auto olimits = node.getKey("/Limits"); auto olimits = node.getKey("/Limits");
if (olimits.isArray() && (olimits.getArrayNItems() == 2)) { if (olimits.isArray() && (olimits.getArrayNItems() == 2)) {
auto ofirst = olimits.getArrayItem(0); auto ofirst = olimits.getArrayItem(0);

View File

@ -62,13 +62,13 @@ test_bsearch()
auto mk = [&q](std::vector<int> const& v) { auto mk = [&q](std::vector<int> const& v) {
auto nums = QPDFObjectHandle::newArray(); auto nums = QPDFObjectHandle::newArray();
for (auto i : v) { for (auto i : v) {
nums.appendItem(QPDFObjectHandle::newInteger(i)); nums.appendItem(QPDFObjectHandle::newInteger(i))
nums.appendItem(QPDFObjectHandle::newString( .appendItem(QPDFObjectHandle::newString(
"-" + QUtil::int_to_string(i) + "-")); "-" + QUtil::int_to_string(i) + "-"));
} }
auto limits = QPDFObjectHandle::newArray(); auto limits = QPDFObjectHandle::newArray();
limits.appendItem(QPDFObjectHandle::newInteger(v.at(0))); limits.appendItem(QPDFObjectHandle::newInteger(v.at(0)))
limits.appendItem(QPDFObjectHandle::newInteger(v.at(v.size() - 1))); .appendItem(QPDFObjectHandle::newInteger(v.at(v.size() - 1)));
auto node = q.makeIndirectObject(QPDFObjectHandle::newDictionary()); auto node = q.makeIndirectObject(QPDFObjectHandle::newDictionary());
node.replaceKey("/Nums", nums).replaceKey("/Limits", limits); node.replaceKey("/Nums", nums).replaceKey("/Limits", limits);
return node; return node;
@ -168,8 +168,8 @@ test_depth()
int val = int val =
(((((i1 * NITEMS) + i2) * NITEMS) + i3) * NITEMS) + i4; (((((i1 * NITEMS) + i2) * NITEMS) + i3) * NITEMS) + i4;
std::string str = QUtil::int_to_string(10 * val, 6); std::string str = QUtil::int_to_string(10 * val, 6);
items.appendItem(QPDFObjectHandle::newString(str)); items.appendItem(QPDFObjectHandle::newString(str))
items.appendItem(QPDFObjectHandle::newString("val " + str)); .appendItem(QPDFObjectHandle::newString("val " + str));
if (i4 == 0) { if (i4 == 0) {
first = str; first = str;
} else if (i4 == NITEMS - 1) { } else if (i4 == NITEMS - 1) {
@ -178,21 +178,23 @@ test_depth()
} }
auto limits = QPDFObjectHandle::newArray(); auto limits = QPDFObjectHandle::newArray();
n3.replaceKey("/Limits", limits); n3.replaceKey("/Limits", limits);
limits.appendItem(QPDFObjectHandle::newString(first)); limits.appendItem(QPDFObjectHandle::newString(first))
limits.appendItem(QPDFObjectHandle::newString(last)); .appendItem(QPDFObjectHandle::newString(last));
} }
auto limits = QPDFObjectHandle::newArray(); auto limits = QPDFObjectHandle::newArray();
n2.replaceKey("/Limits", limits); n2.replaceKey("/Limits", limits);
limits.appendItem( limits
k2.getArrayItem(0).getKey("/Limits").getArrayItem(0)); .appendItem(
limits.appendItem( k2.getArrayItem(0).getKey("/Limits").getArrayItem(0))
k2.getArrayItem(NITEMS - 1).getKey("/Limits").getArrayItem(1)); .appendItem(k2.getArrayItem(NITEMS - 1)
.getKey("/Limits")
.getArrayItem(1));
} }
auto limits = QPDFObjectHandle::newArray(); auto limits = QPDFObjectHandle::newArray();
n1.replaceKey("/Limits", limits); n1.replaceKey("/Limits", limits);
limits.appendItem(k1.getArrayItem(0).getKey("/Limits").getArrayItem(0)); limits.appendItem(k1.getArrayItem(0).getKey("/Limits").getArrayItem(0))
limits.appendItem( .appendItem(
k1.getArrayItem(NITEMS - 1).getKey("/Limits").getArrayItem(1)); k1.getArrayItem(NITEMS - 1).getKey("/Limits").getArrayItem(1));
} }
QPDFNameTreeObjectHelper nh(n0, q); QPDFNameTreeObjectHelper nh(n0, q);

View File

@ -912,10 +912,8 @@ test_24(QPDF& pdf, char const* arg2)
QPDFObjectHandle array1 = QPDFObjectHandle::newArray(); QPDFObjectHandle array1 = QPDFObjectHandle::newArray();
QPDFObjectHandle array2 = QPDFObjectHandle::newArray(); QPDFObjectHandle array2 = QPDFObjectHandle::newArray();
array1.appendItem(res2); array1.appendItem(res2).appendItem(QPDFObjectHandle::newInteger(1));
array1.appendItem(QPDFObjectHandle::newInteger(1)); array2.appendItem(res1).appendItem(QPDFObjectHandle::newInteger(2));
array2.appendItem(res1);
array2.appendItem(QPDFObjectHandle::newInteger(2));
// Make sure trying to ask questions about a reserved object // Make sure trying to ask questions about a reserved object
// doesn't break it. // doesn't break it.
if (res1.isArray()) { if (res1.isArray()) {
@ -1087,12 +1085,11 @@ test_27(QPDF& pdf, char const* arg2)
pdf.getTrailer() pdf.getTrailer()
.replaceKey("/QTest", pdf.copyForeignObject(qtest)) .replaceKey("/QTest", pdf.copyForeignObject(qtest))
.replaceKey("/QTest2", QPDFObjectHandle::newArray()); .replaceKey("/QTest2", QPDFObjectHandle::newArray());
pdf.getTrailer().getKey("/QTest2").appendItem( pdf.getTrailer()
pdf.copyForeignObject(s1)); .getKey("/QTest2")
pdf.getTrailer().getKey("/QTest2").appendItem( .appendItem(pdf.copyForeignObject(s1))
pdf.copyForeignObject(s2)); .appendItem(pdf.copyForeignObject(s2))
pdf.getTrailer().getKey("/QTest2").appendItem( .appendItem(pdf.copyForeignObject(s3));
pdf.copyForeignObject(s3));
} }
QPDFWriter w(pdf, "a.pdf"); QPDFWriter w(pdf, "a.pdf");
@ -2099,10 +2096,13 @@ test_55(QPDF& pdf, char const* arg2)
std::vector<QPDFPageObjectHelper> pages = std::vector<QPDFPageObjectHelper> pages =
QPDFPageDocumentHelper(pdf).getAllPages(); QPDFPageDocumentHelper(pdf).getAllPages();
QPDFObjectHandle qtest = QPDFObjectHandle::newArray(); QPDFObjectHandle qtest = QPDFObjectHandle::newArray();
for (std::vector<QPDFPageObjectHelper>::iterator iter = pages.begin(); for (auto& ph: pages) {
iter != pages.end(); // Note: using fluent appendItem causes a test failure with
++iter) { // MSVC 19.31.31107, which appears to evaluate the argument to
QPDFPageObjectHelper& ph(*iter); // the second appendItem before the first. Since these
// arguments have the side effect of creating objects, the
// object numbers end up being different even though the
// resulting file is semantically correct.
qtest.appendItem(ph.getFormXObjectForPage()); qtest.appendItem(ph.getFormXObjectForPage());
qtest.appendItem(ph.getFormXObjectForPage(false)); qtest.appendItem(ph.getFormXObjectForPage(false));
} }

View File

@ -199,18 +199,18 @@ create_pdf(char const* filename)
QPDFObjectHandle procset = QPDFObjectHandle procset =
pdf.makeIndirectObject(QPDFObjectHandle::newArray()); pdf.makeIndirectObject(QPDFObjectHandle::newArray());
procset.appendItem(newName("/PDF")); procset.appendItem(newName("/PDF"))
procset.appendItem(newName("/Text")); .appendItem(newName("/Text"))
procset.appendItem(newName("/ImageC")); .appendItem(newName("/ImageC"));
QPDFObjectHandle rfont = QPDFObjectHandle::newDictionary(); QPDFObjectHandle rfont = QPDFObjectHandle::newDictionary();
rfont.replaceKey("/F1", font); rfont.replaceKey("/F1", font);
QPDFObjectHandle mediabox = QPDFObjectHandle::newArray(); QPDFObjectHandle mediabox = QPDFObjectHandle::newArray();
mediabox.appendItem(newInteger(0)); mediabox.appendItem(newInteger(0))
mediabox.appendItem(newInteger(0)); .appendItem(newInteger(0))
mediabox.appendItem(newInteger(612)); .appendItem(newInteger(612))
mediabox.appendItem(newInteger(792)); .appendItem(newInteger(792));
QPDFPageDocumentHelper dh(pdf); QPDFPageDocumentHelper dh(pdf);
for (size_t pageno = 1; pageno <= npages; ++pageno) { for (size_t pageno = 1; pageno <= npages; ++pageno) {