Commit 07db3200cb0ef058b8a66ece8d9757adfba49fd1
Committed by
Jay Berkenbilt
1 parent
710d2e54
Remove some if statements and simplify some boolean expressions
Use QPDFObjectHandle::isNameAndEquals, isDictionaryOfType and isStreamOfType.
Showing
12 changed files
with
38 additions
and
103 deletions
examples/pdf-create.cc
| ... | ... | @@ -290,15 +290,14 @@ static void check(char const* filename, |
| 290 | 290 | QPDFObjectHandle color_space = image_dict.getKey("/ColorSpace"); |
| 291 | 291 | QPDFObjectHandle filter = image_dict.getKey("/Filter"); |
| 292 | 292 | bool this_errors = false; |
| 293 | - if (! (filter.isName() && (filter.getName() == desired_filter))) | |
| 293 | + if (! filter.isNameAndEquals(desired_filter)) | |
| 294 | 294 | { |
| 295 | 295 | this_errors = errors = true; |
| 296 | 296 | std::cout << "page " << pageno << ": expected filter " |
| 297 | 297 | << desired_filter << "; actual filter = " |
| 298 | 298 | << filter.unparse() << std::endl; |
| 299 | 299 | } |
| 300 | - if (! (color_space.isName() && | |
| 301 | - (color_space.getName() == desired_color_space))) | |
| 300 | + if (! color_space.isNameAndEquals(desired_color_space)) | |
| 302 | 301 | { |
| 303 | 302 | this_errors = errors = true; |
| 304 | 303 | std::cout << "page " << pageno << ": expected color space " | ... | ... |
examples/pdf-invert-images.cc
| ... | ... | @@ -167,9 +167,8 @@ int main(int argc, char* argv[]) |
| 167 | 167 | // keys to determine the image type. |
| 168 | 168 | if (image.pipeStreamData(0, qpdf_ef_compress, |
| 169 | 169 | qpdf_dl_all) && |
| 170 | - color_space.isName() && | |
| 170 | + color_space.isNameAndEquals("/DeviceGray") && | |
| 171 | 171 | bits_per_component.isInteger() && |
| 172 | - (color_space.getName() == "/DeviceGray") && | |
| 173 | 172 | (bits_per_component.getIntValue() == 8)) |
| 174 | 173 | { |
| 175 | 174 | inv->registerImage(image, p); | ... | ... |
libqpdf/QPDF.cc
| ... | ... | @@ -1100,10 +1100,7 @@ QPDF::read_xrefStream(qpdf_offset_t xref_offset) |
| 1100 | 1100 | { |
| 1101 | 1101 | // ignore -- report error below |
| 1102 | 1102 | } |
| 1103 | - if (xref_obj.isInitialized() && | |
| 1104 | - xref_obj.isStream() && | |
| 1105 | - xref_obj.getDict().getKey("/Type").isName() && | |
| 1106 | - xref_obj.getDict().getKey("/Type").getName() == "/XRef") | |
| 1103 | + if (xref_obj.isStreamOfType("/XRef")) | |
| 1107 | 1104 | { |
| 1108 | 1105 | QTC::TC("qpdf", "QPDF found xref stream"); |
| 1109 | 1106 | found = true; |
| ... | ... | @@ -2202,8 +2199,7 @@ QPDF::resolveObjectsInStream(int obj_stream_number) |
| 2202 | 2199 | this->m->obj_cache[stream_og].end_after_space; |
| 2203 | 2200 | |
| 2204 | 2201 | QPDFObjectHandle dict = obj_stream.getDict(); |
| 2205 | - if (! (dict.getKey("/Type").isName() && | |
| 2206 | - dict.getKey("/Type").getName() == "/ObjStm")) | |
| 2202 | + if (! dict.isDictionaryOfType("/ObjStm")) | |
| 2207 | 2203 | { |
| 2208 | 2204 | QTC::TC("qpdf", "QPDF ERR object stream with wrong type"); |
| 2209 | 2205 | warn(QPDFExc(qpdf_e_damaged_pdf, this->m->file->getName(), |
| ... | ... | @@ -2849,13 +2845,10 @@ QPDF::getCompressibleObjGens() |
| 2849 | 2845 | { |
| 2850 | 2846 | QTC::TC("qpdf", "QPDF exclude encryption dictionary"); |
| 2851 | 2847 | } |
| 2852 | - else if ((! obj.isStream()) && | |
| 2853 | - (! (obj.isDictionary() && | |
| 2848 | + else if (! (obj.isStream() || | |
| 2849 | + (obj.isDictionaryOfType("/Sig") && | |
| 2854 | 2850 | obj.hasKey("/ByteRange") && |
| 2855 | - obj.hasKey("/Contents") && | |
| 2856 | - obj.hasKey("/Type") && | |
| 2857 | - obj.getKey("/Type").isName() && | |
| 2858 | - obj.getKey("/Type").getName() == "/Sig"))) | |
| 2851 | + obj.hasKey("/Contents")))) | |
| 2859 | 2852 | { |
| 2860 | 2853 | result.push_back(og); |
| 2861 | 2854 | } | ... | ... |
libqpdf/QPDFAcroFormDocumentHelper.cc
| ... | ... | @@ -280,9 +280,7 @@ QPDFAcroFormDocumentHelper::getFieldForAnnotation(QPDFAnnotationObjectHelper h) |
| 280 | 280 | { |
| 281 | 281 | QPDFObjectHandle oh = h.getObjectHandle(); |
| 282 | 282 | QPDFFormFieldObjectHelper result(QPDFObjectHandle::newNull()); |
| 283 | - if (! (oh.isDictionary() && | |
| 284 | - oh.getKey("/Subtype").isName() && | |
| 285 | - (oh.getKey("/Subtype").getName() == "/Widget"))) | |
| 283 | + if (! oh.isDictionaryOfType("", "/Widget")) | |
| 286 | 284 | { |
| 287 | 285 | return result; |
| 288 | 286 | } | ... | ... |
libqpdf/QPDFFileSpecObjectHelper.cc
| ... | ... | @@ -15,8 +15,7 @@ QPDFFileSpecObjectHelper::QPDFFileSpecObjectHelper( |
| 15 | 15 | oh.warnIfPossible("Embedded file object is not a dictionary"); |
| 16 | 16 | return; |
| 17 | 17 | } |
| 18 | - auto type = oh.getKey("/Type"); | |
| 19 | - if (! (type.isName() && (type.getName() == "/Filespec"))) | |
| 18 | + if (! oh.isDictionaryOfType("/Filespec")) | |
| 20 | 19 | { |
| 21 | 20 | oh.warnIfPossible("Embedded file object's type is not /Filespec"); |
| 22 | 21 | } | ... | ... |
libqpdf/QPDFObjectHandle.cc
| ... | ... | @@ -1055,23 +1055,9 @@ QPDFObjectHandle::getDictAsMap() |
| 1055 | 1055 | bool |
| 1056 | 1056 | QPDFObjectHandle::isOrHasName(std::string const& value) |
| 1057 | 1057 | { |
| 1058 | - if (isName() && (getName() == value)) | |
| 1059 | - { | |
| 1060 | - return true; | |
| 1061 | - } | |
| 1062 | - else if (isArray()) | |
| 1063 | - { | |
| 1064 | - int n = getArrayNItems(); | |
| 1065 | - for (int i = 0; i < n; ++i) | |
| 1066 | - { | |
| 1067 | - QPDFObjectHandle item = getArrayItem(0); | |
| 1068 | - if (item.isName() && (item.getName() == value)) | |
| 1069 | - { | |
| 1070 | - return true; | |
| 1071 | - } | |
| 1072 | - } | |
| 1073 | - } | |
| 1074 | - return false; | |
| 1058 | + return isNameAndEquals(value) || | |
| 1059 | + (isArray() && (getArrayNItems() > 0) && | |
| 1060 | + getArrayItem(0).isNameAndEquals(value)); | |
| 1075 | 1061 | } |
| 1076 | 1062 | |
| 1077 | 1063 | void |
| ... | ... | @@ -2520,8 +2506,7 @@ QPDFObjectHandle::parseInternal(PointerHolder<InputSource> input, |
| 2520 | 2506 | } |
| 2521 | 2507 | if (!contents_string.empty() && |
| 2522 | 2508 | dict.count("/Type") && |
| 2523 | - dict["/Type"].isName() && | |
| 2524 | - dict["/Type"].getName() == "/Sig" && | |
| 2509 | + dict["/Type"].isNameAndEquals("/Sig") && | |
| 2525 | 2510 | dict.count("/ByteRange") && |
| 2526 | 2511 | dict.count("/Contents") && |
| 2527 | 2512 | dict["/Contents"].isString()) |
| ... | ... | @@ -3237,7 +3222,7 @@ QPDFObjectHandle::isPageObject() |
| 3237 | 3222 | if (this->hasKey("/Type")) |
| 3238 | 3223 | { |
| 3239 | 3224 | QPDFObjectHandle type = this->getKey("/Type"); |
| 3240 | - if (type.isName() && (type.getName() == "/Page")) | |
| 3225 | + if (type.isNameAndEquals("/Page")) | |
| 3241 | 3226 | { |
| 3242 | 3227 | return true; |
| 3243 | 3228 | } |
| ... | ... | @@ -3263,39 +3248,22 @@ QPDFObjectHandle::isPagesObject() |
| 3263 | 3248 | } |
| 3264 | 3249 | // getAllPages repairs /Type when traversing the page tree. |
| 3265 | 3250 | getOwningQPDF()->getAllPages(); |
| 3266 | - return (this->isDictionary() && | |
| 3267 | - this->hasKey("/Type") && | |
| 3268 | - this->getKey("/Type").isName() && | |
| 3269 | - this->getKey("/Type").getName() == "/Pages"); | |
| 3251 | + return isDictionaryOfType("/Pages"); | |
| 3270 | 3252 | } |
| 3271 | 3253 | |
| 3272 | 3254 | bool |
| 3273 | 3255 | QPDFObjectHandle::isFormXObject() |
| 3274 | 3256 | { |
| 3275 | - if (! this->isStream()) | |
| 3276 | - { | |
| 3277 | - return false; | |
| 3278 | - } | |
| 3279 | - QPDFObjectHandle dict = this->getDict(); | |
| 3280 | - return (dict.getKey("/Type").isName() && | |
| 3281 | - ("/XObject" == dict.getKey("/Type").getName()) && | |
| 3282 | - dict.getKey("/Subtype").isName() && | |
| 3283 | - ("/Form" == dict.getKey("/Subtype").getName())); | |
| 3257 | + return isStreamOfType("/XObject", "/Form"); | |
| 3284 | 3258 | } |
| 3285 | 3259 | |
| 3286 | 3260 | bool |
| 3287 | 3261 | QPDFObjectHandle::isImage(bool exclude_imagemask) |
| 3288 | 3262 | { |
| 3289 | - if (! this->isStream()) | |
| 3290 | - { | |
| 3291 | - return false; | |
| 3292 | - } | |
| 3293 | - QPDFObjectHandle dict = this->getDict(); | |
| 3294 | - return (dict.hasKey("/Subtype") && | |
| 3295 | - (dict.getKey("/Subtype").getName() == "/Image") && | |
| 3263 | + return (isStreamOfType("", "/Image") && | |
| 3296 | 3264 | ((! exclude_imagemask) || |
| 3297 | - (! (dict.getKey("/ImageMask").isBool() && | |
| 3298 | - dict.getKey("/ImageMask").getBoolValue())))); | |
| 3265 | + (! (getDict().getKey("/ImageMask").isBool() && | |
| 3266 | + getDict().getKey("/ImageMask").getBoolValue())))); | |
| 3299 | 3267 | } |
| 3300 | 3268 | |
| 3301 | 3269 | void | ... | ... |
libqpdf/QPDFPageObjectHelper.cc
| ... | ... | @@ -558,10 +558,7 @@ QPDFPageObjectHelper::getAnnotations(std::string const& only_subtype) |
| 558 | 558 | for (int i = 0; i < nannots; ++i) |
| 559 | 559 | { |
| 560 | 560 | QPDFObjectHandle annot = annots.getArrayItem(i); |
| 561 | - if (only_subtype.empty() || | |
| 562 | - (annot.isDictionary() && | |
| 563 | - annot.getKey("/Subtype").isName() && | |
| 564 | - (only_subtype == annot.getKey("/Subtype").getName()))) | |
| 561 | + if (annot.isDictionaryOfType("", only_subtype)) | |
| 565 | 562 | { |
| 566 | 563 | result.push_back(QPDFAnnotationObjectHelper(annot)); |
| 567 | 564 | } | ... | ... |
libqpdf/QPDFWriter.cc
| ... | ... | @@ -1241,9 +1241,7 @@ QPDFWriter::enqueueObject(QPDFObjectHandle object) |
| 1241 | 1241 | " another file."); |
| 1242 | 1242 | } |
| 1243 | 1243 | |
| 1244 | - if (this->m->qdf_mode && | |
| 1245 | - object.isStream() && object.getDict().getKey("/Type").isName() && | |
| 1246 | - (object.getDict().getKey("/Type").getName() == "/XRef")) | |
| 1244 | + if (this->m->qdf_mode && object.isStreamOfType("/XRef")) | |
| 1247 | 1245 | { |
| 1248 | 1246 | // As a special case, do not output any extraneous XRef |
| 1249 | 1247 | // streams in QDF mode. Doing so will confuse fix-qdf, |
| ... | ... | @@ -1474,8 +1472,7 @@ QPDFWriter::willFilterStream(QPDFObjectHandle stream, |
| 1474 | 1472 | QPDFObjGen old_og = stream.getObjGen(); |
| 1475 | 1473 | QPDFObjectHandle stream_dict = stream.getDict(); |
| 1476 | 1474 | |
| 1477 | - if (stream_dict.getKey("/Type").isName() && | |
| 1478 | - (stream_dict.getKey("/Type").getName() == "/Metadata")) | |
| 1475 | + if (stream_dict.isDictionaryOfType("/Metadata")) | |
| 1479 | 1476 | { |
| 1480 | 1477 | is_metadata = true; |
| 1481 | 1478 | } |
| ... | ... | @@ -1691,11 +1688,8 @@ QPDFWriter::unparseObject(QPDFObjectHandle object, int level, |
| 1691 | 1688 | QTC::TC("qpdf", "QPDFWriter preserve Extensions"); |
| 1692 | 1689 | QPDFObjectHandle adbe = extensions.getKey("/ADBE"); |
| 1693 | 1690 | if (adbe.isDictionary() && |
| 1694 | - adbe.hasKey("/BaseVersion") && | |
| 1695 | - adbe.getKey("/BaseVersion").isName() && | |
| 1696 | - (adbe.getKey("/BaseVersion").getName() == | |
| 1697 | - "/" + this->m->final_pdf_version) && | |
| 1698 | - adbe.hasKey("/ExtensionLevel") && | |
| 1691 | + adbe.getKey("/BaseVersion").isNameAndEquals( | |
| 1692 | + "/" + this->m->final_pdf_version) && | |
| 1699 | 1693 | adbe.getKey("/ExtensionLevel").isInteger() && |
| 1700 | 1694 | (adbe.getKey("/ExtensionLevel").getIntValue() == |
| 1701 | 1695 | this->m->final_extension_level)) |
| ... | ... | @@ -1764,7 +1758,7 @@ QPDFWriter::unparseObject(QPDFObjectHandle object, int level, |
| 1764 | 1758 | for (int i = 0; i < filter.getArrayNItems(); ++i) |
| 1765 | 1759 | { |
| 1766 | 1760 | QPDFObjectHandle item = filter.getArrayItem(i); |
| 1767 | - if (item.isName() && item.getName() == "/Crypt") | |
| 1761 | + if (item.isNameAndEquals("/Crypt")) | |
| 1768 | 1762 | { |
| 1769 | 1763 | idx = i; |
| 1770 | 1764 | break; |
| ... | ... | @@ -1802,9 +1796,7 @@ QPDFWriter::unparseObject(QPDFObjectHandle object, int level, |
| 1802 | 1796 | writeString(QPDF_Name::normalizeName(key)); |
| 1803 | 1797 | writeString(" "); |
| 1804 | 1798 | if (key == "/Contents" && |
| 1805 | - object.hasKey("/Type") && | |
| 1806 | - object.getKey("/Type").isName() && | |
| 1807 | - object.getKey("/Type").getName() == "/Sig" && | |
| 1799 | + object.isDictionaryOfType("/Sig") && | |
| 1808 | 1800 | object.hasKey("/ByteRange")) |
| 1809 | 1801 | { |
| 1810 | 1802 | QTC::TC("qpdf", "QPDFWriter no encryption sig contents"); | ... | ... |
libqpdf/QPDF_Stream.cc
| ... | ... | @@ -35,10 +35,8 @@ class SF_Crypt: public QPDFStreamFilter |
| 35 | 35 | for (auto const& key: decode_parms.getKeys()) |
| 36 | 36 | { |
| 37 | 37 | if (((key == "/Type") || (key == "/Name")) && |
| 38 | - (decode_parms.getKey("/Type").isNull() || | |
| 39 | - (decode_parms.getKey("/Type").isName() && | |
| 40 | - (decode_parms.getKey("/Type").getName() == | |
| 41 | - "/CryptFilterDecodeParms")))) | |
| 38 | + ((! decode_parms.hasKey("/Type")) || | |
| 39 | + decode_parms.isDictionaryOfType("/CryptFilterDecodeParms"))) | |
| 42 | 40 | { |
| 43 | 41 | // we handle this in decryptStream |
| 44 | 42 | } | ... | ... |
libqpdf/QPDF_encryption.cc
| ... | ... | @@ -1262,9 +1262,7 @@ QPDF::decryptStream(PointerHolder<EncryptionParameters> encp, |
| 1262 | 1262 | { |
| 1263 | 1263 | QPDFObjectHandle decode_parms = |
| 1264 | 1264 | stream_dict.getKey("/DecodeParms"); |
| 1265 | - if (decode_parms.getKey("/Type").isName() && | |
| 1266 | - (decode_parms.getKey("/Type").getName() == | |
| 1267 | - "/CryptFilterDecodeParms")) | |
| 1265 | + if (decode_parms.isDictionaryOfType("/CryptFilterDecodeParms")) | |
| 1268 | 1266 | { |
| 1269 | 1267 | QTC::TC("qpdf", "QPDF_encryption stream crypt filter"); |
| 1270 | 1268 | method = interpretCF(encp, decode_parms.getKey("/Name")); |
| ... | ... | @@ -1280,8 +1278,7 @@ QPDF::decryptStream(PointerHolder<EncryptionParameters> encp, |
| 1280 | 1278 | { |
| 1281 | 1279 | for (int i = 0; i < filter.getArrayNItems(); ++i) |
| 1282 | 1280 | { |
| 1283 | - if (filter.getArrayItem(i).isName() && | |
| 1284 | - (filter.getArrayItem(i).getName() == "/Crypt")) | |
| 1281 | + if (filter.getArrayItem(i).isNameAndEquals("/Crypt")) | |
| 1285 | 1282 | { |
| 1286 | 1283 | QPDFObjectHandle crypt_params = |
| 1287 | 1284 | decode.getArrayItem(i); | ... | ... |
libqpdf/QPDF_optimization.cc
| ... | ... | @@ -382,17 +382,13 @@ QPDF::updateObjectMapsInternal( |
| 382 | 382 | |
| 383 | 383 | bool is_page_node = false; |
| 384 | 384 | |
| 385 | - if (oh.isDictionary() && oh.hasKey("/Type")) | |
| 385 | + if (oh.isDictionaryOfType("/Page")) | |
| 386 | 386 | { |
| 387 | - std::string type = oh.getKey("/Type").getName(); | |
| 388 | - if (type == "/Page") | |
| 389 | - { | |
| 390 | - is_page_node = true; | |
| 391 | - if (! top) | |
| 392 | - { | |
| 393 | - return; | |
| 394 | - } | |
| 395 | - } | |
| 387 | + is_page_node = true; | |
| 388 | + if (! top) | |
| 389 | + { | |
| 390 | + return; | |
| 391 | + } | |
| 396 | 392 | } |
| 397 | 393 | |
| 398 | 394 | if (oh.isIndirect()) | ... | ... |
libqpdf/QPDF_pages.cc
| ... | ... | @@ -139,8 +139,7 @@ QPDF::getAllPagesInternal(QPDFObjectHandle cur_node, |
| 139 | 139 | result.push_back(cur_node); |
| 140 | 140 | } |
| 141 | 141 | |
| 142 | - QPDFObjectHandle type_key = cur_node.getKey("/Type"); | |
| 143 | - if (! (type_key.isName() && (type_key.getName() == wanted_type))) | |
| 142 | + if (! cur_node.isDictionaryOfType(wanted_type)) | |
| 144 | 143 | { |
| 145 | 144 | warn(QPDFExc(qpdf_e_damaged_pdf, this->m->file->getName(), |
| 146 | 145 | "page tree node", | ... | ... |