diff options
author | Jay Berkenbilt <ejb@ql.org> | 2021-02-22 23:44:13 +0100 |
---|---|---|
committer | Jay Berkenbilt <ejb@ql.org> | 2021-02-23 00:42:06 +0100 |
commit | 1f35ec9988eaf1ad3705655c434701d175c5b49f (patch) | |
tree | 0b60da6e5f35a5ee00d98f272f9ec1d59ef85694 /libqpdf/QPDFFormFieldObjectHelper.cc | |
parent | f02aa74bf5387c30e4ff6082beeb4b0d078b6294 (diff) | |
download | qpdf-1f35ec9988eaf1ad3705655c434701d175c5b49f.tar.zst |
Add methods for copying form fields
Diffstat (limited to 'libqpdf/QPDFFormFieldObjectHelper.cc')
-rw-r--r-- | libqpdf/QPDFFormFieldObjectHelper.cc | 23 |
1 files changed, 23 insertions, 0 deletions
diff --git a/libqpdf/QPDFFormFieldObjectHelper.cc b/libqpdf/QPDFFormFieldObjectHelper.cc index 97257c85..6933cb54 100644 --- a/libqpdf/QPDFFormFieldObjectHelper.cc +++ b/libqpdf/QPDFFormFieldObjectHelper.cc @@ -39,6 +39,29 @@ QPDFFormFieldObjectHelper::getParent() return this->oh.getKey("/Parent"); // may be null } +QPDFFormFieldObjectHelper +QPDFFormFieldObjectHelper::getTopLevelField(bool* is_different) +{ + auto top_field = this->oh; + std::set<QPDFObjGen> seen; + while (top_field.isDictionary() && + (! top_field.getKey("/Parent").isNull())) + { + top_field = top_field.getKey("/Parent"); + if (is_different) + { + *is_different = true; + } + auto og = top_field.getObjGen(); + if (seen.count(og)) + { + break; + } + seen.insert(og); + } + return QPDFFormFieldObjectHelper(top_field); +} + QPDFObjectHandle QPDFFormFieldObjectHelper::getInheritableFieldValue(std::string const& name) { |