// Copyright (C) 2021-2022 Jakub Melka
//
// This file is part of PDF4QT.
//
// PDF4QT is free software: you can redistribute it and/or modify
// it under the terms of the GNU Lesser General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// with the written consent of the copyright owner, any later version.
//
// PDF4QT is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU Lesser General Public License for more details.
//
// You should have received a copy of the GNU Lesser General Public License
// along with PDF4QT. If not, see .
#include "pdfxfaengine.h"
#include "pdfform.h"
#include "pdfpainterutils.h"
#include "pdffont.h"
#include "pdfdbgheap.h"
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
namespace pdf
{
namespace xfa
{
struct XFA_InplaceTag;
struct XFA_SharedMemoryTag;
class XFA_AbstractVisitor;
template
class PDFXFAValueHolder
{
public:
inline constexpr PDFXFAValueHolder() = default;
constexpr inline bool hasValue() const { return false; }
constexpr const Value* getValue() const { return nullptr; }
};
template
class PDFXFAValueHolder
{
public:
inline constexpr PDFXFAValueHolder() = default;
inline constexpr PDFXFAValueHolder(std::optional value) :
m_value(std::move(value))
{
}
constexpr inline bool hasValue() const { return m_value.has_value(); }
constexpr const Value* getValue() const { return m_value.has_value() ? &m_value.value() : nullptr; }
constexpr Value getValueOrDefault() const { return m_value.has_value() ? m_value.value() : Value(); }
private:
std::optional m_value;
};
template
class PDFXFAValueHolder
{
public:
inline constexpr PDFXFAValueHolder() = default;
inline constexpr PDFXFAValueHolder(std::optional value) :
m_value()
{
if (value)
{
m_value = std::make_shared(std::move(*value));
}
}
constexpr inline bool hasValue() const { return static_cast(m_value); }
constexpr const Value* getValue() const { return m_value.get(); }
private:
std::shared_ptr m_value;
};
class XFA_ParagraphSettings
{
public:
XFA_ParagraphSettings()
{
m_font.setFamily("Courier");
m_font.setPixelSize(10);
m_font.setHintingPreference(QFont::PreferNoHinting);
}
bool operator ==(const XFA_ParagraphSettings&) const = default;
bool operator !=(const XFA_ParagraphSettings&) const = default;
PDFReal getFontEmSize() const;
void setFontEmSize(const PDFReal& fontEmSize);
PDFReal getFontSpaceSize() const;
void setFontSpaceSize(const PDFReal& fontSpaceSize);
Qt::Alignment getAlignment() const;
void setAlignment(const Qt::Alignment& alignment);
PDFReal getLineHeight() const;
void setLineHeight(const PDFReal& lineHeight);
QMarginsF getMargins() const;
void setMargins(const QMarginsF& margins);
PDFInteger getOrphans() const;
void setOrphans(const PDFInteger& orphans);
PDFReal getRadixOffset() const;
void setRadixOffset(const PDFReal& radixOffset);
PDFReal getTextIndent() const;
void setTextIndent(const PDFReal& textIndent);
PDFInteger getWidows() const;
void setWidows(const PDFInteger& widows);
QString getTabDefault() const;
void setTabDefault(const QString& tabDefault);
QString getTabStops() const;
void setTabStops(const QString& tabStops);
QFont getFont() const;
void setFont(const QFont& font);
private:
PDFReal m_lineHeight = 0.0;
PDFReal m_fontEmSize = 0.0;
PDFReal m_fontSpaceSize = 0.0;
PDFReal m_radixOffset = 0.0;
PDFReal m_textIndent = 0.0;
Qt::Alignment m_alignment = Qt::AlignLeft | Qt::AlignTop;
QMarginsF m_margins = QMarginsF();
PDFInteger m_orphans = 0;
PDFInteger m_widows = 0;
QString m_tabDefault;
QString m_tabStops;
QFont m_font;
};
template
using XFA_Attribute = PDFXFAValueHolder;
template
using XFA_Node = PDFXFAValueHolder;
template
using XFA_Value = PDFXFAValueHolder;
class XFA_Measurement
{
public:
enum Type
{
in,
cm,
mm,
pt,
em,
percent
};
constexpr inline XFA_Measurement() :
m_value(0.0),
m_type(in)
{
}
constexpr inline XFA_Measurement(PDFReal value, Type type) :
m_value(value),
m_type(type)
{
}
constexpr inline XFA_Measurement(PDFReal value) :
m_value(value),
m_type(in)
{
}
constexpr PDFReal getValue() const { return m_value; }
constexpr Type getType() const { return m_type; }
PDFReal getValuePt(const XFA_ParagraphSettings* paragraphSettings) const;
static bool parseMeasurement(QString measurementText, XFA_Measurement& measurement)
{
XFA_Measurement::Type measurementType = XFA_Measurement::Type::in;
constexpr std::array measurementUnits = {
std::make_pair(XFA_Measurement::Type::in, "in"),
std::make_pair(XFA_Measurement::Type::pt, "pt"),
std::make_pair(XFA_Measurement::Type::cm, "cm"),
std::make_pair(XFA_Measurement::Type::mm, "mm"),
std::make_pair(XFA_Measurement::Type::em, "em"),
std::make_pair(XFA_Measurement::Type::percent, "%")
};
for (const auto& measurementUnit : measurementUnits)
{
QLatin1String unit(measurementUnit.second);
if (measurementText.endsWith(unit))
{
measurementType = measurementUnit.first;
measurementText.chop(unit.size());
break;
}
}
bool ok = false;
PDFReal value = measurementText.toDouble(&ok);
if (ok)
{
measurement = XFA_Measurement(value, measurementType);
}
return ok;
}
private:
PDFReal m_value;
Type m_type;
};
class XFA_AbstractNode
{
public:
constexpr inline XFA_AbstractNode() = default;
virtual ~XFA_AbstractNode() = default;
virtual void accept(XFA_AbstractVisitor* visitor) const = 0;
template
static void parseItem(const QDomElement& element, QString value, XFA_Node& node)
{
// Jakub Melka: set node value to null
node = XFA_Node();
QDomElement child = element.firstChildElement(value);
if (!child.isNull())
{
node = XFA_Node(Type::parse(child));
}
}
template
static void parseItem(const QDomElement& element, QString value, std::vector>& nodes)
{
// Jakub Melka: clear node list
nodes.clear();
QDomElement child = element.firstChildElement(value);
while (!child.isNull())
{
nodes.emplace_back(XFA_Node(Type::parse(child)));
child = child.nextSiblingElement(value);
}
}
template
static void parseEnumAttribute(const QDomElement& element,
QString attributeFieldName,
XFA_Attribute& attribute,
QString defaultValue,
const auto& enumValues)
{
attribute = XFA_Attribute();
QString value = element.attribute(attributeFieldName, defaultValue);
for (const auto& enumValue : enumValues)
{
if (enumValue.second == value)
{
attribute = XFA_Attribute(enumValue.first);
break;
}
}
}
static void parseAttribute(const QDomElement& element,
QString attributeFieldName,
XFA_Attribute& attribute,
QString defaultValue)
{
attribute = XFA_Attribute(element.attribute(attributeFieldName, defaultValue));
}
static void parseAttribute(const QDomElement& element,
QString attributeFieldName,
XFA_Attribute& attribute,
QString defaultValue)
{
attribute = XFA_Attribute(element.attribute(attributeFieldName, defaultValue).toInt() != 0);
}
static void parseAttribute(const QDomElement& element,
QString attributeFieldName,
XFA_Attribute& attribute,
QString defaultValue)
{
attribute = XFA_Attribute(element.attribute(attributeFieldName, defaultValue).toDouble());
}
static void parseAttribute(const QDomElement& element,
QString attributeFieldName,
XFA_Attribute& attribute,
QString defaultValue)
{
attribute = XFA_Attribute(element.attribute(attributeFieldName, defaultValue).toInt());
}
static void parseAttribute(const QDomElement& element,
QString attributeFieldName,
XFA_Attribute& attribute,
QString defaultValue)
{
attribute = XFA_Attribute();
QString measurement = element.attribute(attributeFieldName, defaultValue);
XFA_Measurement value;
if (XFA_Measurement::parseMeasurement(measurement, value))
{
attribute = XFA_Attribute(std::move(value));
}
}
static void parseValue(const QDomElement& element, XFA_Value& nodeValue)
{
nodeValue = XFA_Value();
QString text;
if (element.hasChildNodes())
{
QTextStream textStream(&text);
QDomNode node = element.firstChild();
while (!node.isNull())
{
textStream << node;
node = node.nextSibling();
}
}
if (!text.isEmpty())
{
nodeValue = XFA_Value(std::move(text));
}
}
/// Get ordering of the element in original document
size_t getOrder() const { return m_order; }
void setOrderFromElement(const QDomElement& element);
static inline constexpr void addNodesToContainer(std::vector&) { }
template
static void addNodesToContainer(std::vector& nodes,
const Container& container,
const Containers&... containers)
{
if constexpr (std::is_convertible::value)
{
if (container)
{
nodes.push_back(container);
}
}
else
{
for (const auto& node : container)
{
nodes.push_back(node.getValue());
}
}
addNodesToContainer(nodes, containers...);
}
template
static void acceptOrdered(XFA_AbstractVisitor* visitor, const Containers&... containers)
{
std::vector nodes;
addNodesToContainer(nodes, containers...);
std::sort(nodes.begin(), nodes.end(), [](const auto* l, const auto* r) { return l->getOrder() < r->getOrder(); });
for (const XFA_AbstractNode* node : nodes)
{
node->accept(visitor);
}
}
private:
size_t m_order = 0;
};
void XFA_AbstractNode::setOrderFromElement(const QDomElement& element)
{
const uint32_t lineNumber = element.lineNumber();
const uint32_t columnNumber = element.columnNumber();
if constexpr (sizeof(decltype(m_order)) > 4)
{
m_order = (size_t(lineNumber) << 32) + columnNumber;
}
else
{
m_order = (size_t(lineNumber) << 12) + columnNumber;
}
}
PDFReal XFA_ParagraphSettings::getFontEmSize() const
{
return m_fontEmSize;
}
void XFA_ParagraphSettings::setFontEmSize(const PDFReal& fontEmSize)
{
m_fontEmSize = fontEmSize;
}
PDFReal XFA_ParagraphSettings::getFontSpaceSize() const
{
return m_fontSpaceSize;
}
void XFA_ParagraphSettings::setFontSpaceSize(const PDFReal& fontSpaceSize)
{
m_fontSpaceSize = fontSpaceSize;
}
Qt::Alignment XFA_ParagraphSettings::getAlignment() const
{
return m_alignment;
}
void XFA_ParagraphSettings::setAlignment(const Qt::Alignment& alignment)
{
m_alignment = alignment;
}
PDFReal XFA_ParagraphSettings::getLineHeight() const
{
return m_lineHeight;
}
void XFA_ParagraphSettings::setLineHeight(const PDFReal& lineHeight)
{
m_lineHeight = lineHeight;
}
QMarginsF XFA_ParagraphSettings::getMargins() const
{
return m_margins;
}
void XFA_ParagraphSettings::setMargins(const QMarginsF& margins)
{
m_margins = margins;
}
PDFInteger XFA_ParagraphSettings::getOrphans() const
{
return m_orphans;
}
void XFA_ParagraphSettings::setOrphans(const PDFInteger& orphans)
{
m_orphans = orphans;
}
PDFReal XFA_ParagraphSettings::getRadixOffset() const
{
return m_radixOffset;
}
void XFA_ParagraphSettings::setRadixOffset(const PDFReal& radixOffset)
{
m_radixOffset = radixOffset;
}
PDFReal XFA_ParagraphSettings::getTextIndent() const
{
return m_textIndent;
}
void XFA_ParagraphSettings::setTextIndent(const PDFReal& textIndent)
{
m_textIndent = textIndent;
}
PDFInteger XFA_ParagraphSettings::getWidows() const
{
return m_widows;
}
void XFA_ParagraphSettings::setWidows(const PDFInteger& widows)
{
m_widows = widows;
}
QString XFA_ParagraphSettings::getTabDefault() const
{
return m_tabDefault;
}
void XFA_ParagraphSettings::setTabDefault(const QString& tabDefault)
{
m_tabDefault = tabDefault;
}
QString XFA_ParagraphSettings::getTabStops() const
{
return m_tabStops;
}
void XFA_ParagraphSettings::setTabStops(const QString& tabStops)
{
m_tabStops = tabStops;
}
QFont XFA_ParagraphSettings::getFont() const
{
return m_font;
}
void XFA_ParagraphSettings::setFont(const QFont& font)
{
m_font = font;
}
PDFReal XFA_Measurement::getValuePt(const XFA_ParagraphSettings* paragraphSettings) const
{
switch (m_type)
{
case pdf::xfa::XFA_Measurement::in:
return m_value * 72.0;
case pdf::xfa::XFA_Measurement::cm:
return m_value / 2.54 * 72.0;
case pdf::xfa::XFA_Measurement::mm:
return m_value / 25.4 * 72.0;
case pdf::xfa::XFA_Measurement::pt:
return m_value;
case pdf::xfa::XFA_Measurement::em:
return paragraphSettings ? m_value * paragraphSettings->getFontEmSize() : 0.0;
case pdf::xfa::XFA_Measurement::percent:
return paragraphSettings ? m_value * paragraphSettings->getFontSpaceSize() : 0.0;
default:
Q_ASSERT(false);
break;
}
return 0.0;
}
} // namespace xfa
/* START GENERATED CODE */
namespace xfa
{
class XFA_appearanceFilter;
class XFA_bindItems;
class XFA_bookend;
class XFA_boolean;
class XFA_certificate;
class XFA_comb;
class XFA_date;
class XFA_dateTime;
class XFA_decimal;
class XFA_digestMethod;
class XFA_digestMethods;
class XFA_encoding;
class XFA_encodings;
class XFA_encrypt;
class XFA_encryption;
class XFA_encryptionMethod;
class XFA_encryptionMethods;
class XFA_exData;
class XFA_execute;
class XFA_float;
class XFA_handler;
class XFA_hyphenation;
class XFA_image;
class XFA_integer;
class XFA_issuers;
class XFA_keyUsage;
class XFA_lockDocument;
class XFA_mdp;
class XFA_medium;
class XFA_oid;
class XFA_oids;
class XFA_overflow;
class XFA_para;
class XFA_picture;
class XFA_bind;
class XFA_connect;
class XFA_reason;
class XFA_reasons;
class XFA_ref;
class XFA_script;
class XFA_breakAfter;
class XFA_breakBefore;
class XFA_setProperty;
class XFA_signing;
class XFA_speak;
class XFA_subjectDN;
class XFA_subjectDNs;
class XFA_certificates;
class XFA_text;
class XFA_message;
class XFA_time;
class XFA_desc;
class XFA_extras;
class XFA_barcode;
class XFA_break;
class XFA_button;
class XFA_calculate;
class XFA_color;
class XFA_contentArea;
class XFA_corner;
class XFA_defaultUi;
class XFA_edge;
class XFA_exObject;
class XFA_format;
class XFA_items;
class XFA_keep;
class XFA_line;
class XFA_linear;
class XFA_manifest;
class XFA_margin;
class XFA_occur;
class XFA_pattern;
class XFA_radial;
class XFA_solid;
class XFA_stipple;
class XFA_fill;
class XFA_arc;
class XFA_border;
class XFA_checkButton;
class XFA_choiceList;
class XFA_dateTimeEdit;
class XFA_font;
class XFA_imageEdit;
class XFA_numericEdit;
class XFA_passwordEdit;
class XFA_rectangle;
class XFA_textEdit;
class XFA_timeStamp;
class XFA_filter;
class XFA_encryptData;
class XFA_signData;
class XFA_signature;
class XFA_submit;
class XFA_event;
class XFA_toolTip;
class XFA_assist;
class XFA_traverse;
class XFA_traversal;
class XFA_ui;
class XFA_validate;
class XFA_value;
class XFA_caption;
class XFA_draw;
class XFA_field;
class XFA_exclGroup;
class XFA_variables;
class XFA_area;
class XFA_pageArea;
class XFA_pageSet;
class XFA_proto;
class XFA_subform;
class XFA_subformSet;
class XFA_template;
class XFA_AbstractVisitor
{
public:
XFA_AbstractVisitor() = default;
virtual ~XFA_AbstractVisitor() = default;
virtual void visit(const XFA_appearanceFilter* node) { Q_UNUSED(node); }
virtual void visit(const XFA_bindItems* node) { Q_UNUSED(node); }
virtual void visit(const XFA_bookend* node) { Q_UNUSED(node); }
virtual void visit(const XFA_boolean* node) { Q_UNUSED(node); }
virtual void visit(const XFA_certificate* node) { Q_UNUSED(node); }
virtual void visit(const XFA_comb* node) { Q_UNUSED(node); }
virtual void visit(const XFA_date* node) { Q_UNUSED(node); }
virtual void visit(const XFA_dateTime* node) { Q_UNUSED(node); }
virtual void visit(const XFA_decimal* node) { Q_UNUSED(node); }
virtual void visit(const XFA_digestMethod* node) { Q_UNUSED(node); }
virtual void visit(const XFA_digestMethods* node) { Q_UNUSED(node); }
virtual void visit(const XFA_encoding* node) { Q_UNUSED(node); }
virtual void visit(const XFA_encodings* node) { Q_UNUSED(node); }
virtual void visit(const XFA_encrypt* node) { Q_UNUSED(node); }
virtual void visit(const XFA_encryption* node) { Q_UNUSED(node); }
virtual void visit(const XFA_encryptionMethod* node) { Q_UNUSED(node); }
virtual void visit(const XFA_encryptionMethods* node) { Q_UNUSED(node); }
virtual void visit(const XFA_exData* node) { Q_UNUSED(node); }
virtual void visit(const XFA_execute* node) { Q_UNUSED(node); }
virtual void visit(const XFA_float* node) { Q_UNUSED(node); }
virtual void visit(const XFA_handler* node) { Q_UNUSED(node); }
virtual void visit(const XFA_hyphenation* node) { Q_UNUSED(node); }
virtual void visit(const XFA_image* node) { Q_UNUSED(node); }
virtual void visit(const XFA_integer* node) { Q_UNUSED(node); }
virtual void visit(const XFA_issuers* node) { Q_UNUSED(node); }
virtual void visit(const XFA_keyUsage* node) { Q_UNUSED(node); }
virtual void visit(const XFA_lockDocument* node) { Q_UNUSED(node); }
virtual void visit(const XFA_mdp* node) { Q_UNUSED(node); }
virtual void visit(const XFA_medium* node) { Q_UNUSED(node); }
virtual void visit(const XFA_oid* node) { Q_UNUSED(node); }
virtual void visit(const XFA_oids* node) { Q_UNUSED(node); }
virtual void visit(const XFA_overflow* node) { Q_UNUSED(node); }
virtual void visit(const XFA_para* node) { Q_UNUSED(node); }
virtual void visit(const XFA_picture* node) { Q_UNUSED(node); }
virtual void visit(const XFA_bind* node) { Q_UNUSED(node); }
virtual void visit(const XFA_connect* node) { Q_UNUSED(node); }
virtual void visit(const XFA_reason* node) { Q_UNUSED(node); }
virtual void visit(const XFA_reasons* node) { Q_UNUSED(node); }
virtual void visit(const XFA_ref* node) { Q_UNUSED(node); }
virtual void visit(const XFA_script* node) { Q_UNUSED(node); }
virtual void visit(const XFA_breakAfter* node) { Q_UNUSED(node); }
virtual void visit(const XFA_breakBefore* node) { Q_UNUSED(node); }
virtual void visit(const XFA_setProperty* node) { Q_UNUSED(node); }
virtual void visit(const XFA_signing* node) { Q_UNUSED(node); }
virtual void visit(const XFA_speak* node) { Q_UNUSED(node); }
virtual void visit(const XFA_subjectDN* node) { Q_UNUSED(node); }
virtual void visit(const XFA_subjectDNs* node) { Q_UNUSED(node); }
virtual void visit(const XFA_certificates* node) { Q_UNUSED(node); }
virtual void visit(const XFA_text* node) { Q_UNUSED(node); }
virtual void visit(const XFA_message* node) { Q_UNUSED(node); }
virtual void visit(const XFA_time* node) { Q_UNUSED(node); }
virtual void visit(const XFA_desc* node) { Q_UNUSED(node); }
virtual void visit(const XFA_extras* node) { Q_UNUSED(node); }
virtual void visit(const XFA_barcode* node) { Q_UNUSED(node); }
virtual void visit(const XFA_break* node) { Q_UNUSED(node); }
virtual void visit(const XFA_button* node) { Q_UNUSED(node); }
virtual void visit(const XFA_calculate* node) { Q_UNUSED(node); }
virtual void visit(const XFA_color* node) { Q_UNUSED(node); }
virtual void visit(const XFA_contentArea* node) { Q_UNUSED(node); }
virtual void visit(const XFA_corner* node) { Q_UNUSED(node); }
virtual void visit(const XFA_defaultUi* node) { Q_UNUSED(node); }
virtual void visit(const XFA_edge* node) { Q_UNUSED(node); }
virtual void visit(const XFA_exObject* node) { Q_UNUSED(node); }
virtual void visit(const XFA_format* node) { Q_UNUSED(node); }
virtual void visit(const XFA_items* node) { Q_UNUSED(node); }
virtual void visit(const XFA_keep* node) { Q_UNUSED(node); }
virtual void visit(const XFA_line* node) { Q_UNUSED(node); }
virtual void visit(const XFA_linear* node) { Q_UNUSED(node); }
virtual void visit(const XFA_manifest* node) { Q_UNUSED(node); }
virtual void visit(const XFA_margin* node) { Q_UNUSED(node); }
virtual void visit(const XFA_occur* node) { Q_UNUSED(node); }
virtual void visit(const XFA_pattern* node) { Q_UNUSED(node); }
virtual void visit(const XFA_radial* node) { Q_UNUSED(node); }
virtual void visit(const XFA_solid* node) { Q_UNUSED(node); }
virtual void visit(const XFA_stipple* node) { Q_UNUSED(node); }
virtual void visit(const XFA_fill* node) { Q_UNUSED(node); }
virtual void visit(const XFA_arc* node) { Q_UNUSED(node); }
virtual void visit(const XFA_border* node) { Q_UNUSED(node); }
virtual void visit(const XFA_checkButton* node) { Q_UNUSED(node); }
virtual void visit(const XFA_choiceList* node) { Q_UNUSED(node); }
virtual void visit(const XFA_dateTimeEdit* node) { Q_UNUSED(node); }
virtual void visit(const XFA_font* node) { Q_UNUSED(node); }
virtual void visit(const XFA_imageEdit* node) { Q_UNUSED(node); }
virtual void visit(const XFA_numericEdit* node) { Q_UNUSED(node); }
virtual void visit(const XFA_passwordEdit* node) { Q_UNUSED(node); }
virtual void visit(const XFA_rectangle* node) { Q_UNUSED(node); }
virtual void visit(const XFA_textEdit* node) { Q_UNUSED(node); }
virtual void visit(const XFA_timeStamp* node) { Q_UNUSED(node); }
virtual void visit(const XFA_filter* node) { Q_UNUSED(node); }
virtual void visit(const XFA_encryptData* node) { Q_UNUSED(node); }
virtual void visit(const XFA_signData* node) { Q_UNUSED(node); }
virtual void visit(const XFA_signature* node) { Q_UNUSED(node); }
virtual void visit(const XFA_submit* node) { Q_UNUSED(node); }
virtual void visit(const XFA_event* node) { Q_UNUSED(node); }
virtual void visit(const XFA_toolTip* node) { Q_UNUSED(node); }
virtual void visit(const XFA_assist* node) { Q_UNUSED(node); }
virtual void visit(const XFA_traverse* node) { Q_UNUSED(node); }
virtual void visit(const XFA_traversal* node) { Q_UNUSED(node); }
virtual void visit(const XFA_ui* node) { Q_UNUSED(node); }
virtual void visit(const XFA_validate* node) { Q_UNUSED(node); }
virtual void visit(const XFA_value* node) { Q_UNUSED(node); }
virtual void visit(const XFA_caption* node) { Q_UNUSED(node); }
virtual void visit(const XFA_draw* node) { Q_UNUSED(node); }
virtual void visit(const XFA_field* node) { Q_UNUSED(node); }
virtual void visit(const XFA_exclGroup* node) { Q_UNUSED(node); }
virtual void visit(const XFA_variables* node) { Q_UNUSED(node); }
virtual void visit(const XFA_area* node) { Q_UNUSED(node); }
virtual void visit(const XFA_pageArea* node) { Q_UNUSED(node); }
virtual void visit(const XFA_pageSet* node) { Q_UNUSED(node); }
virtual void visit(const XFA_proto* node) { Q_UNUSED(node); }
virtual void visit(const XFA_subform* node) { Q_UNUSED(node); }
virtual void visit(const XFA_subformSet* node) { Q_UNUSED(node); }
virtual void visit(const XFA_template* node) { Q_UNUSED(node); }
};
class XFA_BaseNode : public XFA_AbstractNode
{
public:
using XFA_AbstractNode::parseAttribute;
enum class ACCESS
{
Open,
NonInteractive,
Protected,
ReadOnly,
};
enum class ACTION
{
Include,
All,
Exclude,
};
enum class ACTIVITY
{
Click,
Change,
DocClose,
DocReady,
Enter,
Exit,
Full,
IndexChange,
Initialize,
MouseDown,
MouseEnter,
MouseExit,
MouseUp,
PostExecute,
PostOpen,
PostPrint,
PostSave,
PostSign,
PostSubmit,
PreExecute,
PreOpen,
PrePrint,
PreSave,
PreSign,
PreSubmit,
Ready,
ValidationState,
};
enum class AFTER
{
Auto,
ContentArea,
PageArea,
PageEven,
PageOdd,
};
enum class ANCHORTYPE
{
TopLeft,
BottomCenter,
BottomLeft,
BottomRight,
MiddleCenter,
MiddleLeft,
MiddleRight,
TopCenter,
TopRight,
};
enum class ASPECT
{
Fit,
Actual,
Height,
None,
Width,
};
enum class BASEPROFILE
{
Full,
InteractiveForms,
};
enum class BEFORE
{
Auto,
ContentArea,
PageArea,
PageEven,
PageOdd,
};
enum class BLANKORNOTBLANK
{
Any,
Blank,
NotBlank,
};
enum class BREAK
{
Close,
Open,
};
enum class CAP
{
Square,
Butt,
Round,
};
enum class CHECKSUM
{
None,
_1mod10,
_1mod10_1mod11,
_2mod10,
Auto,
};
enum class COMMITON
{
Select,
Exit,
};
enum class CREDENTIALSERVERPOLICY
{
Optional,
Required,
};
enum class DATAPREP
{
None,
FlateCompress,
};
enum class DATA
{
Link,
Embed,
};
enum class DUPLEXIMPOSITION
{
LongEdge,
ShortEdge,
};
enum class EXECUTETYPE
{
Import,
Remerge,
};
enum class FORMATTEST
{
Warning,
Disabled,
Error,
};
enum class FORMAT
{
Xdp,
Formdata,
Pdf,
Urlencoded,
Xfd,
Xml,
};
enum class HALIGN
{
Left,
Center,
Justify,
JustifyAll,
Radix,
Right,
};
enum class HSCROLLPOLICY
{
Auto,
Off,
On,
};
enum class HAND
{
Even,
Left,
Right,
};
enum class HIGHLIGHT
{
Inverted,
None,
Outline,
Push,
};
enum class INTACT
{
None,
ContentArea,
PageArea,
};
enum class JOIN
{
Square,
Round,
};
enum class KERNINGMODE
{
None,
Pair,
};
enum class LAYOUT
{
Position,
Lr_tb,
Rl_row,
Rl_tb,
Row,
Table,
Tb,
};
enum class LINETHROUGHPERIOD
{
All,
Word,
};
enum class LINETHROUGH
{
_0,
_1,
_2,
};
enum class LISTEN
{
RefOnly,
RefAndDescendents,
};
enum class MARK
{
Default,
Check,
Circle,
Cross,
Diamond,
Square,
Star,
};
enum class MATCH
{
Once,
DataRef,
Global,
None,
};
enum class MERGEMODE
{
ConsumeData,
MatchTemplate,
};
enum class MULTILINE
{
_1,
_0,
};
enum class NEXT
{
None,
ContentArea,
PageArea,
};
enum class NULLTEST
{
Disabled,
Error,
Warning,
};
enum class ODDOREVEN
{
Any,
Even,
Odd,
};
enum class OPEN
{
UserControl,
Always,
MultiSelect,
OnEntry,
};
enum class OPERATION
{
Encrypt,
Decrypt,
};
enum class OPERATION2
{
Next,
Back,
Down,
First,
Left,
Right,
Up,
};
enum class OPERATION1
{
Sign,
Clear,
Verify,
};
enum class ORIENTATION
{
Portrait,
Landscape,
};
enum class OVERLINEPERIOD
{
All,
Word,
};
enum class OVERLINE
{
_0,
_1,
_2,
};
enum class OVERRIDE
{
Disabled,
Error,
Ignore,
Warning,
};
enum class PAGEPOSITION
{
Any,
First,
Last,
Only,
Rest,
};
enum class PERMISSIONS
{
_2,
_1,
_3,
};
enum class PICKER
{
Host,
None,
};
enum class PLACEMENT
{
Left,
Bottom,
Inline,
Right,
Top,
};
enum class POSTURE
{
Normal,
Italic,
};
enum class PRESENCE
{
Visible,
Hidden,
Inactive,
Invisible,
};
enum class PREVIOUS
{
None,
ContentArea,
PageArea,
};
enum class PRIORITY
{
Custom,
Caption,
Name,
ToolTip,
};
enum class RELATION1
{
Ordered,
Choice,
Unordered,
};
enum class RELATION
{
OrderedOccurrence,
DuplexPaginated,
SimplexPaginated,
};
enum class RESTORESTATE
{
Manual,
Auto,
};
enum class RUNAT
{
Client,
Both,
Server,
};
enum class SCOPE
{
Name,
None,
};
enum class SCRIPTTEST
{
Error,
Disabled,
Warning,
};
enum class SHAPE
{
Square,
Round,
};
enum class SIGNATURETYPE
{
Filler,
Author,
};
enum class SLOPE
{
Backslash,
Slash,
};
enum class STROKE
{
Solid,
DashDot,
DashDotDot,
Dashed,
Dotted,
Embossed,
Etched,
Lowered,
Raised,
};
enum class TARGETTYPE
{
Auto,
ContentArea,
PageArea,
PageEven,
PageOdd,
};
enum class TEXTLOCATION
{
Below,
Above,
AboveEmbedded,
BelowEmbedded,
None,
};
enum class TRANSFERENCODING1
{
Base64,
None,
Package,
};
enum class TRANSFERENCODING
{
None,
Base64,
Package,
};
enum class TRAYIN
{
Auto,
Delegate,
PageFront,
};
enum class TRAYOUT
{
Auto,
Delegate,
};
enum class TYPE4
{
PDF1_3,
PDF1_6,
};
enum class TYPE2
{
CrossHatch,
CrossDiagonal,
DiagonalLeft,
DiagonalRight,
Horizontal,
Vertical,
};
enum class TYPE
{
Optional,
Required,
};
enum class TYPE3
{
ToEdge,
ToCenter,
};
enum class TYPE1
{
ToRight,
ToBottom,
ToLeft,
ToTop,
};
enum class UNDERLINEPERIOD
{
All,
Word,
};
enum class UNDERLINE
{
_0,
_1,
_2,
};
enum class UPSMODE
{
UsCarrier,
InternationalCarrier,
SecureSymbol,
StandardSymbol,
};
enum class USAGE
{
ExportAndImport,
ExportOnly,
ImportOnly,
};
enum class VALIGN
{
Top,
Bottom,
Middle,
};
enum class VSCROLLPOLICY
{
Auto,
Off,
On,
};
enum class WEIGHT
{
Normal,
Bold,
};
static void parseAttribute(const QDomElement& element, QString attributeFieldName, XFA_Attribute& attribute, QString defaultValue)
{
constexpr std::array enumValues = {
std::make_pair(ACCESS::Open, "open"),
std::make_pair(ACCESS::NonInteractive, "nonInteractive"),
std::make_pair(ACCESS::Protected, "protected"),
std::make_pair(ACCESS::ReadOnly, "readOnly"),
};
parseEnumAttribute(element, attributeFieldName, attribute, defaultValue, enumValues);
}
static void parseAttribute(const QDomElement& element, QString attributeFieldName, XFA_Attribute& attribute, QString defaultValue)
{
constexpr std::array enumValues = {
std::make_pair(ACTION::Include, "include"),
std::make_pair(ACTION::All, "all"),
std::make_pair(ACTION::Exclude, "exclude"),
};
parseEnumAttribute(element, attributeFieldName, attribute, defaultValue, enumValues);
}
static void parseAttribute(const QDomElement& element, QString attributeFieldName, XFA_Attribute& attribute, QString defaultValue)
{
constexpr std::array enumValues = {
std::make_pair(ACTIVITY::Click, "click"),
std::make_pair(ACTIVITY::Change, "change"),
std::make_pair(ACTIVITY::DocClose, "docClose"),
std::make_pair(ACTIVITY::DocReady, "docReady"),
std::make_pair(ACTIVITY::Enter, "enter"),
std::make_pair(ACTIVITY::Exit, "exit"),
std::make_pair(ACTIVITY::Full, "full"),
std::make_pair(ACTIVITY::IndexChange, "indexChange"),
std::make_pair(ACTIVITY::Initialize, "initialize"),
std::make_pair(ACTIVITY::MouseDown, "mouseDown"),
std::make_pair(ACTIVITY::MouseEnter, "mouseEnter"),
std::make_pair(ACTIVITY::MouseExit, "mouseExit"),
std::make_pair(ACTIVITY::MouseUp, "mouseUp"),
std::make_pair(ACTIVITY::PostExecute, "postExecute"),
std::make_pair(ACTIVITY::PostOpen, "postOpen"),
std::make_pair(ACTIVITY::PostPrint, "postPrint"),
std::make_pair(ACTIVITY::PostSave, "postSave"),
std::make_pair(ACTIVITY::PostSign, "postSign"),
std::make_pair(ACTIVITY::PostSubmit, "postSubmit"),
std::make_pair(ACTIVITY::PreExecute, "preExecute"),
std::make_pair(ACTIVITY::PreOpen, "preOpen"),
std::make_pair(ACTIVITY::PrePrint, "prePrint"),
std::make_pair(ACTIVITY::PreSave, "preSave"),
std::make_pair(ACTIVITY::PreSign, "preSign"),
std::make_pair(ACTIVITY::PreSubmit, "preSubmit"),
std::make_pair(ACTIVITY::Ready, "ready"),
std::make_pair(ACTIVITY::ValidationState, "validationState"),
};
parseEnumAttribute(element, attributeFieldName, attribute, defaultValue, enumValues);
}
static void parseAttribute(const QDomElement& element, QString attributeFieldName, XFA_Attribute& attribute, QString defaultValue)
{
constexpr std::array enumValues = {
std::make_pair(AFTER::Auto, "auto"),
std::make_pair(AFTER::ContentArea, "contentArea"),
std::make_pair(AFTER::PageArea, "pageArea"),
std::make_pair(AFTER::PageEven, "pageEven"),
std::make_pair(AFTER::PageOdd, "pageOdd"),
};
parseEnumAttribute(element, attributeFieldName, attribute, defaultValue, enumValues);
}
static void parseAttribute(const QDomElement& element, QString attributeFieldName, XFA_Attribute& attribute, QString defaultValue)
{
constexpr std::array enumValues = {
std::make_pair(ANCHORTYPE::TopLeft, "topLeft"),
std::make_pair(ANCHORTYPE::BottomCenter, "bottomCenter"),
std::make_pair(ANCHORTYPE::BottomLeft, "bottomLeft"),
std::make_pair(ANCHORTYPE::BottomRight, "bottomRight"),
std::make_pair(ANCHORTYPE::MiddleCenter, "middleCenter"),
std::make_pair(ANCHORTYPE::MiddleLeft, "middleLeft"),
std::make_pair(ANCHORTYPE::MiddleRight, "middleRight"),
std::make_pair(ANCHORTYPE::TopCenter, "topCenter"),
std::make_pair(ANCHORTYPE::TopRight, "topRight"),
};
parseEnumAttribute(element, attributeFieldName, attribute, defaultValue, enumValues);
}
static void parseAttribute(const QDomElement& element, QString attributeFieldName, XFA_Attribute& attribute, QString defaultValue)
{
constexpr std::array enumValues = {
std::make_pair(ASPECT::Fit, "fit"),
std::make_pair(ASPECT::Actual, "actual"),
std::make_pair(ASPECT::Height, "height"),
std::make_pair(ASPECT::None, "none"),
std::make_pair(ASPECT::Width, "width"),
};
parseEnumAttribute(element, attributeFieldName, attribute, defaultValue, enumValues);
}
static void parseAttribute(const QDomElement& element, QString attributeFieldName, XFA_Attribute& attribute, QString defaultValue)
{
constexpr std::array enumValues = {
std::make_pair(BASEPROFILE::Full, "full"),
std::make_pair(BASEPROFILE::InteractiveForms, "interactiveForms"),
};
parseEnumAttribute(element, attributeFieldName, attribute, defaultValue, enumValues);
}
static void parseAttribute(const QDomElement& element, QString attributeFieldName, XFA_Attribute& attribute, QString defaultValue)
{
constexpr std::array enumValues = {
std::make_pair(BEFORE::Auto, "auto"),
std::make_pair(BEFORE::ContentArea, "contentArea"),
std::make_pair(BEFORE::PageArea, "pageArea"),
std::make_pair(BEFORE::PageEven, "pageEven"),
std::make_pair(BEFORE::PageOdd, "pageOdd"),
};
parseEnumAttribute(element, attributeFieldName, attribute, defaultValue, enumValues);
}
static void parseAttribute(const QDomElement& element, QString attributeFieldName, XFA_Attribute& attribute, QString defaultValue)
{
constexpr std::array enumValues = {
std::make_pair(BLANKORNOTBLANK::Any, "any"),
std::make_pair(BLANKORNOTBLANK::Blank, "blank"),
std::make_pair(BLANKORNOTBLANK::NotBlank, "notBlank"),
};
parseEnumAttribute(element, attributeFieldName, attribute, defaultValue, enumValues);
}
static void parseAttribute(const QDomElement& element, QString attributeFieldName, XFA_Attribute& attribute, QString defaultValue)
{
constexpr std::array enumValues = {
std::make_pair(BREAK::Close, "close"),
std::make_pair(BREAK::Open, "open"),
};
parseEnumAttribute(element, attributeFieldName, attribute, defaultValue, enumValues);
}
static void parseAttribute(const QDomElement& element, QString attributeFieldName, XFA_Attribute& attribute, QString defaultValue)
{
constexpr std::array enumValues = {
std::make_pair(CAP::Square, "square"),
std::make_pair(CAP::Butt, "butt"),
std::make_pair(CAP::Round, "round"),
};
parseEnumAttribute(element, attributeFieldName, attribute, defaultValue, enumValues);
}
static void parseAttribute(const QDomElement& element, QString attributeFieldName, XFA_Attribute& attribute, QString defaultValue)
{
constexpr std::array enumValues = {
std::make_pair(CHECKSUM::None, "none"),
std::make_pair(CHECKSUM::_1mod10, "1mod10"),
std::make_pair(CHECKSUM::_1mod10_1mod11, "1mod10_1mod11"),
std::make_pair(CHECKSUM::_2mod10, "2mod10"),
std::make_pair(CHECKSUM::Auto, "auto"),
};
parseEnumAttribute(element, attributeFieldName, attribute, defaultValue, enumValues);
}
static void parseAttribute(const QDomElement& element, QString attributeFieldName, XFA_Attribute& attribute, QString defaultValue)
{
constexpr std::array enumValues = {
std::make_pair(COMMITON::Select, "select"),
std::make_pair(COMMITON::Exit, "exit"),
};
parseEnumAttribute(element, attributeFieldName, attribute, defaultValue, enumValues);
}
static void parseAttribute(const QDomElement& element, QString attributeFieldName, XFA_Attribute& attribute, QString defaultValue)
{
constexpr std::array enumValues = {
std::make_pair(CREDENTIALSERVERPOLICY::Optional, "optional"),
std::make_pair(CREDENTIALSERVERPOLICY::Required, "required"),
};
parseEnumAttribute(element, attributeFieldName, attribute, defaultValue, enumValues);
}
static void parseAttribute(const QDomElement& element, QString attributeFieldName, XFA_Attribute& attribute, QString defaultValue)
{
constexpr std::array enumValues = {
std::make_pair(DATAPREP::None, "none"),
std::make_pair(DATAPREP::FlateCompress, "flateCompress"),
};
parseEnumAttribute(element, attributeFieldName, attribute, defaultValue, enumValues);
}
static void parseAttribute(const QDomElement& element, QString attributeFieldName, XFA_Attribute& attribute, QString defaultValue)
{
constexpr std::array enumValues = {
std::make_pair(DATA::Link, "link"),
std::make_pair(DATA::Embed, "embed"),
};
parseEnumAttribute(element, attributeFieldName, attribute, defaultValue, enumValues);
}
static void parseAttribute(const QDomElement& element, QString attributeFieldName, XFA_Attribute& attribute, QString defaultValue)
{
constexpr std::array enumValues = {
std::make_pair(DUPLEXIMPOSITION::LongEdge, "longEdge"),
std::make_pair(DUPLEXIMPOSITION::ShortEdge, "shortEdge"),
};
parseEnumAttribute(element, attributeFieldName, attribute, defaultValue, enumValues);
}
static void parseAttribute(const QDomElement& element, QString attributeFieldName, XFA_Attribute& attribute, QString defaultValue)
{
constexpr std::array enumValues = {
std::make_pair(EXECUTETYPE::Import, "import"),
std::make_pair(EXECUTETYPE::Remerge, "remerge"),
};
parseEnumAttribute(element, attributeFieldName, attribute, defaultValue, enumValues);
}
static void parseAttribute(const QDomElement& element, QString attributeFieldName, XFA_Attribute& attribute, QString defaultValue)
{
constexpr std::array enumValues = {
std::make_pair(FORMATTEST::Warning, "warning"),
std::make_pair(FORMATTEST::Disabled, "disabled"),
std::make_pair(FORMATTEST::Error, "error"),
};
parseEnumAttribute(element, attributeFieldName, attribute, defaultValue, enumValues);
}
static void parseAttribute(const QDomElement& element, QString attributeFieldName, XFA_Attribute& attribute, QString defaultValue)
{
constexpr std::array enumValues = {
std::make_pair(FORMAT::Xdp, "xdp"),
std::make_pair(FORMAT::Formdata, "formdata"),
std::make_pair(FORMAT::Pdf, "pdf"),
std::make_pair(FORMAT::Urlencoded, "urlencoded"),
std::make_pair(FORMAT::Xfd, "xfd"),
std::make_pair(FORMAT::Xml, "xml"),
};
parseEnumAttribute(element, attributeFieldName, attribute, defaultValue, enumValues);
}
static void parseAttribute(const QDomElement& element, QString attributeFieldName, XFA_Attribute& attribute, QString defaultValue)
{
constexpr std::array enumValues = {
std::make_pair(HALIGN::Left, "left"),
std::make_pair(HALIGN::Center, "center"),
std::make_pair(HALIGN::Justify, "justify"),
std::make_pair(HALIGN::JustifyAll, "justifyAll"),
std::make_pair(HALIGN::Radix, "radix"),
std::make_pair(HALIGN::Right, "right"),
};
parseEnumAttribute(element, attributeFieldName, attribute, defaultValue, enumValues);
}
static void parseAttribute(const QDomElement& element, QString attributeFieldName, XFA_Attribute& attribute, QString defaultValue)
{
constexpr std::array enumValues = {
std::make_pair(HSCROLLPOLICY::Auto, "auto"),
std::make_pair(HSCROLLPOLICY::Off, "off"),
std::make_pair(HSCROLLPOLICY::On, "on"),
};
parseEnumAttribute(element, attributeFieldName, attribute, defaultValue, enumValues);
}
static void parseAttribute(const QDomElement& element, QString attributeFieldName, XFA_Attribute& attribute, QString defaultValue)
{
constexpr std::array enumValues = {
std::make_pair(HAND::Even, "even"),
std::make_pair(HAND::Left, "left"),
std::make_pair(HAND::Right, "right"),
};
parseEnumAttribute(element, attributeFieldName, attribute, defaultValue, enumValues);
}
static void parseAttribute(const QDomElement& element, QString attributeFieldName, XFA_Attribute& attribute, QString defaultValue)
{
constexpr std::array enumValues = {
std::make_pair(HIGHLIGHT::Inverted, "inverted"),
std::make_pair(HIGHLIGHT::None, "none"),
std::make_pair(HIGHLIGHT::Outline, "outline"),
std::make_pair(HIGHLIGHT::Push, "push"),
};
parseEnumAttribute(element, attributeFieldName, attribute, defaultValue, enumValues);
}
static void parseAttribute(const QDomElement& element, QString attributeFieldName, XFA_Attribute& attribute, QString defaultValue)
{
constexpr std::array enumValues = {
std::make_pair(INTACT::None, "none"),
std::make_pair(INTACT::ContentArea, "contentArea"),
std::make_pair(INTACT::PageArea, "pageArea"),
};
parseEnumAttribute(element, attributeFieldName, attribute, defaultValue, enumValues);
}
static void parseAttribute(const QDomElement& element, QString attributeFieldName, XFA_Attribute& attribute, QString defaultValue)
{
constexpr std::array enumValues = {
std::make_pair(JOIN::Square, "square"),
std::make_pair(JOIN::Round, "round"),
};
parseEnumAttribute(element, attributeFieldName, attribute, defaultValue, enumValues);
}
static void parseAttribute(const QDomElement& element, QString attributeFieldName, XFA_Attribute& attribute, QString defaultValue)
{
constexpr std::array enumValues = {
std::make_pair(KERNINGMODE::None, "none"),
std::make_pair(KERNINGMODE::Pair, "pair"),
};
parseEnumAttribute(element, attributeFieldName, attribute, defaultValue, enumValues);
}
static void parseAttribute(const QDomElement& element, QString attributeFieldName, XFA_Attribute& attribute, QString defaultValue)
{
constexpr std::array enumValues = {
std::make_pair(LAYOUT::Position, "position"),
std::make_pair(LAYOUT::Lr_tb, "lr-tb"),
std::make_pair(LAYOUT::Rl_row, "rl-row"),
std::make_pair(LAYOUT::Rl_tb, "rl-tb"),
std::make_pair(LAYOUT::Row, "row"),
std::make_pair(LAYOUT::Table, "table"),
std::make_pair(LAYOUT::Tb, "tb"),
};
parseEnumAttribute(element, attributeFieldName, attribute, defaultValue, enumValues);
}
static void parseAttribute(const QDomElement& element, QString attributeFieldName, XFA_Attribute& attribute, QString defaultValue)
{
constexpr std::array enumValues = {
std::make_pair(LINETHROUGHPERIOD::All, "all"),
std::make_pair(LINETHROUGHPERIOD::Word, "word"),
};
parseEnumAttribute(element, attributeFieldName, attribute, defaultValue, enumValues);
}
static void parseAttribute(const QDomElement& element, QString attributeFieldName, XFA_Attribute& attribute, QString defaultValue)
{
constexpr std::array enumValues = {
std::make_pair(LINETHROUGH::_0, "0"),
std::make_pair(LINETHROUGH::_1, "1"),
std::make_pair(LINETHROUGH::_2, "2"),
};
parseEnumAttribute(element, attributeFieldName, attribute, defaultValue, enumValues);
}
static void parseAttribute(const QDomElement& element, QString attributeFieldName, XFA_Attribute& attribute, QString defaultValue)
{
constexpr std::array enumValues = {
std::make_pair(LISTEN::RefOnly, "refOnly"),
std::make_pair(LISTEN::RefAndDescendents, "refAndDescendents"),
};
parseEnumAttribute(element, attributeFieldName, attribute, defaultValue, enumValues);
}
static void parseAttribute(const QDomElement& element, QString attributeFieldName, XFA_Attribute& attribute, QString defaultValue)
{
constexpr std::array enumValues = {
std::make_pair(MARK::Default, "default"),
std::make_pair(MARK::Check, "check"),
std::make_pair(MARK::Circle, "circle"),
std::make_pair(MARK::Cross, "cross"),
std::make_pair(MARK::Diamond, "diamond"),
std::make_pair(MARK::Square, "square"),
std::make_pair(MARK::Star, "star"),
};
parseEnumAttribute(element, attributeFieldName, attribute, defaultValue, enumValues);
}
static void parseAttribute(const QDomElement& element, QString attributeFieldName, XFA_Attribute& attribute, QString defaultValue)
{
constexpr std::array enumValues = {
std::make_pair(MATCH::Once, "once"),
std::make_pair(MATCH::DataRef, "dataRef"),
std::make_pair(MATCH::Global, "global"),
std::make_pair(MATCH::None, "none"),
};
parseEnumAttribute(element, attributeFieldName, attribute, defaultValue, enumValues);
}
static void parseAttribute(const QDomElement& element, QString attributeFieldName, XFA_Attribute& attribute, QString defaultValue)
{
constexpr std::array enumValues = {
std::make_pair(MERGEMODE::ConsumeData, "consumeData"),
std::make_pair(MERGEMODE::MatchTemplate, "matchTemplate"),
};
parseEnumAttribute(element, attributeFieldName, attribute, defaultValue, enumValues);
}
static void parseAttribute(const QDomElement& element, QString attributeFieldName, XFA_Attribute& attribute, QString defaultValue)
{
constexpr std::array enumValues = {
std::make_pair(MULTILINE::_1, "1"),
std::make_pair(MULTILINE::_0, "0"),
};
parseEnumAttribute(element, attributeFieldName, attribute, defaultValue, enumValues);
}
static void parseAttribute(const QDomElement& element, QString attributeFieldName, XFA_Attribute& attribute, QString defaultValue)
{
constexpr std::array enumValues = {
std::make_pair(NEXT::None, "none"),
std::make_pair(NEXT::ContentArea, "contentArea"),
std::make_pair(NEXT::PageArea, "pageArea"),
};
parseEnumAttribute(element, attributeFieldName, attribute, defaultValue, enumValues);
}
static void parseAttribute(const QDomElement& element, QString attributeFieldName, XFA_Attribute& attribute, QString defaultValue)
{
constexpr std::array enumValues = {
std::make_pair(NULLTEST::Disabled, "disabled"),
std::make_pair(NULLTEST::Error, "error"),
std::make_pair(NULLTEST::Warning, "warning"),
};
parseEnumAttribute(element, attributeFieldName, attribute, defaultValue, enumValues);
}
static void parseAttribute(const QDomElement& element, QString attributeFieldName, XFA_Attribute& attribute, QString defaultValue)
{
constexpr std::array enumValues = {
std::make_pair(ODDOREVEN::Any, "any"),
std::make_pair(ODDOREVEN::Even, "even"),
std::make_pair(ODDOREVEN::Odd, "odd"),
};
parseEnumAttribute(element, attributeFieldName, attribute, defaultValue, enumValues);
}
static void parseAttribute(const QDomElement& element, QString attributeFieldName, XFA_Attribute& attribute, QString defaultValue)
{
constexpr std::array enumValues = {
std::make_pair(OPEN::UserControl, "userControl"),
std::make_pair(OPEN::Always, "always"),
std::make_pair(OPEN::MultiSelect, "multiSelect"),
std::make_pair(OPEN::OnEntry, "onEntry"),
};
parseEnumAttribute(element, attributeFieldName, attribute, defaultValue, enumValues);
}
static void parseAttribute(const QDomElement& element, QString attributeFieldName, XFA_Attribute& attribute, QString defaultValue)
{
constexpr std::array enumValues = {
std::make_pair(OPERATION::Encrypt, "encrypt"),
std::make_pair(OPERATION::Decrypt, "decrypt"),
};
parseEnumAttribute(element, attributeFieldName, attribute, defaultValue, enumValues);
}
static void parseAttribute(const QDomElement& element, QString attributeFieldName, XFA_Attribute& attribute, QString defaultValue)
{
constexpr std::array enumValues = {
std::make_pair(OPERATION2::Next, "next"),
std::make_pair(OPERATION2::Back, "back"),
std::make_pair(OPERATION2::Down, "down"),
std::make_pair(OPERATION2::First, "first"),
std::make_pair(OPERATION2::Left, "left"),
std::make_pair(OPERATION2::Right, "right"),
std::make_pair(OPERATION2::Up, "up"),
};
parseEnumAttribute(element, attributeFieldName, attribute, defaultValue, enumValues);
}
static void parseAttribute(const QDomElement& element, QString attributeFieldName, XFA_Attribute& attribute, QString defaultValue)
{
constexpr std::array enumValues = {
std::make_pair(OPERATION1::Sign, "sign"),
std::make_pair(OPERATION1::Clear, "clear"),
std::make_pair(OPERATION1::Verify, "verify"),
};
parseEnumAttribute(element, attributeFieldName, attribute, defaultValue, enumValues);
}
static void parseAttribute(const QDomElement& element, QString attributeFieldName, XFA_Attribute& attribute, QString defaultValue)
{
constexpr std::array enumValues = {
std::make_pair(ORIENTATION::Portrait, "portrait"),
std::make_pair(ORIENTATION::Landscape, "landscape"),
};
parseEnumAttribute(element, attributeFieldName, attribute, defaultValue, enumValues);
}
static void parseAttribute(const QDomElement& element, QString attributeFieldName, XFA_Attribute& attribute, QString defaultValue)
{
constexpr std::array enumValues = {
std::make_pair(OVERLINEPERIOD::All, "all"),
std::make_pair(OVERLINEPERIOD::Word, "word"),
};
parseEnumAttribute(element, attributeFieldName, attribute, defaultValue, enumValues);
}
static void parseAttribute(const QDomElement& element, QString attributeFieldName, XFA_Attribute& attribute, QString defaultValue)
{
constexpr std::array enumValues = {
std::make_pair(OVERLINE::_0, "0"),
std::make_pair(OVERLINE::_1, "1"),
std::make_pair(OVERLINE::_2, "2"),
};
parseEnumAttribute(element, attributeFieldName, attribute, defaultValue, enumValues);
}
static void parseAttribute(const QDomElement& element, QString attributeFieldName, XFA_Attribute& attribute, QString defaultValue)
{
constexpr std::array enumValues = {
std::make_pair(OVERRIDE::Disabled, "disabled"),
std::make_pair(OVERRIDE::Error, "error"),
std::make_pair(OVERRIDE::Ignore, "ignore"),
std::make_pair(OVERRIDE::Warning, "warning"),
};
parseEnumAttribute(element, attributeFieldName, attribute, defaultValue, enumValues);
}
static void parseAttribute(const QDomElement& element, QString attributeFieldName, XFA_Attribute& attribute, QString defaultValue)
{
constexpr std::array enumValues = {
std::make_pair(PAGEPOSITION::Any, "any"),
std::make_pair(PAGEPOSITION::First, "first"),
std::make_pair(PAGEPOSITION::Last, "last"),
std::make_pair(PAGEPOSITION::Only, "only"),
std::make_pair(PAGEPOSITION::Rest, "rest"),
};
parseEnumAttribute(element, attributeFieldName, attribute, defaultValue, enumValues);
}
static void parseAttribute(const QDomElement& element, QString attributeFieldName, XFA_Attribute& attribute, QString defaultValue)
{
constexpr std::array enumValues = {
std::make_pair(PERMISSIONS::_2, "2"),
std::make_pair(PERMISSIONS::_1, "1"),
std::make_pair(PERMISSIONS::_3, "3"),
};
parseEnumAttribute(element, attributeFieldName, attribute, defaultValue, enumValues);
}
static void parseAttribute(const QDomElement& element, QString attributeFieldName, XFA_Attribute& attribute, QString defaultValue)
{
constexpr std::array enumValues = {
std::make_pair(PICKER::Host, "host"),
std::make_pair(PICKER::None, "none"),
};
parseEnumAttribute(element, attributeFieldName, attribute, defaultValue, enumValues);
}
static void parseAttribute(const QDomElement& element, QString attributeFieldName, XFA_Attribute& attribute, QString defaultValue)
{
constexpr std::array enumValues = {
std::make_pair(PLACEMENT::Left, "left"),
std::make_pair(PLACEMENT::Bottom, "bottom"),
std::make_pair(PLACEMENT::Inline, "inline"),
std::make_pair(PLACEMENT::Right, "right"),
std::make_pair(PLACEMENT::Top, "top"),
};
parseEnumAttribute(element, attributeFieldName, attribute, defaultValue, enumValues);
}
static void parseAttribute(const QDomElement& element, QString attributeFieldName, XFA_Attribute& attribute, QString defaultValue)
{
constexpr std::array enumValues = {
std::make_pair(POSTURE::Normal, "normal"),
std::make_pair(POSTURE::Italic, "italic"),
};
parseEnumAttribute(element, attributeFieldName, attribute, defaultValue, enumValues);
}
static void parseAttribute(const QDomElement& element, QString attributeFieldName, XFA_Attribute& attribute, QString defaultValue)
{
constexpr std::array enumValues = {
std::make_pair(PRESENCE::Visible, "visible"),
std::make_pair(PRESENCE::Hidden, "hidden"),
std::make_pair(PRESENCE::Inactive, "inactive"),
std::make_pair(PRESENCE::Invisible, "invisible"),
};
parseEnumAttribute(element, attributeFieldName, attribute, defaultValue, enumValues);
}
static void parseAttribute(const QDomElement& element, QString attributeFieldName, XFA_Attribute& attribute, QString defaultValue)
{
constexpr std::array enumValues = {
std::make_pair(PREVIOUS::None, "none"),
std::make_pair(PREVIOUS::ContentArea, "contentArea"),
std::make_pair(PREVIOUS::PageArea, "pageArea"),
};
parseEnumAttribute(element, attributeFieldName, attribute, defaultValue, enumValues);
}
static void parseAttribute(const QDomElement& element, QString attributeFieldName, XFA_Attribute& attribute, QString defaultValue)
{
constexpr std::array enumValues = {
std::make_pair(PRIORITY::Custom, "custom"),
std::make_pair(PRIORITY::Caption, "caption"),
std::make_pair(PRIORITY::Name, "name"),
std::make_pair(PRIORITY::ToolTip, "toolTip"),
};
parseEnumAttribute(element, attributeFieldName, attribute, defaultValue, enumValues);
}
static void parseAttribute(const QDomElement& element, QString attributeFieldName, XFA_Attribute& attribute, QString defaultValue)
{
constexpr std::array enumValues = {
std::make_pair(RELATION1::Ordered, "ordered"),
std::make_pair(RELATION1::Choice, "choice"),
std::make_pair(RELATION1::Unordered, "unordered"),
};
parseEnumAttribute(element, attributeFieldName, attribute, defaultValue, enumValues);
}
static void parseAttribute(const QDomElement& element, QString attributeFieldName, XFA_Attribute& attribute, QString defaultValue)
{
constexpr std::array enumValues = {
std::make_pair(RELATION::OrderedOccurrence, "orderedOccurrence"),
std::make_pair(RELATION::DuplexPaginated, "duplexPaginated"),
std::make_pair(RELATION::SimplexPaginated, "simplexPaginated"),
};
parseEnumAttribute(element, attributeFieldName, attribute, defaultValue, enumValues);
}
static void parseAttribute(const QDomElement& element, QString attributeFieldName, XFA_Attribute& attribute, QString defaultValue)
{
constexpr std::array enumValues = {
std::make_pair(RESTORESTATE::Manual, "manual"),
std::make_pair(RESTORESTATE::Auto, "auto"),
};
parseEnumAttribute(element, attributeFieldName, attribute, defaultValue, enumValues);
}
static void parseAttribute(const QDomElement& element, QString attributeFieldName, XFA_Attribute& attribute, QString defaultValue)
{
constexpr std::array enumValues = {
std::make_pair(RUNAT::Client, "client"),
std::make_pair(RUNAT::Both, "both"),
std::make_pair(RUNAT::Server, "server"),
};
parseEnumAttribute(element, attributeFieldName, attribute, defaultValue, enumValues);
}
static void parseAttribute(const QDomElement& element, QString attributeFieldName, XFA_Attribute& attribute, QString defaultValue)
{
constexpr std::array enumValues = {
std::make_pair(SCOPE::Name, "name"),
std::make_pair(SCOPE::None, "none"),
};
parseEnumAttribute(element, attributeFieldName, attribute, defaultValue, enumValues);
}
static void parseAttribute(const QDomElement& element, QString attributeFieldName, XFA_Attribute& attribute, QString defaultValue)
{
constexpr std::array enumValues = {
std::make_pair(SCRIPTTEST::Error, "error"),
std::make_pair(SCRIPTTEST::Disabled, "disabled"),
std::make_pair(SCRIPTTEST::Warning, "warning"),
};
parseEnumAttribute(element, attributeFieldName, attribute, defaultValue, enumValues);
}
static void parseAttribute(const QDomElement& element, QString attributeFieldName, XFA_Attribute& attribute, QString defaultValue)
{
constexpr std::array enumValues = {
std::make_pair(SHAPE::Square, "square"),
std::make_pair(SHAPE::Round, "round"),
};
parseEnumAttribute(element, attributeFieldName, attribute, defaultValue, enumValues);
}
static void parseAttribute(const QDomElement& element, QString attributeFieldName, XFA_Attribute& attribute, QString defaultValue)
{
constexpr std::array enumValues = {
std::make_pair(SIGNATURETYPE::Filler, "filler"),
std::make_pair(SIGNATURETYPE::Author, "author"),
};
parseEnumAttribute(element, attributeFieldName, attribute, defaultValue, enumValues);
}
static void parseAttribute(const QDomElement& element, QString attributeFieldName, XFA_Attribute& attribute, QString defaultValue)
{
constexpr std::array enumValues = {
std::make_pair(SLOPE::Backslash, "\\"),
std::make_pair(SLOPE::Slash, "/"),
};
parseEnumAttribute(element, attributeFieldName, attribute, defaultValue, enumValues);
}
static void parseAttribute(const QDomElement& element, QString attributeFieldName, XFA_Attribute& attribute, QString defaultValue)
{
constexpr std::array enumValues = {
std::make_pair(STROKE::Solid, "solid"),
std::make_pair(STROKE::DashDot, "dashDot"),
std::make_pair(STROKE::DashDotDot, "dashDotDot"),
std::make_pair(STROKE::Dashed, "dashed"),
std::make_pair(STROKE::Dotted, "dotted"),
std::make_pair(STROKE::Embossed, "embossed"),
std::make_pair(STROKE::Etched, "etched"),
std::make_pair(STROKE::Lowered, "lowered"),
std::make_pair(STROKE::Raised, "raised"),
};
parseEnumAttribute(element, attributeFieldName, attribute, defaultValue, enumValues);
}
static void parseAttribute(const QDomElement& element, QString attributeFieldName, XFA_Attribute& attribute, QString defaultValue)
{
constexpr std::array enumValues = {
std::make_pair(TARGETTYPE::Auto, "auto"),
std::make_pair(TARGETTYPE::ContentArea, "contentArea"),
std::make_pair(TARGETTYPE::PageArea, "pageArea"),
std::make_pair(TARGETTYPE::PageEven, "pageEven"),
std::make_pair(TARGETTYPE::PageOdd, "pageOdd"),
};
parseEnumAttribute(element, attributeFieldName, attribute, defaultValue, enumValues);
}
static void parseAttribute(const QDomElement& element, QString attributeFieldName, XFA_Attribute& attribute, QString defaultValue)
{
constexpr std::array enumValues = {
std::make_pair(TEXTLOCATION::Below, "below"),
std::make_pair(TEXTLOCATION::Above, "above"),
std::make_pair(TEXTLOCATION::AboveEmbedded, "aboveEmbedded"),
std::make_pair(TEXTLOCATION::BelowEmbedded, "belowEmbedded"),
std::make_pair(TEXTLOCATION::None, "none"),
};
parseEnumAttribute(element, attributeFieldName, attribute, defaultValue, enumValues);
}
static void parseAttribute(const QDomElement& element, QString attributeFieldName, XFA_Attribute& attribute, QString defaultValue)
{
constexpr std::array enumValues = {
std::make_pair(TRANSFERENCODING1::Base64, "base64"),
std::make_pair(TRANSFERENCODING1::None, "none"),
std::make_pair(TRANSFERENCODING1::Package, "package"),
};
parseEnumAttribute(element, attributeFieldName, attribute, defaultValue, enumValues);
}
static void parseAttribute(const QDomElement& element, QString attributeFieldName, XFA_Attribute& attribute, QString defaultValue)
{
constexpr std::array enumValues = {
std::make_pair(TRANSFERENCODING::None, "none"),
std::make_pair(TRANSFERENCODING::Base64, "base64"),
std::make_pair(TRANSFERENCODING::Package, "package"),
};
parseEnumAttribute(element, attributeFieldName, attribute, defaultValue, enumValues);
}
static void parseAttribute(const QDomElement& element, QString attributeFieldName, XFA_Attribute& attribute, QString defaultValue)
{
constexpr std::array enumValues = {
std::make_pair(TRAYIN::Auto, "auto"),
std::make_pair(TRAYIN::Delegate, "delegate"),
std::make_pair(TRAYIN::PageFront, "pageFront"),
};
parseEnumAttribute(element, attributeFieldName, attribute, defaultValue, enumValues);
}
static void parseAttribute(const QDomElement& element, QString attributeFieldName, XFA_Attribute& attribute, QString defaultValue)
{
constexpr std::array enumValues = {
std::make_pair(TRAYOUT::Auto, "auto"),
std::make_pair(TRAYOUT::Delegate, "delegate"),
};
parseEnumAttribute(element, attributeFieldName, attribute, defaultValue, enumValues);
}
static void parseAttribute(const QDomElement& element, QString attributeFieldName, XFA_Attribute& attribute, QString defaultValue)
{
constexpr std::array enumValues = {
std::make_pair(TYPE4::PDF1_3, "PDF1.3"),
std::make_pair(TYPE4::PDF1_6, "PDF1.6"),
};
parseEnumAttribute(element, attributeFieldName, attribute, defaultValue, enumValues);
}
static void parseAttribute(const QDomElement& element, QString attributeFieldName, XFA_Attribute& attribute, QString defaultValue)
{
constexpr std::array enumValues = {
std::make_pair(TYPE2::CrossHatch, "crossHatch"),
std::make_pair(TYPE2::CrossDiagonal, "crossDiagonal"),
std::make_pair(TYPE2::DiagonalLeft, "diagonalLeft"),
std::make_pair(TYPE2::DiagonalRight, "diagonalRight"),
std::make_pair(TYPE2::Horizontal, "horizontal"),
std::make_pair(TYPE2::Vertical, "vertical"),
};
parseEnumAttribute(element, attributeFieldName, attribute, defaultValue, enumValues);
}
static void parseAttribute(const QDomElement& element, QString attributeFieldName, XFA_Attribute& attribute, QString defaultValue)
{
constexpr std::array enumValues = {
std::make_pair(TYPE::Optional, "optional"),
std::make_pair(TYPE::Required, "required"),
};
parseEnumAttribute(element, attributeFieldName, attribute, defaultValue, enumValues);
}
static void parseAttribute(const QDomElement& element, QString attributeFieldName, XFA_Attribute& attribute, QString defaultValue)
{
constexpr std::array enumValues = {
std::make_pair(TYPE3::ToEdge, "toEdge"),
std::make_pair(TYPE3::ToCenter, "toCenter"),
};
parseEnumAttribute(element, attributeFieldName, attribute, defaultValue, enumValues);
}
static void parseAttribute(const QDomElement& element, QString attributeFieldName, XFA_Attribute& attribute, QString defaultValue)
{
constexpr std::array enumValues = {
std::make_pair(TYPE1::ToRight, "toRight"),
std::make_pair(TYPE1::ToBottom, "toBottom"),
std::make_pair(TYPE1::ToLeft, "toLeft"),
std::make_pair(TYPE1::ToTop, "toTop"),
};
parseEnumAttribute(element, attributeFieldName, attribute, defaultValue, enumValues);
}
static void parseAttribute(const QDomElement& element, QString attributeFieldName, XFA_Attribute& attribute, QString defaultValue)
{
constexpr std::array enumValues = {
std::make_pair(UNDERLINEPERIOD::All, "all"),
std::make_pair(UNDERLINEPERIOD::Word, "word"),
};
parseEnumAttribute(element, attributeFieldName, attribute, defaultValue, enumValues);
}
static void parseAttribute(const QDomElement& element, QString attributeFieldName, XFA_Attribute& attribute, QString defaultValue)
{
constexpr std::array enumValues = {
std::make_pair(UNDERLINE::_0, "0"),
std::make_pair(UNDERLINE::_1, "1"),
std::make_pair(UNDERLINE::_2, "2"),
};
parseEnumAttribute(element, attributeFieldName, attribute, defaultValue, enumValues);
}
static void parseAttribute(const QDomElement& element, QString attributeFieldName, XFA_Attribute& attribute, QString defaultValue)
{
constexpr std::array enumValues = {
std::make_pair(UPSMODE::UsCarrier, "usCarrier"),
std::make_pair(UPSMODE::InternationalCarrier, "internationalCarrier"),
std::make_pair(UPSMODE::SecureSymbol, "secureSymbol"),
std::make_pair(UPSMODE::StandardSymbol, "standardSymbol"),
};
parseEnumAttribute(element, attributeFieldName, attribute, defaultValue, enumValues);
}
static void parseAttribute(const QDomElement& element, QString attributeFieldName, XFA_Attribute& attribute, QString defaultValue)
{
constexpr std::array enumValues = {
std::make_pair(USAGE::ExportAndImport, "exportAndImport"),
std::make_pair(USAGE::ExportOnly, "exportOnly"),
std::make_pair(USAGE::ImportOnly, "importOnly"),
};
parseEnumAttribute(element, attributeFieldName, attribute, defaultValue, enumValues);
}
static void parseAttribute(const QDomElement& element, QString attributeFieldName, XFA_Attribute& attribute, QString defaultValue)
{
constexpr std::array enumValues = {
std::make_pair(VALIGN::Top, "top"),
std::make_pair(VALIGN::Bottom, "bottom"),
std::make_pair(VALIGN::Middle, "middle"),
};
parseEnumAttribute(element, attributeFieldName, attribute, defaultValue, enumValues);
}
static void parseAttribute(const QDomElement& element, QString attributeFieldName, XFA_Attribute& attribute, QString defaultValue)
{
constexpr std::array enumValues = {
std::make_pair(VSCROLLPOLICY::Auto, "auto"),
std::make_pair(VSCROLLPOLICY::Off, "off"),
std::make_pair(VSCROLLPOLICY::On, "on"),
};
parseEnumAttribute(element, attributeFieldName, attribute, defaultValue, enumValues);
}
static void parseAttribute(const QDomElement& element, QString attributeFieldName, XFA_Attribute& attribute, QString defaultValue)
{
constexpr std::array enumValues = {
std::make_pair(WEIGHT::Normal, "normal"),
std::make_pair(WEIGHT::Bold, "bold"),
};
parseEnumAttribute(element, attributeFieldName, attribute, defaultValue, enumValues);
}
};
class XFA_appearanceFilter : public XFA_BaseNode
{
public:
QString getId() const { return m_id.getValueOrDefault(); }
TYPE getType() const { return m_type.getValueOrDefault(); }
QString getUse() const { return m_use.getValueOrDefault(); }
QString getUsehref() const { return m_usehref.getValueOrDefault(); }
const QString* getNodeValue() const { return m_nodeValue.getValue(); }
virtual void accept(XFA_AbstractVisitor* visitor) const override { visitor->visit(this); }
static std::optional parse(const QDomElement& element);
private:
/* properties */
XFA_Attribute m_id;
XFA_Attribute m_type;
XFA_Attribute m_use;
XFA_Attribute m_usehref;
/* subnodes */
XFA_Value m_nodeValue;
};
std::optional XFA_appearanceFilter::parse(const QDomElement& element)
{
if (element.isNull())
{
return std::nullopt;
}
XFA_appearanceFilter myClass;
// load attributes
parseAttribute(element, "id", myClass.m_id, "");
parseAttribute(element, "type", myClass.m_type, "optional");
parseAttribute(element, "use", myClass.m_use, "");
parseAttribute(element, "usehref", myClass.m_usehref, "");
// load items
// load node value
parseValue(element, myClass.m_nodeValue);
myClass.setOrderFromElement(element);
return myClass;
}
class XFA_bindItems : public XFA_BaseNode
{
public:
QString getConnection() const { return m_connection.getValueOrDefault(); }
QString getLabelRef() const { return m_labelRef.getValueOrDefault(); }
QString getRef() const { return m_ref.getValueOrDefault(); }
QString getValueRef() const { return m_valueRef.getValueOrDefault(); }
virtual void accept(XFA_AbstractVisitor* visitor) const override { visitor->visit(this); }
static std::optional parse(const QDomElement& element);
private:
/* properties */
XFA_Attribute m_connection;
XFA_Attribute m_labelRef;
XFA_Attribute m_ref;
XFA_Attribute m_valueRef;
/* subnodes */
};
std::optional XFA_bindItems::parse(const QDomElement& element)
{
if (element.isNull())
{
return std::nullopt;
}
XFA_bindItems myClass;
// load attributes
parseAttribute(element, "connection", myClass.m_connection, "");
parseAttribute(element, "labelRef", myClass.m_labelRef, "");
parseAttribute(element, "ref", myClass.m_ref, "");
parseAttribute(element, "valueRef", myClass.m_valueRef, "");
// load items
myClass.setOrderFromElement(element);
return myClass;
}
class XFA_bookend : public XFA_BaseNode
{
public:
QString getId() const { return m_id.getValueOrDefault(); }
QString getLeader() const { return m_leader.getValueOrDefault(); }
QString getTrailer() const { return m_trailer.getValueOrDefault(); }
QString getUse() const { return m_use.getValueOrDefault(); }
QString getUsehref() const { return m_usehref.getValueOrDefault(); }
virtual void accept(XFA_AbstractVisitor* visitor) const override { visitor->visit(this); }
static std::optional parse(const QDomElement& element);
private:
/* properties */
XFA_Attribute m_id;
XFA_Attribute m_leader;
XFA_Attribute m_trailer;
XFA_Attribute m_use;
XFA_Attribute m_usehref;
/* subnodes */
};
std::optional XFA_bookend::parse(const QDomElement& element)
{
if (element.isNull())
{
return std::nullopt;
}
XFA_bookend myClass;
// load attributes
parseAttribute(element, "id", myClass.m_id, "");
parseAttribute(element, "leader", myClass.m_leader, "");
parseAttribute(element, "trailer", myClass.m_trailer, "");
parseAttribute(element, "use", myClass.m_use, "");
parseAttribute(element, "usehref", myClass.m_usehref, "");
// load items
myClass.setOrderFromElement(element);
return myClass;
}
class XFA_boolean : public XFA_BaseNode
{
public:
QString getId() const { return m_id.getValueOrDefault(); }
QString getName() const { return m_name.getValueOrDefault(); }
QString getUse() const { return m_use.getValueOrDefault(); }
QString getUsehref() const { return m_usehref.getValueOrDefault(); }
const QString* getNodeValue() const { return m_nodeValue.getValue(); }
virtual void accept(XFA_AbstractVisitor* visitor) const override { visitor->visit(this); }
static std::optional parse(const QDomElement& element);
private:
/* properties */
XFA_Attribute m_id;
XFA_Attribute m_name;
XFA_Attribute m_use;
XFA_Attribute m_usehref;
/* subnodes */
XFA_Value m_nodeValue;
};
std::optional XFA_boolean::parse(const QDomElement& element)
{
if (element.isNull())
{
return std::nullopt;
}
XFA_boolean myClass;
// load attributes
parseAttribute(element, "id", myClass.m_id, "");
parseAttribute(element, "name", myClass.m_name, "");
parseAttribute(element, "use", myClass.m_use, "");
parseAttribute(element, "usehref", myClass.m_usehref, "");
// load items
// load node value
parseValue(element, myClass.m_nodeValue);
myClass.setOrderFromElement(element);
return myClass;
}
class XFA_certificate : public XFA_BaseNode
{
public:
QString getId() const { return m_id.getValueOrDefault(); }
QString getName() const { return m_name.getValueOrDefault(); }
QString getUse() const { return m_use.getValueOrDefault(); }
QString getUsehref() const { return m_usehref.getValueOrDefault(); }
const QString* getNodeValue() const { return m_nodeValue.getValue(); }
virtual void accept(XFA_AbstractVisitor* visitor) const override { visitor->visit(this); }
static std::optional parse(const QDomElement& element);
private:
/* properties */
XFA_Attribute m_id;
XFA_Attribute m_name;
XFA_Attribute m_use;
XFA_Attribute m_usehref;
/* subnodes */
XFA_Value m_nodeValue;
};
std::optional XFA_certificate::parse(const QDomElement& element)
{
if (element.isNull())
{
return std::nullopt;
}
XFA_certificate myClass;
// load attributes
parseAttribute(element, "id", myClass.m_id, "");
parseAttribute(element, "name", myClass.m_name, "");
parseAttribute(element, "use", myClass.m_use, "");
parseAttribute(element, "usehref", myClass.m_usehref, "");
// load items
// load node value
parseValue(element, myClass.m_nodeValue);
myClass.setOrderFromElement(element);
return myClass;
}
class XFA_comb : public XFA_BaseNode
{
public:
QString getId() const { return m_id.getValueOrDefault(); }
PDFInteger getNumberOfCells() const { return m_numberOfCells.getValueOrDefault(); }
QString getUse() const { return m_use.getValueOrDefault(); }
QString getUsehref() const { return m_usehref.getValueOrDefault(); }
virtual void accept(XFA_AbstractVisitor* visitor) const override { visitor->visit(this); }
static std::optional parse(const QDomElement& element);
private:
/* properties */
XFA_Attribute m_id;
XFA_Attribute m_numberOfCells;
XFA_Attribute m_use;
XFA_Attribute m_usehref;
/* subnodes */
};
std::optional XFA_comb::parse(const QDomElement& element)
{
if (element.isNull())
{
return std::nullopt;
}
XFA_comb myClass;
// load attributes
parseAttribute(element, "id", myClass.m_id, "");
parseAttribute(element, "numberOfCells", myClass.m_numberOfCells, "0");
parseAttribute(element, "use", myClass.m_use, "");
parseAttribute(element, "usehref", myClass.m_usehref, "");
// load items
myClass.setOrderFromElement(element);
return myClass;
}
class XFA_date : public XFA_BaseNode
{
public:
QString getId() const { return m_id.getValueOrDefault(); }
QString getName() const { return m_name.getValueOrDefault(); }
QString getUse() const { return m_use.getValueOrDefault(); }
QString getUsehref() const { return m_usehref.getValueOrDefault(); }
const QString* getNodeValue() const { return m_nodeValue.getValue(); }
virtual void accept(XFA_AbstractVisitor* visitor) const override { visitor->visit(this); }
static std::optional parse(const QDomElement& element);
private:
/* properties */
XFA_Attribute m_id;
XFA_Attribute m_name;
XFA_Attribute m_use;
XFA_Attribute m_usehref;
/* subnodes */
XFA_Value m_nodeValue;
};
std::optional XFA_date::parse(const QDomElement& element)
{
if (element.isNull())
{
return std::nullopt;
}
XFA_date myClass;
// load attributes
parseAttribute(element, "id", myClass.m_id, "");
parseAttribute(element, "name", myClass.m_name, "");
parseAttribute(element, "use", myClass.m_use, "");
parseAttribute(element, "usehref", myClass.m_usehref, "");
// load items
// load node value
parseValue(element, myClass.m_nodeValue);
myClass.setOrderFromElement(element);
return myClass;
}
class XFA_dateTime : public XFA_BaseNode
{
public:
QString getId() const { return m_id.getValueOrDefault(); }
QString getName() const { return m_name.getValueOrDefault(); }
QString getUse() const { return m_use.getValueOrDefault(); }
QString getUsehref() const { return m_usehref.getValueOrDefault(); }
const QString* getNodeValue() const { return m_nodeValue.getValue(); }
virtual void accept(XFA_AbstractVisitor* visitor) const override { visitor->visit(this); }
static std::optional parse(const QDomElement& element);
private:
/* properties */
XFA_Attribute m_id;
XFA_Attribute m_name;
XFA_Attribute m_use;
XFA_Attribute m_usehref;
/* subnodes */
XFA_Value m_nodeValue;
};
std::optional XFA_dateTime::parse(const QDomElement& element)
{
if (element.isNull())
{
return std::nullopt;
}
XFA_dateTime myClass;
// load attributes
parseAttribute(element, "id", myClass.m_id, "");
parseAttribute(element, "name", myClass.m_name, "");
parseAttribute(element, "use", myClass.m_use, "");
parseAttribute(element, "usehref", myClass.m_usehref, "");
// load items
// load node value
parseValue(element, myClass.m_nodeValue);
myClass.setOrderFromElement(element);
return myClass;
}
class XFA_decimal : public XFA_BaseNode
{
public:
PDFInteger getFracDigits() const { return m_fracDigits.getValueOrDefault(); }
QString getId() const { return m_id.getValueOrDefault(); }
PDFInteger getLeadDigits() const { return m_leadDigits.getValueOrDefault(); }
QString getName() const { return m_name.getValueOrDefault(); }
QString getUse() const { return m_use.getValueOrDefault(); }
QString getUsehref() const { return m_usehref.getValueOrDefault(); }
const QString* getNodeValue() const { return m_nodeValue.getValue(); }
virtual void accept(XFA_AbstractVisitor* visitor) const override { visitor->visit(this); }
static std::optional parse(const QDomElement& element);
private:
/* properties */
XFA_Attribute m_fracDigits;
XFA_Attribute m_id;
XFA_Attribute m_leadDigits;
XFA_Attribute m_name;
XFA_Attribute m_use;
XFA_Attribute m_usehref;
/* subnodes */
XFA_Value m_nodeValue;
};
std::optional XFA_decimal::parse(const QDomElement& element)
{
if (element.isNull())
{
return std::nullopt;
}
XFA_decimal myClass;
// load attributes
parseAttribute(element, "fracDigits", myClass.m_fracDigits, "2");
parseAttribute(element, "id", myClass.m_id, "");
parseAttribute(element, "leadDigits", myClass.m_leadDigits, "-1");
parseAttribute(element, "name", myClass.m_name, "");
parseAttribute(element, "use", myClass.m_use, "");
parseAttribute(element, "usehref", myClass.m_usehref, "");
// load items
// load node value
parseValue(element, myClass.m_nodeValue);
myClass.setOrderFromElement(element);
return myClass;
}
class XFA_digestMethod : public XFA_BaseNode
{
public:
QString getId() const { return m_id.getValueOrDefault(); }
QString getUse() const { return m_use.getValueOrDefault(); }
QString getUsehref() const { return m_usehref.getValueOrDefault(); }
const QString* getNodeValue() const { return m_nodeValue.getValue(); }
virtual void accept(XFA_AbstractVisitor* visitor) const override { visitor->visit(this); }
static std::optional parse(const QDomElement& element);
private:
/* properties */
XFA_Attribute m_id;
XFA_Attribute m_use;
XFA_Attribute m_usehref;
/* subnodes */
XFA_Value m_nodeValue;
};
std::optional XFA_digestMethod::parse(const QDomElement& element)
{
if (element.isNull())
{
return std::nullopt;
}
XFA_digestMethod myClass;
// load attributes
parseAttribute(element, "id", myClass.m_id, "");
parseAttribute(element, "use", myClass.m_use, "");
parseAttribute(element, "usehref", myClass.m_usehref, "");
// load items
// load node value
parseValue(element, myClass.m_nodeValue);
myClass.setOrderFromElement(element);
return myClass;
}
class XFA_digestMethods : public XFA_BaseNode
{
public:
QString getId() const { return m_id.getValueOrDefault(); }
TYPE getType() const { return m_type.getValueOrDefault(); }
QString getUse() const { return m_use.getValueOrDefault(); }
QString getUsehref() const { return m_usehref.getValueOrDefault(); }
const std::vector>& getDigestMethod() const { return m_digestMethod; }
virtual void accept(XFA_AbstractVisitor* visitor) const override { visitor->visit(this); }
static std::optional parse(const QDomElement& element);
private:
/* properties */
XFA_Attribute m_id;
XFA_Attribute m_type;
XFA_Attribute m_use;
XFA_Attribute m_usehref;
/* subnodes */
std::vector> m_digestMethod;
};
std::optional XFA_digestMethods::parse(const QDomElement& element)
{
if (element.isNull())
{
return std::nullopt;
}
XFA_digestMethods myClass;
// load attributes
parseAttribute(element, "id", myClass.m_id, "");
parseAttribute(element, "type", myClass.m_type, "optional");
parseAttribute(element, "use", myClass.m_use, "");
parseAttribute(element, "usehref", myClass.m_usehref, "");
// load items
parseItem(element, "digestMethod", myClass.m_digestMethod);
myClass.setOrderFromElement(element);
return myClass;
}
class XFA_encoding : public XFA_BaseNode
{
public:
QString getId() const { return m_id.getValueOrDefault(); }
QString getUse() const { return m_use.getValueOrDefault(); }
QString getUsehref() const { return m_usehref.getValueOrDefault(); }
const QString* getNodeValue() const { return m_nodeValue.getValue(); }
virtual void accept(XFA_AbstractVisitor* visitor) const override { visitor->visit(this); }
static std::optional parse(const QDomElement& element);
private:
/* properties */
XFA_Attribute m_id;
XFA_Attribute m_use;
XFA_Attribute m_usehref;
/* subnodes */
XFA_Value m_nodeValue;
};
std::optional XFA_encoding::parse(const QDomElement& element)
{
if (element.isNull())
{
return std::nullopt;
}
XFA_encoding myClass;
// load attributes
parseAttribute(element, "id", myClass.m_id, "");
parseAttribute(element, "use", myClass.m_use, "");
parseAttribute(element, "usehref", myClass.m_usehref, "");
// load items
// load node value
parseValue(element, myClass.m_nodeValue);
myClass.setOrderFromElement(element);
return myClass;
}
class XFA_encodings : public XFA_BaseNode
{
public:
QString getId() const { return m_id.getValueOrDefault(); }
TYPE getType() const { return m_type.getValueOrDefault(); }
QString getUse() const { return m_use.getValueOrDefault(); }
QString getUsehref() const { return m_usehref.getValueOrDefault(); }
const std::vector>& getEncoding() const { return m_encoding; }
virtual void accept(XFA_AbstractVisitor* visitor) const override { visitor->visit(this); }
static std::optional parse(const QDomElement& element);
private:
/* properties */
XFA_Attribute m_id;
XFA_Attribute m_type;
XFA_Attribute m_use;
XFA_Attribute m_usehref;
/* subnodes */
std::vector> m_encoding;
};
std::optional XFA_encodings::parse(const QDomElement& element)
{
if (element.isNull())
{
return std::nullopt;
}
XFA_encodings myClass;
// load attributes
parseAttribute(element, "id", myClass.m_id, "");
parseAttribute(element, "type", myClass.m_type, "optional");
parseAttribute(element, "use", myClass.m_use, "");
parseAttribute(element, "usehref", myClass.m_usehref, "");
// load items
parseItem(element, "encoding", myClass.m_encoding);
myClass.setOrderFromElement(element);
return myClass;
}
class XFA_encrypt : public XFA_BaseNode
{
public:
QString getId() const { return m_id.getValueOrDefault(); }
QString getUse() const { return m_use.getValueOrDefault(); }
QString getUsehref() const { return m_usehref.getValueOrDefault(); }
const XFA_certificate* getCertificate() const { return m_certificate.getValue(); }
virtual void accept(XFA_AbstractVisitor* visitor) const override { visitor->visit(this); }
static std::optional parse(const QDomElement& element);
private:
/* properties */
XFA_Attribute m_id;
XFA_Attribute m_use;
XFA_Attribute m_usehref;
/* subnodes */
XFA_Node m_certificate;
};
std::optional XFA_encrypt::parse(const QDomElement& element)
{
if (element.isNull())
{
return std::nullopt;
}
XFA_encrypt myClass;
// load attributes
parseAttribute(element, "id", myClass.m_id, "");
parseAttribute(element, "use", myClass.m_use, "");
parseAttribute(element, "usehref", myClass.m_usehref, "");
// load items
parseItem(element, "certificate", myClass.m_certificate);
myClass.setOrderFromElement(element);
return myClass;
}
class XFA_encryption : public XFA_BaseNode
{
public:
QString getId() const { return m_id.getValueOrDefault(); }
TYPE getType() const { return m_type.getValueOrDefault(); }
QString getUse() const { return m_use.getValueOrDefault(); }
QString getUsehref() const { return m_usehref.getValueOrDefault(); }
const std::vector>& getCertificate() const { return m_certificate; }
virtual void accept(XFA_AbstractVisitor* visitor) const override { visitor->visit(this); }
static std::optional parse(const QDomElement& element);
private:
/* properties */
XFA_Attribute m_id;
XFA_Attribute m_type;
XFA_Attribute m_use;
XFA_Attribute m_usehref;
/* subnodes */
std::vector> m_certificate;
};
std::optional XFA_encryption::parse(const QDomElement& element)
{
if (element.isNull())
{
return std::nullopt;
}
XFA_encryption myClass;
// load attributes
parseAttribute(element, "id", myClass.m_id, "");
parseAttribute(element, "type", myClass.m_type, "");
parseAttribute(element, "use", myClass.m_use, "");
parseAttribute(element, "usehref", myClass.m_usehref, "");
// load items
parseItem(element, "certificate", myClass.m_certificate);
myClass.setOrderFromElement(element);
return myClass;
}
class XFA_encryptionMethod : public XFA_BaseNode
{
public:
QString getId() const { return m_id.getValueOrDefault(); }
QString getUse() const { return m_use.getValueOrDefault(); }
QString getUsehref() const { return m_usehref.getValueOrDefault(); }
const QString* getNodeValue() const { return m_nodeValue.getValue(); }
virtual void accept(XFA_AbstractVisitor* visitor) const override { visitor->visit(this); }
static std::optional parse(const QDomElement& element);
private:
/* properties */
XFA_Attribute m_id;
XFA_Attribute m_use;
XFA_Attribute m_usehref;
/* subnodes */
XFA_Value m_nodeValue;
};
std::optional XFA_encryptionMethod::parse(const QDomElement& element)
{
if (element.isNull())
{
return std::nullopt;
}
XFA_encryptionMethod myClass;
// load attributes
parseAttribute(element, "id", myClass.m_id, "");
parseAttribute(element, "use", myClass.m_use, "");
parseAttribute(element, "usehref", myClass.m_usehref, "");
// load items
// load node value
parseValue(element, myClass.m_nodeValue);
myClass.setOrderFromElement(element);
return myClass;
}
class XFA_encryptionMethods : public XFA_BaseNode
{
public:
QString getId() const { return m_id.getValueOrDefault(); }
TYPE getType() const { return m_type.getValueOrDefault(); }
QString getUse() const { return m_use.getValueOrDefault(); }
QString getUsehref() const { return m_usehref.getValueOrDefault(); }
const std::vector>& getEncryptionMethod() const { return m_encryptionMethod; }
virtual void accept(XFA_AbstractVisitor* visitor) const override { visitor->visit(this); }
static std::optional parse(const QDomElement& element);
private:
/* properties */
XFA_Attribute