Make XFA_PropertyFlag an enum class

Change-Id: I88ecfe5c0f47e1c0da1b1935f557c2dd35f3de04
Reviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/84091
Commit-Queue: Tom Sepez <tsepez@chromium.org>
Reviewed-by: Lei Zhang <thestig@chromium.org>
diff --git a/xfa/fxfa/parser/cxfa_acrobat.cpp b/xfa/fxfa/parser/cxfa_acrobat.cpp
index d2501b0..34d4065 100644
--- a/xfa/fxfa/parser/cxfa_acrobat.cpp
+++ b/xfa/fxfa/parser/cxfa_acrobat.cpp
@@ -12,11 +12,11 @@
 namespace {
 
 const CXFA_Node::PropertyData kAcrobatPropertyData[] = {
-    {XFA_Element::AutoSave, 1, 0},
-    {XFA_Element::Validate, 1, 0},
-    {XFA_Element::ValidateApprovalSignatures, 1, 0},
-    {XFA_Element::Acrobat7, 1, 0},
-    {XFA_Element::Common, 1, 0},
+    {XFA_Element::AutoSave, 1, {}},
+    {XFA_Element::Validate, 1, {}},
+    {XFA_Element::ValidateApprovalSignatures, 1, {}},
+    {XFA_Element::Acrobat7, 1, {}},
+    {XFA_Element::Common, 1, {}},
 };
 
 const CXFA_Node::AttributeData kAcrobatAttributeData[] = {
diff --git a/xfa/fxfa/parser/cxfa_acrobat7.cpp b/xfa/fxfa/parser/cxfa_acrobat7.cpp
index b36a5cd..a152932 100644
--- a/xfa/fxfa/parser/cxfa_acrobat7.cpp
+++ b/xfa/fxfa/parser/cxfa_acrobat7.cpp
@@ -12,7 +12,7 @@
 namespace {
 
 const CXFA_Node::PropertyData kAcrobat7PropertyData[] = {
-    {XFA_Element::DynamicRender, 1, 0},
+    {XFA_Element::DynamicRender, 1, {}},
 };
 
 const CXFA_Node::AttributeData kAcrobat7AttributeData[] = {
diff --git a/xfa/fxfa/parser/cxfa_arc.cpp b/xfa/fxfa/parser/cxfa_arc.cpp
index 89b68f0..db67cf5 100644
--- a/xfa/fxfa/parser/cxfa_arc.cpp
+++ b/xfa/fxfa/parser/cxfa_arc.cpp
@@ -12,8 +12,8 @@
 namespace {
 
 const CXFA_Node::PropertyData kArcPropertyData[] = {
-    {XFA_Element::Edge, 1, 0},
-    {XFA_Element::Fill, 1, 0},
+    {XFA_Element::Edge, 1, {}},
+    {XFA_Element::Fill, 1, {}},
 };
 
 const CXFA_Node::AttributeData kArcAttributeData[] = {
diff --git a/xfa/fxfa/parser/cxfa_area.cpp b/xfa/fxfa/parser/cxfa_area.cpp
index 6729228..3fcdde3 100644
--- a/xfa/fxfa/parser/cxfa_area.cpp
+++ b/xfa/fxfa/parser/cxfa_area.cpp
@@ -12,8 +12,8 @@
 namespace {
 
 const CXFA_Node::PropertyData kAreaPropertyData[] = {
-    {XFA_Element::Desc, 1, 0},
-    {XFA_Element::Extras, 1, 0},
+    {XFA_Element::Desc, 1, {}},
+    {XFA_Element::Extras, 1, {}},
 };
 
 const CXFA_Node::AttributeData kAreaAttributeData[] = {
diff --git a/xfa/fxfa/parser/cxfa_assist.cpp b/xfa/fxfa/parser/cxfa_assist.cpp
index 4ad409e..8d96b6a 100644
--- a/xfa/fxfa/parser/cxfa_assist.cpp
+++ b/xfa/fxfa/parser/cxfa_assist.cpp
@@ -12,8 +12,8 @@
 namespace {
 
 const CXFA_Node::PropertyData kAssistPropertyData[] = {
-    {XFA_Element::ToolTip, 1, 0},
-    {XFA_Element::Speak, 1, 0},
+    {XFA_Element::ToolTip, 1, {}},
+    {XFA_Element::Speak, 1, {}},
 };
 
 const CXFA_Node::AttributeData kAssistAttributeData[] = {
diff --git a/xfa/fxfa/parser/cxfa_bind.cpp b/xfa/fxfa/parser/cxfa_bind.cpp
index c21e1b6..f472491 100644
--- a/xfa/fxfa/parser/cxfa_bind.cpp
+++ b/xfa/fxfa/parser/cxfa_bind.cpp
@@ -14,7 +14,7 @@
 namespace {
 
 const CXFA_Node::PropertyData kBindPropertyData[] = {
-    {XFA_Element::Picture, 1, 0},
+    {XFA_Element::Picture, 1, {}},
 };
 
 const CXFA_Node::AttributeData kBindAttributeData[] = {
diff --git a/xfa/fxfa/parser/cxfa_border.cpp b/xfa/fxfa/parser/cxfa_border.cpp
index 1227bbd..b466a19 100644
--- a/xfa/fxfa/parser/cxfa_border.cpp
+++ b/xfa/fxfa/parser/cxfa_border.cpp
@@ -12,9 +12,9 @@
 namespace {
 
 const CXFA_Node::PropertyData kBorderPropertyData[] = {
-    {XFA_Element::Margin, 1, 0}, {XFA_Element::Edge, 4, 0},
-    {XFA_Element::Corner, 4, 0}, {XFA_Element::Fill, 1, 0},
-    {XFA_Element::Extras, 1, 0},
+    {XFA_Element::Margin, 1, {}}, {XFA_Element::Edge, 4, {}},
+    {XFA_Element::Corner, 4, {}}, {XFA_Element::Fill, 1, {}},
+    {XFA_Element::Extras, 1, {}},
 };
 
 const CXFA_Node::AttributeData kBorderAttributeData[] = {
diff --git a/xfa/fxfa/parser/cxfa_break.cpp b/xfa/fxfa/parser/cxfa_break.cpp
index eb2f790..491ddb9 100644
--- a/xfa/fxfa/parser/cxfa_break.cpp
+++ b/xfa/fxfa/parser/cxfa_break.cpp
@@ -12,7 +12,7 @@
 namespace {
 
 const CXFA_Node::PropertyData kBreakPropertyData[] = {
-    {XFA_Element::Extras, 1, 0},
+    {XFA_Element::Extras, 1, {}},
 };
 
 const CXFA_Node::AttributeData kBreakAttributeData[] = {
diff --git a/xfa/fxfa/parser/cxfa_breakafter.cpp b/xfa/fxfa/parser/cxfa_breakafter.cpp
index e104836..4fc5854 100644
--- a/xfa/fxfa/parser/cxfa_breakafter.cpp
+++ b/xfa/fxfa/parser/cxfa_breakafter.cpp
@@ -12,7 +12,7 @@
 namespace {
 
 const CXFA_Node::PropertyData kBreakAfterPropertyData[] = {
-    {XFA_Element::Script, 1, 0},
+    {XFA_Element::Script, 1, {}},
 };
 
 const CXFA_Node::AttributeData kBreakAfterAttributeData[] = {
diff --git a/xfa/fxfa/parser/cxfa_breakbefore.cpp b/xfa/fxfa/parser/cxfa_breakbefore.cpp
index c4408de..0cd4a59 100644
--- a/xfa/fxfa/parser/cxfa_breakbefore.cpp
+++ b/xfa/fxfa/parser/cxfa_breakbefore.cpp
@@ -12,7 +12,7 @@
 namespace {
 
 const CXFA_Node::PropertyData kBreakBeforePropertyData[] = {
-    {XFA_Element::Script, 1, 0},
+    {XFA_Element::Script, 1, {}},
 };
 
 const CXFA_Node::AttributeData kBreakBeforeAttributeData[] = {
diff --git a/xfa/fxfa/parser/cxfa_button.cpp b/xfa/fxfa/parser/cxfa_button.cpp
index 1b53ca1..048e4e4 100644
--- a/xfa/fxfa/parser/cxfa_button.cpp
+++ b/xfa/fxfa/parser/cxfa_button.cpp
@@ -12,7 +12,7 @@
 namespace {
 
 const CXFA_Node::PropertyData kButtonPropertyData[] = {
-    {XFA_Element::Extras, 1, 0},
+    {XFA_Element::Extras, 1, {}},
 };
 
 const CXFA_Node::AttributeData kButtonAttributeData[] = {
diff --git a/xfa/fxfa/parser/cxfa_cache.cpp b/xfa/fxfa/parser/cxfa_cache.cpp
index 8df020c..8d00aa8 100644
--- a/xfa/fxfa/parser/cxfa_cache.cpp
+++ b/xfa/fxfa/parser/cxfa_cache.cpp
@@ -12,7 +12,7 @@
 namespace {
 
 const CXFA_Node::PropertyData kCachePropertyData[] = {
-    {XFA_Element::TemplateCache, 1, 0},
+    {XFA_Element::TemplateCache, 1, {}},
 };
 
 const CXFA_Node::AttributeData kCacheAttributeData[] = {
diff --git a/xfa/fxfa/parser/cxfa_calculate.cpp b/xfa/fxfa/parser/cxfa_calculate.cpp
index 9ccc03c..4624cb4 100644
--- a/xfa/fxfa/parser/cxfa_calculate.cpp
+++ b/xfa/fxfa/parser/cxfa_calculate.cpp
@@ -15,9 +15,9 @@
 namespace {
 
 const CXFA_Node::PropertyData kCalculatePropertyData[] = {
-    {XFA_Element::Message, 1, 0},
-    {XFA_Element::Script, 1, 0},
-    {XFA_Element::Extras, 1, 0},
+    {XFA_Element::Message, 1, {}},
+    {XFA_Element::Script, 1, {}},
+    {XFA_Element::Extras, 1, {}},
 };
 
 const CXFA_Node::AttributeData kCalculateAttributeData[] = {
diff --git a/xfa/fxfa/parser/cxfa_calendarsymbols.cpp b/xfa/fxfa/parser/cxfa_calendarsymbols.cpp
index 81bd196..83c140c 100644
--- a/xfa/fxfa/parser/cxfa_calendarsymbols.cpp
+++ b/xfa/fxfa/parser/cxfa_calendarsymbols.cpp
@@ -12,10 +12,10 @@
 namespace {
 
 const CXFA_Node::PropertyData kCalendarSymbolsPropertyData[] = {
-    {XFA_Element::EraNames, 1, 0},
-    {XFA_Element::DayNames, 2, 0},
-    {XFA_Element::MeridiemNames, 1, 0},
-    {XFA_Element::MonthNames, 2, 0},
+    {XFA_Element::EraNames, 1, {}},
+    {XFA_Element::DayNames, 2, {}},
+    {XFA_Element::MeridiemNames, 1, {}},
+    {XFA_Element::MonthNames, 2, {}},
 };
 
 const CXFA_Node::AttributeData kCalendarSymbolsAttributeData[] = {
diff --git a/xfa/fxfa/parser/cxfa_caption.cpp b/xfa/fxfa/parser/cxfa_caption.cpp
index 682d40f..cd1583f 100644
--- a/xfa/fxfa/parser/cxfa_caption.cpp
+++ b/xfa/fxfa/parser/cxfa_caption.cpp
@@ -16,9 +16,9 @@
 namespace {
 
 const CXFA_Node::PropertyData kCaptionPropertyData[] = {
-    {XFA_Element::Margin, 1, 0}, {XFA_Element::Para, 1, 0},
-    {XFA_Element::Font, 1, 0},   {XFA_Element::Value, 1, 0},
-    {XFA_Element::Extras, 1, 0},
+    {XFA_Element::Margin, 1, {}}, {XFA_Element::Para, 1, {}},
+    {XFA_Element::Font, 1, {}},   {XFA_Element::Value, 1, {}},
+    {XFA_Element::Extras, 1, {}},
 };
 
 const CXFA_Node::AttributeData kCaptionAttributeData[] = {
diff --git a/xfa/fxfa/parser/cxfa_certificates.cpp b/xfa/fxfa/parser/cxfa_certificates.cpp
index 65c09c9..fa8470b 100644
--- a/xfa/fxfa/parser/cxfa_certificates.cpp
+++ b/xfa/fxfa/parser/cxfa_certificates.cpp
@@ -12,9 +12,9 @@
 namespace {
 
 const CXFA_Node::PropertyData kCertificatesPropertyData[] = {
-    {XFA_Element::KeyUsage, 1, 0}, {XFA_Element::SubjectDNs, 1, 0},
-    {XFA_Element::Issuers, 1, 0},  {XFA_Element::Signing, 1, 0},
-    {XFA_Element::Oids, 1, 0},
+    {XFA_Element::KeyUsage, 1, {}}, {XFA_Element::SubjectDNs, 1, {}},
+    {XFA_Element::Issuers, 1, {}},  {XFA_Element::Signing, 1, {}},
+    {XFA_Element::Oids, 1, {}},
 };
 
 const CXFA_Node::AttributeData kCertificatesAttributeData[] = {
diff --git a/xfa/fxfa/parser/cxfa_checkbutton.cpp b/xfa/fxfa/parser/cxfa_checkbutton.cpp
index 54c2ffa..7dfd0c8 100644
--- a/xfa/fxfa/parser/cxfa_checkbutton.cpp
+++ b/xfa/fxfa/parser/cxfa_checkbutton.cpp
@@ -12,9 +12,9 @@
 namespace {
 
 const CXFA_Node::PropertyData kCheckButtonPropertyData[] = {
-    {XFA_Element::Margin, 1, 0},
-    {XFA_Element::Border, 1, 0},
-    {XFA_Element::Extras, 1, 0},
+    {XFA_Element::Margin, 1, {}},
+    {XFA_Element::Border, 1, {}},
+    {XFA_Element::Extras, 1, {}},
 };
 
 const CXFA_Node::AttributeData kCheckButtonAttributeData[] = {
diff --git a/xfa/fxfa/parser/cxfa_choicelist.cpp b/xfa/fxfa/parser/cxfa_choicelist.cpp
index a089c29..371df93 100644
--- a/xfa/fxfa/parser/cxfa_choicelist.cpp
+++ b/xfa/fxfa/parser/cxfa_choicelist.cpp
@@ -12,9 +12,9 @@
 namespace {
 
 const CXFA_Node::PropertyData kChoiceListPropertyData[] = {
-    {XFA_Element::Margin, 1, 0},
-    {XFA_Element::Border, 1, 0},
-    {XFA_Element::Extras, 1, 0},
+    {XFA_Element::Margin, 1, {}},
+    {XFA_Element::Border, 1, {}},
+    {XFA_Element::Extras, 1, {}},
 };
 
 const CXFA_Node::AttributeData kChoiceListAttributeData[] = {
diff --git a/xfa/fxfa/parser/cxfa_color.cpp b/xfa/fxfa/parser/cxfa_color.cpp
index 9dc035b..c9bc6e8 100644
--- a/xfa/fxfa/parser/cxfa_color.cpp
+++ b/xfa/fxfa/parser/cxfa_color.cpp
@@ -13,7 +13,7 @@
 namespace {
 
 const CXFA_Node::PropertyData kColorPropertyData[] = {
-    {XFA_Element::Extras, 1, 0},
+    {XFA_Element::Extras, 1, {}},
 };
 
 const CXFA_Node::AttributeData kColorAttributeData[] = {
diff --git a/xfa/fxfa/parser/cxfa_command.cpp b/xfa/fxfa/parser/cxfa_command.cpp
index 6db322e..ece6df2 100644
--- a/xfa/fxfa/parser/cxfa_command.cpp
+++ b/xfa/fxfa/parser/cxfa_command.cpp
@@ -12,10 +12,10 @@
 namespace {
 
 const CXFA_Node::PropertyData kCommandPropertyData[] = {
-    {XFA_Element::Query, 1, 0},
-    {XFA_Element::Insert, 1, 0},
-    {XFA_Element::Update, 1, 0},
-    {XFA_Element::Delete, 1, 0},
+    {XFA_Element::Query, 1, {}},
+    {XFA_Element::Insert, 1, {}},
+    {XFA_Element::Update, 1, {}},
+    {XFA_Element::Delete, 1, {}},
 };
 
 const CXFA_Node::AttributeData kCommandAttributeData[] = {
diff --git a/xfa/fxfa/parser/cxfa_common.cpp b/xfa/fxfa/parser/cxfa_common.cpp
index 968dbef..d140308 100644
--- a/xfa/fxfa/parser/cxfa_common.cpp
+++ b/xfa/fxfa/parser/cxfa_common.cpp
@@ -12,14 +12,14 @@
 namespace {
 
 const CXFA_Node::PropertyData kCommonPropertyData[] = {
-    {XFA_Element::SuppressBanner, 1, 0},
-    {XFA_Element::VersionControl, 1, 0},
-    {XFA_Element::LocaleSet, 1, 0},
-    {XFA_Element::Template, 1, 0},
-    {XFA_Element::ValidationMessaging, 1, 0},
-    {XFA_Element::Locale, 1, 0},
-    {XFA_Element::Data, 1, 0},
-    {XFA_Element::Messaging, 1, 0},
+    {XFA_Element::SuppressBanner, 1, {}},
+    {XFA_Element::VersionControl, 1, {}},
+    {XFA_Element::LocaleSet, 1, {}},
+    {XFA_Element::Template, 1, {}},
+    {XFA_Element::ValidationMessaging, 1, {}},
+    {XFA_Element::Locale, 1, {}},
+    {XFA_Element::Data, 1, {}},
+    {XFA_Element::Messaging, 1, {}},
 };
 
 const CXFA_Node::AttributeData kCommonAttributeData[] = {
diff --git a/xfa/fxfa/parser/cxfa_compression.cpp b/xfa/fxfa/parser/cxfa_compression.cpp
index 078f0fc..d5a5ea2 100644
--- a/xfa/fxfa/parser/cxfa_compression.cpp
+++ b/xfa/fxfa/parser/cxfa_compression.cpp
@@ -12,10 +12,10 @@
 namespace {
 
 const CXFA_Node::PropertyData kCompressionPropertyData[] = {
-    {XFA_Element::Level, 1, 0},
-    {XFA_Element::Type, 1, 0},
-    {XFA_Element::CompressObjectStream, 1, 0},
-    {XFA_Element::CompressLogicalStructure, 1, 0},
+    {XFA_Element::Level, 1, {}},
+    {XFA_Element::Type, 1, {}},
+    {XFA_Element::CompressObjectStream, 1, {}},
+    {XFA_Element::CompressLogicalStructure, 1, {}},
 };
 
 const CXFA_Node::AttributeData kCompressionAttributeData[] = {
diff --git a/xfa/fxfa/parser/cxfa_config.cpp b/xfa/fxfa/parser/cxfa_config.cpp
index 55abbfd..2c461d4 100644
--- a/xfa/fxfa/parser/cxfa_config.cpp
+++ b/xfa/fxfa/parser/cxfa_config.cpp
@@ -12,9 +12,9 @@
 namespace {
 
 const CXFA_Node::PropertyData kConfigPropertyData[] = {
-    {XFA_Element::Present, 1, 0},
-    {XFA_Element::Acrobat, 1, 0},
-    {XFA_Element::Trace, 1, 0},
+    {XFA_Element::Present, 1, {}},
+    {XFA_Element::Acrobat, 1, {}},
+    {XFA_Element::Trace, 1, {}},
 };
 
 const CXFA_Node::AttributeData kConfigAttributeData[] = {
diff --git a/xfa/fxfa/parser/cxfa_connect.cpp b/xfa/fxfa/parser/cxfa_connect.cpp
index f28eb35..e1125a2 100644
--- a/xfa/fxfa/parser/cxfa_connect.cpp
+++ b/xfa/fxfa/parser/cxfa_connect.cpp
@@ -12,10 +12,10 @@
 namespace {
 
 const CXFA_Node::PropertyData kConnectPropertyData[] = {
-    {XFA_Element::Picture, 1, 0},
-    {XFA_Element::ConnectString, 1, 0},
-    {XFA_Element::User, 1, 0},
-    {XFA_Element::Password, 1, 0},
+    {XFA_Element::Picture, 1, {}},
+    {XFA_Element::ConnectString, 1, {}},
+    {XFA_Element::User, 1, {}},
+    {XFA_Element::Password, 1, {}},
 };
 
 const CXFA_Node::AttributeData kConnectAttributeData[] = {
diff --git a/xfa/fxfa/parser/cxfa_contentarea.cpp b/xfa/fxfa/parser/cxfa_contentarea.cpp
index 43e01fd..c027975 100644
--- a/xfa/fxfa/parser/cxfa_contentarea.cpp
+++ b/xfa/fxfa/parser/cxfa_contentarea.cpp
@@ -12,8 +12,8 @@
 namespace {
 
 const CXFA_Node::PropertyData kContentAreaPropertyData[] = {
-    {XFA_Element::Desc, 1, 0},
-    {XFA_Element::Extras, 1, 0},
+    {XFA_Element::Desc, 1, {}},
+    {XFA_Element::Extras, 1, {}},
 };
 
 const CXFA_Node::AttributeData kContentAreaAttributeData[] = {
diff --git a/xfa/fxfa/parser/cxfa_corner.cpp b/xfa/fxfa/parser/cxfa_corner.cpp
index 872bad1..c64c746 100644
--- a/xfa/fxfa/parser/cxfa_corner.cpp
+++ b/xfa/fxfa/parser/cxfa_corner.cpp
@@ -12,8 +12,8 @@
 namespace {
 
 const CXFA_Node::PropertyData kCornerPropertyData[] = {
-    {XFA_Element::Color, 1, 0},
-    {XFA_Element::Extras, 1, 0},
+    {XFA_Element::Color, 1, {}},
+    {XFA_Element::Extras, 1, {}},
 };
 
 const CXFA_Node::AttributeData kCornerAttributeData[] = {
diff --git a/xfa/fxfa/parser/cxfa_currencysymbols.cpp b/xfa/fxfa/parser/cxfa_currencysymbols.cpp
index f066a7c..8c44210 100644
--- a/xfa/fxfa/parser/cxfa_currencysymbols.cpp
+++ b/xfa/fxfa/parser/cxfa_currencysymbols.cpp
@@ -12,7 +12,7 @@
 namespace {
 
 const CXFA_Node::PropertyData kCurrencySymbolsPropertyData[] = {
-    {XFA_Element::CurrencySymbol, 3, 0},
+    {XFA_Element::CurrencySymbol, 3, {}},
 };
 
 }  // namespace
diff --git a/xfa/fxfa/parser/cxfa_data.cpp b/xfa/fxfa/parser/cxfa_data.cpp
index 9823314..0d55525 100644
--- a/xfa/fxfa/parser/cxfa_data.cpp
+++ b/xfa/fxfa/parser/cxfa_data.cpp
@@ -12,11 +12,11 @@
 namespace {
 
 const CXFA_Node::PropertyData kDataPropertyData[] = {
-    {XFA_Element::Uri, 1, 0},        {XFA_Element::Xsl, 1, 0},
-    {XFA_Element::StartNode, 1, 0},  {XFA_Element::OutputXSL, 1, 0},
-    {XFA_Element::AdjustData, 1, 0}, {XFA_Element::Attributes, 1, 0},
-    {XFA_Element::Window, 1, 0},     {XFA_Element::Record, 1, 0},
-    {XFA_Element::Range, 1, 0},      {XFA_Element::IncrementalLoad, 1, 0},
+    {XFA_Element::Uri, 1, {}},        {XFA_Element::Xsl, 1, {}},
+    {XFA_Element::StartNode, 1, {}},  {XFA_Element::OutputXSL, 1, {}},
+    {XFA_Element::AdjustData, 1, {}}, {XFA_Element::Attributes, 1, {}},
+    {XFA_Element::Window, 1, {}},     {XFA_Element::Record, 1, {}},
+    {XFA_Element::Range, 1, {}},      {XFA_Element::IncrementalLoad, 1, {}},
 };
 
 const CXFA_Node::AttributeData kDataAttributeData[] = {
diff --git a/xfa/fxfa/parser/cxfa_datepatterns.cpp b/xfa/fxfa/parser/cxfa_datepatterns.cpp
index ab9548c..dcfda46 100644
--- a/xfa/fxfa/parser/cxfa_datepatterns.cpp
+++ b/xfa/fxfa/parser/cxfa_datepatterns.cpp
@@ -12,7 +12,7 @@
 namespace {
 
 const CXFA_Node::PropertyData kDatePatternsPropertyData[] = {
-    {XFA_Element::DatePattern, 4, 0},
+    {XFA_Element::DatePattern, 4, {}},
 };
 
 }  // namespace
diff --git a/xfa/fxfa/parser/cxfa_datetimeedit.cpp b/xfa/fxfa/parser/cxfa_datetimeedit.cpp
index 43a46aa..11ff6fe 100644
--- a/xfa/fxfa/parser/cxfa_datetimeedit.cpp
+++ b/xfa/fxfa/parser/cxfa_datetimeedit.cpp
@@ -12,10 +12,10 @@
 namespace {
 
 const CXFA_Node::PropertyData kDateTimeEditPropertyData[] = {
-    {XFA_Element::Margin, 1, 0},
-    {XFA_Element::Border, 1, 0},
-    {XFA_Element::Comb, 1, 0},
-    {XFA_Element::Extras, 1, 0},
+    {XFA_Element::Margin, 1, {}},
+    {XFA_Element::Border, 1, {}},
+    {XFA_Element::Comb, 1, {}},
+    {XFA_Element::Extras, 1, {}},
 };
 
 const CXFA_Node::AttributeData kDateTimeEditAttributeData[] = {
diff --git a/xfa/fxfa/parser/cxfa_daynames.cpp b/xfa/fxfa/parser/cxfa_daynames.cpp
index 609f20a..d8f0023 100644
--- a/xfa/fxfa/parser/cxfa_daynames.cpp
+++ b/xfa/fxfa/parser/cxfa_daynames.cpp
@@ -12,7 +12,7 @@
 namespace {
 
 const CXFA_Node::PropertyData kDayNamesPropertyData[] = {
-    {XFA_Element::Day, 7, 0},
+    {XFA_Element::Day, 7, {}},
 };
 
 const CXFA_Node::AttributeData kDayNamesAttributeData[] = {
diff --git a/xfa/fxfa/parser/cxfa_debug.cpp b/xfa/fxfa/parser/cxfa_debug.cpp
index 6bcc393..369bd07 100644
--- a/xfa/fxfa/parser/cxfa_debug.cpp
+++ b/xfa/fxfa/parser/cxfa_debug.cpp
@@ -12,7 +12,7 @@
 namespace {
 
 const CXFA_Node::PropertyData kDebugPropertyData[] = {
-    {XFA_Element::Uri, 1, 0},
+    {XFA_Element::Uri, 1, {}},
 };
 
 const CXFA_Node::AttributeData kDebugAttributeData[] = {
diff --git a/xfa/fxfa/parser/cxfa_defaultui.cpp b/xfa/fxfa/parser/cxfa_defaultui.cpp
index d44844f..0eb6b37 100644
--- a/xfa/fxfa/parser/cxfa_defaultui.cpp
+++ b/xfa/fxfa/parser/cxfa_defaultui.cpp
@@ -12,7 +12,7 @@
 namespace {
 
 const CXFA_Node::PropertyData kDefaultUiPropertyData[] = {
-    {XFA_Element::Extras, 1, 0},
+    {XFA_Element::Extras, 1, {}},
 };
 
 const CXFA_Node::AttributeData kDefaultUiAttributeData[] = {
diff --git a/xfa/fxfa/parser/cxfa_desc.cpp b/xfa/fxfa/parser/cxfa_desc.cpp
index eb2c8bb..22fabb8 100644
--- a/xfa/fxfa/parser/cxfa_desc.cpp
+++ b/xfa/fxfa/parser/cxfa_desc.cpp
@@ -12,11 +12,11 @@
 namespace {
 
 const CXFA_Node::PropertyData kDescPropertyData[] = {
-    {XFA_Element::Text, 1, 0},     {XFA_Element::Time, 1, 0},
-    {XFA_Element::DateTime, 1, 0}, {XFA_Element::Image, 1, 0},
-    {XFA_Element::Decimal, 1, 0},  {XFA_Element::Boolean, 1, 0},
-    {XFA_Element::Integer, 1, 0},  {XFA_Element::ExData, 1, 0},
-    {XFA_Element::Date, 1, 0},     {XFA_Element::Float, 1, 0},
+    {XFA_Element::Text, 1, {}},     {XFA_Element::Time, 1, {}},
+    {XFA_Element::DateTime, 1, {}}, {XFA_Element::Image, 1, {}},
+    {XFA_Element::Decimal, 1, {}},  {XFA_Element::Boolean, 1, {}},
+    {XFA_Element::Integer, 1, {}},  {XFA_Element::ExData, 1, {}},
+    {XFA_Element::Date, 1, {}},     {XFA_Element::Float, 1, {}},
 };
 
 const CXFA_Node::AttributeData kDescAttributeData[] = {
diff --git a/xfa/fxfa/parser/cxfa_document_builder.cpp b/xfa/fxfa/parser/cxfa_document_builder.cpp
index 502e158..bcc74a9 100644
--- a/xfa/fxfa/parser/cxfa_document_builder.cpp
+++ b/xfa/fxfa/parser/cxfa_document_builder.cpp
@@ -650,9 +650,8 @@
         if (eType == XFA_Element::Unknown)
           continue;
 
-        if (pXFANode->HasPropertyFlags(
-                eType,
-                XFA_PropertyFlag_OneOf | XFA_PropertyFlag_DefaultOneOf)) {
+        if (pXFANode->HasPropertyFlag(eType, XFA_PropertyFlag::kOneOf) ||
+            pXFANode->HasPropertyFlag(eType, XFA_PropertyFlag::kDefaultOneOf)) {
           if (bOneOfPropertyFound)
             break;
           bOneOfPropertyFound = true;
diff --git a/xfa/fxfa/parser/cxfa_draw.cpp b/xfa/fxfa/parser/cxfa_draw.cpp
index 593778c..419f024 100644
--- a/xfa/fxfa/parser/cxfa_draw.cpp
+++ b/xfa/fxfa/parser/cxfa_draw.cpp
@@ -12,12 +12,12 @@
 namespace {
 
 const CXFA_Node::PropertyData kDrawPropertyData[] = {
-    {XFA_Element::Ui, 1, 0},     {XFA_Element::Margin, 1, 0},
-    {XFA_Element::Para, 1, 0},   {XFA_Element::Border, 1, 0},
-    {XFA_Element::Assist, 1, 0}, {XFA_Element::Traversal, 1, 0},
-    {XFA_Element::Keep, 1, 0},   {XFA_Element::Caption, 1, 0},
-    {XFA_Element::Desc, 1, 0},   {XFA_Element::Font, 1, 0},
-    {XFA_Element::Value, 1, 0},  {XFA_Element::Extras, 1, 0},
+    {XFA_Element::Ui, 1, {}},     {XFA_Element::Margin, 1, {}},
+    {XFA_Element::Para, 1, {}},   {XFA_Element::Border, 1, {}},
+    {XFA_Element::Assist, 1, {}}, {XFA_Element::Traversal, 1, {}},
+    {XFA_Element::Keep, 1, {}},   {XFA_Element::Caption, 1, {}},
+    {XFA_Element::Desc, 1, {}},   {XFA_Element::Font, 1, {}},
+    {XFA_Element::Value, 1, {}},  {XFA_Element::Extras, 1, {}},
 };
 
 const CXFA_Node::AttributeData kDrawAttributeData[] = {
diff --git a/xfa/fxfa/parser/cxfa_driver.cpp b/xfa/fxfa/parser/cxfa_driver.cpp
index c8600e2..9f8c2d2 100644
--- a/xfa/fxfa/parser/cxfa_driver.cpp
+++ b/xfa/fxfa/parser/cxfa_driver.cpp
@@ -12,8 +12,8 @@
 namespace {
 
 const CXFA_Node::PropertyData kDriverPropertyData[] = {
-    {XFA_Element::FontInfo, 1, 0},
-    {XFA_Element::Xdc, 1, 0},
+    {XFA_Element::FontInfo, 1, {}},
+    {XFA_Element::Xdc, 1, {}},
 };
 
 const CXFA_Node::AttributeData kDriverAttributeData[] = {
diff --git a/xfa/fxfa/parser/cxfa_edge.cpp b/xfa/fxfa/parser/cxfa_edge.cpp
index bc8f435..0379a9a 100644
--- a/xfa/fxfa/parser/cxfa_edge.cpp
+++ b/xfa/fxfa/parser/cxfa_edge.cpp
@@ -12,8 +12,8 @@
 namespace {
 
 const CXFA_Node::PropertyData kEdgePropertyData[] = {
-    {XFA_Element::Color, 1, 0},
-    {XFA_Element::Extras, 1, 0},
+    {XFA_Element::Color, 1, {}},
+    {XFA_Element::Extras, 1, {}},
 };
 
 const CXFA_Node::AttributeData kEdgeAttributeData[] = {
diff --git a/xfa/fxfa/parser/cxfa_encrypt.cpp b/xfa/fxfa/parser/cxfa_encrypt.cpp
index 14e1ca6..1c7daee 100644
--- a/xfa/fxfa/parser/cxfa_encrypt.cpp
+++ b/xfa/fxfa/parser/cxfa_encrypt.cpp
@@ -12,7 +12,7 @@
 namespace {
 
 const CXFA_Node::PropertyData kEncryptPropertyData[] = {
-    {XFA_Element::Certificate, 1, 0},
+    {XFA_Element::Certificate, 1, {}},
 };
 
 const CXFA_Node::AttributeData kEncryptAttributeData[] = {
diff --git a/xfa/fxfa/parser/cxfa_encryption.cpp b/xfa/fxfa/parser/cxfa_encryption.cpp
index 4955c57..9c532ba 100644
--- a/xfa/fxfa/parser/cxfa_encryption.cpp
+++ b/xfa/fxfa/parser/cxfa_encryption.cpp
@@ -12,9 +12,9 @@
 namespace {
 
 const CXFA_Node::PropertyData kEncryptionPropertyData[] = {
-    {XFA_Element::EncryptionLevel, 1, 0},
-    {XFA_Element::Encrypt, 1, 0},
-    {XFA_Element::Permissions, 1, 0},
+    {XFA_Element::EncryptionLevel, 1, {}},
+    {XFA_Element::Encrypt, 1, {}},
+    {XFA_Element::Permissions, 1, {}},
 };
 
 const CXFA_Node::AttributeData kEncryptionAttributeData[] = {
diff --git a/xfa/fxfa/parser/cxfa_eranames.cpp b/xfa/fxfa/parser/cxfa_eranames.cpp
index fc369bb..dd7f497 100644
--- a/xfa/fxfa/parser/cxfa_eranames.cpp
+++ b/xfa/fxfa/parser/cxfa_eranames.cpp
@@ -12,7 +12,7 @@
 namespace {
 
 const CXFA_Node::PropertyData kEraNamesPropertyData[] = {
-    {XFA_Element::Era, 2, 0},
+    {XFA_Element::Era, 2, {}},
 };
 
 }  // namespace
diff --git a/xfa/fxfa/parser/cxfa_event.cpp b/xfa/fxfa/parser/cxfa_event.cpp
index 715d193..307d489 100644
--- a/xfa/fxfa/parser/cxfa_event.cpp
+++ b/xfa/fxfa/parser/cxfa_event.cpp
@@ -14,11 +14,11 @@
 namespace {
 
 const CXFA_Node::PropertyData kEventPropertyData[] = {
-    {XFA_Element::Execute, 1, XFA_PropertyFlag_OneOf},
-    {XFA_Element::Script, 1, XFA_PropertyFlag_OneOf},
-    {XFA_Element::SignData, 1, XFA_PropertyFlag_OneOf},
-    {XFA_Element::Extras, 1, 0},
-    {XFA_Element::Submit, 1, XFA_PropertyFlag_OneOf},
+    {XFA_Element::Execute, 1, XFA_PropertyFlag::kOneOf},
+    {XFA_Element::Script, 1, XFA_PropertyFlag::kOneOf},
+    {XFA_Element::SignData, 1, XFA_PropertyFlag::kOneOf},
+    {XFA_Element::Extras, 1, {}},
+    {XFA_Element::Submit, 1, XFA_PropertyFlag::kOneOf},
 };
 
 const CXFA_Node::AttributeData kEventAttributeData[] = {
diff --git a/xfa/fxfa/parser/cxfa_exclgroup.cpp b/xfa/fxfa/parser/cxfa_exclgroup.cpp
index f6c267b..41d3b9c 100644
--- a/xfa/fxfa/parser/cxfa_exclgroup.cpp
+++ b/xfa/fxfa/parser/cxfa_exclgroup.cpp
@@ -12,12 +12,12 @@
 namespace {
 
 const CXFA_Node::PropertyData kExclGroupPropertyData[] = {
-    {XFA_Element::Margin, 1, 0},    {XFA_Element::Para, 1, 0},
-    {XFA_Element::Border, 1, 0},    {XFA_Element::Assist, 1, 0},
-    {XFA_Element::Traversal, 1, 0}, {XFA_Element::Validate, 1, 0},
-    {XFA_Element::Caption, 1, 0},   {XFA_Element::Bind, 1, 0},
-    {XFA_Element::Desc, 1, 0},      {XFA_Element::Calculate, 1, 0},
-    {XFA_Element::Extras, 1, 0},
+    {XFA_Element::Margin, 1, {}},    {XFA_Element::Para, 1, {}},
+    {XFA_Element::Border, 1, {}},    {XFA_Element::Assist, 1, {}},
+    {XFA_Element::Traversal, 1, {}}, {XFA_Element::Validate, 1, {}},
+    {XFA_Element::Caption, 1, {}},   {XFA_Element::Bind, 1, {}},
+    {XFA_Element::Desc, 1, {}},      {XFA_Element::Calculate, 1, {}},
+    {XFA_Element::Extras, 1, {}},
 };
 
 const CXFA_Node::AttributeData kExclGroupAttributeData[] = {
diff --git a/xfa/fxfa/parser/cxfa_exobject.cpp b/xfa/fxfa/parser/cxfa_exobject.cpp
index 4510136..160717e 100644
--- a/xfa/fxfa/parser/cxfa_exobject.cpp
+++ b/xfa/fxfa/parser/cxfa_exobject.cpp
@@ -12,7 +12,7 @@
 namespace {
 
 const CXFA_Node::PropertyData kExObjectPropertyData[] = {
-    {XFA_Element::Extras, 1, 0},
+    {XFA_Element::Extras, 1, {}},
 };
 
 const CXFA_Node::AttributeData kExObjectAttributeData[] = {
diff --git a/xfa/fxfa/parser/cxfa_field.cpp b/xfa/fxfa/parser/cxfa_field.cpp
index 4fc5e09..d41aa4a 100644
--- a/xfa/fxfa/parser/cxfa_field.cpp
+++ b/xfa/fxfa/parser/cxfa_field.cpp
@@ -12,15 +12,15 @@
 namespace {
 
 const CXFA_Node::PropertyData kFieldPropertyData[] = {
-    {XFA_Element::Ui, 1, 0},        {XFA_Element::Margin, 1, 0},
-    {XFA_Element::Para, 1, 0},      {XFA_Element::Format, 1, 0},
-    {XFA_Element::Border, 1, 0},    {XFA_Element::Assist, 1, 0},
-    {XFA_Element::Traversal, 1, 0}, {XFA_Element::Keep, 1, 0},
-    {XFA_Element::Validate, 1, 0},  {XFA_Element::Caption, 1, 0},
-    {XFA_Element::Bind, 1, 0},      {XFA_Element::Desc, 1, 0},
-    {XFA_Element::Font, 1, 0},      {XFA_Element::Value, 1, 0},
-    {XFA_Element::Calculate, 1, 0}, {XFA_Element::Extras, 1, 0},
-    {XFA_Element::Items, 2, 0},
+    {XFA_Element::Ui, 1, {}},        {XFA_Element::Margin, 1, {}},
+    {XFA_Element::Para, 1, {}},      {XFA_Element::Format, 1, {}},
+    {XFA_Element::Border, 1, {}},    {XFA_Element::Assist, 1, {}},
+    {XFA_Element::Traversal, 1, {}}, {XFA_Element::Keep, 1, {}},
+    {XFA_Element::Validate, 1, {}},  {XFA_Element::Caption, 1, {}},
+    {XFA_Element::Bind, 1, {}},      {XFA_Element::Desc, 1, {}},
+    {XFA_Element::Font, 1, {}},      {XFA_Element::Value, 1, {}},
+    {XFA_Element::Calculate, 1, {}}, {XFA_Element::Extras, 1, {}},
+    {XFA_Element::Items, 2, {}},
 };
 
 const CXFA_Node::AttributeData kFieldAttributeData[] = {
diff --git a/xfa/fxfa/parser/cxfa_fill.cpp b/xfa/fxfa/parser/cxfa_fill.cpp
index 7f02594..3b8cf29 100644
--- a/xfa/fxfa/parser/cxfa_fill.cpp
+++ b/xfa/fxfa/parser/cxfa_fill.cpp
@@ -19,14 +19,15 @@
 namespace {
 
 const CXFA_Node::PropertyData kFillPropertyData[] = {
-    {XFA_Element::Pattern, 1, XFA_PropertyFlag_OneOf},
-    {XFA_Element::Solid, 1,
-     XFA_PropertyFlag_OneOf | XFA_PropertyFlag_DefaultOneOf},
-    {XFA_Element::Stipple, 1, XFA_PropertyFlag_OneOf},
-    {XFA_Element::Color, 1, 0},
-    {XFA_Element::Linear, 1, XFA_PropertyFlag_OneOf},
-    {XFA_Element::Extras, 1, 0},
-    {XFA_Element::Radial, 1, XFA_PropertyFlag_OneOf},
+    {XFA_Element::Pattern, 1, {XFA_PropertyFlag::kOneOf}},
+    {XFA_Element::Solid,
+     1,
+     {XFA_PropertyFlag::kOneOf, XFA_PropertyFlag::kDefaultOneOf}},
+    {XFA_Element::Stipple, 1, {XFA_PropertyFlag::kOneOf}},
+    {XFA_Element::Color, 1, {}},
+    {XFA_Element::Linear, 1, {XFA_PropertyFlag::kOneOf}},
+    {XFA_Element::Extras, 1, {}},
+    {XFA_Element::Radial, 1, {XFA_PropertyFlag::kOneOf}},
 };
 
 const CXFA_Node::AttributeData kFillAttributeData[] = {
diff --git a/xfa/fxfa/parser/cxfa_filter.cpp b/xfa/fxfa/parser/cxfa_filter.cpp
index 975ac77..562d50e 100644
--- a/xfa/fxfa/parser/cxfa_filter.cpp
+++ b/xfa/fxfa/parser/cxfa_filter.cpp
@@ -12,11 +12,11 @@
 namespace {
 
 const CXFA_Node::PropertyData kFilterPropertyData[] = {
-    {XFA_Element::Mdp, 1, 0},           {XFA_Element::Certificates, 1, 0},
-    {XFA_Element::TimeStamp, 1, 0},     {XFA_Element::Handler, 1, 0},
-    {XFA_Element::DigestMethods, 1, 0}, {XFA_Element::Encodings, 1, 0},
-    {XFA_Element::Reasons, 1, 0},       {XFA_Element::AppearanceFilter, 1, 0},
-    {XFA_Element::LockDocument, 1, 0},
+    {XFA_Element::Mdp, 1, {}},           {XFA_Element::Certificates, 1, {}},
+    {XFA_Element::TimeStamp, 1, {}},     {XFA_Element::Handler, 1, {}},
+    {XFA_Element::DigestMethods, 1, {}}, {XFA_Element::Encodings, 1, {}},
+    {XFA_Element::Reasons, 1, {}},       {XFA_Element::AppearanceFilter, 1, {}},
+    {XFA_Element::LockDocument, 1, {}},
 };
 
 const CXFA_Node::AttributeData kFilterAttributeData[] = {
diff --git a/xfa/fxfa/parser/cxfa_font.cpp b/xfa/fxfa/parser/cxfa_font.cpp
index 91e6d4c..13d6278 100644
--- a/xfa/fxfa/parser/cxfa_font.cpp
+++ b/xfa/fxfa/parser/cxfa_font.cpp
@@ -14,8 +14,8 @@
 namespace {
 
 const CXFA_Node::PropertyData kFontPropertyData[] = {
-    {XFA_Element::Fill, 1, 0},
-    {XFA_Element::Extras, 1, 0},
+    {XFA_Element::Fill, 1, {}},
+    {XFA_Element::Extras, 1, {}},
 };
 
 const CXFA_Node::AttributeData kFontAttributeData[] = {
diff --git a/xfa/fxfa/parser/cxfa_fontinfo.cpp b/xfa/fxfa/parser/cxfa_fontinfo.cpp
index 9c34b3c..8197eae 100644
--- a/xfa/fxfa/parser/cxfa_fontinfo.cpp
+++ b/xfa/fxfa/parser/cxfa_fontinfo.cpp
@@ -12,9 +12,9 @@
 namespace {
 
 const CXFA_Node::PropertyData kFontInfoPropertyData[] = {
-    {XFA_Element::SubsetBelow, 1, 0},
-    {XFA_Element::Map, 1, 0},
-    {XFA_Element::Embed, 1, 0},
+    {XFA_Element::SubsetBelow, 1, {}},
+    {XFA_Element::Map, 1, {}},
+    {XFA_Element::Embed, 1, {}},
 };
 
 const CXFA_Node::AttributeData kFontInfoAttributeData[] = {
diff --git a/xfa/fxfa/parser/cxfa_format.cpp b/xfa/fxfa/parser/cxfa_format.cpp
index 36b4168..97c87c1 100644
--- a/xfa/fxfa/parser/cxfa_format.cpp
+++ b/xfa/fxfa/parser/cxfa_format.cpp
@@ -12,8 +12,8 @@
 namespace {
 
 const CXFA_Node::PropertyData kFormatPropertyData[] = {
-    {XFA_Element::Picture, 1, 0},
-    {XFA_Element::Extras, 1, 0},
+    {XFA_Element::Picture, 1, {}},
+    {XFA_Element::Extras, 1, {}},
 };
 
 const CXFA_Node::AttributeData kFormatAttributeData[] = {
diff --git a/xfa/fxfa/parser/cxfa_imageedit.cpp b/xfa/fxfa/parser/cxfa_imageedit.cpp
index cdc2577..853131f 100644
--- a/xfa/fxfa/parser/cxfa_imageedit.cpp
+++ b/xfa/fxfa/parser/cxfa_imageedit.cpp
@@ -12,9 +12,9 @@
 namespace {
 
 const CXFA_Node::PropertyData kImageEditPropertyData[] = {
-    {XFA_Element::Margin, 1, 0},
-    {XFA_Element::Border, 1, 0},
-    {XFA_Element::Extras, 1, 0},
+    {XFA_Element::Margin, 1, {}},
+    {XFA_Element::Border, 1, {}},
+    {XFA_Element::Extras, 1, {}},
 };
 
 const CXFA_Node::AttributeData kImageEditAttributeData[] = {
diff --git a/xfa/fxfa/parser/cxfa_instancemanager.cpp b/xfa/fxfa/parser/cxfa_instancemanager.cpp
index 921aabc..4016906 100644
--- a/xfa/fxfa/parser/cxfa_instancemanager.cpp
+++ b/xfa/fxfa/parser/cxfa_instancemanager.cpp
@@ -12,7 +12,7 @@
 namespace {
 
 const CXFA_Node::PropertyData kInstanceManagerPropertyData[] = {
-    {XFA_Element::Occur, 1, 0},
+    {XFA_Element::Occur, 1, {}},
 };
 
 const CXFA_Node::AttributeData kInstanceManagerAttributeData[] = {
diff --git a/xfa/fxfa/parser/cxfa_keep.cpp b/xfa/fxfa/parser/cxfa_keep.cpp
index e1a6dc4..5167bde 100644
--- a/xfa/fxfa/parser/cxfa_keep.cpp
+++ b/xfa/fxfa/parser/cxfa_keep.cpp
@@ -12,7 +12,7 @@
 namespace {
 
 const CXFA_Node::PropertyData kKeepPropertyData[] = {
-    {XFA_Element::Extras, 1, 0},
+    {XFA_Element::Extras, 1, {}},
 };
 
 const CXFA_Node::AttributeData kKeepAttributeData[] = {
diff --git a/xfa/fxfa/parser/cxfa_labelprinter.cpp b/xfa/fxfa/parser/cxfa_labelprinter.cpp
index fa435e2..1b1385f 100644
--- a/xfa/fxfa/parser/cxfa_labelprinter.cpp
+++ b/xfa/fxfa/parser/cxfa_labelprinter.cpp
@@ -12,10 +12,10 @@
 namespace {
 
 const CXFA_Node::PropertyData kLabelPrinterPropertyData[] = {
-    {XFA_Element::FontInfo, 1, 0},
-    {XFA_Element::Xdc, 1, 0},
-    {XFA_Element::BatchOutput, 1, 0},
-    {XFA_Element::FlipLabel, 1, 0},
+    {XFA_Element::FontInfo, 1, {}},
+    {XFA_Element::Xdc, 1, {}},
+    {XFA_Element::BatchOutput, 1, {}},
+    {XFA_Element::FlipLabel, 1, {}},
 };
 
 const CXFA_Node::AttributeData kLabelPrinterAttributeData[] = {
diff --git a/xfa/fxfa/parser/cxfa_line.cpp b/xfa/fxfa/parser/cxfa_line.cpp
index 5669614..1ac2422 100644
--- a/xfa/fxfa/parser/cxfa_line.cpp
+++ b/xfa/fxfa/parser/cxfa_line.cpp
@@ -14,7 +14,7 @@
 namespace {
 
 const CXFA_Node::PropertyData kLinePropertyData[] = {
-    {XFA_Element::Edge, 1, 0},
+    {XFA_Element::Edge, 1, {}},
 };
 
 const CXFA_Node::AttributeData kLineAttributeData[] = {
diff --git a/xfa/fxfa/parser/cxfa_linear.cpp b/xfa/fxfa/parser/cxfa_linear.cpp
index 07e9012..198d595 100644
--- a/xfa/fxfa/parser/cxfa_linear.cpp
+++ b/xfa/fxfa/parser/cxfa_linear.cpp
@@ -15,8 +15,8 @@
 namespace {
 
 const CXFA_Node::PropertyData kLinearPropertyData[] = {
-    {XFA_Element::Color, 1, 0},
-    {XFA_Element::Extras, 1, 0},
+    {XFA_Element::Color, 1, {}},
+    {XFA_Element::Extras, 1, {}},
 };
 
 const CXFA_Node::AttributeData kLinearAttributeData[] = {
diff --git a/xfa/fxfa/parser/cxfa_locale.cpp b/xfa/fxfa/parser/cxfa_locale.cpp
index bf13078..5313c55 100644
--- a/xfa/fxfa/parser/cxfa_locale.cpp
+++ b/xfa/fxfa/parser/cxfa_locale.cpp
@@ -12,10 +12,14 @@
 namespace {
 
 const CXFA_Node::PropertyData kLocalePropertyData[] = {
-    {XFA_Element::DatePatterns, 1, 0},    {XFA_Element::CalendarSymbols, 1, 0},
-    {XFA_Element::CurrencySymbols, 1, 0}, {XFA_Element::Typefaces, 1, 0},
-    {XFA_Element::DateTimeSymbols, 1, 0}, {XFA_Element::NumberPatterns, 1, 0},
-    {XFA_Element::NumberSymbols, 1, 0},   {XFA_Element::TimePatterns, 1, 0},
+    {XFA_Element::DatePatterns, 1, {}},
+    {XFA_Element::CalendarSymbols, 1, {}},
+    {XFA_Element::CurrencySymbols, 1, {}},
+    {XFA_Element::Typefaces, 1, {}},
+    {XFA_Element::DateTimeSymbols, 1, {}},
+    {XFA_Element::NumberPatterns, 1, {}},
+    {XFA_Element::NumberSymbols, 1, {}},
+    {XFA_Element::TimePatterns, 1, {}},
 };
 
 const CXFA_Node::AttributeData kLocaleAttributeData[] = {
diff --git a/xfa/fxfa/parser/cxfa_log.cpp b/xfa/fxfa/parser/cxfa_log.cpp
index 3caab1b..221d833 100644
--- a/xfa/fxfa/parser/cxfa_log.cpp
+++ b/xfa/fxfa/parser/cxfa_log.cpp
@@ -12,10 +12,10 @@
 namespace {
 
 const CXFA_Node::PropertyData kLogPropertyData[] = {
-    {XFA_Element::To, 1, 0},
-    {XFA_Element::Uri, 1, 0},
-    {XFA_Element::Mode, 1, 0},
-    {XFA_Element::Threshold, 1, 0},
+    {XFA_Element::To, 1, {}},
+    {XFA_Element::Uri, 1, {}},
+    {XFA_Element::Mode, 1, {}},
+    {XFA_Element::Threshold, 1, {}},
 };
 
 const CXFA_Node::AttributeData kLogAttributeData[] = {
diff --git a/xfa/fxfa/parser/cxfa_manifest.cpp b/xfa/fxfa/parser/cxfa_manifest.cpp
index 6ec8e3d..38ee306 100644
--- a/xfa/fxfa/parser/cxfa_manifest.cpp
+++ b/xfa/fxfa/parser/cxfa_manifest.cpp
@@ -12,7 +12,7 @@
 namespace {
 
 const CXFA_Node::PropertyData kManifestPropertyData[] = {
-    {XFA_Element::Extras, 1, 0},
+    {XFA_Element::Extras, 1, {}},
 };
 
 const CXFA_Node::AttributeData kManifestAttributeData[] = {
diff --git a/xfa/fxfa/parser/cxfa_margin.cpp b/xfa/fxfa/parser/cxfa_margin.cpp
index 7d363a5..5a18eb2 100644
--- a/xfa/fxfa/parser/cxfa_margin.cpp
+++ b/xfa/fxfa/parser/cxfa_margin.cpp
@@ -12,7 +12,7 @@
 namespace {
 
 const CXFA_Node::PropertyData kMarginPropertyData[] = {
-    {XFA_Element::Extras, 1, 0},
+    {XFA_Element::Extras, 1, {}},
 };
 
 const CXFA_Node::AttributeData kMarginAttributeData[] = {
diff --git a/xfa/fxfa/parser/cxfa_mediuminfo.cpp b/xfa/fxfa/parser/cxfa_mediuminfo.cpp
index 3f97e07..73a0fdc 100644
--- a/xfa/fxfa/parser/cxfa_mediuminfo.cpp
+++ b/xfa/fxfa/parser/cxfa_mediuminfo.cpp
@@ -12,7 +12,7 @@
 namespace {
 
 const CXFA_Node::PropertyData kMediumInfoPropertyData[] = {
-    {XFA_Element::Map, 1, 0},
+    {XFA_Element::Map, 1, {}},
 };
 
 const CXFA_Node::AttributeData kMediumInfoAttributeData[] = {
diff --git a/xfa/fxfa/parser/cxfa_meridiemnames.cpp b/xfa/fxfa/parser/cxfa_meridiemnames.cpp
index 0370bcd..3d52529 100644
--- a/xfa/fxfa/parser/cxfa_meridiemnames.cpp
+++ b/xfa/fxfa/parser/cxfa_meridiemnames.cpp
@@ -12,7 +12,7 @@
 namespace {
 
 const CXFA_Node::PropertyData kMeridiemNamesPropertyData[] = {
-    {XFA_Element::Meridiem, 2, 0},
+    {XFA_Element::Meridiem, 2, {}},
 };
 
 }  // namespace
diff --git a/xfa/fxfa/parser/cxfa_message.cpp b/xfa/fxfa/parser/cxfa_message.cpp
index 022171b..a2085df 100644
--- a/xfa/fxfa/parser/cxfa_message.cpp
+++ b/xfa/fxfa/parser/cxfa_message.cpp
@@ -12,8 +12,8 @@
 namespace {
 
 const CXFA_Node::PropertyData kMessagePropertyData[] = {
-    {XFA_Element::MsgId, 1, 0},
-    {XFA_Element::Severity, 1, 0},
+    {XFA_Element::MsgId, 1, {}},
+    {XFA_Element::Severity, 1, {}},
 };
 
 const CXFA_Node::AttributeData kMessageAttributeData[] = {
diff --git a/xfa/fxfa/parser/cxfa_monthnames.cpp b/xfa/fxfa/parser/cxfa_monthnames.cpp
index 4abf9da..37f333d 100644
--- a/xfa/fxfa/parser/cxfa_monthnames.cpp
+++ b/xfa/fxfa/parser/cxfa_monthnames.cpp
@@ -12,7 +12,7 @@
 namespace {
 
 const CXFA_Node::PropertyData kMonthNamesPropertyData[] = {
-    {XFA_Element::Month, 12, 0},
+    {XFA_Element::Month, 12, {}},
 };
 
 const CXFA_Node::AttributeData kMonthNamesAttributeData[] = {
diff --git a/xfa/fxfa/parser/cxfa_node.cpp b/xfa/fxfa/parser/cxfa_node.cpp
index ab76d9c..5708d52 100644
--- a/xfa/fxfa/parser/cxfa_node.cpp
+++ b/xfa/fxfa/parser/cxfa_node.cpp
@@ -1094,9 +1094,10 @@
   return !!GetPropertyData(property);
 }
 
-bool CXFA_Node::HasPropertyFlags(XFA_Element property, uint8_t flags) const {
+bool CXFA_Node::HasPropertyFlag(XFA_Element property,
+                                XFA_PropertyFlag flag) const {
   const PropertyData* data = GetPropertyData(property);
-  return data && !!(data->flags & flags);
+  return data && !!(data->flags & flag);
 }
 
 uint8_t CXFA_Node::PropertyOccuranceCount(XFA_Element property) const {
@@ -1133,10 +1134,10 @@
   if (node)
     return node;
 
-  if (HasPropertyFlags(eProperty, XFA_PropertyFlag_OneOf)) {
+  if (HasPropertyFlag(eProperty, XFA_PropertyFlag::kOneOf)) {
     for (CXFA_Node* pNode = GetFirstChild(); pNode;
          pNode = pNode->GetNextSibling()) {
-      if (HasPropertyFlags(pNode->GetElementType(), XFA_PropertyFlag_OneOf)) {
+      if (HasPropertyFlag(pNode->GetElementType(), XFA_PropertyFlag::kOneOf)) {
         return nullptr;
       }
     }
@@ -1155,7 +1156,7 @@
 }
 
 Optional<XFA_Element> CXFA_Node::GetFirstPropertyWithFlag(
-    XFA_PropertyFlagMask flag) const {
+    XFA_PropertyFlag flag) const {
   for (const auto& prop : m_Properties) {
     if (prop.flags & flag)
       return prop.property;
@@ -1222,8 +1223,8 @@
       if (bFilterProperties) {
         nodes.push_back(pChild);
       } else if (bFilterOneOfProperties &&
-                 HasPropertyFlags(pChild->GetElementType(),
-                                  XFA_PropertyFlag_OneOf)) {
+                 HasPropertyFlag(pChild->GetElementType(),
+                                 XFA_PropertyFlag::kOneOf)) {
         nodes.push_back(pChild);
       } else if (bFilterChildren &&
                  (pChild->GetElementType() == XFA_Element::Variables ||
@@ -1239,7 +1240,7 @@
     return nodes;
 
   Optional<XFA_Element> property =
-      GetFirstPropertyWithFlag(XFA_PropertyFlag_DefaultOneOf);
+      GetFirstPropertyWithFlag(XFA_PropertyFlag::kDefaultOneOf);
   if (!property.has_value())
     return nodes;
 
diff --git a/xfa/fxfa/parser/cxfa_node.h b/xfa/fxfa/parser/cxfa_node.h
index c9c8dd4..e8c7de0 100644
--- a/xfa/fxfa/parser/cxfa_node.h
+++ b/xfa/fxfa/parser/cxfa_node.h
@@ -10,7 +10,6 @@
 #include <stddef.h>
 #include <stdint.h>
 
-#include <type_traits>
 #include <utility>
 #include <vector>
 
@@ -85,18 +84,19 @@
   kLayoutGeneratedNode = 1 << 6
 };
 
-enum XFA_PropertyFlag : uint8_t {
-  XFA_PropertyFlag_OneOf = 1 << 0,
-  XFA_PropertyFlag_DefaultOneOf = 1 << 1,
+enum class XFA_PropertyFlag : uint8_t {
+  kOneOf = 1 << 0,
+  kDefaultOneOf = 1 << 1,
 };
-using XFA_PropertyFlagMask = std::underlying_type<XFA_PropertyFlag>::type;
 
 class CXFA_Node : public CXFA_Object, public GCedTreeNodeMixin<CXFA_Node> {
  public:
   struct PropertyData {
+    PropertyData() = delete;
+
     XFA_Element property;
     uint8_t occurance_count;
-    XFA_PropertyFlagMask flags;
+    Mask<XFA_PropertyFlag> flags;
   };
 
   struct AttributeData {
@@ -116,7 +116,7 @@
   void Trace(cppgc::Visitor* visitor) const override;
 
   bool HasProperty(XFA_Element property) const;
-  bool HasPropertyFlags(XFA_Element property, uint8_t flags) const;
+  bool HasPropertyFlag(XFA_Element property, XFA_PropertyFlag flag) const;
   uint8_t PropertyOccuranceCount(XFA_Element property) const;
 
   std::pair<CXFA_Node*, int32_t> GetProperty(int32_t index,
@@ -437,8 +437,7 @@
   bool HasFlag(XFA_NodeFlag dwFlag) const;
   const PropertyData* GetPropertyData(XFA_Element property) const;
   const AttributeData* GetAttributeData(XFA_Attribute attr) const;
-  Optional<XFA_Element> GetFirstPropertyWithFlag(
-      XFA_PropertyFlagMask flag) const;
+  Optional<XFA_Element> GetFirstPropertyWithFlag(XFA_PropertyFlag flag) const;
   void OnRemoved(bool bNotify) const;
   Optional<void*> GetDefaultValue(XFA_Attribute attr,
                                   XFA_AttributeType eType) const;
diff --git a/xfa/fxfa/parser/cxfa_numberpatterns.cpp b/xfa/fxfa/parser/cxfa_numberpatterns.cpp
index 7c5006f..94cdf17 100644
--- a/xfa/fxfa/parser/cxfa_numberpatterns.cpp
+++ b/xfa/fxfa/parser/cxfa_numberpatterns.cpp
@@ -12,7 +12,7 @@
 namespace {
 
 const CXFA_Node::PropertyData kNumberPatternsPropertyData[] = {
-    {XFA_Element::NumberPattern, 4, 0},
+    {XFA_Element::NumberPattern, 4, {}},
 };
 
 }  // namespace
diff --git a/xfa/fxfa/parser/cxfa_numbersymbols.cpp b/xfa/fxfa/parser/cxfa_numbersymbols.cpp
index cbc10d6..4943a5b 100644
--- a/xfa/fxfa/parser/cxfa_numbersymbols.cpp
+++ b/xfa/fxfa/parser/cxfa_numbersymbols.cpp
@@ -12,7 +12,7 @@
 namespace {
 
 const CXFA_Node::PropertyData kNumberSymbolsPropertyData[] = {
-    {XFA_Element::NumberSymbol, 5, 0},
+    {XFA_Element::NumberSymbol, 5, {}},
 };
 
 }  // namespace
diff --git a/xfa/fxfa/parser/cxfa_numericedit.cpp b/xfa/fxfa/parser/cxfa_numericedit.cpp
index c4dbf3a..f35b388 100644
--- a/xfa/fxfa/parser/cxfa_numericedit.cpp
+++ b/xfa/fxfa/parser/cxfa_numericedit.cpp
@@ -12,10 +12,10 @@
 namespace {
 
 const CXFA_Node::PropertyData kNumericEditPropertyData[] = {
-    {XFA_Element::Margin, 1, 0},
-    {XFA_Element::Border, 1, 0},
-    {XFA_Element::Comb, 1, 0},
-    {XFA_Element::Extras, 1, 0},
+    {XFA_Element::Margin, 1, {}},
+    {XFA_Element::Border, 1, {}},
+    {XFA_Element::Comb, 1, {}},
+    {XFA_Element::Extras, 1, {}},
 };
 
 const CXFA_Node::AttributeData kNumericEditAttributeData[] = {
diff --git a/xfa/fxfa/parser/cxfa_occur.cpp b/xfa/fxfa/parser/cxfa_occur.cpp
index d07f8c3..0485a72 100644
--- a/xfa/fxfa/parser/cxfa_occur.cpp
+++ b/xfa/fxfa/parser/cxfa_occur.cpp
@@ -12,7 +12,7 @@
 namespace {
 
 const CXFA_Node::PropertyData kOccurPropertyData[] = {
-    {XFA_Element::Extras, 1, 0},
+    {XFA_Element::Extras, 1, {}},
 };
 
 const CXFA_Node::AttributeData kOccurAttributeData[] = {
diff --git a/xfa/fxfa/parser/cxfa_openaction.cpp b/xfa/fxfa/parser/cxfa_openaction.cpp
index 518b154..8527595 100644
--- a/xfa/fxfa/parser/cxfa_openaction.cpp
+++ b/xfa/fxfa/parser/cxfa_openaction.cpp
@@ -12,7 +12,7 @@
 namespace {
 
 const CXFA_Node::PropertyData kOpenActionPropertyData[] = {
-    {XFA_Element::Destination, 1, 0},
+    {XFA_Element::Destination, 1, {}},
 };
 
 const CXFA_Node::AttributeData kOpenActionAttributeData[] = {
diff --git a/xfa/fxfa/parser/cxfa_output.cpp b/xfa/fxfa/parser/cxfa_output.cpp
index cf145d3..132579a 100644
--- a/xfa/fxfa/parser/cxfa_output.cpp
+++ b/xfa/fxfa/parser/cxfa_output.cpp
@@ -12,9 +12,9 @@
 namespace {
 
 const CXFA_Node::PropertyData kOutputPropertyData[] = {
-    {XFA_Element::To, 1, 0},
-    {XFA_Element::Uri, 1, 0},
-    {XFA_Element::Type, 1, 0},
+    {XFA_Element::To, 1, {}},
+    {XFA_Element::Uri, 1, {}},
+    {XFA_Element::Type, 1, {}},
 };
 
 const CXFA_Node::AttributeData kOutputAttributeData[] = {
diff --git a/xfa/fxfa/parser/cxfa_outputxsl.cpp b/xfa/fxfa/parser/cxfa_outputxsl.cpp
index d0a5ba4..1b7e659 100644
--- a/xfa/fxfa/parser/cxfa_outputxsl.cpp
+++ b/xfa/fxfa/parser/cxfa_outputxsl.cpp
@@ -12,7 +12,7 @@
 namespace {
 
 const CXFA_Node::PropertyData kOutputXSLPropertyData[] = {
-    {XFA_Element::Uri, 1, 0},
+    {XFA_Element::Uri, 1, {}},
 };
 
 const CXFA_Node::AttributeData kOutputXSLAttributeData[] = {
diff --git a/xfa/fxfa/parser/cxfa_pagearea.cpp b/xfa/fxfa/parser/cxfa_pagearea.cpp
index d8a6e90..e6709b7 100644
--- a/xfa/fxfa/parser/cxfa_pagearea.cpp
+++ b/xfa/fxfa/parser/cxfa_pagearea.cpp
@@ -12,10 +12,10 @@
 namespace {
 
 const CXFA_Node::PropertyData kPageAreaPropertyData[] = {
-    {XFA_Element::Medium, 1, 0},
-    {XFA_Element::Desc, 1, 0},
-    {XFA_Element::Extras, 1, 0},
-    {XFA_Element::Occur, 1, 0},
+    {XFA_Element::Medium, 1, {}},
+    {XFA_Element::Desc, 1, {}},
+    {XFA_Element::Extras, 1, {}},
+    {XFA_Element::Occur, 1, {}},
 };
 
 const CXFA_Node::AttributeData kPageAreaAttributeData[] = {
diff --git a/xfa/fxfa/parser/cxfa_pageset.cpp b/xfa/fxfa/parser/cxfa_pageset.cpp
index 0da1da2..98038ce 100644
--- a/xfa/fxfa/parser/cxfa_pageset.cpp
+++ b/xfa/fxfa/parser/cxfa_pageset.cpp
@@ -12,8 +12,8 @@
 namespace {
 
 const CXFA_Node::PropertyData kPageSetPropertyData[] = {
-    {XFA_Element::Extras, 1, 0},
-    {XFA_Element::Occur, 1, 0},
+    {XFA_Element::Extras, 1, {}},
+    {XFA_Element::Occur, 1, {}},
 };
 
 const CXFA_Node::AttributeData kPageSetAttributeData[] = {
diff --git a/xfa/fxfa/parser/cxfa_para.cpp b/xfa/fxfa/parser/cxfa_para.cpp
index 7143912..1b99aec 100644
--- a/xfa/fxfa/parser/cxfa_para.cpp
+++ b/xfa/fxfa/parser/cxfa_para.cpp
@@ -13,7 +13,7 @@
 namespace {
 
 const CXFA_Node::PropertyData kParaPropertyData[] = {
-    {XFA_Element::Hyphenation, 1, 0},
+    {XFA_Element::Hyphenation, 1, {}},
 };
 
 const CXFA_Node::AttributeData kParaAttributeData[] = {
diff --git a/xfa/fxfa/parser/cxfa_passwordedit.cpp b/xfa/fxfa/parser/cxfa_passwordedit.cpp
index be47664..3742232 100644
--- a/xfa/fxfa/parser/cxfa_passwordedit.cpp
+++ b/xfa/fxfa/parser/cxfa_passwordedit.cpp
@@ -12,9 +12,9 @@
 namespace {
 
 const CXFA_Node::PropertyData kPasswordEditPropertyData[] = {
-    {XFA_Element::Margin, 1, 0},
-    {XFA_Element::Border, 1, 0},
-    {XFA_Element::Extras, 1, 0},
+    {XFA_Element::Margin, 1, {}},
+    {XFA_Element::Border, 1, {}},
+    {XFA_Element::Extras, 1, {}},
 };
 
 const CXFA_Node::AttributeData kPasswordEditAttributeData[] = {
diff --git a/xfa/fxfa/parser/cxfa_pattern.cpp b/xfa/fxfa/parser/cxfa_pattern.cpp
index 3971116..081add2 100644
--- a/xfa/fxfa/parser/cxfa_pattern.cpp
+++ b/xfa/fxfa/parser/cxfa_pattern.cpp
@@ -15,8 +15,8 @@
 namespace {
 
 const CXFA_Node::PropertyData kPatternPropertyData[] = {
-    {XFA_Element::Color, 1, 0},
-    {XFA_Element::Extras, 1, 0},
+    {XFA_Element::Color, 1, {}},
+    {XFA_Element::Extras, 1, {}},
 };
 
 const CXFA_Node::AttributeData kPatternAttributeData[] = {
diff --git a/xfa/fxfa/parser/cxfa_pcl.cpp b/xfa/fxfa/parser/cxfa_pcl.cpp
index e773ade..3c27fb9 100644
--- a/xfa/fxfa/parser/cxfa_pcl.cpp
+++ b/xfa/fxfa/parser/cxfa_pcl.cpp
@@ -12,10 +12,10 @@
 namespace {
 
 const CXFA_Node::PropertyData kPclPropertyData[] = {
-    {XFA_Element::FontInfo, 1, 0},   {XFA_Element::Jog, 1, 0},
-    {XFA_Element::Xdc, 1, 0},        {XFA_Element::BatchOutput, 1, 0},
-    {XFA_Element::PageOffset, 1, 0}, {XFA_Element::OutputBin, 1, 0},
-    {XFA_Element::Staple, 1, 0},     {XFA_Element::MediumInfo, 1, 0},
+    {XFA_Element::FontInfo, 1, {}},   {XFA_Element::Jog, 1, {}},
+    {XFA_Element::Xdc, 1, {}},        {XFA_Element::BatchOutput, 1, {}},
+    {XFA_Element::PageOffset, 1, {}}, {XFA_Element::OutputBin, 1, {}},
+    {XFA_Element::Staple, 1, {}},     {XFA_Element::MediumInfo, 1, {}},
 };
 
 const CXFA_Node::AttributeData kPclAttributeData[] = {
diff --git a/xfa/fxfa/parser/cxfa_pdf.cpp b/xfa/fxfa/parser/cxfa_pdf.cpp
index 40f3e32..81476b4 100644
--- a/xfa/fxfa/parser/cxfa_pdf.cpp
+++ b/xfa/fxfa/parser/cxfa_pdf.cpp
@@ -12,25 +12,25 @@
 namespace {
 
 const CXFA_Node::PropertyData kPdfPropertyData[] = {
-    {XFA_Element::AdobeExtensionLevel, 1, 0},
-    {XFA_Element::FontInfo, 1, 0},
-    {XFA_Element::Xdc, 1, 0},
-    {XFA_Element::Pdfa, 1, 0},
-    {XFA_Element::BatchOutput, 1, 0},
-    {XFA_Element::ViewerPreferences, 1, 0},
-    {XFA_Element::ScriptModel, 1, 0},
-    {XFA_Element::Version, 1, 0},
-    {XFA_Element::SubmitFormat, 1, 0},
-    {XFA_Element::SilentPrint, 1, 0},
-    {XFA_Element::Producer, 1, 0},
-    {XFA_Element::Compression, 1, 0},
-    {XFA_Element::Interactive, 1, 0},
-    {XFA_Element::Encryption, 1, 0},
-    {XFA_Element::RenderPolicy, 1, 0},
-    {XFA_Element::OpenAction, 1, 0},
-    {XFA_Element::Creator, 1, 0},
-    {XFA_Element::Linearized, 1, 0},
-    {XFA_Element::Tagged, 1, 0},
+    {XFA_Element::AdobeExtensionLevel, 1, {}},
+    {XFA_Element::FontInfo, 1, {}},
+    {XFA_Element::Xdc, 1, {}},
+    {XFA_Element::Pdfa, 1, {}},
+    {XFA_Element::BatchOutput, 1, {}},
+    {XFA_Element::ViewerPreferences, 1, {}},
+    {XFA_Element::ScriptModel, 1, {}},
+    {XFA_Element::Version, 1, {}},
+    {XFA_Element::SubmitFormat, 1, {}},
+    {XFA_Element::SilentPrint, 1, {}},
+    {XFA_Element::Producer, 1, {}},
+    {XFA_Element::Compression, 1, {}},
+    {XFA_Element::Interactive, 1, {}},
+    {XFA_Element::Encryption, 1, {}},
+    {XFA_Element::RenderPolicy, 1, {}},
+    {XFA_Element::OpenAction, 1, {}},
+    {XFA_Element::Creator, 1, {}},
+    {XFA_Element::Linearized, 1, {}},
+    {XFA_Element::Tagged, 1, {}},
 };
 
 const CXFA_Node::AttributeData kPdfAttributeData[] = {
diff --git a/xfa/fxfa/parser/cxfa_pdfa.cpp b/xfa/fxfa/parser/cxfa_pdfa.cpp
index f5e0ab5..54cc34b 100644
--- a/xfa/fxfa/parser/cxfa_pdfa.cpp
+++ b/xfa/fxfa/parser/cxfa_pdfa.cpp
@@ -12,10 +12,10 @@
 namespace {
 
 const CXFA_Node::PropertyData kPdfaPropertyData[] = {
-    {XFA_Element::Amd, 1, 0},
-    {XFA_Element::Part, 1, 0},
-    {XFA_Element::IncludeXDPContent, 1, 0},
-    {XFA_Element::Conformance, 1, 0},
+    {XFA_Element::Amd, 1, {}},
+    {XFA_Element::Part, 1, {}},
+    {XFA_Element::IncludeXDPContent, 1, {}},
+    {XFA_Element::Conformance, 1, {}},
 };
 
 const CXFA_Node::AttributeData kPdfaAttributeData[] = {
diff --git a/xfa/fxfa/parser/cxfa_permissions.cpp b/xfa/fxfa/parser/cxfa_permissions.cpp
index 322650c..cb62c21 100644
--- a/xfa/fxfa/parser/cxfa_permissions.cpp
+++ b/xfa/fxfa/parser/cxfa_permissions.cpp
@@ -12,15 +12,15 @@
 namespace {
 
 const CXFA_Node::PropertyData kPermissionsPropertyData[] = {
-    {XFA_Element::ModifyAnnots, 1, 0},
-    {XFA_Element::ContentCopy, 1, 0},
-    {XFA_Element::FormFieldFilling, 1, 0},
-    {XFA_Element::Change, 1, 0},
-    {XFA_Element::AccessibleContent, 1, 0},
-    {XFA_Element::Print, 1, 0},
-    {XFA_Element::PlaintextMetadata, 1, 0},
-    {XFA_Element::PrintHighQuality, 1, 0},
-    {XFA_Element::DocumentAssembly, 1, 0},
+    {XFA_Element::ModifyAnnots, 1, {}},
+    {XFA_Element::ContentCopy, 1, {}},
+    {XFA_Element::FormFieldFilling, 1, {}},
+    {XFA_Element::Change, 1, {}},
+    {XFA_Element::AccessibleContent, 1, {}},
+    {XFA_Element::Print, 1, {}},
+    {XFA_Element::PlaintextMetadata, 1, {}},
+    {XFA_Element::PrintHighQuality, 1, {}},
+    {XFA_Element::DocumentAssembly, 1, {}},
 };
 
 const CXFA_Node::AttributeData kPermissionsAttributeData[] = {
diff --git a/xfa/fxfa/parser/cxfa_present.cpp b/xfa/fxfa/parser/cxfa_present.cpp
index 44658bf..255d37d 100644
--- a/xfa/fxfa/parser/cxfa_present.cpp
+++ b/xfa/fxfa/parser/cxfa_present.cpp
@@ -12,20 +12,20 @@
 namespace {
 
 const CXFA_Node::PropertyData kPresentPropertyData[] = {
-    {XFA_Element::Xdp, 1, 0},
-    {XFA_Element::Cache, 1, 0},
-    {XFA_Element::Pagination, 1, 0},
-    {XFA_Element::Overprint, 1, 0},
-    {XFA_Element::BehaviorOverride, 1, 0},
-    {XFA_Element::Copies, 1, 0},
-    {XFA_Element::Output, 1, 0},
-    {XFA_Element::Validate, 1, 0},
-    {XFA_Element::Layout, 1, 0},
-    {XFA_Element::Script, 1, 0},
-    {XFA_Element::Common, 1, 0},
-    {XFA_Element::PaginationOverride, 1, 0},
-    {XFA_Element::Destination, 1, 0},
-    {XFA_Element::IncrementalMerge, 1, 0},
+    {XFA_Element::Xdp, 1, {}},
+    {XFA_Element::Cache, 1, {}},
+    {XFA_Element::Pagination, 1, {}},
+    {XFA_Element::Overprint, 1, {}},
+    {XFA_Element::BehaviorOverride, 1, {}},
+    {XFA_Element::Copies, 1, {}},
+    {XFA_Element::Output, 1, {}},
+    {XFA_Element::Validate, 1, {}},
+    {XFA_Element::Layout, 1, {}},
+    {XFA_Element::Script, 1, {}},
+    {XFA_Element::Common, 1, {}},
+    {XFA_Element::PaginationOverride, 1, {}},
+    {XFA_Element::Destination, 1, {}},
+    {XFA_Element::IncrementalMerge, 1, {}},
 };
 
 const CXFA_Node::AttributeData kPresentAttributeData[] = {
diff --git a/xfa/fxfa/parser/cxfa_ps.cpp b/xfa/fxfa/parser/cxfa_ps.cpp
index 2e16a25..b5d1845 100644
--- a/xfa/fxfa/parser/cxfa_ps.cpp
+++ b/xfa/fxfa/parser/cxfa_ps.cpp
@@ -12,10 +12,10 @@
 namespace {
 
 const CXFA_Node::PropertyData kPsPropertyData[] = {
-    {XFA_Element::FontInfo, 1, 0},  {XFA_Element::Jog, 1, 0},
-    {XFA_Element::Xdc, 1, 0},       {XFA_Element::BatchOutput, 1, 0},
-    {XFA_Element::OutputBin, 1, 0}, {XFA_Element::Compress, 1, 0},
-    {XFA_Element::Staple, 1, 0},    {XFA_Element::MediumInfo, 1, 0},
+    {XFA_Element::FontInfo, 1, {}},  {XFA_Element::Jog, 1, {}},
+    {XFA_Element::Xdc, 1, {}},       {XFA_Element::BatchOutput, 1, {}},
+    {XFA_Element::OutputBin, 1, {}}, {XFA_Element::Compress, 1, {}},
+    {XFA_Element::Staple, 1, {}},    {XFA_Element::MediumInfo, 1, {}},
 };
 
 const CXFA_Node::AttributeData kPsAttributeData[] = {
diff --git a/xfa/fxfa/parser/cxfa_query.cpp b/xfa/fxfa/parser/cxfa_query.cpp
index a178e52..ab25367 100644
--- a/xfa/fxfa/parser/cxfa_query.cpp
+++ b/xfa/fxfa/parser/cxfa_query.cpp
@@ -12,8 +12,8 @@
 namespace {
 
 const CXFA_Node::PropertyData kQueryPropertyData[] = {
-    {XFA_Element::RecordSet, 1, 0},
-    {XFA_Element::Select, 1, 0},
+    {XFA_Element::RecordSet, 1, {}},
+    {XFA_Element::Select, 1, {}},
 };
 
 const CXFA_Node::AttributeData kQueryAttributeData[] = {
diff --git a/xfa/fxfa/parser/cxfa_radial.cpp b/xfa/fxfa/parser/cxfa_radial.cpp
index 7910868..08ce0e0 100644
--- a/xfa/fxfa/parser/cxfa_radial.cpp
+++ b/xfa/fxfa/parser/cxfa_radial.cpp
@@ -19,8 +19,8 @@
 namespace {
 
 const CXFA_Node::PropertyData kRadialPropertyData[] = {
-    {XFA_Element::Color, 1, 0},
-    {XFA_Element::Extras, 1, 0},
+    {XFA_Element::Color, 1, {}},
+    {XFA_Element::Extras, 1, {}},
 };
 
 const CXFA_Node::AttributeData kRadialAttributeData[] = {
diff --git a/xfa/fxfa/parser/cxfa_rectangle.cpp b/xfa/fxfa/parser/cxfa_rectangle.cpp
index 0d211c1..b37204f 100644
--- a/xfa/fxfa/parser/cxfa_rectangle.cpp
+++ b/xfa/fxfa/parser/cxfa_rectangle.cpp
@@ -21,9 +21,9 @@
 namespace {
 
 const CXFA_Node::PropertyData kRectanglePropertyData[] = {
-    {XFA_Element::Edge, 4, 0},
-    {XFA_Element::Corner, 4, 0},
-    {XFA_Element::Fill, 1, 0},
+    {XFA_Element::Edge, 4, {}},
+    {XFA_Element::Corner, 4, {}},
+    {XFA_Element::Fill, 1, {}},
 };
 
 const CXFA_Node::AttributeData kRectangleAttributeData[] = {
diff --git a/xfa/fxfa/parser/cxfa_script.cpp b/xfa/fxfa/parser/cxfa_script.cpp
index 39504cb..8e402f0 100644
--- a/xfa/fxfa/parser/cxfa_script.cpp
+++ b/xfa/fxfa/parser/cxfa_script.cpp
@@ -12,9 +12,9 @@
 namespace {
 
 const CXFA_Node::PropertyData kScriptPropertyData[] = {
-    {XFA_Element::Exclude, 1, 0},
-    {XFA_Element::CurrentPage, 1, 0},
-    {XFA_Element::RunScripts, 1, 0},
+    {XFA_Element::Exclude, 1, {}},
+    {XFA_Element::CurrentPage, 1, {}},
+    {XFA_Element::RunScripts, 1, {}},
 };
 
 const CXFA_Node::AttributeData kScriptAttributeData[] = {
diff --git a/xfa/fxfa/parser/cxfa_signature.cpp b/xfa/fxfa/parser/cxfa_signature.cpp
index 5a37e8d..df1e156 100644
--- a/xfa/fxfa/parser/cxfa_signature.cpp
+++ b/xfa/fxfa/parser/cxfa_signature.cpp
@@ -12,9 +12,9 @@
 namespace {
 
 const CXFA_Node::PropertyData kSignaturePropertyData[] = {
-    {XFA_Element::Margin, 1, 0}, {XFA_Element::Filter, 1, 0},
-    {XFA_Element::Border, 1, 0}, {XFA_Element::Manifest, 1, 0},
-    {XFA_Element::Extras, 1, 0},
+    {XFA_Element::Margin, 1, {}}, {XFA_Element::Filter, 1, {}},
+    {XFA_Element::Border, 1, {}}, {XFA_Element::Manifest, 1, {}},
+    {XFA_Element::Extras, 1, {}},
 };
 
 const CXFA_Node::AttributeData kSignatureAttributeData[] = {
diff --git a/xfa/fxfa/parser/cxfa_signdata.cpp b/xfa/fxfa/parser/cxfa_signdata.cpp
index 7f9a8f8..e5e9dbf 100644
--- a/xfa/fxfa/parser/cxfa_signdata.cpp
+++ b/xfa/fxfa/parser/cxfa_signdata.cpp
@@ -12,8 +12,8 @@
 namespace {
 
 const CXFA_Node::PropertyData kSignDataPropertyData[] = {
-    {XFA_Element::Filter, 1, 0},
-    {XFA_Element::Manifest, 1, 0},
+    {XFA_Element::Filter, 1, {}},
+    {XFA_Element::Manifest, 1, {}},
 };
 
 const CXFA_Node::AttributeData kSignDataAttributeData[] = {
diff --git a/xfa/fxfa/parser/cxfa_silentprint.cpp b/xfa/fxfa/parser/cxfa_silentprint.cpp
index d164311..d24c1ab 100644
--- a/xfa/fxfa/parser/cxfa_silentprint.cpp
+++ b/xfa/fxfa/parser/cxfa_silentprint.cpp
@@ -12,8 +12,8 @@
 namespace {
 
 const CXFA_Node::PropertyData kSilentPrintPropertyData[] = {
-    {XFA_Element::AddSilentPrint, 1, 0},
-    {XFA_Element::PrinterName, 1, 0},
+    {XFA_Element::AddSilentPrint, 1, {}},
+    {XFA_Element::PrinterName, 1, {}},
 };
 
 const CXFA_Node::AttributeData kSilentPrintAttributeData[] = {
diff --git a/xfa/fxfa/parser/cxfa_solid.cpp b/xfa/fxfa/parser/cxfa_solid.cpp
index 10a7d1c0..62e7feb 100644
--- a/xfa/fxfa/parser/cxfa_solid.cpp
+++ b/xfa/fxfa/parser/cxfa_solid.cpp
@@ -12,7 +12,7 @@
 namespace {
 
 const CXFA_Node::PropertyData kSolidPropertyData[] = {
-    {XFA_Element::Extras, 1, 0},
+    {XFA_Element::Extras, 1, {}},
 };
 
 const CXFA_Node::AttributeData kSolidAttributeData[] = {
diff --git a/xfa/fxfa/parser/cxfa_source.cpp b/xfa/fxfa/parser/cxfa_source.cpp
index 8fcdaab..bfcd34f 100644
--- a/xfa/fxfa/parser/cxfa_source.cpp
+++ b/xfa/fxfa/parser/cxfa_source.cpp
@@ -12,7 +12,7 @@
 namespace {
 
 const CXFA_Node::PropertyData kSourcePropertyData[] = {
-    {XFA_Element::Connect, 1, 0},
+    {XFA_Element::Connect, 1, {}},
 };
 
 const CXFA_Node::AttributeData kSourceAttributeData[] = {
diff --git a/xfa/fxfa/parser/cxfa_stipple.cpp b/xfa/fxfa/parser/cxfa_stipple.cpp
index 865fab6..eeec743 100644
--- a/xfa/fxfa/parser/cxfa_stipple.cpp
+++ b/xfa/fxfa/parser/cxfa_stipple.cpp
@@ -14,8 +14,8 @@
 namespace {
 
 const CXFA_Node::PropertyData kStipplePropertyData[] = {
-    {XFA_Element::Color, 1, 0},
-    {XFA_Element::Extras, 1, 0},
+    {XFA_Element::Color, 1, {}},
+    {XFA_Element::Extras, 1, {}},
 };
 
 const CXFA_Node::AttributeData kStippleAttributeData[] = {
diff --git a/xfa/fxfa/parser/cxfa_subform.cpp b/xfa/fxfa/parser/cxfa_subform.cpp
index 4e4f695..548d2c3 100644
--- a/xfa/fxfa/parser/cxfa_subform.cpp
+++ b/xfa/fxfa/parser/cxfa_subform.cpp
@@ -12,15 +12,15 @@
 namespace {
 
 const CXFA_Node::PropertyData kSubformPropertyData[] = {
-    {XFA_Element::Break, 1, 0},   {XFA_Element::Margin, 1, 0},
-    {XFA_Element::Para, 1, 0},    {XFA_Element::Border, 1, 0},
-    {XFA_Element::Assist, 1, 0},  {XFA_Element::Traversal, 1, 0},
-    {XFA_Element::Keep, 1, 0},    {XFA_Element::Validate, 1, 0},
-    {XFA_Element::PageSet, 1, 0}, {XFA_Element::Overflow, 1, 0},
-    {XFA_Element::Bind, 1, 0},    {XFA_Element::Desc, 1, 0},
-    {XFA_Element::Bookend, 1, 0}, {XFA_Element::Calculate, 1, 0},
-    {XFA_Element::Extras, 1, 0},  {XFA_Element::Variables, 1, 0},
-    {XFA_Element::Occur, 1, 0},
+    {XFA_Element::Break, 1, {}},   {XFA_Element::Margin, 1, {}},
+    {XFA_Element::Para, 1, {}},    {XFA_Element::Border, 1, {}},
+    {XFA_Element::Assist, 1, {}},  {XFA_Element::Traversal, 1, {}},
+    {XFA_Element::Keep, 1, {}},    {XFA_Element::Validate, 1, {}},
+    {XFA_Element::PageSet, 1, {}}, {XFA_Element::Overflow, 1, {}},
+    {XFA_Element::Bind, 1, {}},    {XFA_Element::Desc, 1, {}},
+    {XFA_Element::Bookend, 1, {}}, {XFA_Element::Calculate, 1, {}},
+    {XFA_Element::Extras, 1, {}},  {XFA_Element::Variables, 1, {}},
+    {XFA_Element::Occur, 1, {}},
 };
 
 const CXFA_Node::AttributeData kSubformAttributeData[] = {
diff --git a/xfa/fxfa/parser/cxfa_subformset.cpp b/xfa/fxfa/parser/cxfa_subformset.cpp
index 66ba542..2df569c 100644
--- a/xfa/fxfa/parser/cxfa_subformset.cpp
+++ b/xfa/fxfa/parser/cxfa_subformset.cpp
@@ -12,9 +12,9 @@
 namespace {
 
 const CXFA_Node::PropertyData kSubformSetPropertyData[] = {
-    {XFA_Element::Break, 1, 0},  {XFA_Element::Overflow, 1, 0},
-    {XFA_Element::Desc, 1, 0},   {XFA_Element::Bookend, 1, 0},
-    {XFA_Element::Extras, 1, 0}, {XFA_Element::Occur, 1, 0},
+    {XFA_Element::Break, 1, {}},  {XFA_Element::Overflow, 1, {}},
+    {XFA_Element::Desc, 1, {}},   {XFA_Element::Bookend, 1, {}},
+    {XFA_Element::Extras, 1, {}}, {XFA_Element::Occur, 1, {}},
 };
 
 const CXFA_Node::AttributeData kSubformSetAttributeData[] = {
diff --git a/xfa/fxfa/parser/cxfa_submit.cpp b/xfa/fxfa/parser/cxfa_submit.cpp
index f14f147..e3db03b 100644
--- a/xfa/fxfa/parser/cxfa_submit.cpp
+++ b/xfa/fxfa/parser/cxfa_submit.cpp
@@ -12,7 +12,7 @@
 namespace {
 
 const CXFA_Node::PropertyData kSubmitPropertyData[] = {
-    {XFA_Element::Encrypt, 1, 0},
+    {XFA_Element::Encrypt, 1, {}},
 };
 
 const CXFA_Node::AttributeData kSubmitAttributeData[] = {
diff --git a/xfa/fxfa/parser/cxfa_template.cpp b/xfa/fxfa/parser/cxfa_template.cpp
index 4057336..0529e4a 100644
--- a/xfa/fxfa/parser/cxfa_template.cpp
+++ b/xfa/fxfa/parser/cxfa_template.cpp
@@ -12,9 +12,9 @@
 namespace {
 
 const CXFA_Node::PropertyData kTemplatePropertyData[] = {
-    {XFA_Element::Uri, 1, 0},       {XFA_Element::Xsl, 1, 0},
-    {XFA_Element::StartPage, 1, 0}, {XFA_Element::Relevant, 1, 0},
-    {XFA_Element::Base, 1, 0},      {XFA_Element::Extras, 1, 0},
+    {XFA_Element::Uri, 1, {}},       {XFA_Element::Xsl, 1, {}},
+    {XFA_Element::StartPage, 1, {}}, {XFA_Element::Relevant, 1, {}},
+    {XFA_Element::Base, 1, {}},      {XFA_Element::Extras, 1, {}},
 };
 
 const CXFA_Node::AttributeData kTemplateAttributeData[] = {
diff --git a/xfa/fxfa/parser/cxfa_textedit.cpp b/xfa/fxfa/parser/cxfa_textedit.cpp
index 5846c5b..cc2f39d 100644
--- a/xfa/fxfa/parser/cxfa_textedit.cpp
+++ b/xfa/fxfa/parser/cxfa_textedit.cpp
@@ -12,10 +12,10 @@
 namespace {
 
 const CXFA_Node::PropertyData kTextEditPropertyData[] = {
-    {XFA_Element::Margin, 1, 0},
-    {XFA_Element::Border, 1, 0},
-    {XFA_Element::Comb, 1, 0},
-    {XFA_Element::Extras, 1, 0},
+    {XFA_Element::Margin, 1, {}},
+    {XFA_Element::Border, 1, {}},
+    {XFA_Element::Comb, 1, {}},
+    {XFA_Element::Extras, 1, {}},
 };
 
 const CXFA_Node::AttributeData kTextEditAttributeData[] = {
diff --git a/xfa/fxfa/parser/cxfa_timepatterns.cpp b/xfa/fxfa/parser/cxfa_timepatterns.cpp
index 6e7de19..f6ff507 100644
--- a/xfa/fxfa/parser/cxfa_timepatterns.cpp
+++ b/xfa/fxfa/parser/cxfa_timepatterns.cpp
@@ -12,7 +12,7 @@
 namespace {
 
 const CXFA_Node::PropertyData kTimePatternsPropertyData[] = {
-    {XFA_Element::TimePattern, 4, 0},
+    {XFA_Element::TimePattern, 4, {}},
 };
 
 }  // namespace
diff --git a/xfa/fxfa/parser/cxfa_transform.cpp b/xfa/fxfa/parser/cxfa_transform.cpp
index c2ab491..ef9129f 100644
--- a/xfa/fxfa/parser/cxfa_transform.cpp
+++ b/xfa/fxfa/parser/cxfa_transform.cpp
@@ -12,10 +12,10 @@
 namespace {
 
 const CXFA_Node::PropertyData kTransformPropertyData[] = {
-    {XFA_Element::Whitespace, 1, 0},  {XFA_Element::Rename, 1, 0},
-    {XFA_Element::IfEmpty, 1, 0},     {XFA_Element::Presence, 1, 0},
-    {XFA_Element::Picture, 1, 0},     {XFA_Element::NameAttr, 1, 0},
-    {XFA_Element::GroupParent, 1, 0},
+    {XFA_Element::Whitespace, 1, {}},  {XFA_Element::Rename, 1, {}},
+    {XFA_Element::IfEmpty, 1, {}},     {XFA_Element::Presence, 1, {}},
+    {XFA_Element::Picture, 1, {}},     {XFA_Element::NameAttr, 1, {}},
+    {XFA_Element::GroupParent, 1, {}},
 };
 
 const CXFA_Node::AttributeData kTransformAttributeData[] = {
diff --git a/xfa/fxfa/parser/cxfa_traversal.cpp b/xfa/fxfa/parser/cxfa_traversal.cpp
index a190e59..55e91b2 100644
--- a/xfa/fxfa/parser/cxfa_traversal.cpp
+++ b/xfa/fxfa/parser/cxfa_traversal.cpp
@@ -12,7 +12,7 @@
 namespace {
 
 const CXFA_Node::PropertyData kTraversalPropertyData[] = {
-    {XFA_Element::Extras, 1, 0},
+    {XFA_Element::Extras, 1, {}},
 };
 
 const CXFA_Node::AttributeData kTraversalAttributeData[] = {
diff --git a/xfa/fxfa/parser/cxfa_traverse.cpp b/xfa/fxfa/parser/cxfa_traverse.cpp
index 4f8348b..0b06996 100644
--- a/xfa/fxfa/parser/cxfa_traverse.cpp
+++ b/xfa/fxfa/parser/cxfa_traverse.cpp
@@ -12,8 +12,8 @@
 namespace {
 
 const CXFA_Node::PropertyData kTraversePropertyData[] = {
-    {XFA_Element::Script, 1, 0},
-    {XFA_Element::Extras, 1, 0},
+    {XFA_Element::Script, 1, {}},
+    {XFA_Element::Extras, 1, {}},
 };
 
 const CXFA_Node::AttributeData kTraverseAttributeData[] = {
diff --git a/xfa/fxfa/parser/cxfa_ui.cpp b/xfa/fxfa/parser/cxfa_ui.cpp
index 69c6f4a..932ce50 100644
--- a/xfa/fxfa/parser/cxfa_ui.cpp
+++ b/xfa/fxfa/parser/cxfa_ui.cpp
@@ -11,20 +11,20 @@
 
 namespace {
 
-const CXFA_Node::PropertyData kUiPropertyData[] = {
-    {XFA_Element::CheckButton, 1, XFA_PropertyFlag_OneOf},
-    {XFA_Element::ChoiceList, 1, XFA_PropertyFlag_OneOf},
-    {XFA_Element::DefaultUi, 1, XFA_PropertyFlag_OneOf},
-    {XFA_Element::Barcode, 1, XFA_PropertyFlag_OneOf},
-    {XFA_Element::Button, 1, XFA_PropertyFlag_OneOf},
-    {XFA_Element::DateTimeEdit, 1, XFA_PropertyFlag_OneOf},
-    {XFA_Element::Picture, 1, 0},
-    {XFA_Element::ImageEdit, 1, XFA_PropertyFlag_OneOf},
-    {XFA_Element::PasswordEdit, 1, XFA_PropertyFlag_OneOf},
-    {XFA_Element::NumericEdit, 1, XFA_PropertyFlag_OneOf},
-    {XFA_Element::Signature, 1, XFA_PropertyFlag_OneOf},
-    {XFA_Element::TextEdit, 1, XFA_PropertyFlag_OneOf},
-    {XFA_Element::Extras, 1, 0},
+constexpr CXFA_Node::PropertyData kUiPropertyData[] = {
+    {XFA_Element::CheckButton, 1, {XFA_PropertyFlag::kOneOf}},
+    {XFA_Element::ChoiceList, 1, {XFA_PropertyFlag::kOneOf}},
+    {XFA_Element::DefaultUi, 1, {XFA_PropertyFlag::kOneOf}},
+    {XFA_Element::Barcode, 1, {XFA_PropertyFlag::kOneOf}},
+    {XFA_Element::Button, 1, {XFA_PropertyFlag::kOneOf}},
+    {XFA_Element::DateTimeEdit, 1, {XFA_PropertyFlag::kOneOf}},
+    {XFA_Element::Picture, 1, {}},
+    {XFA_Element::ImageEdit, 1, {XFA_PropertyFlag::kOneOf}},
+    {XFA_Element::PasswordEdit, 1, {XFA_PropertyFlag::kOneOf}},
+    {XFA_Element::NumericEdit, 1, {XFA_PropertyFlag::kOneOf}},
+    {XFA_Element::Signature, 1, {XFA_PropertyFlag::kOneOf}},
+    {XFA_Element::TextEdit, 1, {XFA_PropertyFlag::kOneOf}},
+    {XFA_Element::Extras, 1, {}},
 };
 
 const CXFA_Node::AttributeData kUiAttributeData[] = {
@@ -53,7 +53,7 @@
   for (auto& prop : kUiPropertyData) {
     if (prop.property != child->GetElementType())
       continue;
-    if (!!(prop.flags & XFA_PropertyFlag_OneOf))
+    if (!!(prop.flags & XFA_PropertyFlag::kOneOf))
       return true;
   }
   return false;
diff --git a/xfa/fxfa/parser/cxfa_validate.cpp b/xfa/fxfa/parser/cxfa_validate.cpp
index 4b65bbc..8d168bf 100644
--- a/xfa/fxfa/parser/cxfa_validate.cpp
+++ b/xfa/fxfa/parser/cxfa_validate.cpp
@@ -17,10 +17,10 @@
 namespace {
 
 const CXFA_Node::PropertyData kValidatePropertyData[] = {
-    {XFA_Element::Message, 1, 0},
-    {XFA_Element::Picture, 1, 0},
-    {XFA_Element::Script, 1, 0},
-    {XFA_Element::Extras, 1, 0},
+    {XFA_Element::Message, 1, {}},
+    {XFA_Element::Picture, 1, {}},
+    {XFA_Element::Script, 1, {}},
+    {XFA_Element::Extras, 1, {}},
 };
 const CXFA_Node::AttributeData kValidateAttributeData[] = {
     {XFA_Attribute::Id, XFA_AttributeType::CData, nullptr},
diff --git a/xfa/fxfa/parser/cxfa_value.cpp b/xfa/fxfa/parser/cxfa_value.cpp
index 82e96b8..fcf2af9 100644
--- a/xfa/fxfa/parser/cxfa_value.cpp
+++ b/xfa/fxfa/parser/cxfa_value.cpp
@@ -17,23 +17,23 @@
 
 namespace {
 
-const CXFA_Node::PropertyData kValuePropertyData[] = {
-    {XFA_Element::Arc, 1, XFA_PropertyFlag_OneOf},
-    {XFA_Element::Text, 1, XFA_PropertyFlag_OneOf},
-    {XFA_Element::Time, 1, XFA_PropertyFlag_OneOf},
-    {XFA_Element::DateTime, 1, XFA_PropertyFlag_OneOf},
-    {XFA_Element::Image, 1, XFA_PropertyFlag_OneOf},
-    {XFA_Element::Decimal, 1, XFA_PropertyFlag_OneOf},
-    {XFA_Element::Boolean, 1, XFA_PropertyFlag_OneOf},
-    {XFA_Element::Integer, 1, XFA_PropertyFlag_OneOf},
-    {XFA_Element::ExData, 1, XFA_PropertyFlag_OneOf},
-    {XFA_Element::Rectangle, 1, XFA_PropertyFlag_OneOf},
-    {XFA_Element::Date, 1, XFA_PropertyFlag_OneOf},
-    {XFA_Element::Float, 1, XFA_PropertyFlag_OneOf},
-    {XFA_Element::Line, 1, XFA_PropertyFlag_OneOf},
+constexpr CXFA_Node::PropertyData kValuePropertyData[] = {
+    {XFA_Element::Arc, 1, XFA_PropertyFlag::kOneOf},
+    {XFA_Element::Text, 1, XFA_PropertyFlag::kOneOf},
+    {XFA_Element::Time, 1, XFA_PropertyFlag::kOneOf},
+    {XFA_Element::DateTime, 1, XFA_PropertyFlag::kOneOf},
+    {XFA_Element::Image, 1, XFA_PropertyFlag::kOneOf},
+    {XFA_Element::Decimal, 1, XFA_PropertyFlag::kOneOf},
+    {XFA_Element::Boolean, 1, XFA_PropertyFlag::kOneOf},
+    {XFA_Element::Integer, 1, XFA_PropertyFlag::kOneOf},
+    {XFA_Element::ExData, 1, XFA_PropertyFlag::kOneOf},
+    {XFA_Element::Rectangle, 1, XFA_PropertyFlag::kOneOf},
+    {XFA_Element::Date, 1, XFA_PropertyFlag::kOneOf},
+    {XFA_Element::Float, 1, XFA_PropertyFlag::kOneOf},
+    {XFA_Element::Line, 1, XFA_PropertyFlag::kOneOf},
 };
 
-const CXFA_Node::AttributeData kValueAttributeData[] = {
+constexpr CXFA_Node::AttributeData kValueAttributeData[] = {
     {XFA_Attribute::Id, XFA_AttributeType::CData, nullptr},
     {XFA_Attribute::Use, XFA_AttributeType::CData, nullptr},
     {XFA_Attribute::Relevant, XFA_AttributeType::CData, nullptr},
diff --git a/xfa/fxfa/parser/cxfa_viewerpreferences.cpp b/xfa/fxfa/parser/cxfa_viewerpreferences.cpp
index 596a49f..9119bef 100644
--- a/xfa/fxfa/parser/cxfa_viewerpreferences.cpp
+++ b/xfa/fxfa/parser/cxfa_viewerpreferences.cpp
@@ -12,15 +12,15 @@
 namespace {
 
 const CXFA_Node::PropertyData kViewerPreferencesPropertyData[] = {
-    {XFA_Element::PrintScaling, 1, 0},
-    {XFA_Element::Enforce, 1, 0},
-    {XFA_Element::NumberOfCopies, 1, 0},
-    {XFA_Element::PageRange, 1, 0},
-    {XFA_Element::AddViewerPreferences, 1, 0},
-    {XFA_Element::ADBE_JSConsole, 1, 0},
-    {XFA_Element::DuplexOption, 1, 0},
-    {XFA_Element::ADBE_JSDebugger, 1, 0},
-    {XFA_Element::PickTrayByPDFSize, 1, 0},
+    {XFA_Element::PrintScaling, 1, {}},
+    {XFA_Element::Enforce, 1, {}},
+    {XFA_Element::NumberOfCopies, 1, {}},
+    {XFA_Element::PageRange, 1, {}},
+    {XFA_Element::AddViewerPreferences, 1, {}},
+    {XFA_Element::ADBE_JSConsole, 1, {}},
+    {XFA_Element::DuplexOption, 1, {}},
+    {XFA_Element::ADBE_JSDebugger, 1, {}},
+    {XFA_Element::PickTrayByPDFSize, 1, {}},
 };
 
 const CXFA_Node::AttributeData kViewerPreferencesAttributeData[] = {
diff --git a/xfa/fxfa/parser/cxfa_webclient.cpp b/xfa/fxfa/parser/cxfa_webclient.cpp
index e46e10f..04b437a 100644
--- a/xfa/fxfa/parser/cxfa_webclient.cpp
+++ b/xfa/fxfa/parser/cxfa_webclient.cpp
@@ -12,8 +12,8 @@
 namespace {
 
 const CXFA_Node::PropertyData kWebClientPropertyData[] = {
-    {XFA_Element::FontInfo, 1, 0},
-    {XFA_Element::Xdc, 1, 0},
+    {XFA_Element::FontInfo, 1, {}},
+    {XFA_Element::Xdc, 1, {}},
 };
 
 const CXFA_Node::AttributeData kWebClientAttributeData[] = {
diff --git a/xfa/fxfa/parser/cxfa_wsdlconnection.cpp b/xfa/fxfa/parser/cxfa_wsdlconnection.cpp
index 7905041..335fad8 100644
--- a/xfa/fxfa/parser/cxfa_wsdlconnection.cpp
+++ b/xfa/fxfa/parser/cxfa_wsdlconnection.cpp
@@ -12,12 +12,12 @@
 namespace {
 
 const CXFA_Node::PropertyData kWsdlConnectionPropertyData[] = {
-    {XFA_Element::Operation, 1, 0},
-    {XFA_Element::WsdlAddress, 1, 0},
-    {XFA_Element::SoapAddress, 1, 0},
-    {XFA_Element::SoapAction, 1, 0},
-    {XFA_Element::EffectiveOutputPolicy, 1, 0},
-    {XFA_Element::EffectiveInputPolicy, 1, 0},
+    {XFA_Element::Operation, 1, {}},
+    {XFA_Element::WsdlAddress, 1, {}},
+    {XFA_Element::SoapAddress, 1, {}},
+    {XFA_Element::SoapAction, 1, {}},
+    {XFA_Element::EffectiveOutputPolicy, 1, {}},
+    {XFA_Element::EffectiveInputPolicy, 1, {}},
 };
 
 const CXFA_Node::AttributeData kWsdlConnectionAttributeData[] = {
diff --git a/xfa/fxfa/parser/cxfa_xdc.cpp b/xfa/fxfa/parser/cxfa_xdc.cpp
index 9b61fa6..35ad46f 100644
--- a/xfa/fxfa/parser/cxfa_xdc.cpp
+++ b/xfa/fxfa/parser/cxfa_xdc.cpp
@@ -12,8 +12,8 @@
 namespace {
 
 const CXFA_Node::PropertyData kXdcPropertyData[] = {
-    {XFA_Element::Uri, 1, 0},
-    {XFA_Element::Xsl, 1, 0},
+    {XFA_Element::Uri, 1, {}},
+    {XFA_Element::Xsl, 1, {}},
 };
 
 const CXFA_Node::AttributeData kXdcAttributeData[] = {
diff --git a/xfa/fxfa/parser/cxfa_xdp.cpp b/xfa/fxfa/parser/cxfa_xdp.cpp
index c235895..5e8f521 100644
--- a/xfa/fxfa/parser/cxfa_xdp.cpp
+++ b/xfa/fxfa/parser/cxfa_xdp.cpp
@@ -12,7 +12,7 @@
 namespace {
 
 const CXFA_Node::PropertyData kXdpPropertyData[] = {
-    {XFA_Element::Packets, 1, 0},
+    {XFA_Element::Packets, 1, {}},
 };
 
 const CXFA_Node::AttributeData kXdpAttributeData[] = {
diff --git a/xfa/fxfa/parser/cxfa_xmlconnection.cpp b/xfa/fxfa/parser/cxfa_xmlconnection.cpp
index f10745c..0d6c0b7 100644
--- a/xfa/fxfa/parser/cxfa_xmlconnection.cpp
+++ b/xfa/fxfa/parser/cxfa_xmlconnection.cpp
@@ -12,7 +12,7 @@
 namespace {
 
 const CXFA_Node::PropertyData kXmlConnectionPropertyData[] = {
-    {XFA_Element::Uri, 1, 0},
+    {XFA_Element::Uri, 1, {}},
 };
 
 const CXFA_Node::AttributeData kXmlConnectionAttributeData[] = {
diff --git a/xfa/fxfa/parser/cxfa_xsdconnection.cpp b/xfa/fxfa/parser/cxfa_xsdconnection.cpp
index 838f4a3..017fc9f 100644
--- a/xfa/fxfa/parser/cxfa_xsdconnection.cpp
+++ b/xfa/fxfa/parser/cxfa_xsdconnection.cpp
@@ -12,8 +12,8 @@
 namespace {
 
 const CXFA_Node::PropertyData kXsdConnectionPropertyData[] = {
-    {XFA_Element::Uri, 1, 0},
-    {XFA_Element::RootElement, 1, 0},
+    {XFA_Element::Uri, 1, {}},
+    {XFA_Element::RootElement, 1, {}},
 };
 
 const CXFA_Node::AttributeData kXsdConnectionAttributeData[] = {
diff --git a/xfa/fxfa/parser/cxfa_xsl.cpp b/xfa/fxfa/parser/cxfa_xsl.cpp
index af4ec0b..1ec2f50 100644
--- a/xfa/fxfa/parser/cxfa_xsl.cpp
+++ b/xfa/fxfa/parser/cxfa_xsl.cpp
@@ -12,8 +12,8 @@
 namespace {
 
 const CXFA_Node::PropertyData kXslPropertyData[] = {
-    {XFA_Element::Uri, 1, 0},
-    {XFA_Element::Debug, 1, 0},
+    {XFA_Element::Uri, 1, {}},
+    {XFA_Element::Debug, 1, {}},
 };
 
 const CXFA_Node::AttributeData kXslAttributeData[] = {
diff --git a/xfa/fxfa/parser/cxfa_zpl.cpp b/xfa/fxfa/parser/cxfa_zpl.cpp
index fc235d8..0652f80 100644
--- a/xfa/fxfa/parser/cxfa_zpl.cpp
+++ b/xfa/fxfa/parser/cxfa_zpl.cpp
@@ -12,10 +12,10 @@
 namespace {
 
 const CXFA_Node::PropertyData kZplPropertyData[] = {
-    {XFA_Element::FontInfo, 1, 0},
-    {XFA_Element::Xdc, 1, 0},
-    {XFA_Element::BatchOutput, 1, 0},
-    {XFA_Element::FlipLabel, 1, 0},
+    {XFA_Element::FontInfo, 1, {}},
+    {XFA_Element::Xdc, 1, {}},
+    {XFA_Element::BatchOutput, 1, {}},
+    {XFA_Element::FlipLabel, 1, {}},
 };
 
 const CXFA_Node::AttributeData kZplAttributeData[] = {