aboutsummaryrefslogtreecommitdiffstats
path: root/libqpdf
diff options
context:
space:
mode:
authorm-holger <m-holger@kubitscheck.org>2022-01-21 15:09:06 +0100
committerJay Berkenbilt <jberkenbilt@users.noreply.github.com>2022-01-22 15:10:28 +0100
commit8593b9fdf74e68099a5fe2aa0b6d0b6320781a2d (patch)
treee280ab8d4af58b16f21a4e3fb05342c04e0e3d29 /libqpdf
parent370710657a7e7c771668107d1b6407fc350a2891 (diff)
downloadqpdf-8593b9fdf74e68099a5fe2aa0b6d0b6320781a2d.tar.zst
Add new convenience methods QPDFObjectHandle::isNameAndEquals, etc
Add methods isNameAndEquals, isDictionaryOfType, isStreamOfType
Diffstat (limited to 'libqpdf')
-rw-r--r--libqpdf/QPDFObjectHandle.cc28
-rw-r--r--libqpdf/qpdf-c.cc21
2 files changed, 49 insertions, 0 deletions
diff --git a/libqpdf/QPDFObjectHandle.cc b/libqpdf/QPDFObjectHandle.cc
index 1a8e3223..f2c77dca 100644
--- a/libqpdf/QPDFObjectHandle.cc
+++ b/libqpdf/QPDFObjectHandle.cc
@@ -497,6 +497,34 @@ QPDFObjectHandle::isScalar()
isOperator() || isInlineImage()));
}
+bool
+QPDFObjectHandle::isNameAndEquals(std::string const& name)
+{
+ return isName() && (getName() == name);
+}
+
+bool
+QPDFObjectHandle::isDictionaryOfType(std::string const& type,
+ std::string const& subtype)
+{
+ if (isDictionary() && getKey("/Type").isNameAndEquals(type))
+ {
+ return (subtype == "") ||
+ (hasKey("/Subtype") && getKey("/Subtype").isNameAndEquals(subtype));
+ }
+ else
+ {
+ return false;
+ }
+}
+
+bool
+QPDFObjectHandle::isStreamOfType(std::string const& type,
+ std::string const& subtype)
+{
+ return isStream() && getDict().isDictionaryOfType(type, subtype);
+}
+
// Bool accessors
bool
diff --git a/libqpdf/qpdf-c.cc b/libqpdf/qpdf-c.cc
index fb79407d..44950568 100644
--- a/libqpdf/qpdf-c.cc
+++ b/libqpdf/qpdf-c.cc
@@ -1148,6 +1148,27 @@ QPDF_BOOL qpdf_oh_is_number(qpdf_data qpdf, qpdf_oh oh)
});
}
+QPDF_BOOL qpdf_oh_is_name_and_equals(
+ qpdf_data qpdf, qpdf_oh oh, char const* name)
+{
+ return do_with_oh<QPDF_BOOL>(
+ qpdf, oh, return_false, [name](QPDFObjectHandle& o) {
+ QTC::TC("qpdf", "qpdf-c called qpdf_oh_is_name_and_equals");
+ return o.isNameAndEquals(name);
+ });
+}
+
+QPDF_BOOL qpdf_oh_is_dictionary_of_type(
+ qpdf_data qpdf, qpdf_oh oh, char const* type, char const* subtype)
+{
+ auto stype = (subtype == nullptr) ? "" : subtype;
+ return do_with_oh<QPDF_BOOL>(
+ qpdf, oh, return_false, [type, stype](QPDFObjectHandle& o) {
+ QTC::TC("qpdf", "qpdf-c called qpdf_oh_is_dictionary_of_type");
+ return o.isDictionaryOfType(type, stype);
+ });
+}
+
qpdf_object_type_e qpdf_oh_get_type_code(qpdf_data qpdf, qpdf_oh oh)
{
return do_with_oh<qpdf_object_type_e>(