diff options
Diffstat (limited to 'libqpdf/QPDFFormFieldObjectHelper.cc')
-rw-r--r-- | libqpdf/QPDFFormFieldObjectHelper.cc | 190 |
1 files changed, 190 insertions, 0 deletions
diff --git a/libqpdf/QPDFFormFieldObjectHelper.cc b/libqpdf/QPDFFormFieldObjectHelper.cc new file mode 100644 index 00000000..e6445af3 --- /dev/null +++ b/libqpdf/QPDFFormFieldObjectHelper.cc @@ -0,0 +1,190 @@ +#include <qpdf/QPDFFormFieldObjectHelper.hh> +#include <qpdf/QTC.hh> + +QPDFFormFieldObjectHelper::Members::~Members() +{ +} + +QPDFFormFieldObjectHelper::Members::Members() +{ +} + +QPDFFormFieldObjectHelper::QPDFFormFieldObjectHelper(QPDFObjectHandle oh) : + QPDFObjectHelper(oh), + m(new Members()) +{ +} + +QPDFFormFieldObjectHelper::QPDFFormFieldObjectHelper() : + QPDFObjectHelper(QPDFObjectHandle::newNull()), + m(new Members()) +{ +} + +bool +QPDFFormFieldObjectHelper::isNull() +{ + return this->oh.isNull(); +} + +QPDFFormFieldObjectHelper +QPDFFormFieldObjectHelper::getParent() +{ + return this->oh.getKey("/Parent"); // may be null +} + +QPDFObjectHandle +QPDFFormFieldObjectHelper::getInheritableFieldValue(std::string const& name) +{ + QPDFObjectHandle node = this->oh; + QPDFObjectHandle result(node.getKey(name)); + std::set<QPDFObjGen> seen; + while (result.isNull() && node.hasKey("/Parent")) + { + seen.insert(node.getObjGen()); + node = node.getKey("/Parent"); + if (seen.count(node.getObjGen())) + { + break; + } + result = node.getKey(name); + if (! result.isNull()) + { + QTC::TC("qpdf", "QPDFFormFieldObjectHelper non-trivial inheritance"); + } + } + return result; +} + +std::string +QPDFFormFieldObjectHelper::getInheritableFieldValueAsString( + std::string const& name) +{ + QPDFObjectHandle fv = getInheritableFieldValue(name); + std::string result; + if (fv.isString()) + { + result = fv.getUTF8Value(); + } + return result; +} + +std::string +QPDFFormFieldObjectHelper::getInheritableFieldValueAsName( + std::string const& name) +{ + QPDFObjectHandle fv = getInheritableFieldValue(name); + std::string result; + if (fv.isName()) + { + result = fv.getName(); + } + return result; +} + +std::string +QPDFFormFieldObjectHelper::getFieldType() +{ + return getInheritableFieldValueAsName("/FT"); +} + +std::string +QPDFFormFieldObjectHelper::getFullyQualifiedName() +{ + std::string result; + QPDFObjectHandle node = this->oh; + std::set<QPDFObjGen> seen; + while ((! node.isNull()) && (seen.count(node.getObjGen()) == 0)) + { + if (node.getKey("/T").isString()) + { + if (! result.empty()) + { + QTC::TC("qpdf", "QPDFFormFieldObjectHelper non-trivial qualified name"); + result = "." + result; + } + result = node.getKey("/T").getUTF8Value() + result; + } + seen.insert(node.getObjGen()); + node = node.getKey("/Parent"); + } + return result; +} + +std::string +QPDFFormFieldObjectHelper::getPartialName() +{ + std::string result; + if (this->oh.getKey("/T").isString()) + { + result = this->oh.getKey("/T").getUTF8Value(); + } + return result; +} + +std::string +QPDFFormFieldObjectHelper::getAlternativeName() +{ + if (this->oh.getKey("/TU").isString()) + { + QTC::TC("qpdf", "QPDFFormFieldObjectHelper TU present"); + return this->oh.getKey("/TU").getUTF8Value(); + } + QTC::TC("qpdf", "QPDFFormFieldObjectHelper TU absent"); + return getFullyQualifiedName(); +} + +std::string +QPDFFormFieldObjectHelper::getMappingName() +{ + if (this->oh.getKey("/TM").isString()) + { + QTC::TC("qpdf", "QPDFFormFieldObjectHelper TM present"); + return this->oh.getKey("/TM").getUTF8Value(); + } + QTC::TC("qpdf", "QPDFFormFieldObjectHelper TM absent"); + return getAlternativeName(); +} + +QPDFObjectHandle +QPDFFormFieldObjectHelper::getValue() +{ + return getInheritableFieldValue("/V"); +} + +std::string +QPDFFormFieldObjectHelper::getValueAsString() +{ + return getInheritableFieldValueAsString("/V"); +} + +QPDFObjectHandle +QPDFFormFieldObjectHelper::getDefaultValue() +{ + return getInheritableFieldValue("/DV"); +} + +std::string +QPDFFormFieldObjectHelper::getDefaultValueAsString() +{ + return getInheritableFieldValueAsString("/DV"); +} + +std::string +QPDFFormFieldObjectHelper::getDefaultAppearance() +{ + return getInheritableFieldValueAsString("/DA"); +} + +int +QPDFFormFieldObjectHelper::getQuadding() +{ + int result = 0; + QPDFObjectHandle fv = getInheritableFieldValue("/Q"); + if (fv.isInteger()) + { + QTC::TC("qpdf", "QPDFFormFieldObjectHelper Q present"); + result = static_cast<int>(fv.getIntValue()); + } + return result; +} |