Commit 263afd976d7d2c033e215f59efb0381a01e7f18f
1 parent
87ff43f4
Refactor `FormField`: replace `getDefaultValue` and `getDefaultValueAsString` wi…
…th `DV` and `default_value` methods. Simplify logic, improve clarity, and update references.
Showing
2 changed files
with
38 additions
and
15 deletions
libqpdf/QPDFFormFieldObjectHelper.cc
| ... | ... | @@ -228,23 +228,17 @@ FormField::value() const |
| 228 | 228 | QPDFObjectHandle |
| 229 | 229 | QPDFFormFieldObjectHelper::getDefaultValue() |
| 230 | 230 | { |
| 231 | - return Null::if_null(m->getDefaultValue()); | |
| 232 | -} | |
| 233 | - | |
| 234 | -QPDFObjectHandle | |
| 235 | -FormField::getDefaultValue() | |
| 236 | -{ | |
| 237 | - return inheritable_value<QPDFObjectHandle>("/DV"); | |
| 231 | + return Null::if_null(m->DV()); | |
| 238 | 232 | } |
| 239 | 233 | |
| 240 | 234 | std::string |
| 241 | 235 | QPDFFormFieldObjectHelper::getDefaultValueAsString() |
| 242 | 236 | { |
| 243 | - return m->getDefaultValueAsString(); | |
| 237 | + return m->default_value(); | |
| 244 | 238 | } |
| 245 | 239 | |
| 246 | 240 | std::string |
| 247 | -FormField::getDefaultValueAsString() | |
| 241 | +FormField::default_value() const | |
| 248 | 242 | { |
| 249 | 243 | return inheritable_string("/DV"); |
| 250 | 244 | } | ... | ... |
libqpdf/qpdf/FormField.hh
| ... | ... | @@ -185,8 +185,8 @@ namespace qpdf::impl |
| 185 | 185 | /// If the mapping name (/TM) is present, it is returned as a UTF-8 string. If not, it falls |
| 186 | 186 | /// back to the 'alternative name', which is obtained using the `alternative_name()` method. |
| 187 | 187 | /// |
| 188 | - /// @return The mapping field name (/TM) as a UTF-8 string or the alternative name | |
| 189 | - /// if the mapping name is absent. | |
| 188 | + /// @return The mapping field name (/TM) as a UTF-8 string or the alternative name if the | |
| 189 | + /// mapping name is absent. | |
| 190 | 190 | std::string mapping_name() const; |
| 191 | 191 | |
| 192 | 192 | /// @brief Retrieves the field value (`/V` attribute) of a specified field, accounting for |
| ... | ... | @@ -243,11 +243,40 @@ namespace qpdf::impl |
| 243 | 243 | /// an empty string if the value is not present or not a String. |
| 244 | 244 | std::string value() const; |
| 245 | 245 | |
| 246 | - QPDFObjectHandle getDefaultValue(); | |
| 246 | + /// @brief Retrieves the field default value (`/DV` attribute) of a specified field, | |
| 247 | + /// accounting for inheritance through the hierarchy of ancestor nodes in the form | |
| 248 | + /// field tree. | |
| 249 | + /// | |
| 250 | + /// This function attempts to retrieve the `/DV` attribute. If the `inherit` parameter is | |
| 251 | + /// set to `true` and the `/DV` is not found at the current level, the method traverses up | |
| 252 | + /// the parent hierarchy to find the value. The traversal stops when | |
| 253 | + /// `/DV` is found, when the root node is reached, or when a loop detection mechanism | |
| 254 | + /// prevents further traversal. | |
| 255 | + /// | |
| 256 | + /// @tparam T The return type. | |
| 257 | + /// @param inherit If set to `true`, the function will attempt to retrieve `/DV` by | |
| 258 | + /// inheritance from the parent hierarchy of the form field. Defaults to `true`. | |
| 259 | + /// @return Returns the field's default value if found; otherwise, returns a | |
| 260 | + /// default-constructed value of type `T`. | |
| 261 | + QPDFObjectHandle const& | |
| 262 | + DV(bool inherit = true) const | |
| 263 | + { | |
| 264 | + if (auto& v = get("/DV")) { | |
| 265 | + return v; | |
| 266 | + } | |
| 267 | + return {inherit ? inherited("/DV") : null_oh}; | |
| 268 | + } | |
| 247 | 269 | |
| 248 | - // Return the field's default value as a string. If this is called with a field whose value | |
| 249 | - // is not a string, the empty string will be silently returned. | |
| 250 | - std::string getDefaultValueAsString(); | |
| 270 | + /// @brief Retrieves the default value `/DV` attribute of the form field, considering | |
| 271 | + /// inheritance, if the default value is a String. | |
| 272 | + /// | |
| 273 | + /// This function extracts the default value of the form field, accounting for potential | |
| 274 | + /// inheritance through the form hierarchy. It returns the value if it is a String, and an | |
| 275 | + /// empty string otherwise. | |
| 276 | + /// | |
| 277 | + /// @return A string containing the actual or inherited `/V` attribute of the form field, or | |
| 278 | + /// an empty string if the value is not present or not a String. | |
| 279 | + std::string default_value() const; | |
| 251 | 280 | |
| 252 | 281 | /// @brief Returns the default appearance string for the form field, considering inheritance |
| 253 | 282 | /// from the field tree hierarchy and the document's /AcroForm dictionary. | ... | ... |