aboutsummaryrefslogtreecommitdiffstats
path: root/libqpdf/QPDFFormFieldObjectHelper.cc
diff options
context:
space:
mode:
authorJay Berkenbilt <ejb@ql.org>2021-02-22 23:44:13 +0100
committerJay Berkenbilt <ejb@ql.org>2021-02-23 00:42:06 +0100
commit1f35ec9988eaf1ad3705655c434701d175c5b49f (patch)
tree0b60da6e5f35a5ee00d98f272f9ec1d59ef85694 /libqpdf/QPDFFormFieldObjectHelper.cc
parentf02aa74bf5387c30e4ff6082beeb4b0d078b6294 (diff)
downloadqpdf-1f35ec9988eaf1ad3705655c434701d175c5b49f.tar.zst
Add methods for copying form fields
Diffstat (limited to 'libqpdf/QPDFFormFieldObjectHelper.cc')
-rw-r--r--libqpdf/QPDFFormFieldObjectHelper.cc23
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)
{