Commit e7e24fe0706f40b76058bb4b2b46c0307cb6255d

Authored by m-holger
1 parent 55abecc4

Tidy QPDFAcroFormDocumentHelper::addAndRenameFormFields

libqpdf/QPDFAcroFormDocumentHelper.cc
... ... @@ -68,53 +68,48 @@ QPDFAcroFormDocumentHelper::addAndRenameFormFields(
68 68 {
69 69 analyze();
70 70 std::map<std::string, std::string> renames;
71   - std::list<QPDFObjectHandle> queue;
72   - queue.insert(queue.begin(), fields.begin(), fields.end());
73   - std::set<QPDFObjGen> seen;
74   - while (!queue.empty()) {
75   - QPDFObjectHandle obj = queue.front();
76   - queue.pop_front();
77   - auto og = obj.getObjGen();
78   - if (seen.count(og)) {
79   - // loop
80   - continue;
81   - }
82   - seen.insert(og);
83   - auto kids = obj.getKey("/Kids");
84   - if (kids.isArray()) {
85   - for (auto kid: kids.aitems()) {
86   - queue.push_back(kid);
  71 + QPDFObjGen::set seen;
  72 + for (std::list<QPDFObjectHandle> queue{fields.begin(), fields.end()};
  73 + !queue.empty();
  74 + queue.pop_front()) {
  75 + auto& obj = queue.front();
  76 + if (seen.add(obj)) {
  77 + auto kids = obj.getKey("/Kids");
  78 + if (kids.isArray()) {
  79 + for (auto kid: kids.aitems()) {
  80 + queue.push_back(kid);
  81 + }
87 82 }
88   - }
89 83  
90   - if (obj.hasKey("/T")) {
91   - // Find something we can append to the partial name that
92   - // makes the fully qualified name unique. When we find
93   - // something, reuse the same suffix for all fields in this
94   - // group with the same name. We can only change the name
95   - // of fields that have /T, and this field's /T is always
96   - // at the end of the fully qualified name, appending to /T
97   - // has the effect of appending the same thing to the fully
98   - // qualified name.
99   - std::string old_name =
100   - QPDFFormFieldObjectHelper(obj).getFullyQualifiedName();
101   - if (renames.count(old_name) == 0) {
102   - std::string new_name = old_name;
103   - int suffix = 0;
104   - std::string append;
105   - while (!getFieldsWithQualifiedName(new_name).empty()) {
106   - ++suffix;
107   - append = "+" + std::to_string(suffix);
108   - new_name = old_name + append;
  84 + if (obj.hasKey("/T")) {
  85 + // Find something we can append to the partial name that
  86 + // makes the fully qualified name unique. When we find
  87 + // something, reuse the same suffix for all fields in this
  88 + // group with the same name. We can only change the name
  89 + // of fields that have /T, and this field's /T is always
  90 + // at the end of the fully qualified name, appending to /T
  91 + // has the effect of appending the same thing to the fully
  92 + // qualified name.
  93 + std::string old_name =
  94 + QPDFFormFieldObjectHelper(obj).getFullyQualifiedName();
  95 + if (renames.count(old_name) == 0) {
  96 + std::string new_name = old_name;
  97 + int suffix = 0;
  98 + std::string append;
  99 + while (!getFieldsWithQualifiedName(new_name).empty()) {
  100 + ++suffix;
  101 + append = "+" + std::to_string(suffix);
  102 + new_name = old_name + append;
  103 + }
  104 + renames[old_name] = append;
  105 + }
  106 + std::string append = renames[old_name];
  107 + if (!append.empty()) {
  108 + obj.replaceKey(
  109 + "/T",
  110 + QPDFObjectHandle::newUnicodeString(
  111 + obj.getKey("/T").getUTF8Value() + append));
109 112 }
110   - renames[old_name] = append;
111   - }
112   - std::string append = renames[old_name];
113   - if (!append.empty()) {
114   - obj.replaceKey(
115   - "/T",
116   - QPDFObjectHandle::newUnicodeString(
117   - obj.getKey("/T").getUTF8Value() + append));
118 113 }
119 114 }
120 115 }
... ...