Rename XFA_AttributeEnum to XFA_AttributeValue.

Because currently there are two enums, Attribute and AttributeEnum,
that sound too much alike. The second one enumerates the keyword
values that might be present for a given attribute.

Change-Id: I4eabda8e198d13c4a34ac57ec56af89546e2f2ec
Reviewed-on: https://pdfium-review.googlesource.com/c/46614
Reviewed-by: Lei Zhang <thestig@chromium.org>
Commit-Queue: Tom Sepez <tsepez@chromium.org>
diff --git a/fpdfsdk/fpdfxfa/cpdfxfa_docenvironment.cpp b/fpdfsdk/fpdfxfa/cpdfxfa_docenvironment.cpp
index 516bcf2..16fa513 100644
--- a/fpdfsdk/fpdfxfa/cpdfxfa_docenvironment.cpp
+++ b/fpdfsdk/fpdfxfa/cpdfxfa_docenvironment.cpp
@@ -908,7 +908,7 @@
   FPDF_FILEHANDLER* pFileHandler = nullptr;
   int fileFlag = -1;
   switch (submit->GetSubmitFormat()) {
-    case XFA_AttributeEnum::Xdp: {
+    case XFA_AttributeValue::Xdp: {
       WideString csContent = submit->GetSubmitXDPContent();
       csContent.Trim();
 
@@ -924,14 +924,14 @@
       ExportSubmitFile(pFileHandler, FXFA_SAVEAS_XDP, 0, flag);
       break;
     }
-    case XFA_AttributeEnum::Xml:
+    case XFA_AttributeValue::Xml:
       pFileHandler = pFormFillEnv->OpenFile(FXFA_SAVEAS_XML, nullptr, "wb");
       fileFlag = FXFA_SAVEAS_XML;
       ExportSubmitFile(pFileHandler, FXFA_SAVEAS_XML, 0, FXFA_XFA_ALL);
       break;
-    case XFA_AttributeEnum::Pdf:
+    case XFA_AttributeValue::Pdf:
       break;
-    case XFA_AttributeEnum::Urlencoded:
+    case XFA_AttributeValue::Urlencoded:
       pFileHandler = pFormFillEnv->OpenFile(FXFA_SAVEAS_XML, nullptr, "wb");
       fileFlag = FXFA_SAVEAS_XML;
       ExportSubmitFile(pFileHandler, FXFA_SAVEAS_XML, 0, FXFA_XFA_ALL);
diff --git a/fxjs/cfxjse_engine.h b/fxjs/cfxjse_engine.h
index 7331701..dca6613 100644
--- a/fxjs/cfxjse_engine.h
+++ b/fxjs/cfxjse_engine.h
@@ -79,8 +79,8 @@
   void AddNodesOfRunScript(CXFA_Node* pNode);
   CFXJSE_Class* GetJseNormalClass() const { return m_pJsClass.Get(); }
 
-  void SetRunAtType(XFA_AttributeEnum eRunAt) { m_eRunAtType = eRunAt; }
-  bool IsRunAtClient() { return m_eRunAtType != XFA_AttributeEnum::Server; }
+  void SetRunAtType(XFA_AttributeValue eRunAt) { m_eRunAtType = eRunAt; }
+  bool IsRunAtClient() { return m_eRunAtType != XFA_AttributeValue::Server; }
 
   CXFA_Script::Type GetType();
   std::vector<CXFA_Node*>* GetUpObjectArray() { return &m_upObjectArray; }
@@ -123,7 +123,7 @@
   std::unique_ptr<CFXJSE_ResolveProcessor> const m_ResolveProcessor;
   std::unique_ptr<CFXJSE_FormCalcContext> m_FM2JSContext;
   UnownedPtr<CXFA_Object> m_pThisObject;
-  XFA_AttributeEnum m_eRunAtType = XFA_AttributeEnum::Client;
+  XFA_AttributeValue m_eRunAtType = XFA_AttributeValue::Client;
 };
 
 #endif  //  FXJS_CFXJSE_ENGINE_H_
diff --git a/fxjs/xfa/cjx_object.cpp b/fxjs/xfa/cjx_object.cpp
index 3aba1a4..0550423 100644
--- a/fxjs/xfa/cjx_object.cpp
+++ b/fxjs/xfa/cjx_object.cpp
@@ -220,7 +220,7 @@
                               bool bNotify) {
   switch (ToNode(GetXFAObject())->GetAttributeType(eAttr)) {
     case XFA_AttributeType::Enum: {
-      Optional<XFA_AttributeEnum> item =
+      Optional<XFA_AttributeValue> item =
           CXFA_Node::NameToAttributeEnum(wsValue);
       SetEnum(eAttr,
               item ? *item : *(ToNode(GetXFAObject())->GetDefaultEnum(eAttr)),
@@ -277,7 +277,7 @@
                                               bool bUseDefault) {
   switch (ToNode(GetXFAObject())->GetAttributeType(eAttr)) {
     case XFA_AttributeType::Enum: {
-      Optional<XFA_AttributeEnum> value = TryEnum(eAttr, bUseDefault);
+      Optional<XFA_AttributeValue> value = TryEnum(eAttr, bUseDefault);
       if (!value)
         return {};
 
@@ -378,13 +378,13 @@
   return ToNode(GetXFAObject())->GetDefaultInteger(eAttr);
 }
 
-Optional<XFA_AttributeEnum> CJX_Object::TryEnum(XFA_Attribute eAttr,
-                                                bool bUseDefault) const {
+Optional<XFA_AttributeValue> CJX_Object::TryEnum(XFA_Attribute eAttr,
+                                                 bool bUseDefault) const {
   void* pKey = GetMapKey_Element(GetXFAObject()->GetElementType(), eAttr);
   void* pValue = nullptr;
   if (GetMapModuleValue(pKey, pValue)) {
     return {
-        static_cast<XFA_AttributeEnum>(reinterpret_cast<uintptr_t>(pValue))};
+        static_cast<XFA_AttributeValue>(reinterpret_cast<uintptr_t>(pValue))};
   }
   if (!bUseDefault)
     return {};
@@ -393,7 +393,7 @@
 }
 
 void CJX_Object::SetEnum(XFA_Attribute eAttr,
-                         XFA_AttributeEnum eValue,
+                         XFA_AttributeValue eValue,
                          bool bNotify) {
   CFX_XMLElement* elem = SetValue(eAttr, XFA_AttributeType::Enum,
                                   (void*)(uintptr_t)eValue, bNotify);
@@ -404,8 +404,8 @@
   }
 }
 
-XFA_AttributeEnum CJX_Object::GetEnum(XFA_Attribute eAttr) const {
-  return TryEnum(eAttr, true).value_or(XFA_AttributeEnum::Unknown);
+XFA_AttributeValue CJX_Object::GetEnum(XFA_Attribute eAttr) const {
+  return TryEnum(eAttr, true).value_or(XFA_AttributeValue::Unknown);
 }
 
 void CJX_Object::SetMeasure(XFA_Attribute eAttr,
@@ -822,7 +822,7 @@
     return {};
 
   if (ToNode(GetXFAObject())->GetElementType() == XFA_Element::DataValue &&
-      GetEnum(XFA_Attribute::Contains) == XFA_AttributeEnum::MetaData) {
+      GetEnum(XFA_Attribute::Contains) == XFA_AttributeValue::MetaData) {
     WideString wsNamespace;
     if (!XFA_FDEExtension_ResolveNamespaceQualifier(
             element, GetCData(XFA_Attribute::QualifiedName), &wsNamespace)) {
@@ -1588,7 +1588,7 @@
 
 void CJX_Object::ScriptSubformInstanceManager(CFXJSE_Value* pValue,
                                               bool bSetting,
-                                              XFA_AttributeEnum eAttribute) {
+                                              XFA_AttributeValue eAttribute) {
   if (bSetting) {
     ThrowInvalidPropertyException();
     return;
diff --git a/fxjs/xfa/cjx_object.h b/fxjs/xfa/cjx_object.h
index 0d4f1c8..8eaab2e 100644
--- a/fxjs/xfa/cjx_object.h
+++ b/fxjs/xfa/cjx_object.h
@@ -164,7 +164,7 @@
                         XFA_SOM_MESSAGETYPE iMessageType);
   void ScriptSubformInstanceManager(CFXJSE_Value* pValue,
                                     bool bSetting,
-                                    XFA_AttributeEnum eAttribute);
+                                    XFA_AttributeValue eAttribute);
   void ScriptSubmitFormatMode(CFXJSE_Value* pValue,
                               bool bSetting,
                               XFA_Attribute eAttribute);
@@ -188,10 +188,10 @@
                 bool bScriptModify);
   WideString GetCData(XFA_Attribute eAttr);
 
-  Optional<XFA_AttributeEnum> TryEnum(XFA_Attribute eAttr,
-                                      bool bUseDefault) const;
-  void SetEnum(XFA_Attribute eAttr, XFA_AttributeEnum eValue, bool bNotify);
-  XFA_AttributeEnum GetEnum(XFA_Attribute eAttr) const;
+  Optional<XFA_AttributeValue> TryEnum(XFA_Attribute eAttr,
+                                       bool bUseDefault) const;
+  void SetEnum(XFA_Attribute eAttr, XFA_AttributeValue eValue, bool bNotify);
+  XFA_AttributeValue GetEnum(XFA_Attribute eAttr) const;
 
   Optional<bool> TryBoolean(XFA_Attribute eAttr, bool bUseDefault);
   void SetBoolean(XFA_Attribute eAttr, bool bValue, bool bNotify);
diff --git a/xfa/fxfa/cxfa_ffcheckbutton.cpp b/xfa/fxfa/cxfa_ffcheckbutton.cpp
index 289821f..fa30c71 100644
--- a/xfa/fxfa/cxfa_ffcheckbutton.cpp
+++ b/xfa/fxfa/cxfa_ffcheckbutton.cpp
@@ -60,21 +60,21 @@
   pCheckBox->SetBoxSize(m_pNode->GetCheckButtonSize());
   uint32_t dwStyleEx = FWL_STYLEEXT_CKB_SignShapeCross;
   switch (button_->GetMark()) {
-    case XFA_AttributeEnum::Check:
+    case XFA_AttributeValue::Check:
       dwStyleEx = FWL_STYLEEXT_CKB_SignShapeCheck;
       break;
-    case XFA_AttributeEnum::Circle:
+    case XFA_AttributeValue::Circle:
       dwStyleEx = FWL_STYLEEXT_CKB_SignShapeCircle;
       break;
-    case XFA_AttributeEnum::Cross:
+    case XFA_AttributeValue::Cross:
       break;
-    case XFA_AttributeEnum::Diamond:
+    case XFA_AttributeValue::Diamond:
       dwStyleEx = FWL_STYLEEXT_CKB_SignShapeDiamond;
       break;
-    case XFA_AttributeEnum::Square:
+    case XFA_AttributeValue::Square:
       dwStyleEx = FWL_STYLEEXT_CKB_SignShapeSquare;
       break;
-    case XFA_AttributeEnum::Star:
+    case XFA_AttributeValue::Star:
       dwStyleEx = FWL_STYLEEXT_CKB_SignShapeStar;
       break;
     default: {
@@ -97,7 +97,7 @@
   CFX_RectF rtWidget = GetRectWithoutRotate();
   XFA_RectWithoutMargin(&rtWidget, margin);
 
-  XFA_AttributeEnum iCapPlacement = XFA_AttributeEnum::Unknown;
+  XFA_AttributeValue iCapPlacement = XFA_AttributeValue::Unknown;
   float fCapReserve = 0;
   CXFA_Caption* caption = m_pNode->GetCaptionIfExists();
   if (caption && caption->IsVisible()) {
@@ -105,8 +105,8 @@
     iCapPlacement = caption->GetPlacementType();
     fCapReserve = caption->GetReserve();
     if (fCapReserve <= 0) {
-      if (iCapPlacement == XFA_AttributeEnum::Top ||
-          iCapPlacement == XFA_AttributeEnum::Bottom) {
+      if (iCapPlacement == XFA_AttributeValue::Top ||
+          iCapPlacement == XFA_AttributeValue::Bottom) {
         fCapReserve = rtWidget.height - fCheckSize;
       } else {
         fCapReserve = rtWidget.width - fCheckSize;
@@ -114,8 +114,8 @@
     }
   }
 
-  XFA_AttributeEnum iHorzAlign = XFA_AttributeEnum::Left;
-  XFA_AttributeEnum iVertAlign = XFA_AttributeEnum::Top;
+  XFA_AttributeValue iHorzAlign = XFA_AttributeValue::Left;
+  XFA_AttributeValue iVertAlign = XFA_AttributeValue::Top;
   CXFA_Para* para = m_pNode->GetParaIfExists();
   if (para) {
     iHorzAlign = para->GetHorizontalAlign();
@@ -125,49 +125,49 @@
   m_rtUI = rtWidget;
   CXFA_Margin* captionMargin = caption ? caption->GetMarginIfExists() : nullptr;
   switch (iCapPlacement) {
-    case XFA_AttributeEnum::Left: {
+    case XFA_AttributeValue::Left: {
       m_rtCaption.width = fCapReserve;
       CapLeftRightPlacement(captionMargin);
       m_rtUI.width -= fCapReserve;
       m_rtUI.left += fCapReserve;
       break;
     }
-    case XFA_AttributeEnum::Top: {
+    case XFA_AttributeValue::Top: {
       m_rtCaption.height = fCapReserve;
       XFA_RectWithoutMargin(&m_rtCaption, captionMargin);
       m_rtUI.height -= fCapReserve;
       m_rtUI.top += fCapReserve;
       break;
     }
-    case XFA_AttributeEnum::Right: {
+    case XFA_AttributeValue::Right: {
       m_rtCaption.left = m_rtCaption.right() - fCapReserve;
       m_rtCaption.width = fCapReserve;
       CapLeftRightPlacement(captionMargin);
       m_rtUI.width -= fCapReserve;
       break;
     }
-    case XFA_AttributeEnum::Bottom: {
+    case XFA_AttributeValue::Bottom: {
       m_rtCaption.top = m_rtCaption.bottom() - fCapReserve;
       m_rtCaption.height = fCapReserve;
       XFA_RectWithoutMargin(&m_rtCaption, captionMargin);
       m_rtUI.height -= fCapReserve;
       break;
     }
-    case XFA_AttributeEnum::Inline:
+    case XFA_AttributeValue::Inline:
       break;
     default:
-      iHorzAlign = XFA_AttributeEnum::Right;
+      iHorzAlign = XFA_AttributeValue::Right;
       break;
   }
 
-  if (iHorzAlign == XFA_AttributeEnum::Center)
+  if (iHorzAlign == XFA_AttributeValue::Center)
     m_rtUI.left += (m_rtUI.width - fCheckSize) / 2;
-  else if (iHorzAlign == XFA_AttributeEnum::Right)
+  else if (iHorzAlign == XFA_AttributeValue::Right)
     m_rtUI.left = m_rtUI.right() - fCheckSize;
 
-  if (iVertAlign == XFA_AttributeEnum::Middle)
+  if (iVertAlign == XFA_AttributeValue::Middle)
     m_rtUI.top += (m_rtUI.height - fCheckSize) / 2;
-  else if (iVertAlign == XFA_AttributeEnum::Bottom)
+  else if (iVertAlign == XFA_AttributeValue::Bottom)
     m_rtUI.top = m_rtUI.bottom() - fCheckSize;
 
   m_rtUI.width = fCheckSize;
@@ -200,15 +200,15 @@
   }
 }
 
-void CXFA_FFCheckButton::AddUIMargin(XFA_AttributeEnum iCapPlacement) {
+void CXFA_FFCheckButton::AddUIMargin(XFA_AttributeValue iCapPlacement) {
   CFX_RectF rtUIMargin = m_pNode->GetUIMargin();
   m_rtUI.top -= rtUIMargin.top / 2 - rtUIMargin.height / 2;
 
   float fLeftAddRight = rtUIMargin.left + rtUIMargin.width;
   float fTopAddBottom = rtUIMargin.top + rtUIMargin.height;
   if (m_rtUI.width < fLeftAddRight) {
-    if (iCapPlacement == XFA_AttributeEnum::Right ||
-        iCapPlacement == XFA_AttributeEnum::Left) {
+    if (iCapPlacement == XFA_AttributeValue::Right ||
+        iCapPlacement == XFA_AttributeValue::Left) {
       m_rtUI.left -= fLeftAddRight - m_rtUI.width;
     } else {
       m_rtUI.left -= 2 * (fLeftAddRight - m_rtUI.width);
@@ -216,7 +216,7 @@
     m_rtUI.width += 2 * (fLeftAddRight - m_rtUI.width);
   }
   if (m_rtUI.height < fTopAddBottom) {
-    if (iCapPlacement == XFA_AttributeEnum::Right)
+    if (iCapPlacement == XFA_AttributeValue::Right)
       m_rtUI.left -= fTopAddBottom - m_rtUI.height;
 
     m_rtUI.top -= fTopAddBottom - m_rtUI.height;
@@ -314,20 +314,22 @@
         if (exclNode) {
           m_pDocView->AddValidateNode(exclNode);
           m_pDocView->AddCalculateNode(exclNode);
-          exclNode->ProcessEvent(GetDocView(), XFA_AttributeEnum::Change,
+          exclNode->ProcessEvent(GetDocView(), XFA_AttributeValue::Change,
                                  &eParam);
         }
         eParam.m_pTarget = m_pNode.Get();
-        m_pNode->ProcessEvent(GetDocView(), XFA_AttributeEnum::Change, &eParam);
+        m_pNode->ProcessEvent(GetDocView(), XFA_AttributeValue::Change,
+                              &eParam);
       } else {
         SetFWLCheckState(m_pNode->GetCheckState());
       }
       if (exclNode) {
         eParam.m_pTarget = exclNode;
-        exclNode->ProcessEvent(GetDocView(), XFA_AttributeEnum::Click, &eParam);
+        exclNode->ProcessEvent(GetDocView(), XFA_AttributeValue::Click,
+                               &eParam);
       }
       eParam.m_pTarget = m_pNode.Get();
-      m_pNode->ProcessEvent(GetDocView(), XFA_AttributeEnum::Click, &eParam);
+      m_pNode->ProcessEvent(GetDocView(), XFA_AttributeValue::Click, &eParam);
       break;
     }
     default:
diff --git a/xfa/fxfa/cxfa_ffcheckbutton.h b/xfa/fxfa/cxfa_ffcheckbutton.h
index 0d34cf9..2a68a19 100644
--- a/xfa/fxfa/cxfa_ffcheckbutton.h
+++ b/xfa/fxfa/cxfa_ffcheckbutton.h
@@ -41,7 +41,7 @@
   bool CommitData() override;
   bool IsDataChanged() override;
   void CapLeftRightPlacement(const CXFA_Margin* captionMargin);
-  void AddUIMargin(XFA_AttributeEnum iCapPlacement);
+  void AddUIMargin(XFA_AttributeValue iCapPlacement);
   XFA_CHECKSTATE FWLState2XFAState();
 
   UnownedPtr<IFWL_WidgetDelegate> m_pOldDelegate;
diff --git a/xfa/fxfa/cxfa_ffcombobox.cpp b/xfa/fxfa/cxfa_ffcombobox.cpp
index 493b1d4..51d9536 100644
--- a/xfa/fxfa/cxfa_ffcombobox.cpp
+++ b/xfa/fxfa/cxfa_ffcombobox.cpp
@@ -131,7 +131,7 @@
   pParam->m_eType = XFA_EVENT_Change;
   pParam->m_pTarget = m_pNode.Get();
   pParam->m_wsPrevText = ToComboBox(m_pNormalWidget.get())->GetEditText();
-  m_pNode->ProcessEvent(GetDocView(), XFA_AttributeEnum::Change, pParam);
+  m_pNode->ProcessEvent(GetDocView(), XFA_AttributeValue::Change, pParam);
 }
 
 WideString CXFA_FFComboBox::GetCurrentText() const {
@@ -153,18 +153,18 @@
 
   uint32_t dwExtendedStyle = 0;
   switch (para->GetHorizontalAlign()) {
-    case XFA_AttributeEnum::Center:
+    case XFA_AttributeValue::Center:
       dwExtendedStyle |=
           FWL_STYLEEXT_CMB_EditHCenter | FWL_STYLEEXT_CMB_ListItemCenterAlign;
       break;
-    case XFA_AttributeEnum::Justify:
+    case XFA_AttributeValue::Justify:
       dwExtendedStyle |= FWL_STYLEEXT_CMB_EditJustified;
       break;
-    case XFA_AttributeEnum::JustifyAll:
+    case XFA_AttributeValue::JustifyAll:
       break;
-    case XFA_AttributeEnum::Radix:
+    case XFA_AttributeValue::Radix:
       break;
-    case XFA_AttributeEnum::Right:
+    case XFA_AttributeValue::Right:
       break;
     default:
       dwExtendedStyle |=
@@ -173,10 +173,10 @@
   }
 
   switch (para->GetVerticalAlign()) {
-    case XFA_AttributeEnum::Middle:
+    case XFA_AttributeValue::Middle:
       dwExtendedStyle |= FWL_STYLEEXT_CMB_EditVCenter;
       break;
-    case XFA_AttributeEnum::Bottom:
+    case XFA_AttributeValue::Bottom:
       dwExtendedStyle |= FWL_STYLEEXT_CMB_EditVFar;
       break;
     default:
@@ -318,14 +318,14 @@
   CXFA_EventParam eParam;
   eParam.m_eType = XFA_EVENT_PreOpen;
   eParam.m_pTarget = m_pNode.Get();
-  m_pNode->ProcessEvent(GetDocView(), XFA_AttributeEnum::PreOpen, &eParam);
+  m_pNode->ProcessEvent(GetDocView(), XFA_AttributeValue::PreOpen, &eParam);
 }
 
 void CXFA_FFComboBox::OnPostOpen(CFWL_Widget* pWidget) {
   CXFA_EventParam eParam;
   eParam.m_eType = XFA_EVENT_PostOpen;
   eParam.m_pTarget = m_pNode.Get();
-  m_pNode->ProcessEvent(GetDocView(), XFA_AttributeEnum::PostOpen, &eParam);
+  m_pNode->ProcessEvent(GetDocView(), XFA_AttributeValue::PostOpen, &eParam);
 }
 
 void CXFA_FFComboBox::OnProcessMessage(CFWL_Message* pMessage) {
diff --git a/xfa/fxfa/cxfa_ffdatetimeedit.cpp b/xfa/fxfa/cxfa_ffdatetimeedit.cpp
index 6eaa372..eae163b 100644
--- a/xfa/fxfa/cxfa_ffdatetimeedit.cpp
+++ b/xfa/fxfa/cxfa_ffdatetimeedit.cpp
@@ -108,16 +108,16 @@
 
   uint32_t dwExtendedStyle = 0;
   switch (para->GetHorizontalAlign()) {
-    case XFA_AttributeEnum::Center:
+    case XFA_AttributeValue::Center:
       dwExtendedStyle |= FWL_STYLEEXT_DTP_EditHCenter;
       break;
-    case XFA_AttributeEnum::Justify:
+    case XFA_AttributeValue::Justify:
       dwExtendedStyle |= FWL_STYLEEXT_DTP_EditJustified;
       break;
-    case XFA_AttributeEnum::JustifyAll:
-    case XFA_AttributeEnum::Radix:
+    case XFA_AttributeValue::JustifyAll:
+    case XFA_AttributeValue::Radix:
       break;
-    case XFA_AttributeEnum::Right:
+    case XFA_AttributeValue::Right:
       dwExtendedStyle |= FWL_STYLEEXT_DTP_EditHFar;
       break;
     default:
@@ -126,10 +126,10 @@
   }
 
   switch (para->GetVerticalAlign()) {
-    case XFA_AttributeEnum::Middle:
+    case XFA_AttributeValue::Middle:
       dwExtendedStyle |= FWL_STYLEEXT_DTP_EditVCenter;
       break;
-    case XFA_AttributeEnum::Bottom:
+    case XFA_AttributeValue::Bottom:
       dwExtendedStyle |= FWL_STYLEEXT_DTP_EditVFar;
       break;
     default:
@@ -201,7 +201,7 @@
   eParam.m_eType = XFA_EVENT_Change;
   eParam.m_pTarget = m_pNode.Get();
   eParam.m_wsPrevText = m_pNode->GetValue(XFA_VALUEPICTURE_Raw);
-  m_pNode->ProcessEvent(GetDocView(), XFA_AttributeEnum::Change, &eParam);
+  m_pNode->ProcessEvent(GetDocView(), XFA_AttributeValue::Change, &eParam);
 }
 
 void CXFA_FFDateTimeEdit::OnProcessEvent(CFWL_Event* pEvent) {
diff --git a/xfa/fxfa/cxfa_ffdocview.cpp b/xfa/fxfa/cxfa_ffdocview.cpp
index f019959..9ca3ae8 100644
--- a/xfa/fxfa/cxfa_ffdocview.cpp
+++ b/xfa/fxfa/cxfa_ffdocview.cpp
@@ -38,21 +38,21 @@
 #include "xfa/fxfa/parser/cxfa_validate.h"
 #include "xfa/fxfa/parser/xfa_resolvenode_rs.h"
 
-const XFA_AttributeEnum gs_EventActivity[] = {
-    XFA_AttributeEnum::Click,      XFA_AttributeEnum::Change,
-    XFA_AttributeEnum::DocClose,   XFA_AttributeEnum::DocReady,
-    XFA_AttributeEnum::Enter,      XFA_AttributeEnum::Exit,
-    XFA_AttributeEnum::Full,       XFA_AttributeEnum::IndexChange,
-    XFA_AttributeEnum::Initialize, XFA_AttributeEnum::MouseDown,
-    XFA_AttributeEnum::MouseEnter, XFA_AttributeEnum::MouseExit,
-    XFA_AttributeEnum::MouseUp,    XFA_AttributeEnum::PostExecute,
-    XFA_AttributeEnum::PostOpen,   XFA_AttributeEnum::PostPrint,
-    XFA_AttributeEnum::PostSave,   XFA_AttributeEnum::PostSign,
-    XFA_AttributeEnum::PostSubmit, XFA_AttributeEnum::PreExecute,
-    XFA_AttributeEnum::PreOpen,    XFA_AttributeEnum::PrePrint,
-    XFA_AttributeEnum::PreSave,    XFA_AttributeEnum::PreSign,
-    XFA_AttributeEnum::PreSubmit,  XFA_AttributeEnum::Ready,
-    XFA_AttributeEnum::Unknown,
+const XFA_AttributeValue gs_EventActivity[] = {
+    XFA_AttributeValue::Click,      XFA_AttributeValue::Change,
+    XFA_AttributeValue::DocClose,   XFA_AttributeValue::DocReady,
+    XFA_AttributeValue::Enter,      XFA_AttributeValue::Exit,
+    XFA_AttributeValue::Full,       XFA_AttributeValue::IndexChange,
+    XFA_AttributeValue::Initialize, XFA_AttributeValue::MouseDown,
+    XFA_AttributeValue::MouseEnter, XFA_AttributeValue::MouseExit,
+    XFA_AttributeValue::MouseUp,    XFA_AttributeValue::PostExecute,
+    XFA_AttributeValue::PostOpen,   XFA_AttributeValue::PostPrint,
+    XFA_AttributeValue::PostSave,   XFA_AttributeValue::PostSign,
+    XFA_AttributeValue::PostSubmit, XFA_AttributeValue::PreExecute,
+    XFA_AttributeValue::PreOpen,    XFA_AttributeValue::PrePrint,
+    XFA_AttributeValue::PreSave,    XFA_AttributeValue::PreSign,
+    XFA_AttributeValue::PreSubmit,  XFA_AttributeValue::Ready,
+    XFA_AttributeValue::Unknown,
 };
 
 CXFA_FFDocView::CXFA_FFDocView(CXFA_FFDoc* pDoc) : m_pDoc(pDoc) {}
@@ -470,7 +470,7 @@
     CXFA_EventParam eParam;
     eParam.m_eType = XFA_EVENT_IndexChange;
     eParam.m_pTarget = pSubformNode;
-    pSubformNode->ProcessEvent(this, XFA_AttributeEnum::IndexChange, &eParam);
+    pSubformNode->ProcessEvent(this, XFA_AttributeValue::IndexChange, &eParam);
   }
   m_IndexChangedSubforms.clear();
 }
diff --git a/xfa/fxfa/cxfa_ffdocview.h b/xfa/fxfa/cxfa_ffdocview.h
index 792cfd3..cb55eea 100644
--- a/xfa/fxfa/cxfa_ffdocview.h
+++ b/xfa/fxfa/cxfa_ffdocview.h
@@ -23,7 +23,7 @@
 class CXFA_Subform;
 class CXFA_ReadyNodeIterator;
 
-extern const XFA_AttributeEnum gs_EventActivity[];
+extern const XFA_AttributeValue gs_EventActivity[];
 enum XFA_DOCVIEW_LAYOUTSTATUS {
   XFA_DOCVIEW_LAYOUTSTATUS_None,
   XFA_DOCVIEW_LAYOUTSTATUS_Start,
diff --git a/xfa/fxfa/cxfa_fffield.cpp b/xfa/fxfa/cxfa_fffield.cpp
index 8991b6f..beb9ee4 100644
--- a/xfa/fxfa/cxfa_fffield.cpp
+++ b/xfa/fxfa/cxfa_fffield.cpp
@@ -186,19 +186,19 @@
     }
   }
 
-  XFA_AttributeEnum iCapPlacement = XFA_AttributeEnum::Unknown;
+  XFA_AttributeValue iCapPlacement = XFA_AttributeValue::Unknown;
   float fCapReserve = 0;
   CXFA_Caption* caption = m_pNode->GetCaptionIfExists();
   if (caption && !caption->IsHidden()) {
     iCapPlacement = caption->GetPlacementType();
-    if (iCapPlacement == XFA_AttributeEnum::Top && GetPrev()) {
+    if (iCapPlacement == XFA_AttributeValue::Top && GetPrev()) {
       m_rtCaption.Reset();
-    } else if (iCapPlacement == XFA_AttributeEnum::Bottom && GetNext()) {
+    } else if (iCapPlacement == XFA_AttributeValue::Bottom && GetNext()) {
       m_rtCaption.Reset();
     } else {
       fCapReserve = caption->GetReserve();
-      if (iCapPlacement == XFA_AttributeEnum::Top ||
-          iCapPlacement == XFA_AttributeEnum::Bottom) {
+      if (iCapPlacement == XFA_AttributeValue::Top ||
+          iCapPlacement == XFA_AttributeValue::Bottom) {
         fCapReserve = std::min(fCapReserve, rtWidget.height);
       } else {
         fCapReserve = std::min(fCapReserve, rtWidget.width);
@@ -222,8 +222,8 @@
         CFX_SizeF minSize;
         CFX_SizeF maxSize;
         CFX_SizeF size = pCapTextLayout->CalcSize(minSize, maxSize);
-        if (iCapPlacement == XFA_AttributeEnum::Top ||
-            iCapPlacement == XFA_AttributeEnum::Bottom) {
+        if (iCapPlacement == XFA_AttributeValue::Top ||
+            iCapPlacement == XFA_AttributeValue::Bottom) {
           fCapReserve = size.height;
         } else {
           fCapReserve = size.width;
@@ -235,35 +235,35 @@
   m_rtUI = rtWidget;
   CXFA_Margin* capMargin = caption ? caption->GetMarginIfExists() : nullptr;
   switch (iCapPlacement) {
-    case XFA_AttributeEnum::Left: {
+    case XFA_AttributeValue::Left: {
       m_rtCaption.width = fCapReserve;
       CapLeftRightPlacement(capMargin, rtWidget, iCapPlacement);
       m_rtUI.width -= fCapReserve;
       m_rtUI.left += fCapReserve;
       break;
     }
-    case XFA_AttributeEnum::Top: {
+    case XFA_AttributeValue::Top: {
       m_rtCaption.height = fCapReserve;
       CapTopBottomPlacement(capMargin, rtWidget, iCapPlacement);
       m_rtUI.top += fCapReserve;
       m_rtUI.height -= fCapReserve;
       break;
     }
-    case XFA_AttributeEnum::Right: {
+    case XFA_AttributeValue::Right: {
       m_rtCaption.left = m_rtCaption.right() - fCapReserve;
       m_rtCaption.width = fCapReserve;
       CapLeftRightPlacement(capMargin, rtWidget, iCapPlacement);
       m_rtUI.width -= fCapReserve;
       break;
     }
-    case XFA_AttributeEnum::Bottom: {
+    case XFA_AttributeValue::Bottom: {
       m_rtCaption.top = m_rtCaption.bottom() - fCapReserve;
       m_rtCaption.height = fCapReserve;
       CapTopBottomPlacement(capMargin, rtWidget, iCapPlacement);
       m_rtUI.height -= fCapReserve;
       break;
     }
-    case XFA_AttributeEnum::Inline:
+    case XFA_AttributeValue::Inline:
       break;
     default:
       break;
@@ -279,7 +279,7 @@
 
 void CXFA_FFField::CapTopBottomPlacement(const CXFA_Margin* margin,
                                          const CFX_RectF& rtWidget,
-                                         XFA_AttributeEnum iCapPlacement) {
+                                         XFA_AttributeValue iCapPlacement) {
   CFX_RectF rtUIMargin = m_pNode->GetUIMargin();
   m_rtCaption.left += rtUIMargin.left;
   if (margin) {
@@ -298,14 +298,14 @@
     m_rtCaption.top += rtUIMargin.top + rtUIMargin.height;
   } else if (fHeight > rtWidget.height) {
     m_rtUI.height += fHeight - rtWidget.height;
-    if (iCapPlacement == XFA_AttributeEnum::Bottom)
+    if (iCapPlacement == XFA_AttributeValue::Bottom)
       m_rtCaption.top += fHeight - rtWidget.height;
   }
 }
 
 void CXFA_FFField::CapLeftRightPlacement(const CXFA_Margin* margin,
                                          const CFX_RectF& rtWidget,
-                                         XFA_AttributeEnum iCapPlacement) {
+                                         XFA_AttributeValue iCapPlacement) {
   CFX_RectF rtUIMargin = m_pNode->GetUIMargin();
   m_rtCaption.top += rtUIMargin.top;
   m_rtCaption.height -= rtUIMargin.top;
@@ -319,7 +319,7 @@
   float fHeight = rtUIMargin.top + rtUIMargin.height;
   if (fWidth > rtWidget.width) {
     m_rtUI.width += fWidth - rtWidget.width;
-    if (iCapPlacement == XFA_AttributeEnum::Right)
+    if (iCapPlacement == XFA_AttributeValue::Right)
       m_rtCaption.left += fWidth - rtWidget.width;
   }
 
@@ -655,7 +655,7 @@
 
   XFA_VERSION version = GetDoc()->GetXFADoc()->GetCurVersionMode();
   switch (calc->GetOverride()) {
-    case XFA_AttributeEnum::Error: {
+    case XFA_AttributeValue::Error: {
       if (version <= XFA_VERSION_204)
         return 1;
 
@@ -669,7 +669,7 @@
       }
       return 0;
     }
-    case XFA_AttributeEnum::Warning: {
+    case XFA_AttributeValue::Warning: {
       if (version <= XFA_VERSION_204) {
         CXFA_Script* script = calc->GetScriptIfExists();
         if (!script || script->GetExpression().IsEmpty())
@@ -699,9 +699,9 @@
       }
       return 0;
     }
-    case XFA_AttributeEnum::Ignore:
+    case XFA_AttributeValue::Ignore:
       return 0;
-    case XFA_AttributeEnum::Disabled:
+    case XFA_AttributeValue::Disabled:
       pNode->SetFlag(XFA_NodeFlag_UserInteractive);
       return 1;
     default:
@@ -731,25 +731,25 @@
         CXFA_EventParam eParam;
         eParam.m_eType = XFA_EVENT_MouseEnter;
         eParam.m_pTarget = m_pNode.Get();
-        m_pNode->ProcessEvent(GetDocView(), XFA_AttributeEnum::MouseEnter,
+        m_pNode->ProcessEvent(GetDocView(), XFA_AttributeValue::MouseEnter,
                               &eParam);
       } else if (event->m_dwCmd == FWL_MouseCommand::Leave) {
         CXFA_EventParam eParam;
         eParam.m_eType = XFA_EVENT_MouseExit;
         eParam.m_pTarget = m_pNode.Get();
-        m_pNode->ProcessEvent(GetDocView(), XFA_AttributeEnum::MouseExit,
+        m_pNode->ProcessEvent(GetDocView(), XFA_AttributeValue::MouseExit,
                               &eParam);
       } else if (event->m_dwCmd == FWL_MouseCommand::LeftButtonDown) {
         CXFA_EventParam eParam;
         eParam.m_eType = XFA_EVENT_MouseDown;
         eParam.m_pTarget = m_pNode.Get();
-        m_pNode->ProcessEvent(GetDocView(), XFA_AttributeEnum::MouseDown,
+        m_pNode->ProcessEvent(GetDocView(), XFA_AttributeValue::MouseDown,
                               &eParam);
       } else if (event->m_dwCmd == FWL_MouseCommand::LeftButtonUp) {
         CXFA_EventParam eParam;
         eParam.m_eType = XFA_EVENT_MouseUp;
         eParam.m_pTarget = m_pNode.Get();
-        m_pNode->ProcessEvent(GetDocView(), XFA_AttributeEnum::MouseUp,
+        m_pNode->ProcessEvent(GetDocView(), XFA_AttributeValue::MouseUp,
                               &eParam);
       }
       break;
@@ -758,7 +758,7 @@
       CXFA_EventParam eParam;
       eParam.m_eType = XFA_EVENT_Click;
       eParam.m_pTarget = m_pNode.Get();
-      m_pNode->ProcessEvent(GetDocView(), XFA_AttributeEnum::Click, &eParam);
+      m_pNode->ProcessEvent(GetDocView(), XFA_AttributeValue::Click, &eParam);
       break;
     }
     default:
diff --git a/xfa/fxfa/cxfa_fffield.h b/xfa/fxfa/cxfa_fffield.h
index 262231c..8d11a27 100644
--- a/xfa/fxfa/cxfa_fffield.h
+++ b/xfa/fxfa/cxfa_fffield.h
@@ -89,10 +89,10 @@
   void CapPlacement();
   void CapTopBottomPlacement(const CXFA_Margin* margin,
                              const CFX_RectF& rtWidget,
-                             XFA_AttributeEnum iCapPlacement);
+                             XFA_AttributeValue iCapPlacement);
   void CapLeftRightPlacement(const CXFA_Margin* margin,
                              const CFX_RectF& rtWidget,
-                             XFA_AttributeEnum iCapPlacement);
+                             XFA_AttributeValue iCapPlacement);
   void SetEditScrollOffset();
 
   std::unique_ptr<CFWL_Widget> m_pNormalWidget;
diff --git a/xfa/fxfa/cxfa_ffimage.cpp b/xfa/fxfa/cxfa_ffimage.cpp
index cc640ce..b78f851 100644
--- a/xfa/fxfa/cxfa_ffimage.cpp
+++ b/xfa/fxfa/cxfa_ffimage.cpp
@@ -51,8 +51,8 @@
   CXFA_Margin* margin = m_pNode->GetMarginIfExists();
   XFA_RectWithoutMargin(&rtImage, margin);
 
-  XFA_AttributeEnum iHorzAlign = XFA_AttributeEnum::Left;
-  XFA_AttributeEnum iVertAlign = XFA_AttributeEnum::Top;
+  XFA_AttributeValue iHorzAlign = XFA_AttributeValue::Left;
+  XFA_AttributeValue iVertAlign = XFA_AttributeValue::Top;
   CXFA_Para* para = m_pNode->GetParaIfExists();
   if (para) {
     iHorzAlign = para->GetHorizontalAlign();
diff --git a/xfa/fxfa/cxfa_ffimageedit.cpp b/xfa/fxfa/cxfa_ffimageedit.cpp
index c80841f..fbe4bb5 100644
--- a/xfa/fxfa/cxfa_ffimageedit.cpp
+++ b/xfa/fxfa/cxfa_ffimageedit.cpp
@@ -68,15 +68,15 @@
     return;
 
   CFX_RectF rtImage = m_pNormalWidget->GetWidgetRect();
-  XFA_AttributeEnum iHorzAlign = XFA_AttributeEnum::Left;
-  XFA_AttributeEnum iVertAlign = XFA_AttributeEnum::Top;
+  XFA_AttributeValue iHorzAlign = XFA_AttributeValue::Left;
+  XFA_AttributeValue iVertAlign = XFA_AttributeValue::Top;
   CXFA_Para* para = m_pNode->GetParaIfExists();
   if (para) {
     iHorzAlign = para->GetHorizontalAlign();
     iVertAlign = para->GetVerticalAlign();
   }
 
-  XFA_AttributeEnum iAspect = XFA_AttributeEnum::Fit;
+  XFA_AttributeValue iAspect = XFA_AttributeValue::Fit;
   CXFA_Value* value = m_pNode->GetFormValueIfExists();
   if (value) {
     CXFA_Image* image = value->GetImageIfExists();
diff --git a/xfa/fxfa/cxfa_ffline.cpp b/xfa/fxfa/cxfa_ffline.cpp
index 4061eb8..8bbe5a9 100644
--- a/xfa/fxfa/cxfa_ffline.cpp
+++ b/xfa/fxfa/cxfa_ffline.cpp
@@ -15,11 +15,11 @@
 
 namespace {
 
-CFX_GraphStateData::LineCap LineCapToFXGE(XFA_AttributeEnum iLineCap) {
+CFX_GraphStateData::LineCap LineCapToFXGE(XFA_AttributeValue iLineCap) {
   switch (iLineCap) {
-    case XFA_AttributeEnum::Round:
+    case XFA_AttributeValue::Round:
       return CFX_GraphStateData::LineCapRound;
-    case XFA_AttributeEnum::Butt:
+    case XFA_AttributeValue::Butt:
       return CFX_GraphStateData::LineCapButt;
     default:
       break;
@@ -34,18 +34,18 @@
 CXFA_FFLine::~CXFA_FFLine() {}
 
 void CXFA_FFLine::GetRectFromHand(CFX_RectF& rect,
-                                  XFA_AttributeEnum iHand,
+                                  XFA_AttributeValue iHand,
                                   float fLineWidth) {
   float fHalfWidth = fLineWidth / 2.0f;
   if (rect.height < 1.0f) {
     switch (iHand) {
-      case XFA_AttributeEnum::Left:
+      case XFA_AttributeValue::Left:
         rect.top -= fHalfWidth;
         break;
-      case XFA_AttributeEnum::Right:
+      case XFA_AttributeValue::Right:
         rect.top += fHalfWidth;
         break;
-      case XFA_AttributeEnum::Even:
+      case XFA_AttributeValue::Even:
         break;
       default:
         NOTREACHED();
@@ -53,13 +53,13 @@
     }
   } else if (rect.width < 1.0f) {
     switch (iHand) {
-      case XFA_AttributeEnum::Left:
+      case XFA_AttributeValue::Left:
         rect.left += fHalfWidth;
         break;
-      case XFA_AttributeEnum::Right:
+      case XFA_AttributeValue::Right:
         rect.left += fHalfWidth;
         break;
-      case XFA_AttributeEnum::Even:
+      case XFA_AttributeValue::Even:
         break;
       default:
         NOTREACHED();
@@ -67,13 +67,13 @@
     }
   } else {
     switch (iHand) {
-      case XFA_AttributeEnum::Left:
+      case XFA_AttributeValue::Left:
         rect.Inflate(fHalfWidth, fHalfWidth);
         break;
-      case XFA_AttributeEnum::Right:
+      case XFA_AttributeValue::Right:
         rect.Deflate(fHalfWidth, fHalfWidth);
         break;
-      case XFA_AttributeEnum::Even:
+      case XFA_AttributeValue::Even:
         break;
       default:
         NOTREACHED();
@@ -94,8 +94,8 @@
 
   FX_ARGB lineColor = 0xFF000000;
   float fLineWidth = 1.0f;
-  XFA_AttributeEnum iStrokeType = XFA_AttributeEnum::Unknown;
-  XFA_AttributeEnum iCap = XFA_AttributeEnum::Unknown;
+  XFA_AttributeValue iStrokeType = XFA_AttributeValue::Unknown;
+  XFA_AttributeValue iCap = XFA_AttributeValue::Unknown;
 
   CXFA_Line* line = value->GetLineIfExists();
   if (line) {
@@ -118,7 +118,7 @@
   CXFA_Margin* margin = m_pNode->GetMarginIfExists();
   XFA_RectWithoutMargin(&rtLine, margin);
 
-  GetRectFromHand(rtLine, line ? line->GetHand() : XFA_AttributeEnum::Left,
+  GetRectFromHand(rtLine, line ? line->GetHand() : XFA_AttributeValue::Left,
                   fLineWidth);
   CXFA_GEPath linePath;
   if (line && line->GetSlope() && rtLine.right() > 0.0f &&
diff --git a/xfa/fxfa/cxfa_ffline.h b/xfa/fxfa/cxfa_ffline.h
index f5c8247..5828c31 100644
--- a/xfa/fxfa/cxfa_ffline.h
+++ b/xfa/fxfa/cxfa_ffline.h
@@ -21,7 +21,7 @@
 
  private:
   void GetRectFromHand(CFX_RectF& rect,
-                       XFA_AttributeEnum iHand,
+                       XFA_AttributeValue iHand,
                        float fLineWidth);
 };
 
diff --git a/xfa/fxfa/cxfa_fflistbox.cpp b/xfa/fxfa/cxfa_fflistbox.cpp
index 00779b2..09845e8 100644
--- a/xfa/fxfa/cxfa_fflistbox.cpp
+++ b/xfa/fxfa/cxfa_fflistbox.cpp
@@ -113,16 +113,16 @@
 
   uint32_t dwExtendedStyle = 0;
   switch (para->GetHorizontalAlign()) {
-    case XFA_AttributeEnum::Center:
+    case XFA_AttributeValue::Center:
       dwExtendedStyle |= FWL_STYLEEXT_LTB_CenterAlign;
       break;
-    case XFA_AttributeEnum::Justify:
+    case XFA_AttributeValue::Justify:
       break;
-    case XFA_AttributeEnum::JustifyAll:
+    case XFA_AttributeValue::JustifyAll:
       break;
-    case XFA_AttributeEnum::Radix:
+    case XFA_AttributeValue::Radix:
       break;
-    case XFA_AttributeEnum::Right:
+    case XFA_AttributeValue::Right:
       dwExtendedStyle |= FWL_STYLEEXT_LTB_RightAlign;
       break;
     default:
@@ -155,7 +155,7 @@
   eParam.m_eType = XFA_EVENT_Change;
   eParam.m_pTarget = m_pNode.Get();
   eParam.m_wsPrevText = m_pNode->GetValue(XFA_VALUEPICTURE_Raw);
-  m_pNode->ProcessEvent(GetDocView(), XFA_AttributeEnum::Change, &eParam);
+  m_pNode->ProcessEvent(GetDocView(), XFA_AttributeValue::Change, &eParam);
 }
 
 void CXFA_FFListBox::SetItemState(int32_t nIndex, bool bSelected) {
diff --git a/xfa/fxfa/cxfa_ffpushbutton.cpp b/xfa/fxfa/cxfa_ffpushbutton.cpp
index 0753a83..1376289 100644
--- a/xfa/fxfa/cxfa_ffpushbutton.cpp
+++ b/xfa/fxfa/cxfa_ffpushbutton.cpp
@@ -71,13 +71,13 @@
 void CXFA_FFPushButton::UpdateWidgetProperty() {
   uint32_t dwStyleEx = 0;
   switch (button_->GetHighlight()) {
-    case XFA_AttributeEnum::Inverted:
+    case XFA_AttributeValue::Inverted:
       dwStyleEx = XFA_FWL_PSBSTYLEEXT_HiliteInverted;
       break;
-    case XFA_AttributeEnum::Outline:
+    case XFA_AttributeValue::Outline:
       dwStyleEx = XFA_FWL_PSBSTYLEEXT_HiliteOutLine;
       break;
-    case XFA_AttributeEnum::Push:
+    case XFA_AttributeValue::Push:
       dwStyleEx = XFA_FWL_PSBSTYLEEXT_HilitePush;
       break;
     default:
@@ -110,7 +110,7 @@
 
 float CXFA_FFPushButton::GetLineWidth() {
   CXFA_Border* border = m_pNode->GetBorderIfExists();
-  if (border && border->GetPresence() == XFA_AttributeEnum::Visible) {
+  if (border && border->GetPresence() == XFA_AttributeValue::Visible) {
     CXFA_Edge* edge = border->GetEdgeIfExists(0);
     return edge ? edge->GetThickness() : 0;
   }
diff --git a/xfa/fxfa/cxfa_fftextedit.cpp b/xfa/fxfa/cxfa_fftextedit.cpp
index cc9c733..75b9662 100644
--- a/xfa/fxfa/cxfa_fftextedit.cpp
+++ b/xfa/fxfa/cxfa_fftextedit.cpp
@@ -221,16 +221,16 @@
 
   uint32_t dwExtendedStyle = 0;
   switch (para->GetHorizontalAlign()) {
-    case XFA_AttributeEnum::Center:
+    case XFA_AttributeValue::Center:
       dwExtendedStyle |= FWL_STYLEEXT_EDT_HCenter;
       break;
-    case XFA_AttributeEnum::Justify:
+    case XFA_AttributeValue::Justify:
       dwExtendedStyle |= FWL_STYLEEXT_EDT_Justified;
       break;
-    case XFA_AttributeEnum::JustifyAll:
-    case XFA_AttributeEnum::Radix:
+    case XFA_AttributeValue::JustifyAll:
+    case XFA_AttributeValue::Radix:
       break;
-    case XFA_AttributeEnum::Right:
+    case XFA_AttributeValue::Right:
       dwExtendedStyle |= FWL_STYLEEXT_EDT_HFar;
       break;
     default:
@@ -239,10 +239,10 @@
   }
 
   switch (para->GetVerticalAlign()) {
-    case XFA_AttributeEnum::Middle:
+    case XFA_AttributeValue::Middle:
       dwExtendedStyle |= FWL_STYLEEXT_EDT_VCenter;
       break;
-    case XFA_AttributeEnum::Bottom:
+    case XFA_AttributeValue::Bottom:
       dwExtendedStyle |= FWL_STYLEEXT_EDT_VFar;
       break;
     default:
@@ -309,7 +309,7 @@
   eParam.m_iSelStart = static_cast<int32_t>(event->selection_start);
   eParam.m_iSelEnd = static_cast<int32_t>(event->selection_end);
 
-  m_pNode->ProcessEvent(GetDocView(), XFA_AttributeEnum::Change, &eParam);
+  m_pNode->ProcessEvent(GetDocView(), XFA_AttributeValue::Change, &eParam);
 
   // Copy the data back out of the EventParam and into the TextChanged event so
   // it can propagate back to the calling widget.
@@ -323,7 +323,7 @@
   CXFA_EventParam eParam;
   eParam.m_eType = XFA_EVENT_Full;
   eParam.m_pTarget = m_pNode.Get();
-  m_pNode->ProcessEvent(GetDocView(), XFA_AttributeEnum::Full, &eParam);
+  m_pNode->ProcessEvent(GetDocView(), XFA_AttributeValue::Full, &eParam);
 }
 
 void CXFA_FFTextEdit::OnProcessMessage(CFWL_Message* pMessage) {
diff --git a/xfa/fxfa/cxfa_ffwidget.cpp b/xfa/fxfa/cxfa_ffwidget.cpp
index 22eb621..3479790 100644
--- a/xfa/fxfa/cxfa_ffwidget.cpp
+++ b/xfa/fxfa/cxfa_ffwidget.cpp
@@ -79,10 +79,10 @@
                    const CFX_RectF& rtImage,
                    const CFX_Matrix& matrix,
                    const RetainPtr<CFX_DIBitmap>& pDIBitmap,
-                   XFA_AttributeEnum iAspect,
+                   XFA_AttributeValue iAspect,
                    const CFX_Size& dpi,
-                   XFA_AttributeEnum iHorzAlign,
-                   XFA_AttributeEnum iVertAlign) {
+                   XFA_AttributeValue iHorzAlign,
+                   XFA_AttributeValue iVertAlign) {
   if (rtImage.IsEmpty())
     return;
   if (!pDIBitmap || !pDIBitmap->GetBuffer())
@@ -92,7 +92,7 @@
                   XFA_UnitPx2Pt(pDIBitmap->GetWidth(), dpi.width),
                   XFA_UnitPx2Pt(pDIBitmap->GetHeight(), dpi.height));
   switch (iAspect) {
-    case XFA_AttributeEnum::Fit: {
+    case XFA_AttributeValue::Fit: {
       float f1 = rtImage.height / rtFit.height;
       float f2 = rtImage.width / rtFit.width;
       f1 = std::min(f1, f2);
@@ -100,35 +100,35 @@
       rtFit.width = rtFit.width * f1;
       break;
     }
-    case XFA_AttributeEnum::Height: {
+    case XFA_AttributeValue::Height: {
       float f1 = rtImage.height / rtFit.height;
       rtFit.height = rtImage.height;
       rtFit.width = f1 * rtFit.width;
       break;
     }
-    case XFA_AttributeEnum::None:
+    case XFA_AttributeValue::None:
       rtFit.height = rtImage.height;
       rtFit.width = rtImage.width;
       break;
-    case XFA_AttributeEnum::Width: {
+    case XFA_AttributeValue::Width: {
       float f1 = rtImage.width / rtFit.width;
       rtFit.width = rtImage.width;
       rtFit.height = rtFit.height * f1;
       break;
     }
-    case XFA_AttributeEnum::Actual:
+    case XFA_AttributeValue::Actual:
     default:
       break;
   }
 
-  if (iHorzAlign == XFA_AttributeEnum::Center)
+  if (iHorzAlign == XFA_AttributeValue::Center)
     rtFit.left += (rtImage.width - rtFit.width) / 2;
-  else if (iHorzAlign == XFA_AttributeEnum::Right)
+  else if (iHorzAlign == XFA_AttributeValue::Right)
     rtFit.left = rtImage.right() - rtFit.width;
 
-  if (iVertAlign == XFA_AttributeEnum::Middle)
+  if (iVertAlign == XFA_AttributeValue::Middle)
     rtFit.top += (rtImage.height - rtFit.height) / 2;
-  else if (iVertAlign == XFA_AttributeEnum::Bottom)
+  else if (iVertAlign == XFA_AttributeValue::Bottom)
     rtFit.top = rtImage.bottom() - rtImage.height;
 
   CFX_RenderDevice* pRenderDevice = pGS->GetRenderDevice();
@@ -411,7 +411,7 @@
   CXFA_EventParam eParam;
   eParam.m_eType = XFA_EVENT_Enter;
   eParam.m_pTarget = m_pNode.Get();
-  m_pNode->ProcessEvent(GetDocView(), XFA_AttributeEnum::Enter, &eParam);
+  m_pNode->ProcessEvent(GetDocView(), XFA_AttributeValue::Enter, &eParam);
   return true;
 }
 
@@ -614,7 +614,7 @@
   CXFA_EventParam eParam;
   eParam.m_eType = XFA_EVENT_Exit;
   eParam.m_pTarget = m_pNode.Get();
-  m_pNode->ProcessEvent(GetDocView(), XFA_AttributeEnum::Exit, &eParam);
+  m_pNode->ProcessEvent(GetDocView(), XFA_AttributeValue::Exit, &eParam);
 }
 
 bool CXFA_FFWidget::IsButtonDown() {
diff --git a/xfa/fxfa/cxfa_ffwidget.h b/xfa/fxfa/cxfa_ffwidget.h
index e9c991d..13942ad 100644
--- a/xfa/fxfa/cxfa_ffwidget.h
+++ b/xfa/fxfa/cxfa_ffwidget.h
@@ -38,10 +38,10 @@
                    const CFX_RectF& rtImage,
                    const CFX_Matrix& matrix,
                    const RetainPtr<CFX_DIBitmap>& pDIBitmap,
-                   XFA_AttributeEnum iAspect,
+                   XFA_AttributeValue iAspect,
                    const CFX_Size& dpi,
-                   XFA_AttributeEnum iHorzAlign = XFA_AttributeEnum::Left,
-                   XFA_AttributeEnum iVertAlign = XFA_AttributeEnum::Top);
+                   XFA_AttributeValue iHorzAlign = XFA_AttributeValue::Left,
+                   XFA_AttributeValue iVertAlign = XFA_AttributeValue::Top);
 
 RetainPtr<CFX_DIBitmap> XFA_LoadImageFromBuffer(
     const RetainPtr<IFX_SeekableReadStream>& pImageFileRead,
diff --git a/xfa/fxfa/cxfa_ffwidgethandler.cpp b/xfa/fxfa/cxfa_ffwidgethandler.cpp
index 7cf36ff..be96b71 100644
--- a/xfa/fxfa/cxfa_ffwidgethandler.cpp
+++ b/xfa/fxfa/cxfa_ffwidgethandler.cpp
@@ -338,18 +338,18 @@
   pText->JSObject()->SetContent(L"Button", L"Button", false, false, true);
 
   CXFA_Node* pPara = CreateCopyNode(XFA_Element::Para, pCaption, nullptr);
-  pPara->JSObject()->SetEnum(XFA_Attribute::VAlign, XFA_AttributeEnum::Middle,
+  pPara->JSObject()->SetEnum(XFA_Attribute::VAlign, XFA_AttributeValue::Middle,
                              false);
-  pPara->JSObject()->SetEnum(XFA_Attribute::HAlign, XFA_AttributeEnum::Center,
+  pPara->JSObject()->SetEnum(XFA_Attribute::HAlign, XFA_AttributeValue::Center,
                              false);
   CreateFontNode(pCaption);
 
   CXFA_Node* pBorder = CreateCopyNode(XFA_Element::Border, pField, nullptr);
-  pBorder->JSObject()->SetEnum(XFA_Attribute::Hand, XFA_AttributeEnum::Right,
+  pBorder->JSObject()->SetEnum(XFA_Attribute::Hand, XFA_AttributeValue::Right,
                                false);
 
   CXFA_Node* pEdge = CreateCopyNode(XFA_Element::Edge, pBorder, nullptr);
-  pEdge->JSObject()->SetEnum(XFA_Attribute::Stroke, XFA_AttributeEnum::Raised,
+  pEdge->JSObject()->SetEnum(XFA_Attribute::Stroke, XFA_AttributeValue::Raised,
                              false);
 
   CXFA_Node* pFill = CreateCopyNode(XFA_Element::Fill, pBorder, nullptr);
@@ -358,7 +358,7 @@
                                false);
 
   CXFA_Node* pBind = CreateCopyNode(XFA_Element::Bind, pField, nullptr);
-  pBind->JSObject()->SetEnum(XFA_Attribute::Match, XFA_AttributeEnum::None,
+  pBind->JSObject()->SetEnum(XFA_Attribute::Match, XFA_AttributeValue::None,
                              false);
 
   return pField;
@@ -380,7 +380,7 @@
   CXFA_Ui* pUi = pField->GetFirstChildByClass<CXFA_Ui>(XFA_Element::Ui);
   CXFA_CheckButton* pWidget =
       pUi->GetFirstChildByClass<CXFA_CheckButton>(XFA_Element::CheckButton);
-  pWidget->JSObject()->SetEnum(XFA_Attribute::Shape, XFA_AttributeEnum::Round,
+  pWidget->JSObject()->SetEnum(XFA_Attribute::Shape, XFA_AttributeValue::Round,
                                false);
   return pField;
 }
@@ -424,10 +424,10 @@
   CXFA_Node* pField = CreateDropdownList(pParent, pBefore);
   CXFA_Node* pUi = pField->GetFirstChild();
   CXFA_Node* pListBox = pUi->GetFirstChild();
-  pListBox->JSObject()->SetEnum(XFA_Attribute::Open, XFA_AttributeEnum::Always,
+  pListBox->JSObject()->SetEnum(XFA_Attribute::Open, XFA_AttributeValue::Always,
                                 false);
   pListBox->JSObject()->SetEnum(XFA_Attribute::CommitOn,
-                                XFA_AttributeEnum::Exit, false);
+                                XFA_AttributeValue::Exit, false);
   return pField;
 }
 
@@ -440,7 +440,7 @@
                                                     CXFA_Node* pBefore) const {
   CXFA_Node* pField = CreateField(XFA_Element::PasswordEdit, pParent, pBefore);
   CXFA_Node* pBind = CreateCopyNode(XFA_Element::Bind, pField, nullptr);
-  pBind->JSObject()->SetEnum(XFA_Attribute::Match, XFA_AttributeEnum::None,
+  pBind->JSObject()->SetEnum(XFA_Attribute::Match, XFA_AttributeValue::None,
                              false);
   return pField;
 }
diff --git a/xfa/fxfa/cxfa_textlayout.cpp b/xfa/fxfa/cxfa_textlayout.cpp
index 4c521ea..efc2c0b 100644
--- a/xfa/fxfa/cxfa_textlayout.cpp
+++ b/xfa/fxfa/cxfa_textlayout.cpp
@@ -128,20 +128,20 @@
   if (para) {
     CFX_RTFLineAlignment iAlign = CFX_RTFLineAlignment::Left;
     switch (para->GetHorizontalAlign()) {
-      case XFA_AttributeEnum::Center:
+      case XFA_AttributeValue::Center:
         iAlign = CFX_RTFLineAlignment::Center;
         break;
-      case XFA_AttributeEnum::Right:
+      case XFA_AttributeValue::Right:
         iAlign = CFX_RTFLineAlignment::Right;
         break;
-      case XFA_AttributeEnum::Justify:
+      case XFA_AttributeValue::Justify:
         iAlign = CFX_RTFLineAlignment::Justified;
         break;
-      case XFA_AttributeEnum::JustifyAll:
+      case XFA_AttributeValue::JustifyAll:
         iAlign = CFX_RTFLineAlignment::Distributed;
         break;
-      case XFA_AttributeEnum::Left:
-      case XFA_AttributeEnum::Radix:
+      case XFA_AttributeValue::Left:
+      case XFA_AttributeValue::Radix:
         break;
       default:
         NOTREACHED();
@@ -334,10 +334,10 @@
   if (iBlockCount == 0 && fHeight > 0) {
     fHeight = fTextHeight - GetLayoutHeight();
     if (fHeight > 0) {
-      XFA_AttributeEnum iAlign = m_textParser.GetVAlign(m_pTextProvider);
-      if (iAlign == XFA_AttributeEnum::Middle)
+      XFA_AttributeValue iAlign = m_textParser.GetVAlign(m_pTextProvider);
+      if (iAlign == XFA_AttributeValue::Middle)
         fHeight /= 2.0f;
-      else if (iAlign != XFA_AttributeEnum::Bottom)
+      else if (iAlign != XFA_AttributeValue::Bottom)
         fHeight = 0;
       m_pLoader->fStartLineOffset = fHeight;
     }
@@ -628,10 +628,10 @@
     return;
 
   switch (m_textParser.GetVAlign(m_pTextProvider)) {
-    case XFA_AttributeEnum::Middle:
+    case XFA_AttributeValue::Middle:
       fHeight /= 2.0f;
       break;
-    case XFA_AttributeEnum::Bottom:
+    case XFA_AttributeValue::Bottom:
       break;
     default:
       return;
@@ -681,9 +681,9 @@
       fSpaceAbove = 0;
 
     switch (para->GetVerticalAlign()) {
-      case XFA_AttributeEnum::Top:
-      case XFA_AttributeEnum::Middle:
-      case XFA_AttributeEnum::Bottom: {
+      case XFA_AttributeValue::Top:
+      case XFA_AttributeValue::Middle:
+      case XFA_AttributeValue::Bottom: {
         *pLinePos += fSpaceAbove;
         break;
       }
@@ -1158,7 +1158,7 @@
   if (iChars > 0) {
     CFX_PointF pt1, pt2;
     float fEndY = pCharPos[0].m_Origin.y + 1.05f;
-    if (pPiece->iPeriod == XFA_AttributeEnum::Word) {
+    if (pPiece->iPeriod == XFA_AttributeValue::Word) {
       for (int32_t i = 0; i < pPiece->iUnderline; i++) {
         for (int32_t j = 0; j < iChars; j++) {
           pt1.x = pCharPos[j].m_Origin.x;
@@ -1191,7 +1191,7 @@
     }
   } else {
     if (bNoLineThrough &&
-        (bNoUnderline || pPiece->iPeriod != XFA_AttributeEnum::All)) {
+        (bNoUnderline || pPiece->iPeriod != XFA_AttributeValue::All)) {
       return;
     }
     int32_t iCharsTmp = 0;
diff --git a/xfa/fxfa/cxfa_textparser.cpp b/xfa/fxfa/cxfa_textparser.cpp
index 1d8ed13..38e4f9b 100644
--- a/xfa/fxfa/cxfa_textparser.cpp
+++ b/xfa/fxfa/cxfa_textparser.cpp
@@ -119,20 +119,20 @@
     pStyle->SetTextIndent(indent);
     CFX_CSSTextAlign hAlign = CFX_CSSTextAlign::Left;
     switch (para->GetHorizontalAlign()) {
-      case XFA_AttributeEnum::Center:
+      case XFA_AttributeValue::Center:
         hAlign = CFX_CSSTextAlign::Center;
         break;
-      case XFA_AttributeEnum::Right:
+      case XFA_AttributeValue::Right:
         hAlign = CFX_CSSTextAlign::Right;
         break;
-      case XFA_AttributeEnum::Justify:
+      case XFA_AttributeValue::Justify:
         hAlign = CFX_CSSTextAlign::Justify;
         break;
-      case XFA_AttributeEnum::JustifyAll:
+      case XFA_AttributeValue::JustifyAll:
         hAlign = CFX_CSSTextAlign::JustifyAll;
         break;
-      case XFA_AttributeEnum::Left:
-      case XFA_AttributeEnum::Radix:
+      case XFA_AttributeValue::Left:
+      case XFA_AttributeValue::Radix:
         break;
       default:
         NOTREACHED();
@@ -310,10 +310,10 @@
   return tagProvider;
 }
 
-XFA_AttributeEnum CXFA_TextParser::GetVAlign(
+XFA_AttributeValue CXFA_TextParser::GetVAlign(
     CXFA_TextProvider* pTextProvider) const {
   CXFA_Para* para = pTextProvider->GetParaIfExists();
-  return para ? para->GetVerticalAlign() : XFA_AttributeEnum::Top;
+  return para ? para->GetVerticalAlign() : XFA_AttributeValue::Top;
 }
 
 float CXFA_TextParser::GetTabInterval(CFX_CSSComputedStyle* pStyle) const {
@@ -417,9 +417,9 @@
 void CXFA_TextParser::GetUnderline(CXFA_TextProvider* pTextProvider,
                                    CFX_CSSComputedStyle* pStyle,
                                    int32_t& iUnderline,
-                                   XFA_AttributeEnum& iPeriod) const {
+                                   XFA_AttributeValue& iPeriod) const {
   iUnderline = 0;
-  iPeriod = XFA_AttributeEnum::All;
+  iPeriod = XFA_AttributeValue::All;
   CXFA_Font* font = pTextProvider->GetFontIfExists();
   if (!pStyle) {
     if (font) {
@@ -438,7 +438,7 @@
   WideString wsValue;
   if (pStyle->GetCustomStyle(L"underlinePeriod", &wsValue)) {
     if (wsValue.EqualsASCII("word"))
-      iPeriod = XFA_AttributeEnum::Word;
+      iPeriod = XFA_AttributeValue::Word;
   } else if (font) {
     iPeriod = font->GetUnderlinePeriod();
   }
diff --git a/xfa/fxfa/cxfa_textparser.h b/xfa/fxfa/cxfa_textparser.h
index 842eba7..b1e5878 100644
--- a/xfa/fxfa/cxfa_textparser.h
+++ b/xfa/fxfa/cxfa_textparser.h
@@ -44,7 +44,7 @@
 
   bool IsParsed() const { return m_bParsed; }
 
-  XFA_AttributeEnum GetVAlign(CXFA_TextProvider* pTextProvider) const;
+  XFA_AttributeValue GetVAlign(CXFA_TextProvider* pTextProvider) const;
 
   float GetTabInterval(CFX_CSSComputedStyle* pStyle) const;
   int32_t CountTabs(CFX_CSSComputedStyle* pStyle) const;
@@ -68,7 +68,7 @@
   void GetUnderline(CXFA_TextProvider* pTextProvider,
                     CFX_CSSComputedStyle* pStyle,
                     int32_t& iUnderline,
-                    XFA_AttributeEnum& iPeriod) const;
+                    XFA_AttributeValue& iPeriod) const;
   void GetLinethrough(CXFA_TextProvider* pTextProvider,
                       CFX_CSSComputedStyle* pStyle,
                       int32_t& iLinethrough) const;
diff --git a/xfa/fxfa/cxfa_textpiece.h b/xfa/fxfa/cxfa_textpiece.h
index f3812f8..f115c41 100644
--- a/xfa/fxfa/cxfa_textpiece.h
+++ b/xfa/fxfa/cxfa_textpiece.h
@@ -29,7 +29,7 @@
   int32_t iVerScale;
   int32_t iBidiLevel;
   int32_t iUnderline;
-  XFA_AttributeEnum iPeriod;
+  XFA_AttributeValue iPeriod;
   int32_t iLineThrough;
   FX_ARGB dwColor;
   float fFontSize;
diff --git a/xfa/fxfa/fxfa_basic.h b/xfa/fxfa/fxfa_basic.h
index fcb72bc..e25ef7c 100644
--- a/xfa/fxfa/fxfa_basic.h
+++ b/xfa/fxfa/fxfa_basic.h
@@ -95,7 +95,7 @@
   XFA_XDPPACKET_FLAGS_SUPPORTMANY = 16,
 };
 
-enum class XFA_AttributeEnum : uint16_t {
+enum class XFA_AttributeValue : uint16_t {
   Asterisk,
   Slash,
   Backslash,
@@ -945,9 +945,9 @@
 #define XFA_PROPERTYFLAG_OneOf 0x01
 #define XFA_PROPERTYFLAG_DefaultOneOf 0x02
 
-struct XFA_AttributeEnumInfo {
+struct XFA_AttributeValueInfo {
   uint32_t uHash;  // |pName| hashed as WideString.
-  XFA_AttributeEnum eName;
+  XFA_AttributeValue eName;
   const char* pName;
 };
 
diff --git a/xfa/fxfa/parser/cxfa_appearancefilter.cpp b/xfa/fxfa/parser/cxfa_appearancefilter.cpp
index b9ac6cd..8561636 100644
--- a/xfa/fxfa/parser/cxfa_appearancefilter.cpp
+++ b/xfa/fxfa/parser/cxfa_appearancefilter.cpp
@@ -12,7 +12,7 @@
     {XFA_Attribute::Id, XFA_AttributeType::CData, nullptr},
     {XFA_Attribute::Use, XFA_AttributeType::CData, nullptr},
     {XFA_Attribute::Type, XFA_AttributeType::Enum,
-     (void*)XFA_AttributeEnum::Optional},
+     (void*)XFA_AttributeValue::Optional},
     {XFA_Attribute::Usehref, XFA_AttributeType::CData, nullptr},
     {XFA_Attribute::Unknown, XFA_AttributeType::Integer, nullptr}};
 
diff --git a/xfa/fxfa/parser/cxfa_arc.cpp b/xfa/fxfa/parser/cxfa_arc.cpp
index 5527320..81d7107 100644
--- a/xfa/fxfa/parser/cxfa_arc.cpp
+++ b/xfa/fxfa/parser/cxfa_arc.cpp
@@ -23,7 +23,7 @@
     {XFA_Attribute::Circular, XFA_AttributeType::Boolean, (void*)0},
     {XFA_Attribute::Usehref, XFA_AttributeType::CData, nullptr},
     {XFA_Attribute::Hand, XFA_AttributeType::Enum,
-     (void*)XFA_AttributeEnum::Even},
+     (void*)XFA_AttributeValue::Even},
     {XFA_Attribute::Unknown, XFA_AttributeType::Integer, nullptr}};
 
 constexpr wchar_t kArcName[] = L"arc";
diff --git a/xfa/fxfa/parser/cxfa_barcode.cpp b/xfa/fxfa/parser/cxfa_barcode.cpp
index 2faecb0..cc8da5b 100644
--- a/xfa/fxfa/parser/cxfa_barcode.cpp
+++ b/xfa/fxfa/parser/cxfa_barcode.cpp
@@ -17,10 +17,10 @@
     {XFA_Attribute::DataRowCount, XFA_AttributeType::CData, nullptr},
     {XFA_Attribute::Use, XFA_AttributeType::CData, nullptr},
     {XFA_Attribute::DataPrep, XFA_AttributeType::Enum,
-     (void*)XFA_AttributeEnum::None},
+     (void*)XFA_AttributeValue::None},
     {XFA_Attribute::Type, XFA_AttributeType::CData, (void*)nullptr},
     {XFA_Attribute::TextLocation, XFA_AttributeType::Enum,
-     (void*)XFA_AttributeEnum::Below},
+     (void*)XFA_AttributeValue::Below},
     {XFA_Attribute::ModuleWidth, XFA_AttributeType::Measure, (void*)L"0.25mm"},
     {XFA_Attribute::PrintCheckDigit, XFA_AttributeType::Boolean, (void*)0},
     {XFA_Attribute::ModuleHeight, XFA_AttributeType::Measure, (void*)L"5mm"},
@@ -29,9 +29,9 @@
     {XFA_Attribute::WideNarrowRatio, XFA_AttributeType::CData, (void*)L"3:1"},
     {XFA_Attribute::ErrorCorrectionLevel, XFA_AttributeType::CData, nullptr},
     {XFA_Attribute::UpsMode, XFA_AttributeType::Enum,
-     (void*)XFA_AttributeEnum::UsCarrier},
+     (void*)XFA_AttributeValue::UsCarrier},
     {XFA_Attribute::Checksum, XFA_AttributeType::Enum,
-     (void*)XFA_AttributeEnum::None},
+     (void*)XFA_AttributeValue::None},
     {XFA_Attribute::CharEncoding, XFA_AttributeType::CData, (void*)L"UTF-8"},
     {XFA_Attribute::Usehref, XFA_AttributeType::CData, nullptr},
     {XFA_Attribute::DataColumnCount, XFA_AttributeType::CData, nullptr},
@@ -78,19 +78,19 @@
 }
 
 Optional<bool> CXFA_Barcode::GetChecksum() {
-  Optional<XFA_AttributeEnum> checksum =
+  Optional<XFA_AttributeValue> checksum =
       JSObject()->TryEnum(XFA_Attribute::Checksum, true);
   if (!checksum)
     return {};
 
   switch (*checksum) {
-    case XFA_AttributeEnum::None:
+    case XFA_AttributeValue::None:
       return {false};
-    case XFA_AttributeEnum::Auto:
+    case XFA_AttributeValue::Auto:
       return {true};
-    case XFA_AttributeEnum::Checksum_1mod10:
-    case XFA_AttributeEnum::Checksum_1mod10_1mod11:
-    case XFA_AttributeEnum::Checksum_2mod10:
+    case XFA_AttributeValue::Checksum_1mod10:
+    case XFA_AttributeValue::Checksum_1mod10_1mod11:
+    case XFA_AttributeValue::Checksum_2mod10:
     default:
       break;
   }
@@ -155,21 +155,21 @@
 }
 
 Optional<BC_TEXT_LOC> CXFA_Barcode::GetTextLocation() {
-  Optional<XFA_AttributeEnum> textLocation =
+  Optional<XFA_AttributeValue> textLocation =
       JSObject()->TryEnum(XFA_Attribute::TextLocation, true);
   if (!textLocation)
     return {};
 
   switch (*textLocation) {
-    case XFA_AttributeEnum::None:
+    case XFA_AttributeValue::None:
       return {BC_TEXT_LOC_NONE};
-    case XFA_AttributeEnum::Above:
+    case XFA_AttributeValue::Above:
       return {BC_TEXT_LOC_ABOVE};
-    case XFA_AttributeEnum::Below:
+    case XFA_AttributeValue::Below:
       return {BC_TEXT_LOC_BELOW};
-    case XFA_AttributeEnum::AboveEmbedded:
+    case XFA_AttributeValue::AboveEmbedded:
       return {BC_TEXT_LOC_ABOVEEMBED};
-    case XFA_AttributeEnum::BelowEmbedded:
+    case XFA_AttributeValue::BelowEmbedded:
       return {BC_TEXT_LOC_BELOWEMBED};
     default:
       break;
diff --git a/xfa/fxfa/parser/cxfa_batchoutput.cpp b/xfa/fxfa/parser/cxfa_batchoutput.cpp
index bdca82c..d274e87 100644
--- a/xfa/fxfa/parser/cxfa_batchoutput.cpp
+++ b/xfa/fxfa/parser/cxfa_batchoutput.cpp
@@ -10,7 +10,7 @@
 
 const CXFA_Node::AttributeData kBatchOutputAttributeData[] = {
     {XFA_Attribute::Format, XFA_AttributeType::Enum,
-     (void*)XFA_AttributeEnum::None},
+     (void*)XFA_AttributeValue::None},
     {XFA_Attribute::Desc, XFA_AttributeType::CData, nullptr},
     {XFA_Attribute::Lock, XFA_AttributeType::Integer, (void*)0},
     {XFA_Attribute::Unknown, XFA_AttributeType::Integer, nullptr}};
diff --git a/xfa/fxfa/parser/cxfa_bind.cpp b/xfa/fxfa/parser/cxfa_bind.cpp
index 411a3d6..99a2a49 100644
--- a/xfa/fxfa/parser/cxfa_bind.cpp
+++ b/xfa/fxfa/parser/cxfa_bind.cpp
@@ -23,10 +23,10 @@
     {XFA_Attribute::Use, XFA_AttributeType::CData, nullptr},
     {XFA_Attribute::ContentType, XFA_AttributeType::CData, nullptr},
     {XFA_Attribute::TransferEncoding, XFA_AttributeType::Enum,
-     (void*)XFA_AttributeEnum::None},
+     (void*)XFA_AttributeValue::None},
     {XFA_Attribute::Usehref, XFA_AttributeType::CData, nullptr},
     {XFA_Attribute::Match, XFA_AttributeType::Enum,
-     (void*)XFA_AttributeEnum::Once},
+     (void*)XFA_AttributeValue::Once},
     {XFA_Attribute::Unknown, XFA_AttributeType::Integer, nullptr}};
 
 constexpr wchar_t kBindName[] = L"bind";
diff --git a/xfa/fxfa/parser/cxfa_border.cpp b/xfa/fxfa/parser/cxfa_border.cpp
index 067238c..0e99dfd 100644
--- a/xfa/fxfa/parser/cxfa_border.cpp
+++ b/xfa/fxfa/parser/cxfa_border.cpp
@@ -18,14 +18,14 @@
 const CXFA_Node::AttributeData kBorderAttributeData[] = {
     {XFA_Attribute::Id, XFA_AttributeType::CData, nullptr},
     {XFA_Attribute::Break, XFA_AttributeType::Enum,
-     (void*)XFA_AttributeEnum::Close},
+     (void*)XFA_AttributeValue::Close},
     {XFA_Attribute::Use, XFA_AttributeType::CData, nullptr},
     {XFA_Attribute::Presence, XFA_AttributeType::Enum,
-     (void*)XFA_AttributeEnum::Visible},
+     (void*)XFA_AttributeValue::Visible},
     {XFA_Attribute::Relevant, XFA_AttributeType::CData, nullptr},
     {XFA_Attribute::Usehref, XFA_AttributeType::CData, nullptr},
     {XFA_Attribute::Hand, XFA_AttributeType::Enum,
-     (void*)XFA_AttributeEnum::Even},
+     (void*)XFA_AttributeValue::Even},
     {XFA_Attribute::Unknown, XFA_AttributeType::Integer, nullptr}};
 
 constexpr wchar_t kBorderName[] = L"border";
diff --git a/xfa/fxfa/parser/cxfa_box.cpp b/xfa/fxfa/parser/cxfa_box.cpp
index 16037d7..b65e5b3 100644
--- a/xfa/fxfa/parser/cxfa_box.cpp
+++ b/xfa/fxfa/parser/cxfa_box.cpp
@@ -24,10 +24,10 @@
 
 namespace {
 
-std::pair<XFA_AttributeEnum, CXFA_Stroke*> Style3D(
+std::pair<XFA_AttributeValue, CXFA_Stroke*> Style3D(
     const std::vector<CXFA_Stroke*>& strokes) {
   if (strokes.empty())
-    return {XFA_AttributeEnum::Unknown, nullptr};
+    return {XFA_AttributeValue::Unknown, nullptr};
 
   CXFA_Stroke* stroke = strokes[0];
   for (size_t i = 1; i < strokes.size(); i++) {
@@ -41,14 +41,14 @@
     break;
   }
 
-  XFA_AttributeEnum iType = stroke->GetStrokeType();
-  if (iType == XFA_AttributeEnum::Lowered ||
-      iType == XFA_AttributeEnum::Raised ||
-      iType == XFA_AttributeEnum::Etched ||
-      iType == XFA_AttributeEnum::Embossed) {
+  XFA_AttributeValue iType = stroke->GetStrokeType();
+  if (iType == XFA_AttributeValue::Lowered ||
+      iType == XFA_AttributeValue::Raised ||
+      iType == XFA_AttributeValue::Etched ||
+      iType == XFA_AttributeValue::Embossed) {
     return {iType, stroke};
   }
-  return {XFA_AttributeEnum::Unknown, stroke};
+  return {XFA_AttributeValue::Unknown, stroke};
 }
 
 CXFA_Rectangle* ToRectangle(CXFA_Box* box) {
@@ -78,14 +78,14 @@
 
 CXFA_Box::~CXFA_Box() = default;
 
-XFA_AttributeEnum CXFA_Box::GetHand() {
+XFA_AttributeValue CXFA_Box::GetHand() {
   return JSObject()->GetEnum(XFA_Attribute::Hand);
 }
 
-XFA_AttributeEnum CXFA_Box::GetPresence() {
+XFA_AttributeValue CXFA_Box::GetPresence() {
   return JSObject()
       ->TryEnum(XFA_Attribute::Presence, true)
-      .value_or(XFA_AttributeEnum::Visible);
+      .value_or(XFA_AttributeValue::Visible);
 }
 
 int32_t CXFA_Box::CountEdges() {
@@ -119,17 +119,17 @@
   return JSObject()->GetOrCreateProperty<CXFA_Fill>(0, XFA_Element::Fill);
 }
 
-std::tuple<XFA_AttributeEnum, bool, float> CXFA_Box::Get3DStyle() {
+std::tuple<XFA_AttributeValue, bool, float> CXFA_Box::Get3DStyle() {
   if (GetElementType() == XFA_Element::Arc)
-    return {XFA_AttributeEnum::Unknown, false, 0.0f};
+    return {XFA_AttributeValue::Unknown, false, 0.0f};
 
   std::vector<CXFA_Stroke*> strokes = GetStrokesInternal(true);
   CXFA_Stroke* stroke;
-  XFA_AttributeEnum iType;
+  XFA_AttributeValue iType;
 
   std::tie(iType, stroke) = Style3D(strokes);
-  if (iType == XFA_AttributeEnum::Unknown)
-    return {XFA_AttributeEnum::Unknown, false, 0.0f};
+  if (iType == XFA_AttributeValue::Unknown)
+    return {XFA_AttributeValue::Unknown, false, 0.0f};
 
   return {iType, stroke->IsVisible(), stroke->GetThickness()};
 }
@@ -184,7 +184,7 @@
                     const CFX_RectF& rtWidget,
                     const CFX_Matrix& matrix,
                     bool forceRound) {
-  if (GetPresence() != XFA_AttributeEnum::Visible)
+  if (GetPresence() != XFA_AttributeValue::Visible)
     return;
 
   XFA_Element eType = GetElementType();
@@ -224,10 +224,10 @@
     CXFA_Edge* edge = GetEdgeIfExists(0);
     float fThickness = std::fmax(0.0, edge ? edge->GetThickness() : 0);
     float fHalf = fThickness / 2;
-    XFA_AttributeEnum iHand = GetHand();
-    if (iHand == XFA_AttributeEnum::Left)
+    XFA_AttributeValue iHand = GetHand();
+    if (iHand == XFA_AttributeValue::Left)
       rtWidget.Inflate(fHalf, fHalf);
-    else if (iHand == XFA_AttributeEnum::Right)
+    else if (iHand == XFA_AttributeValue::Right)
       rtWidget.Deflate(fHalf, fHalf);
 
     GetPathArcOrRounded(rtWidget, forceRound, &fillPath);
@@ -278,10 +278,10 @@
 
   bool bVisible;
   float fThickness;
-  XFA_AttributeEnum i3DType;
+  XFA_AttributeValue i3DType;
   std::tie(i3DType, bVisible, fThickness) = Get3DStyle();
   bool lowered3d = false;
-  if (i3DType != XFA_AttributeEnum::Unknown) {
+  if (i3DType != XFA_AttributeValue::Unknown) {
     if (bVisible && fThickness >= 0.001f)
       lowered3d = true;
   }
@@ -291,10 +291,10 @@
     fHalf = 0;
   }
 
-  XFA_AttributeEnum iHand = GetHand();
-  if (iHand == XFA_AttributeEnum::Left) {
+  XFA_AttributeValue iHand = GetHand();
+  if (iHand == XFA_AttributeValue::Left) {
     rtWidget.Inflate(fHalf, fHalf);
-  } else if (iHand == XFA_AttributeEnum::Right) {
+  } else if (iHand == XFA_AttributeValue::Right) {
     rtWidget.Deflate(fHalf, fHalf);
   }
   if (!forceRound || !lowered3d) {
diff --git a/xfa/fxfa/parser/cxfa_box.h b/xfa/fxfa/parser/cxfa_box.h
index 5431ef8..12ac7a4 100644
--- a/xfa/fxfa/parser/cxfa_box.h
+++ b/xfa/fxfa/parser/cxfa_box.h
@@ -25,8 +25,8 @@
  public:
   ~CXFA_Box() override;
 
-  XFA_AttributeEnum GetPresence();
-  std::tuple<XFA_AttributeEnum, bool, float> Get3DStyle();
+  XFA_AttributeValue GetPresence();
+  std::tuple<XFA_AttributeValue, bool, float> Get3DStyle();
 
   int32_t CountEdges();
   CXFA_Edge* GetEdgeIfExists(int32_t nIndex);
@@ -50,7 +50,7 @@
            const WideStringView& elementName,
            std::unique_ptr<CJX_Object> js_node);
 
-  XFA_AttributeEnum GetHand();
+  XFA_AttributeValue GetHand();
 
  private:
   bool IsCircular();
diff --git a/xfa/fxfa/parser/cxfa_break.cpp b/xfa/fxfa/parser/cxfa_break.cpp
index ca5eca5..b7d030b 100644
--- a/xfa/fxfa/parser/cxfa_break.cpp
+++ b/xfa/fxfa/parser/cxfa_break.cpp
@@ -24,12 +24,12 @@
     {XFA_Attribute::StartNew, XFA_AttributeType::Boolean, (void*)0},
     {XFA_Attribute::BookendTrailer, XFA_AttributeType::CData, nullptr},
     {XFA_Attribute::After, XFA_AttributeType::Enum,
-     (void*)XFA_AttributeEnum::Auto},
+     (void*)XFA_AttributeValue::Auto},
     {XFA_Attribute::Usehref, XFA_AttributeType::CData, nullptr},
     {XFA_Attribute::BookendLeader, XFA_AttributeType::CData, nullptr},
     {XFA_Attribute::AfterTarget, XFA_AttributeType::CData, nullptr},
     {XFA_Attribute::Before, XFA_AttributeType::Enum,
-     (void*)XFA_AttributeEnum::Auto},
+     (void*)XFA_AttributeValue::Auto},
     {XFA_Attribute::Unknown, XFA_AttributeType::Integer, nullptr}};
 
 constexpr wchar_t kBreakName[] = L"break";
diff --git a/xfa/fxfa/parser/cxfa_breakafter.cpp b/xfa/fxfa/parser/cxfa_breakafter.cpp
index 6541abe..927f559 100644
--- a/xfa/fxfa/parser/cxfa_breakafter.cpp
+++ b/xfa/fxfa/parser/cxfa_breakafter.cpp
@@ -20,7 +20,7 @@
     {XFA_Attribute::StartNew, XFA_AttributeType::Boolean, (void*)0},
     {XFA_Attribute::Trailer, XFA_AttributeType::CData, nullptr},
     {XFA_Attribute::TargetType, XFA_AttributeType::Enum,
-     (void*)XFA_AttributeEnum::Auto},
+     (void*)XFA_AttributeValue::Auto},
     {XFA_Attribute::Usehref, XFA_AttributeType::CData, nullptr},
     {XFA_Attribute::Target, XFA_AttributeType::CData, nullptr},
     {XFA_Attribute::Leader, XFA_AttributeType::CData, nullptr},
diff --git a/xfa/fxfa/parser/cxfa_breakbefore.cpp b/xfa/fxfa/parser/cxfa_breakbefore.cpp
index d1b57e4..36784c1 100644
--- a/xfa/fxfa/parser/cxfa_breakbefore.cpp
+++ b/xfa/fxfa/parser/cxfa_breakbefore.cpp
@@ -20,7 +20,7 @@
     {XFA_Attribute::StartNew, XFA_AttributeType::Boolean, (void*)0},
     {XFA_Attribute::Trailer, XFA_AttributeType::CData, nullptr},
     {XFA_Attribute::TargetType, XFA_AttributeType::Enum,
-     (void*)XFA_AttributeEnum::Auto},
+     (void*)XFA_AttributeValue::Auto},
     {XFA_Attribute::Usehref, XFA_AttributeType::CData, nullptr},
     {XFA_Attribute::Target, XFA_AttributeType::CData, nullptr},
     {XFA_Attribute::Leader, XFA_AttributeType::CData, nullptr},
diff --git a/xfa/fxfa/parser/cxfa_button.cpp b/xfa/fxfa/parser/cxfa_button.cpp
index 5ab289b..15c2791 100644
--- a/xfa/fxfa/parser/cxfa_button.cpp
+++ b/xfa/fxfa/parser/cxfa_button.cpp
@@ -19,7 +19,7 @@
     {XFA_Attribute::Use, XFA_AttributeType::CData, nullptr},
     {XFA_Attribute::Usehref, XFA_AttributeType::CData, nullptr},
     {XFA_Attribute::Highlight, XFA_AttributeType::Enum,
-     (void*)XFA_AttributeEnum::Inverted},
+     (void*)XFA_AttributeValue::Inverted},
     {XFA_Attribute::Unknown, XFA_AttributeType::Integer, nullptr}};
 
 constexpr wchar_t kButtonName[] = L"button";
@@ -43,6 +43,6 @@
   return XFA_FFWidgetType::kButton;
 }
 
-XFA_AttributeEnum CXFA_Button::GetHighlight() {
+XFA_AttributeValue CXFA_Button::GetHighlight() {
   return JSObject()->GetEnum(XFA_Attribute::Highlight);
 }
diff --git a/xfa/fxfa/parser/cxfa_button.h b/xfa/fxfa/parser/cxfa_button.h
index d9d67a9..1eddd65 100644
--- a/xfa/fxfa/parser/cxfa_button.h
+++ b/xfa/fxfa/parser/cxfa_button.h
@@ -16,7 +16,7 @@
 
   XFA_FFWidgetType GetDefaultFFWidgetType() const override;
 
-  XFA_AttributeEnum GetHighlight();
+  XFA_AttributeValue GetHighlight();
 };
 
 #endif  // XFA_FXFA_PARSER_CXFA_BUTTON_H_
diff --git a/xfa/fxfa/parser/cxfa_calculate.cpp b/xfa/fxfa/parser/cxfa_calculate.cpp
index 5054e67..5b15bcc 100644
--- a/xfa/fxfa/parser/cxfa_calculate.cpp
+++ b/xfa/fxfa/parser/cxfa_calculate.cpp
@@ -24,7 +24,7 @@
     {XFA_Attribute::Use, XFA_AttributeType::CData, nullptr},
     {XFA_Attribute::Usehref, XFA_AttributeType::CData, nullptr},
     {XFA_Attribute::Override, XFA_AttributeType::Enum,
-     (void*)XFA_AttributeEnum::Error},
+     (void*)XFA_AttributeValue::Error},
     {XFA_Attribute::Unknown, XFA_AttributeType::Integer, nullptr}};
 
 constexpr wchar_t kCalculateName[] = L"calculate";
@@ -44,10 +44,10 @@
 
 CXFA_Calculate::~CXFA_Calculate() {}
 
-XFA_AttributeEnum CXFA_Calculate::GetOverride() {
+XFA_AttributeValue CXFA_Calculate::GetOverride() {
   return JSObject()
       ->TryEnum(XFA_Attribute::Override, false)
-      .value_or(XFA_AttributeEnum::Error);
+      .value_or(XFA_AttributeValue::Error);
 }
 
 CXFA_Script* CXFA_Calculate::GetScriptIfExists() {
diff --git a/xfa/fxfa/parser/cxfa_calculate.h b/xfa/fxfa/parser/cxfa_calculate.h
index 46c8770..a3934ac 100644
--- a/xfa/fxfa/parser/cxfa_calculate.h
+++ b/xfa/fxfa/parser/cxfa_calculate.h
@@ -16,7 +16,7 @@
   CXFA_Calculate(CXFA_Document* doc, XFA_PacketType packet);
   ~CXFA_Calculate() override;
 
-  XFA_AttributeEnum GetOverride();
+  XFA_AttributeValue GetOverride();
   CXFA_Script* GetScriptIfExists();
   WideString GetMessageText();
 };
diff --git a/xfa/fxfa/parser/cxfa_calendarsymbols.cpp b/xfa/fxfa/parser/cxfa_calendarsymbols.cpp
index f86e37f..507f1f8 100644
--- a/xfa/fxfa/parser/cxfa_calendarsymbols.cpp
+++ b/xfa/fxfa/parser/cxfa_calendarsymbols.cpp
@@ -16,7 +16,7 @@
     {XFA_Element::Unknown, 0, 0}};
 const CXFA_Node::AttributeData kCalendarSymbolsAttributeData[] = {
     {XFA_Attribute::Name, XFA_AttributeType::Enum,
-     (void*)XFA_AttributeEnum::Gregorian},
+     (void*)XFA_AttributeValue::Gregorian},
     {XFA_Attribute::Unknown, XFA_AttributeType::Integer, nullptr}};
 
 constexpr wchar_t kCalendarSymbolsName[] = L"calendarSymbols";
diff --git a/xfa/fxfa/parser/cxfa_caption.cpp b/xfa/fxfa/parser/cxfa_caption.cpp
index dad4dc4..22f1851 100644
--- a/xfa/fxfa/parser/cxfa_caption.cpp
+++ b/xfa/fxfa/parser/cxfa_caption.cpp
@@ -24,10 +24,10 @@
     {XFA_Attribute::Use, XFA_AttributeType::CData, nullptr},
     {XFA_Attribute::Reserve, XFA_AttributeType::Measure, (void*)L"-1un"},
     {XFA_Attribute::Presence, XFA_AttributeType::Enum,
-     (void*)XFA_AttributeEnum::Visible},
+     (void*)XFA_AttributeValue::Visible},
     {XFA_Attribute::Usehref, XFA_AttributeType::CData, nullptr},
     {XFA_Attribute::Placement, XFA_AttributeType::Enum,
-     (void*)XFA_AttributeEnum::Left},
+     (void*)XFA_AttributeValue::Left},
     {XFA_Attribute::Unknown, XFA_AttributeType::Integer, nullptr}};
 
 constexpr wchar_t kCaptionName[] = L"caption";
@@ -50,20 +50,21 @@
 bool CXFA_Caption::IsVisible() {
   return JSObject()
              ->TryEnum(XFA_Attribute::Presence, true)
-             .value_or(XFA_AttributeEnum::Visible) ==
-         XFA_AttributeEnum::Visible;
+             .value_or(XFA_AttributeValue::Visible) ==
+         XFA_AttributeValue::Visible;
 }
 
 bool CXFA_Caption::IsHidden() {
   return JSObject()
              ->TryEnum(XFA_Attribute::Presence, true)
-             .value_or(XFA_AttributeEnum::Visible) == XFA_AttributeEnum::Hidden;
+             .value_or(XFA_AttributeValue::Visible) ==
+         XFA_AttributeValue::Hidden;
 }
 
-XFA_AttributeEnum CXFA_Caption::GetPlacementType() {
+XFA_AttributeValue CXFA_Caption::GetPlacementType() {
   return JSObject()
       ->TryEnum(XFA_Attribute::Placement, true)
-      .value_or(XFA_AttributeEnum::Left);
+      .value_or(XFA_AttributeValue::Left);
 }
 
 float CXFA_Caption::GetReserve() const {
diff --git a/xfa/fxfa/parser/cxfa_caption.h b/xfa/fxfa/parser/cxfa_caption.h
index 8f3dfdc..9e7d38a 100644
--- a/xfa/fxfa/parser/cxfa_caption.h
+++ b/xfa/fxfa/parser/cxfa_caption.h
@@ -15,15 +15,15 @@
 
 class CXFA_Caption final : public CXFA_Node {
  public:
-  static constexpr XFA_AttributeEnum kDefaultPlacementType =
-      XFA_AttributeEnum::Left;
+  static constexpr XFA_AttributeValue kDefaultPlacementType =
+      XFA_AttributeValue::Left;
 
   CXFA_Caption(CXFA_Document* doc, XFA_PacketType packet);
   ~CXFA_Caption() override;
 
   bool IsVisible();
   bool IsHidden();
-  XFA_AttributeEnum GetPlacementType();
+  XFA_AttributeValue GetPlacementType();
   float GetReserve() const;
   CXFA_Margin* GetMarginIfExists();
   CXFA_Font* GetFontIfExists();
diff --git a/xfa/fxfa/parser/cxfa_certificates.cpp b/xfa/fxfa/parser/cxfa_certificates.cpp
index ef223be..62aa428 100644
--- a/xfa/fxfa/parser/cxfa_certificates.cpp
+++ b/xfa/fxfa/parser/cxfa_certificates.cpp
@@ -20,7 +20,7 @@
     {XFA_Attribute::Url, XFA_AttributeType::CData, nullptr},
     {XFA_Attribute::Use, XFA_AttributeType::CData, nullptr},
     {XFA_Attribute::CredentialServerPolicy, XFA_AttributeType::Enum,
-     (void*)XFA_AttributeEnum::Optional},
+     (void*)XFA_AttributeValue::Optional},
     {XFA_Attribute::Usehref, XFA_AttributeType::CData, nullptr},
     {XFA_Attribute::UrlPolicy, XFA_AttributeType::CData, nullptr},
     {XFA_Attribute::Unknown, XFA_AttributeType::Integer, nullptr}};
diff --git a/xfa/fxfa/parser/cxfa_checkbutton.cpp b/xfa/fxfa/parser/cxfa_checkbutton.cpp
index a77a083..1ef8c14 100644
--- a/xfa/fxfa/parser/cxfa_checkbutton.cpp
+++ b/xfa/fxfa/parser/cxfa_checkbutton.cpp
@@ -21,9 +21,9 @@
     {XFA_Attribute::Use, XFA_AttributeType::CData, nullptr},
     {XFA_Attribute::AllowNeutral, XFA_AttributeType::Boolean, (void*)0},
     {XFA_Attribute::Mark, XFA_AttributeType::Enum,
-     (void*)XFA_AttributeEnum::Default},
+     (void*)XFA_AttributeValue::Default},
     {XFA_Attribute::Shape, XFA_AttributeType::Enum,
-     (void*)XFA_AttributeEnum::Square},
+     (void*)XFA_AttributeValue::Square},
     {XFA_Attribute::Size, XFA_AttributeType::Measure, (void*)L"10pt"},
     {XFA_Attribute::Usehref, XFA_AttributeType::CData, nullptr},
     {XFA_Attribute::Unknown, XFA_AttributeType::Integer, nullptr}};
@@ -50,10 +50,10 @@
 }
 
 bool CXFA_CheckButton::IsRound() {
-  return JSObject()->GetEnum(XFA_Attribute::Shape) == XFA_AttributeEnum::Round;
+  return JSObject()->GetEnum(XFA_Attribute::Shape) == XFA_AttributeValue::Round;
 }
 
-XFA_AttributeEnum CXFA_CheckButton::GetMark() {
+XFA_AttributeValue CXFA_CheckButton::GetMark() {
   return JSObject()->GetEnum(XFA_Attribute::Mark);
 }
 
diff --git a/xfa/fxfa/parser/cxfa_checkbutton.h b/xfa/fxfa/parser/cxfa_checkbutton.h
index 7d78919..3ca8b9e 100644
--- a/xfa/fxfa/parser/cxfa_checkbutton.h
+++ b/xfa/fxfa/parser/cxfa_checkbutton.h
@@ -18,7 +18,7 @@
 
   bool IsRound();
   bool IsAllowNeutral();
-  XFA_AttributeEnum GetMark();
+  XFA_AttributeValue GetMark();
 };
 
 #endif  // XFA_FXFA_PARSER_CXFA_CHECKBUTTON_H_
diff --git a/xfa/fxfa/parser/cxfa_choicelist.cpp b/xfa/fxfa/parser/cxfa_choicelist.cpp
index 0adf645..7815686 100644
--- a/xfa/fxfa/parser/cxfa_choicelist.cpp
+++ b/xfa/fxfa/parser/cxfa_choicelist.cpp
@@ -20,9 +20,9 @@
     {XFA_Attribute::Id, XFA_AttributeType::CData, nullptr},
     {XFA_Attribute::Use, XFA_AttributeType::CData, nullptr},
     {XFA_Attribute::Open, XFA_AttributeType::Enum,
-     (void*)XFA_AttributeEnum::UserControl},
+     (void*)XFA_AttributeValue::UserControl},
     {XFA_Attribute::CommitOn, XFA_AttributeType::Enum,
-     (void*)XFA_AttributeEnum::Select},
+     (void*)XFA_AttributeValue::Select},
     {XFA_Attribute::TextEntry, XFA_AttributeType::Boolean, (void*)0},
     {XFA_Attribute::Usehref, XFA_AttributeType::CData, nullptr},
     {XFA_Attribute::Unknown, XFA_AttributeType::Integer, nullptr}};
@@ -46,7 +46,7 @@
 
 XFA_Element CXFA_ChoiceList::GetValueNodeType() const {
   return JSObject()->GetEnum(XFA_Attribute::Open) ==
-                 XFA_AttributeEnum::MultiSelect
+                 XFA_AttributeValue::MultiSelect
              ? XFA_Element::ExData
              : XFA_Element::Text;
 }
diff --git a/xfa/fxfa/parser/cxfa_compress.cpp b/xfa/fxfa/parser/cxfa_compress.cpp
index f2c2147..672bced 100644
--- a/xfa/fxfa/parser/cxfa_compress.cpp
+++ b/xfa/fxfa/parser/cxfa_compress.cpp
@@ -11,7 +11,7 @@
 const CXFA_Node::AttributeData kCompressAttributeData[] = {
     {XFA_Attribute::Desc, XFA_AttributeType::CData, nullptr},
     {XFA_Attribute::Scope, XFA_AttributeType::Enum,
-     (void*)XFA_AttributeEnum::ImageOnly},
+     (void*)XFA_AttributeValue::ImageOnly},
     {XFA_Attribute::Lock, XFA_AttributeType::Integer, (void*)0},
     {XFA_Attribute::Unknown, XFA_AttributeType::Integer, nullptr}};
 
diff --git a/xfa/fxfa/parser/cxfa_connect.cpp b/xfa/fxfa/parser/cxfa_connect.cpp
index 850f477..61971ed 100644
--- a/xfa/fxfa/parser/cxfa_connect.cpp
+++ b/xfa/fxfa/parser/cxfa_connect.cpp
@@ -25,7 +25,7 @@
     {XFA_Attribute::Timeout, XFA_AttributeType::Integer, (void*)15},
     {XFA_Attribute::Connection, XFA_AttributeType::CData, nullptr},
     {XFA_Attribute::Usage, XFA_AttributeType::Enum,
-     (void*)XFA_AttributeEnum::ExportAndImport},
+     (void*)XFA_AttributeValue::ExportAndImport},
     {XFA_Attribute::Usehref, XFA_AttributeType::CData, nullptr},
     {XFA_Attribute::DelayedOpen, XFA_AttributeType::CData, nullptr},
     {XFA_Attribute::Unknown, XFA_AttributeType::Integer, nullptr}};
diff --git a/xfa/fxfa/parser/cxfa_containerlayoutitem.cpp b/xfa/fxfa/parser/cxfa_containerlayoutitem.cpp
index f5af3a3..d10e1b4 100644
--- a/xfa/fxfa/parser/cxfa_containerlayoutitem.cpp
+++ b/xfa/fxfa/parser/cxfa_containerlayoutitem.cpp
@@ -43,7 +43,7 @@
                        ->GetMeasure(XFA_Attribute::Long)
                        .ToUnit(XFA_Unit::Pt));
   if (pMedium->JSObject()->GetEnum(XFA_Attribute::Orientation) ==
-      XFA_AttributeEnum::Landscape) {
+      XFA_AttributeValue::Landscape) {
     size = CFX_SizeF(size.height, size.width);
   }
   return size;
diff --git a/xfa/fxfa/parser/cxfa_corner.cpp b/xfa/fxfa/parser/cxfa_corner.cpp
index 409454f..16d4bff 100644
--- a/xfa/fxfa/parser/cxfa_corner.cpp
+++ b/xfa/fxfa/parser/cxfa_corner.cpp
@@ -19,14 +19,14 @@
     {XFA_Attribute::Id, XFA_AttributeType::CData, nullptr},
     {XFA_Attribute::Use, XFA_AttributeType::CData, nullptr},
     {XFA_Attribute::Stroke, XFA_AttributeType::Enum,
-     (void*)XFA_AttributeEnum::Solid},
+     (void*)XFA_AttributeValue::Solid},
     {XFA_Attribute::Presence, XFA_AttributeType::Enum,
-     (void*)XFA_AttributeEnum::Visible},
+     (void*)XFA_AttributeValue::Visible},
     {XFA_Attribute::Inverted, XFA_AttributeType::Boolean, (void*)0},
     {XFA_Attribute::Thickness, XFA_AttributeType::Measure, (void*)L"0.5pt"},
     {XFA_Attribute::Usehref, XFA_AttributeType::CData, nullptr},
     {XFA_Attribute::Join, XFA_AttributeType::Enum,
-     (void*)XFA_AttributeEnum::Square},
+     (void*)XFA_AttributeValue::Square},
     {XFA_Attribute::Radius, XFA_AttributeType::Measure, (void*)L"0in"},
     {XFA_Attribute::Unknown, XFA_AttributeType::Integer, nullptr}};
 
diff --git a/xfa/fxfa/parser/cxfa_currencysymbol.cpp b/xfa/fxfa/parser/cxfa_currencysymbol.cpp
index 381f714..d95df3f 100644
--- a/xfa/fxfa/parser/cxfa_currencysymbol.cpp
+++ b/xfa/fxfa/parser/cxfa_currencysymbol.cpp
@@ -10,7 +10,7 @@
 
 const CXFA_Node::AttributeData kCurrencySymbolAttributeData[] = {
     {XFA_Attribute::Name, XFA_AttributeType::Enum,
-     (void*)XFA_AttributeEnum::Symbol},
+     (void*)XFA_AttributeValue::Symbol},
     {XFA_Attribute::Unknown, XFA_AttributeType::Integer, nullptr}};
 
 constexpr wchar_t kCurrencySymbolName[] = L"currencySymbol";
diff --git a/xfa/fxfa/parser/cxfa_datavalue.cpp b/xfa/fxfa/parser/cxfa_datavalue.cpp
index 1b1bd7c..5e18b44 100644
--- a/xfa/fxfa/parser/cxfa_datavalue.cpp
+++ b/xfa/fxfa/parser/cxfa_datavalue.cpp
@@ -15,7 +15,7 @@
     {XFA_Attribute::Name, XFA_AttributeType::CData, nullptr},
     {XFA_Attribute::ContentType, XFA_AttributeType::CData, nullptr},
     {XFA_Attribute::Contains, XFA_AttributeType::Enum,
-     (void*)XFA_AttributeEnum::Data},
+     (void*)XFA_AttributeValue::Data},
     {XFA_Attribute::Value, XFA_AttributeType::CData, nullptr},
     {XFA_Attribute::IsNull, XFA_AttributeType::Boolean, (void*)0},
     {XFA_Attribute::Unknown, XFA_AttributeType::Integer, nullptr}};
diff --git a/xfa/fxfa/parser/cxfa_datepattern.cpp b/xfa/fxfa/parser/cxfa_datepattern.cpp
index edf3e0f..1fcfaf5 100644
--- a/xfa/fxfa/parser/cxfa_datepattern.cpp
+++ b/xfa/fxfa/parser/cxfa_datepattern.cpp
@@ -10,7 +10,7 @@
 
 const CXFA_Node::AttributeData kDatePatternAttributeData[] = {
     {XFA_Attribute::Name, XFA_AttributeType::Enum,
-     (void*)XFA_AttributeEnum::Med},
+     (void*)XFA_AttributeValue::Med},
     {XFA_Attribute::Unknown, XFA_AttributeType::Integer, nullptr}};
 
 constexpr wchar_t kDatePatternName[] = L"datePattern";
diff --git a/xfa/fxfa/parser/cxfa_datetimeedit.cpp b/xfa/fxfa/parser/cxfa_datetimeedit.cpp
index 8145e15..56aedc5 100644
--- a/xfa/fxfa/parser/cxfa_datetimeedit.cpp
+++ b/xfa/fxfa/parser/cxfa_datetimeedit.cpp
@@ -22,9 +22,9 @@
     {XFA_Attribute::Use, XFA_AttributeType::CData, nullptr},
     {XFA_Attribute::Usehref, XFA_AttributeType::CData, nullptr},
     {XFA_Attribute::Picker, XFA_AttributeType::Enum,
-     (void*)XFA_AttributeEnum::Host},
+     (void*)XFA_AttributeValue::Host},
     {XFA_Attribute::HScrollPolicy, XFA_AttributeType::Enum,
-     (void*)XFA_AttributeEnum::Auto},
+     (void*)XFA_AttributeValue::Auto},
     {XFA_Attribute::Unknown, XFA_AttributeType::Integer, nullptr}};
 
 constexpr wchar_t kDateTimeEditName[] = L"dateTimeEdit";
diff --git a/xfa/fxfa/parser/cxfa_defaulttypeface.cpp b/xfa/fxfa/parser/cxfa_defaulttypeface.cpp
index f7124b1..c0a8358 100644
--- a/xfa/fxfa/parser/cxfa_defaulttypeface.cpp
+++ b/xfa/fxfa/parser/cxfa_defaulttypeface.cpp
@@ -11,7 +11,7 @@
 const CXFA_Node::AttributeData kDefaultTypefaceAttributeData[] = {
     {XFA_Attribute::Desc, XFA_AttributeType::CData, nullptr},
     {XFA_Attribute::WritingScript, XFA_AttributeType::Enum,
-     (void*)XFA_AttributeEnum::Asterisk},
+     (void*)XFA_AttributeValue::Asterisk},
     {XFA_Attribute::Lock, XFA_AttributeType::Integer, (void*)0},
     {XFA_Attribute::Unknown, XFA_AttributeType::Integer, nullptr}};
 
diff --git a/xfa/fxfa/parser/cxfa_digestmethods.cpp b/xfa/fxfa/parser/cxfa_digestmethods.cpp
index 09e296b..62c3422 100644
--- a/xfa/fxfa/parser/cxfa_digestmethods.cpp
+++ b/xfa/fxfa/parser/cxfa_digestmethods.cpp
@@ -15,7 +15,7 @@
     {XFA_Attribute::Id, XFA_AttributeType::CData, nullptr},
     {XFA_Attribute::Use, XFA_AttributeType::CData, nullptr},
     {XFA_Attribute::Type, XFA_AttributeType::Enum,
-     (void*)XFA_AttributeEnum::Optional},
+     (void*)XFA_AttributeValue::Optional},
     {XFA_Attribute::Usehref, XFA_AttributeType::CData, nullptr},
     {XFA_Attribute::Unknown, XFA_AttributeType::Integer, nullptr}};
 
diff --git a/xfa/fxfa/parser/cxfa_document.cpp b/xfa/fxfa/parser/cxfa_document.cpp
index d1deb0d..577b8ee 100644
--- a/xfa/fxfa/parser/cxfa_document.cpp
+++ b/xfa/fxfa/parser/cxfa_document.cpp
@@ -380,7 +380,7 @@
                               CXFA_TraverseStrategy_XFAContainerNode>*
         pIterator,
     bool& bSelfMatch,
-    XFA_AttributeEnum& eBindMatch,
+    XFA_AttributeValue& eBindMatch,
     bool bUpLevel) {
   CXFA_Node* pResult = nullptr;
   CXFA_Node* pCurTemplateNode = pIterator->GetCurrent();
@@ -418,16 +418,16 @@
 
     CXFA_Bind* pTemplateNodeBind =
         pCurTemplateNode->GetFirstChildByClass<CXFA_Bind>(XFA_Element::Bind);
-    XFA_AttributeEnum eMatch =
+    XFA_AttributeValue eMatch =
         pTemplateNodeBind
             ? pTemplateNodeBind->JSObject()->GetEnum(XFA_Attribute::Match)
-            : XFA_AttributeEnum::Once;
+            : XFA_AttributeValue::Once;
     eBindMatch = eMatch;
     switch (eMatch) {
-      case XFA_AttributeEnum::None:
+      case XFA_AttributeValue::None:
         pCurTemplateNode = pIterator->MoveToNext();
         continue;
-      case XFA_AttributeEnum::Global:
+      case XFA_AttributeValue::Global:
         bAccessedDataDOM = true;
         if (!bForceBind) {
           pCurTemplateNode = pIterator->MoveToNext();
@@ -448,7 +448,7 @@
           break;
         }
         FALLTHROUGH;
-      case XFA_AttributeEnum::Once: {
+      case XFA_AttributeValue::Once: {
         bAccessedDataDOM = true;
         CXFA_Node* pOnceBindNode = FindOnceDataNode(
             pCurTemplateNode->JSObject()->GetCData(XFA_Attribute::Name),
@@ -460,7 +460,7 @@
         pResult = pOnceBindNode;
         break;
       }
-      case XFA_AttributeEnum::DataRef: {
+      case XFA_AttributeValue::DataRef: {
         bAccessedDataDOM = true;
         CXFA_Node* pDataRefBindNode = FindDataRefDataNode(
             pDocument,
@@ -772,9 +772,9 @@
     pDataNode->CreateXMLMappingNode();
     if (eNodeType == XFA_Element::DataValue &&
         pDDNode->JSObject()->GetEnum(XFA_Attribute::Contains) ==
-            XFA_AttributeEnum::MetaData) {
+            XFA_AttributeValue::MetaData) {
       pDataNode->JSObject()->SetEnum(XFA_Attribute::Contains,
-                                     XFA_AttributeEnum::MetaData, false);
+                                     XFA_AttributeValue::MetaData, false);
     }
     pDataParent->InsertChild(pDataNode, nullptr);
     pDataNode->SetDataDescriptionNode(pDDNode);
@@ -810,7 +810,7 @@
   if (bDataMerge) {
     bool bAccessedDataDOM = false;
     bool bSelfMatch = false;
-    XFA_AttributeEnum eBindMatch;
+    XFA_AttributeValue eBindMatch;
     CXFA_NodeIteratorTemplate<CXFA_Node, CXFA_TraverseStrategy_XFAContainerNode>
         sNodeIter(pTemplateNode);
     CXFA_Node* pDataNode = FindMatchingDataNode(
@@ -878,12 +878,12 @@
         static_cast<CXFA_Occur*>(pOccurNode)->GetOccurInfo();
   }
 
-  XFA_AttributeEnum eRelation =
+  XFA_AttributeValue eRelation =
       eType == XFA_Element::SubformSet
           ? pTemplateNode->JSObject()->GetEnum(XFA_Attribute::Relation)
-          : XFA_AttributeEnum::Ordered;
+          : XFA_AttributeValue::Ordered;
   int32_t iCurRepeatIndex = 0;
-  XFA_AttributeEnum eParentBindMatch = XFA_AttributeEnum::None;
+  XFA_AttributeValue eParentBindMatch = XFA_AttributeValue::None;
   if (bDataMerge) {
     CXFA_NodeIteratorTemplate<CXFA_Node, CXFA_TraverseStrategy_XFAContainerNode>
         sNodeIterator(pTemplateNode);
@@ -895,7 +895,7 @@
       std::vector<CXFA_Node*> nodeArray;
       for (; iMax < 0 || iCurRepeatIndex < iMax; iCurRepeatIndex++) {
         bool bSelfMatch = false;
-        XFA_AttributeEnum eBindMatch = XFA_AttributeEnum::None;
+        XFA_AttributeValue eBindMatch = XFA_AttributeValue::None;
         CXFA_Node* pDataNode = FindMatchingDataNode(
             pDocument, pTemplateNode, pDataScope, bAccessedDataDOM, false,
             &sNodeIterator, bSelfMatch, eBindMatch, true);
@@ -937,19 +937,19 @@
 
     for (; iMax < 0 || iCurRepeatIndex < iMax; iCurRepeatIndex++) {
       bool bSelfMatch = false;
-      XFA_AttributeEnum eBindMatch = XFA_AttributeEnum::None;
+      XFA_AttributeValue eBindMatch = XFA_AttributeValue::None;
       if (!FindMatchingDataNode(pDocument, pTemplateNode, pDataScope,
                                 bAccessedDataDOM, false, &sNodeIterator,
                                 bSelfMatch, eBindMatch, true)) {
         break;
       }
-      if (eBindMatch == XFA_AttributeEnum::DataRef &&
-          eParentBindMatch == XFA_AttributeEnum::DataRef) {
+      if (eBindMatch == XFA_AttributeValue::DataRef &&
+          eParentBindMatch == XFA_AttributeValue::DataRef) {
         break;
       }
 
-      if (eRelation == XFA_AttributeEnum::Choice ||
-          eRelation == XFA_AttributeEnum::Unordered) {
+      if (eRelation == XFA_AttributeValue::Choice ||
+          eRelation == XFA_AttributeValue::Unordered) {
         CXFA_Node* pSubformSetNode = XFA_NodeMerge_CloneOrMergeContainer(
             pDocument, pFormParentNode, pTemplateNode, false, pSearchArray);
         ASSERT(pSubformSetNode);
@@ -967,8 +967,8 @@
                                                 pTemplateChild, true, nullptr);
           } else if (pTemplateChild->IsContainerNode()) {
             bSelfMatch = false;
-            eBindMatch = XFA_AttributeEnum::None;
-            if (eRelation != XFA_AttributeEnum::Ordered) {
+            eBindMatch = XFA_AttributeValue::None;
+            if (eRelation != XFA_AttributeValue::Ordered) {
               CXFA_NodeIteratorTemplate<CXFA_Node,
                                         CXFA_TraverseStrategy_XFAContainerNode>
                   sChildIter(pTemplateChild);
@@ -991,7 +991,7 @@
         }
 
         switch (eRelation) {
-          case XFA_AttributeEnum::Choice: {
+          case XFA_AttributeValue::Choice: {
             ASSERT(!rgItemMatchList.empty());
             SortRecurseRecord(&rgItemMatchList, pDataScope, true);
             pDocument->DataMerge_CopyContainer(
@@ -999,7 +999,7 @@
                 pDataScope, false, true, true);
             break;
           }
-          case XFA_AttributeEnum::Unordered: {
+          case XFA_AttributeValue::Unordered: {
             if (!rgItemMatchList.empty()) {
               SortRecurseRecord(&rgItemMatchList, pDataScope, false);
               for (const auto& matched : rgItemMatchList) {
@@ -1096,7 +1096,7 @@
         XFA_NodeMerge_CloneOrMergeContainer(pDocument, pSubformSetNode,
                                             pTemplateChild, true, nullptr);
       } else if (pTemplateChild->IsContainerNode()) {
-        if (bFound && eRelation == XFA_AttributeEnum::Choice)
+        if (bFound && eRelation == XFA_AttributeValue::Choice)
           continue;
 
         pDocument->DataMerge_CopyContainer(pTemplateChild, pSubformSetNode,
@@ -1123,21 +1123,21 @@
         pTemplateNode
             ? pTemplateNode->GetFirstChildByClass<CXFA_Bind>(XFA_Element::Bind)
             : nullptr;
-    XFA_AttributeEnum eMatch =
+    XFA_AttributeValue eMatch =
         pTemplateNodeBind
             ? pTemplateNodeBind->JSObject()->GetEnum(XFA_Attribute::Match)
-            : XFA_AttributeEnum::Once;
+            : XFA_AttributeValue::Once;
     switch (eMatch) {
-      case XFA_AttributeEnum::None:
+      case XFA_AttributeValue::None:
         if (!bDataRef || bParentDataRef)
           FormValueNode_MatchNoneCreateChild(pFormNode);
         break;
-      case XFA_AttributeEnum::Once:
+      case XFA_AttributeValue::Once:
         if (!bDataRef || bParentDataRef) {
           if (!pDataNode) {
             if (pFormNode->GetNameHash() != 0 &&
                 pFormNode->JSObject()->GetEnum(XFA_Attribute::Scope) !=
-                    XFA_AttributeEnum::None) {
+                    XFA_AttributeValue::None) {
               XFA_Element eDataNodeType = (eType == XFA_Element::Subform ||
                                            XFA_FieldIsMultiListBox(pFormNode))
                                               ? XFA_Element::DataGroup
@@ -1162,7 +1162,7 @@
           }
         }
         break;
-      case XFA_AttributeEnum::Global:
+      case XFA_AttributeValue::Global:
         if (!bDataRef || bParentDataRef) {
           uint32_t dwNameHash = pFormNode->GetNameHash();
           if (dwNameHash != 0 && !pDataNode) {
@@ -1191,7 +1191,7 @@
             FormValueNode_MatchNoneCreateChild(pFormNode);
         }
         break;
-      case XFA_AttributeEnum::DataRef: {
+      case XFA_AttributeValue::DataRef: {
         bMatchRef = bDataRef;
         bParentDataRef = true;
         if (!pDataNode && bDataRef) {
diff --git a/xfa/fxfa/parser/cxfa_document_parser.cpp b/xfa/fxfa/parser/cxfa_document_parser.cpp
index 8a2ca46..6ce215a 100644
--- a/xfa/fxfa/parser/cxfa_document_parser.cpp
+++ b/xfa/fxfa/parser/cxfa_document_parser.cpp
@@ -624,7 +624,7 @@
   bool bUseAttribute = true;
   if (pTemplateChosen &&
       pTemplateChosen->JSObject()->GetEnum(XFA_Attribute::RestoreState) !=
-          XFA_AttributeEnum::Auto) {
+          XFA_AttributeValue::Auto) {
     bUseAttribute = false;
   }
   if (!NormalLoader(pNode, pXMLDocumentNode, XFA_PacketType::Form,
@@ -988,8 +988,8 @@
                                              it.first, false, false);
           pXFAMetaData->JSObject()->SetCData(XFA_Attribute::Value, it.second,
                                              false, false);
-          pXFAMetaData->JSObject()->SetEnum(XFA_Attribute::Contains,
-                                            XFA_AttributeEnum::MetaData, false);
+          pXFAMetaData->JSObject()->SetEnum(
+              XFA_Attribute::Contains, XFA_AttributeValue::MetaData, false);
           pXFAChild->InsertChild(pXFAMetaData, nullptr);
           pXFAMetaData->SetXMLMappingNode(pXMLElement);
           pXFAMetaData->SetFlag(XFA_NodeFlag_Initialized);
diff --git a/xfa/fxfa/parser/cxfa_draw.cpp b/xfa/fxfa/parser/cxfa_draw.cpp
index 9bc0cd8..ce15428 100644
--- a/xfa/fxfa/parser/cxfa_draw.cpp
+++ b/xfa/fxfa/parser/cxfa_draw.cpp
@@ -26,14 +26,14 @@
     {XFA_Attribute::Y, XFA_AttributeType::Measure, (void*)L"0in"},
     {XFA_Attribute::Id, XFA_AttributeType::CData, nullptr},
     {XFA_Attribute::HAlign, XFA_AttributeType::Enum,
-     (void*)XFA_AttributeEnum::Left},
+     (void*)XFA_AttributeValue::Left},
     {XFA_Attribute::Name, XFA_AttributeType::CData, nullptr},
     {XFA_Attribute::Use, XFA_AttributeType::CData, nullptr},
     {XFA_Attribute::Rotate, XFA_AttributeType::Integer, (void*)0},
     {XFA_Attribute::Presence, XFA_AttributeType::Enum,
-     (void*)XFA_AttributeEnum::Visible},
+     (void*)XFA_AttributeValue::Visible},
     {XFA_Attribute::VAlign, XFA_AttributeType::Enum,
-     (void*)XFA_AttributeEnum::Top},
+     (void*)XFA_AttributeValue::Top},
     {XFA_Attribute::MaxH, XFA_AttributeType::Measure, (void*)L"0in"},
     {XFA_Attribute::MaxW, XFA_AttributeType::Measure, (void*)L"0in"},
     {XFA_Attribute::MinH, XFA_AttributeType::Measure, (void*)L"0in"},
@@ -43,7 +43,7 @@
     {XFA_Attribute::Usehref, XFA_AttributeType::CData, nullptr},
     {XFA_Attribute::Locale, XFA_AttributeType::CData, nullptr},
     {XFA_Attribute::AnchorType, XFA_AttributeType::Enum,
-     (void*)XFA_AttributeEnum::TopLeft},
+     (void*)XFA_AttributeValue::TopLeft},
     {XFA_Attribute::Unknown, XFA_AttributeType::Integer, nullptr}};
 
 constexpr wchar_t kDrawName[] = L"draw";
diff --git a/xfa/fxfa/parser/cxfa_edge.cpp b/xfa/fxfa/parser/cxfa_edge.cpp
index 48f5c8e..9671dc0 100644
--- a/xfa/fxfa/parser/cxfa_edge.cpp
+++ b/xfa/fxfa/parser/cxfa_edge.cpp
@@ -18,12 +18,12 @@
 const CXFA_Node::AttributeData kEdgeAttributeData[] = {
     {XFA_Attribute::Id, XFA_AttributeType::CData, nullptr},
     {XFA_Attribute::Cap, XFA_AttributeType::Enum,
-     (void*)XFA_AttributeEnum::Square},
+     (void*)XFA_AttributeValue::Square},
     {XFA_Attribute::Use, XFA_AttributeType::CData, nullptr},
     {XFA_Attribute::Stroke, XFA_AttributeType::Enum,
-     (void*)XFA_AttributeEnum::Solid},
+     (void*)XFA_AttributeValue::Solid},
     {XFA_Attribute::Presence, XFA_AttributeType::Enum,
-     (void*)XFA_AttributeEnum::Visible},
+     (void*)XFA_AttributeValue::Visible},
     {XFA_Attribute::Thickness, XFA_AttributeType::Measure, (void*)L"0.5pt"},
     {XFA_Attribute::Usehref, XFA_AttributeType::CData, nullptr},
     {XFA_Attribute::Unknown, XFA_AttributeType::Integer, nullptr}};
diff --git a/xfa/fxfa/parser/cxfa_encodings.cpp b/xfa/fxfa/parser/cxfa_encodings.cpp
index 3009574..6b57803 100644
--- a/xfa/fxfa/parser/cxfa_encodings.cpp
+++ b/xfa/fxfa/parser/cxfa_encodings.cpp
@@ -15,7 +15,7 @@
     {XFA_Attribute::Id, XFA_AttributeType::CData, nullptr},
     {XFA_Attribute::Use, XFA_AttributeType::CData, nullptr},
     {XFA_Attribute::Type, XFA_AttributeType::Enum,
-     (void*)XFA_AttributeEnum::Optional},
+     (void*)XFA_AttributeValue::Optional},
     {XFA_Attribute::Usehref, XFA_AttributeType::CData, nullptr},
     {XFA_Attribute::Unknown, XFA_AttributeType::Integer, nullptr}};
 
diff --git a/xfa/fxfa/parser/cxfa_encryptionmethods.cpp b/xfa/fxfa/parser/cxfa_encryptionmethods.cpp
index ad6beab..ff87597 100644
--- a/xfa/fxfa/parser/cxfa_encryptionmethods.cpp
+++ b/xfa/fxfa/parser/cxfa_encryptionmethods.cpp
@@ -12,7 +12,7 @@
     {XFA_Attribute::Id, XFA_AttributeType::CData, nullptr},
     {XFA_Attribute::Use, XFA_AttributeType::CData, nullptr},
     {XFA_Attribute::Type, XFA_AttributeType::Enum,
-     (void*)XFA_AttributeEnum::Optional},
+     (void*)XFA_AttributeValue::Optional},
     {XFA_Attribute::Usehref, XFA_AttributeType::CData, nullptr},
     {XFA_Attribute::Unknown, XFA_AttributeType::Integer, nullptr}};
 
diff --git a/xfa/fxfa/parser/cxfa_event.cpp b/xfa/fxfa/parser/cxfa_event.cpp
index 8b4a0b5..bb963e5 100644
--- a/xfa/fxfa/parser/cxfa_event.cpp
+++ b/xfa/fxfa/parser/cxfa_event.cpp
@@ -26,10 +26,10 @@
     {XFA_Attribute::Ref, XFA_AttributeType::CData, nullptr},
     {XFA_Attribute::Use, XFA_AttributeType::CData, nullptr},
     {XFA_Attribute::Listen, XFA_AttributeType::Enum,
-     (void*)XFA_AttributeEnum::RefOnly},
+     (void*)XFA_AttributeValue::RefOnly},
     {XFA_Attribute::Usehref, XFA_AttributeType::CData, nullptr},
     {XFA_Attribute::Activity, XFA_AttributeType::Enum,
-     (void*)XFA_AttributeEnum::Click},
+     (void*)XFA_AttributeValue::Click},
     {XFA_Attribute::Unknown, XFA_AttributeType::Integer, nullptr}};
 
 constexpr wchar_t kEventName[] = L"event";
@@ -49,7 +49,7 @@
 
 CXFA_Event::~CXFA_Event() {}
 
-XFA_AttributeEnum CXFA_Event::GetActivity() {
+XFA_AttributeValue CXFA_Event::GetActivity() {
   return JSObject()->GetEnum(XFA_Attribute::Activity);
 }
 
diff --git a/xfa/fxfa/parser/cxfa_event.h b/xfa/fxfa/parser/cxfa_event.h
index e7f5e1a..73da7c2 100644
--- a/xfa/fxfa/parser/cxfa_event.h
+++ b/xfa/fxfa/parser/cxfa_event.h
@@ -17,7 +17,7 @@
   CXFA_Event(CXFA_Document* doc, XFA_PacketType packet);
   ~CXFA_Event() override;
 
-  XFA_AttributeEnum GetActivity();
+  XFA_AttributeValue GetActivity();
   XFA_Element GetEventType() const;
   CXFA_Script* GetScriptIfExists();
 
diff --git a/xfa/fxfa/parser/cxfa_exclgroup.cpp b/xfa/fxfa/parser/cxfa_exclgroup.cpp
index 7b59593..71c0ce5 100644
--- a/xfa/fxfa/parser/cxfa_exclgroup.cpp
+++ b/xfa/fxfa/parser/cxfa_exclgroup.cpp
@@ -25,26 +25,26 @@
     {XFA_Attribute::Y, XFA_AttributeType::Measure, (void*)L"0in"},
     {XFA_Attribute::Id, XFA_AttributeType::CData, nullptr},
     {XFA_Attribute::HAlign, XFA_AttributeType::Enum,
-     (void*)XFA_AttributeEnum::Left},
+     (void*)XFA_AttributeValue::Left},
     {XFA_Attribute::Name, XFA_AttributeType::CData, nullptr},
     {XFA_Attribute::Use, XFA_AttributeType::CData, nullptr},
     {XFA_Attribute::Access, XFA_AttributeType::Enum,
-     (void*)XFA_AttributeEnum::Open},
+     (void*)XFA_AttributeValue::Open},
     {XFA_Attribute::Presence, XFA_AttributeType::Enum,
-     (void*)XFA_AttributeEnum::Visible},
+     (void*)XFA_AttributeValue::Visible},
     {XFA_Attribute::VAlign, XFA_AttributeType::Enum,
-     (void*)XFA_AttributeEnum::Top},
+     (void*)XFA_AttributeValue::Top},
     {XFA_Attribute::MaxH, XFA_AttributeType::Measure, (void*)L"0in"},
     {XFA_Attribute::MaxW, XFA_AttributeType::Measure, (void*)L"0in"},
     {XFA_Attribute::MinH, XFA_AttributeType::Measure, (void*)L"0in"},
     {XFA_Attribute::MinW, XFA_AttributeType::Measure, (void*)L"0in"},
     {XFA_Attribute::Layout, XFA_AttributeType::Enum,
-     (void*)XFA_AttributeEnum::Position},
+     (void*)XFA_AttributeValue::Position},
     {XFA_Attribute::Relevant, XFA_AttributeType::CData, nullptr},
     {XFA_Attribute::ColSpan, XFA_AttributeType::Integer, (void*)1},
     {XFA_Attribute::Usehref, XFA_AttributeType::CData, nullptr},
     {XFA_Attribute::AnchorType, XFA_AttributeType::Enum,
-     (void*)XFA_AttributeEnum::TopLeft},
+     (void*)XFA_AttributeValue::TopLeft},
     {XFA_Attribute::AccessKey, XFA_AttributeType::CData, nullptr},
     {XFA_Attribute::Unknown, XFA_AttributeType::Integer, nullptr}};
 
diff --git a/xfa/fxfa/parser/cxfa_exdata.cpp b/xfa/fxfa/parser/cxfa_exdata.cpp
index 202b7d2..8cb89ab 100644
--- a/xfa/fxfa/parser/cxfa_exdata.cpp
+++ b/xfa/fxfa/parser/cxfa_exdata.cpp
@@ -18,7 +18,7 @@
     {XFA_Attribute::Use, XFA_AttributeType::CData, nullptr},
     {XFA_Attribute::ContentType, XFA_AttributeType::CData, nullptr},
     {XFA_Attribute::TransferEncoding, XFA_AttributeType::Enum,
-     (void*)XFA_AttributeEnum::None},
+     (void*)XFA_AttributeValue::None},
     {XFA_Attribute::Usehref, XFA_AttributeType::CData, nullptr},
     {XFA_Attribute::MaxLength, XFA_AttributeType::Integer, (void*)-1},
     {XFA_Attribute::Href, XFA_AttributeType::CData, nullptr},
diff --git a/xfa/fxfa/parser/cxfa_execute.cpp b/xfa/fxfa/parser/cxfa_execute.cpp
index a44c2db..70d3589 100644
--- a/xfa/fxfa/parser/cxfa_execute.cpp
+++ b/xfa/fxfa/parser/cxfa_execute.cpp
@@ -16,9 +16,9 @@
     {XFA_Attribute::Use, XFA_AttributeType::CData, nullptr},
     {XFA_Attribute::Connection, XFA_AttributeType::CData, nullptr},
     {XFA_Attribute::RunAt, XFA_AttributeType::Enum,
-     (void*)XFA_AttributeEnum::Client},
+     (void*)XFA_AttributeValue::Client},
     {XFA_Attribute::ExecuteType, XFA_AttributeType::Enum,
-     (void*)XFA_AttributeEnum::Import},
+     (void*)XFA_AttributeValue::Import},
     {XFA_Attribute::Usehref, XFA_AttributeType::CData, nullptr},
     {XFA_Attribute::Unknown, XFA_AttributeType::Integer, nullptr}};
 
diff --git a/xfa/fxfa/parser/cxfa_field.cpp b/xfa/fxfa/parser/cxfa_field.cpp
index 7b1531d..d9278c7 100644
--- a/xfa/fxfa/parser/cxfa_field.cpp
+++ b/xfa/fxfa/parser/cxfa_field.cpp
@@ -28,16 +28,16 @@
     {XFA_Attribute::Y, XFA_AttributeType::Measure, (void*)L"0in"},
     {XFA_Attribute::Id, XFA_AttributeType::CData, nullptr},
     {XFA_Attribute::HAlign, XFA_AttributeType::Enum,
-     (void*)XFA_AttributeEnum::Left},
+     (void*)XFA_AttributeValue::Left},
     {XFA_Attribute::Name, XFA_AttributeType::CData, nullptr},
     {XFA_Attribute::Use, XFA_AttributeType::CData, nullptr},
     {XFA_Attribute::Access, XFA_AttributeType::Enum,
-     (void*)XFA_AttributeEnum::Open},
+     (void*)XFA_AttributeValue::Open},
     {XFA_Attribute::Rotate, XFA_AttributeType::Integer, (void*)0},
     {XFA_Attribute::Presence, XFA_AttributeType::Enum,
-     (void*)XFA_AttributeEnum::Visible},
+     (void*)XFA_AttributeValue::Visible},
     {XFA_Attribute::VAlign, XFA_AttributeType::Enum,
-     (void*)XFA_AttributeEnum::Top},
+     (void*)XFA_AttributeValue::Top},
     {XFA_Attribute::MaxH, XFA_AttributeType::Measure, (void*)L"0in"},
     {XFA_Attribute::MaxW, XFA_AttributeType::Measure, (void*)L"0in"},
     {XFA_Attribute::MinH, XFA_AttributeType::Measure, (void*)L"0in"},
@@ -47,7 +47,7 @@
     {XFA_Attribute::Usehref, XFA_AttributeType::CData, nullptr},
     {XFA_Attribute::Locale, XFA_AttributeType::CData, nullptr},
     {XFA_Attribute::AnchorType, XFA_AttributeType::Enum,
-     (void*)XFA_AttributeEnum::TopLeft},
+     (void*)XFA_AttributeValue::TopLeft},
     {XFA_Attribute::AccessKey, XFA_AttributeType::CData, nullptr},
     {XFA_Attribute::Unknown, XFA_AttributeType::Integer, nullptr}};
 
diff --git a/xfa/fxfa/parser/cxfa_fill.cpp b/xfa/fxfa/parser/cxfa_fill.cpp
index 019bd1f..cd84ef9 100644
--- a/xfa/fxfa/parser/cxfa_fill.cpp
+++ b/xfa/fxfa/parser/cxfa_fill.cpp
@@ -31,7 +31,7 @@
     {XFA_Attribute::Id, XFA_AttributeType::CData, nullptr},
     {XFA_Attribute::Use, XFA_AttributeType::CData, nullptr},
     {XFA_Attribute::Presence, XFA_AttributeType::Enum,
-     (void*)XFA_AttributeEnum::Visible},
+     (void*)XFA_AttributeValue::Visible},
     {XFA_Attribute::Usehref, XFA_AttributeType::CData, nullptr},
     {XFA_Attribute::Unknown, XFA_AttributeType::Integer, nullptr}};
 
@@ -55,8 +55,8 @@
 bool CXFA_Fill::IsVisible() {
   return JSObject()
              ->TryEnum(XFA_Attribute::Presence, true)
-             .value_or(XFA_AttributeEnum::Visible) ==
-         XFA_AttributeEnum::Visible;
+             .value_or(XFA_AttributeValue::Visible) ==
+         XFA_AttributeValue::Visible;
 }
 
 void CXFA_Fill::SetColor(FX_ARGB color) {
diff --git a/xfa/fxfa/parser/cxfa_font.cpp b/xfa/fxfa/parser/cxfa_font.cpp
index 653ef06..42e7e17 100644
--- a/xfa/fxfa/parser/cxfa_font.cpp
+++ b/xfa/fxfa/parser/cxfa_font.cpp
@@ -25,28 +25,28 @@
      (void*)L"100%"},
     {XFA_Attribute::Use, XFA_AttributeType::CData, nullptr},
     {XFA_Attribute::KerningMode, XFA_AttributeType::Enum,
-     (void*)XFA_AttributeEnum::None},
+     (void*)XFA_AttributeValue::None},
     {XFA_Attribute::Underline, XFA_AttributeType::Integer, (void*)0},
     {XFA_Attribute::BaselineShift, XFA_AttributeType::Measure, (void*)L"0in"},
     {XFA_Attribute::OverlinePeriod, XFA_AttributeType::Enum,
-     (void*)XFA_AttributeEnum::All},
+     (void*)XFA_AttributeValue::All},
     {XFA_Attribute::LetterSpacing, XFA_AttributeType::CData, nullptr},
     {XFA_Attribute::LineThroughPeriod, XFA_AttributeType::Enum,
-     (void*)XFA_AttributeEnum::All},
+     (void*)XFA_AttributeValue::All},
     {XFA_Attribute::FontVerticalScale, XFA_AttributeType::CData,
      (void*)L"100%"},
     {XFA_Attribute::PsName, XFA_AttributeType::CData, nullptr},
     {XFA_Attribute::Size, XFA_AttributeType::Measure, (void*)L"10pt"},
     {XFA_Attribute::Posture, XFA_AttributeType::Enum,
-     (void*)XFA_AttributeEnum::Normal},
+     (void*)XFA_AttributeValue::Normal},
     {XFA_Attribute::Usehref, XFA_AttributeType::CData, nullptr},
     {XFA_Attribute::Weight, XFA_AttributeType::Enum,
-     (void*)XFA_AttributeEnum::Normal},
+     (void*)XFA_AttributeValue::Normal},
     {XFA_Attribute::UnderlinePeriod, XFA_AttributeType::Enum,
-     (void*)XFA_AttributeEnum::All},
+     (void*)XFA_AttributeValue::All},
     {XFA_Attribute::Overline, XFA_AttributeType::Integer, (void*)0},
     {XFA_Attribute::GenericFamily, XFA_AttributeType::Enum,
-     (void*)XFA_AttributeEnum::Serif},
+     (void*)XFA_AttributeValue::Serif},
     {XFA_Attribute::Unknown, XFA_AttributeType::Integer, nullptr}};
 
 constexpr wchar_t kFontName[] = L"font";
@@ -101,10 +101,10 @@
   return JSObject()->GetInteger(XFA_Attribute::Underline);
 }
 
-XFA_AttributeEnum CXFA_Font::GetUnderlinePeriod() {
+XFA_AttributeValue CXFA_Font::GetUnderlinePeriod() {
   return JSObject()
       ->TryEnum(XFA_Attribute::UnderlinePeriod, true)
-      .value_or(XFA_AttributeEnum::All);
+      .value_or(XFA_AttributeValue::All);
 }
 
 float CXFA_Font::GetFontSize() const {
@@ -116,12 +116,12 @@
 }
 
 bool CXFA_Font::IsBold() {
-  return JSObject()->GetEnum(XFA_Attribute::Weight) == XFA_AttributeEnum::Bold;
+  return JSObject()->GetEnum(XFA_Attribute::Weight) == XFA_AttributeValue::Bold;
 }
 
 bool CXFA_Font::IsItalic() {
   return JSObject()->GetEnum(XFA_Attribute::Posture) ==
-         XFA_AttributeEnum::Italic;
+         XFA_AttributeValue::Italic;
 }
 
 void CXFA_Font::SetColor(FX_ARGB color) {
diff --git a/xfa/fxfa/parser/cxfa_font.h b/xfa/fxfa/parser/cxfa_font.h
index fb80a32..e292ed5 100644
--- a/xfa/fxfa/parser/cxfa_font.h
+++ b/xfa/fxfa/parser/cxfa_font.h
@@ -21,7 +21,7 @@
   float GetLetterSpacing();
   int32_t GetLineThrough();
   int32_t GetUnderline();
-  XFA_AttributeEnum GetUnderlinePeriod();
+  XFA_AttributeValue GetUnderlinePeriod();
   float GetFontSize() const;
   WideString GetTypeface();
 
diff --git a/xfa/fxfa/parser/cxfa_handler.cpp b/xfa/fxfa/parser/cxfa_handler.cpp
index f16717b..7877941 100644
--- a/xfa/fxfa/parser/cxfa_handler.cpp
+++ b/xfa/fxfa/parser/cxfa_handler.cpp
@@ -15,7 +15,7 @@
     {XFA_Attribute::Id, XFA_AttributeType::CData, nullptr},
     {XFA_Attribute::Use, XFA_AttributeType::CData, nullptr},
     {XFA_Attribute::Type, XFA_AttributeType::Enum,
-     (void*)XFA_AttributeEnum::Optional},
+     (void*)XFA_AttributeValue::Optional},
     {XFA_Attribute::Usehref, XFA_AttributeType::CData, nullptr},
     {XFA_Attribute::Unknown, XFA_AttributeType::Integer, nullptr}};
 
diff --git a/xfa/fxfa/parser/cxfa_image.cpp b/xfa/fxfa/parser/cxfa_image.cpp
index a91dcd2..c67bf3e 100644
--- a/xfa/fxfa/parser/cxfa_image.cpp
+++ b/xfa/fxfa/parser/cxfa_image.cpp
@@ -16,10 +16,10 @@
     {XFA_Attribute::Use, XFA_AttributeType::CData, nullptr},
     {XFA_Attribute::ContentType, XFA_AttributeType::CData, nullptr},
     {XFA_Attribute::TransferEncoding, XFA_AttributeType::Enum,
-     (void*)XFA_AttributeEnum::Base64},
+     (void*)XFA_AttributeValue::Base64},
     {XFA_Attribute::Usehref, XFA_AttributeType::CData, nullptr},
     {XFA_Attribute::Aspect, XFA_AttributeType::Enum,
-     (void*)XFA_AttributeEnum::Fit},
+     (void*)XFA_AttributeValue::Fit},
     {XFA_Attribute::Href, XFA_AttributeType::CData, nullptr},
     {XFA_Attribute::Unknown, XFA_AttributeType::Integer, nullptr}};
 
@@ -39,7 +39,7 @@
 
 CXFA_Image::~CXFA_Image() {}
 
-XFA_AttributeEnum CXFA_Image::GetAspect() {
+XFA_AttributeValue CXFA_Image::GetAspect() {
   return JSObject()->GetEnum(XFA_Attribute::Aspect);
 }
 
@@ -51,8 +51,8 @@
   return JSObject()->TryCData(XFA_Attribute::Href, true).value_or(L"");
 }
 
-XFA_AttributeEnum CXFA_Image::GetTransferEncoding() {
-  return static_cast<XFA_AttributeEnum>(
+XFA_AttributeValue CXFA_Image::GetTransferEncoding() {
+  return static_cast<XFA_AttributeValue>(
       JSObject()->GetEnum(XFA_Attribute::TransferEncoding));
 }
 
@@ -68,7 +68,7 @@
   JSObject()->SetCData(XFA_Attribute::Href, wsHref, false, false);
 }
 
-void CXFA_Image::SetTransferEncoding(XFA_AttributeEnum iTransferEncoding) {
+void CXFA_Image::SetTransferEncoding(XFA_AttributeValue iTransferEncoding) {
   JSObject()->SetEnum(XFA_Attribute::TransferEncoding, iTransferEncoding,
                       false);
 }
diff --git a/xfa/fxfa/parser/cxfa_image.h b/xfa/fxfa/parser/cxfa_image.h
index 01f12eb..62bb93a 100644
--- a/xfa/fxfa/parser/cxfa_image.h
+++ b/xfa/fxfa/parser/cxfa_image.h
@@ -14,14 +14,14 @@
   CXFA_Image(CXFA_Document* doc, XFA_PacketType packet);
   ~CXFA_Image() override;
 
-  XFA_AttributeEnum GetAspect();
+  XFA_AttributeValue GetAspect();
   WideString GetContent();
 
   WideString GetHref();
   void SetHref(const WideString& wsHref);
 
-  XFA_AttributeEnum GetTransferEncoding();
-  void SetTransferEncoding(XFA_AttributeEnum iTransferEncoding);
+  XFA_AttributeValue GetTransferEncoding();
+  void SetTransferEncoding(XFA_AttributeValue iTransferEncoding);
 
   WideString GetContentType();
   void SetContentType(const WideString& wsContentType);
diff --git a/xfa/fxfa/parser/cxfa_imageedit.cpp b/xfa/fxfa/parser/cxfa_imageedit.cpp
index 0cc10d0..cd660f1 100644
--- a/xfa/fxfa/parser/cxfa_imageedit.cpp
+++ b/xfa/fxfa/parser/cxfa_imageedit.cpp
@@ -21,7 +21,7 @@
     {XFA_Attribute::Use, XFA_AttributeType::CData, nullptr},
     {XFA_Attribute::Usehref, XFA_AttributeType::CData, nullptr},
     {XFA_Attribute::Data, XFA_AttributeType::Enum,
-     (void*)XFA_AttributeEnum::Link},
+     (void*)XFA_AttributeValue::Link},
     {XFA_Attribute::Unknown, XFA_AttributeType::Integer, nullptr}};
 
 constexpr wchar_t kImageEditName[] = L"imageEdit";
diff --git a/xfa/fxfa/parser/cxfa_issuers.cpp b/xfa/fxfa/parser/cxfa_issuers.cpp
index 8c2cd0b..dda1aa5 100644
--- a/xfa/fxfa/parser/cxfa_issuers.cpp
+++ b/xfa/fxfa/parser/cxfa_issuers.cpp
@@ -15,7 +15,7 @@
     {XFA_Attribute::Id, XFA_AttributeType::CData, nullptr},
     {XFA_Attribute::Use, XFA_AttributeType::CData, nullptr},
     {XFA_Attribute::Type, XFA_AttributeType::Enum,
-     (void*)XFA_AttributeEnum::Optional},
+     (void*)XFA_AttributeValue::Optional},
     {XFA_Attribute::Usehref, XFA_AttributeType::CData, nullptr},
     {XFA_Attribute::Unknown, XFA_AttributeType::Integer, nullptr}};
 
diff --git a/xfa/fxfa/parser/cxfa_itemlayoutprocessor.cpp b/xfa/fxfa/parser/cxfa_itemlayoutprocessor.cpp
index e09b17d..b0b6800 100644
--- a/xfa/fxfa/parser/cxfa_itemlayoutprocessor.cpp
+++ b/xfa/fxfa/parser/cxfa_itemlayoutprocessor.cpp
@@ -173,7 +173,7 @@
 
 void RelocateTableRowCells(CXFA_ContentLayoutItem* pLayoutRow,
                            const std::vector<float>& rgSpecifiedColumnWidths,
-                           XFA_AttributeEnum eLayout) {
+                           XFA_AttributeValue eLayout) {
   bool bContainerWidthAutoSize = true;
   bool bContainerHeightAutoSize = true;
   CFX_SizeF containerSize = CalculateContainerSpecifiedSize(
@@ -272,15 +272,15 @@
               XFA_Element::Para);
       if (pParaNode && pLayoutChild->m_pFirstChild) {
         float fOffHeight = fContentCalculatedHeight - fOldChildHeight;
-        XFA_AttributeEnum eVType =
+        XFA_AttributeValue eVType =
             pParaNode->JSObject()->GetEnum(XFA_Attribute::VAlign);
         switch (eVType) {
-          case XFA_AttributeEnum::Middle:
+          case XFA_AttributeValue::Middle:
             fOffHeight = fOffHeight / 2;
             break;
-          case XFA_AttributeEnum::Bottom:
+          case XFA_AttributeValue::Bottom:
             break;
-          case XFA_AttributeEnum::Top:
+          case XFA_AttributeValue::Top:
           default:
             fOffHeight = 0;
             break;
@@ -313,7 +313,7 @@
   }
 
   if (pLayoutRow->GetFormNode()->JSObject()->GetEnum(XFA_Attribute::Layout) ==
-      XFA_AttributeEnum::Rl_row) {
+      XFA_AttributeValue::Rl_row) {
     for (CXFA_LayoutItem* pIter = pLayoutRow->m_pFirstChild; pIter;
          pIter = pIter->m_pNextSibling) {
       CXFA_ContentLayoutItem* pLayoutChild = pIter->AsContentLayoutItem();
@@ -331,9 +331,9 @@
       fContentCalculatedHeight, containerSize);
 }
 
-XFA_AttributeEnum GetLayout(CXFA_Node* pFormNode, bool* bRootForceTb) {
+XFA_AttributeValue GetLayout(CXFA_Node* pFormNode, bool* bRootForceTb) {
   *bRootForceTb = false;
-  Optional<XFA_AttributeEnum> layoutMode =
+  Optional<XFA_AttributeValue> layoutMode =
       pFormNode->JSObject()->TryEnum(XFA_Attribute::Layout, false);
   if (layoutMode)
     return *layoutMode;
@@ -341,9 +341,9 @@
   CXFA_Node* pParentNode = pFormNode->GetParent();
   if (pParentNode && pParentNode->GetElementType() == XFA_Element::Form) {
     *bRootForceTb = true;
-    return XFA_AttributeEnum::Tb;
+    return XFA_AttributeValue::Tb;
   }
-  return XFA_AttributeEnum::Position;
+  return XFA_AttributeValue::Position;
 }
 
 bool ExistContainerKeep(CXFA_Node* pCurNode, bool bPreFind) {
@@ -362,11 +362,11 @@
     if (!bPreFind)
       eKeepType = XFA_Attribute::Next;
 
-    Optional<XFA_AttributeEnum> previous =
+    Optional<XFA_AttributeValue> previous =
         pKeep->JSObject()->TryEnum(eKeepType, false);
     if (previous) {
-      if (*previous == XFA_AttributeEnum::ContentArea ||
-          *previous == XFA_AttributeEnum::PageArea) {
+      if (*previous == XFA_AttributeValue::ContentArea ||
+          *previous == XFA_AttributeValue::PageArea) {
         return true;
       }
     }
@@ -380,12 +380,12 @@
   if (!bPreFind)
     eKeepType = XFA_Attribute::Previous;
 
-  Optional<XFA_AttributeEnum> next =
+  Optional<XFA_AttributeValue> next =
       pKeep->JSObject()->TryEnum(eKeepType, false);
   if (!next)
     return false;
-  if (*next == XFA_AttributeEnum::ContentArea ||
-      *next == XFA_AttributeEnum::PageArea) {
+  if (*next == XFA_AttributeValue::ContentArea ||
+      *next == XFA_AttributeValue::PageArea) {
     return true;
   }
   return false;
@@ -421,7 +421,7 @@
       }
       case XFA_Element::Break:
         if (pBreakNode->JSObject()->GetEnum(eAttributeType) !=
-            XFA_AttributeEnum::Auto) {
+            XFA_AttributeValue::Auto) {
           pCurActionNode = pBreakNode;
           *nCurStage = XFA_ItemLayoutProcessorStages::BreakBefore;
           if (!bBreakBefore)
@@ -458,13 +458,13 @@
   pGenerateNode->GetParent()->RemoveChild(pGenerateNode, true);
 }
 
-uint8_t HAlignEnumToInt(XFA_AttributeEnum eHAlign) {
+uint8_t HAlignEnumToInt(XFA_AttributeValue eHAlign) {
   switch (eHAlign) {
-    case XFA_AttributeEnum::Center:
+    case XFA_AttributeValue::Center:
       return 1;
-    case XFA_AttributeEnum::Right:
+    case XFA_AttributeValue::Right:
       return 2;
-    case XFA_AttributeEnum::Left:
+    case XFA_AttributeValue::Left:
     default:
       return 0;
   }
@@ -483,7 +483,7 @@
   }
 
   switch (pFormNode->GetIntact()) {
-    case XFA_AttributeEnum::None: {
+    case XFA_AttributeValue::None: {
       bool bAnyChanged = false;
       CXFA_Document* pDocument = pFormNode->GetDocument();
       CXFA_FFNotify* pNotify = pDocument->GetNotify();
@@ -546,8 +546,8 @@
       }
       return bAnyChanged;
     }
-    case XFA_AttributeEnum::ContentArea:
-    case XFA_AttributeEnum::PageArea: {
+    case XFA_AttributeValue::ContentArea:
+    case XFA_AttributeValue::PageArea: {
       *fProposedSplitPos = fCurVerticalOffset;
       return true;
     }
@@ -558,35 +558,35 @@
 
 CFX_PointF CalculatePositionedContainerPos(CXFA_Node* pNode,
                                            const CFX_SizeF& size) {
-  XFA_AttributeEnum eAnchorType =
+  XFA_AttributeValue eAnchorType =
       pNode->JSObject()->GetEnum(XFA_Attribute::AnchorType);
   int32_t nAnchorType = 0;
   switch (eAnchorType) {
-    case XFA_AttributeEnum::TopLeft:
+    case XFA_AttributeValue::TopLeft:
       nAnchorType = 0;
       break;
-    case XFA_AttributeEnum::TopCenter:
+    case XFA_AttributeValue::TopCenter:
       nAnchorType = 1;
       break;
-    case XFA_AttributeEnum::TopRight:
+    case XFA_AttributeValue::TopRight:
       nAnchorType = 2;
       break;
-    case XFA_AttributeEnum::MiddleLeft:
+    case XFA_AttributeValue::MiddleLeft:
       nAnchorType = 3;
       break;
-    case XFA_AttributeEnum::MiddleCenter:
+    case XFA_AttributeValue::MiddleCenter:
       nAnchorType = 4;
       break;
-    case XFA_AttributeEnum::MiddleRight:
+    case XFA_AttributeValue::MiddleRight:
       nAnchorType = 5;
       break;
-    case XFA_AttributeEnum::BottomLeft:
+    case XFA_AttributeValue::BottomLeft:
       nAnchorType = 6;
       break;
-    case XFA_AttributeEnum::BottomCenter:
+    case XFA_AttributeValue::BottomCenter:
       nAnchorType = 7;
       break;
-    case XFA_AttributeEnum::BottomRight:
+    case XFA_AttributeValue::BottomRight:
       nAnchorType = 8;
       break;
     default:
@@ -672,11 +672,11 @@
 
 float CXFA_ItemLayoutProcessor::FindSplitPos(float fProposedSplitPos) {
   ASSERT(m_pLayoutItem);
-  XFA_AttributeEnum eLayout = GetFormNode()
-                                  ->JSObject()
-                                  ->TryEnum(XFA_Attribute::Layout, true)
-                                  .value_or(XFA_AttributeEnum::Position);
-  bool bCalculateMargin = eLayout != XFA_AttributeEnum::Position;
+  XFA_AttributeValue eLayout = GetFormNode()
+                                   ->JSObject()
+                                   ->TryEnum(XFA_Attribute::Layout, true)
+                                   .value_or(XFA_AttributeValue::Position);
+  bool bCalculateMargin = eLayout != XFA_AttributeValue::Position;
   while (fProposedSplitPos > XFA_LAYOUT_FLOAT_PERCISION) {
     bool bAppChange = false;
     if (!FindLayoutItemSplitPos(m_pLayoutItem, 0, &fProposedSplitPos,
@@ -692,12 +692,12 @@
     CXFA_ContentLayoutItem* pSecondParent,
     float fSplitPos) {
   float fCurTopMargin = 0, fCurBottomMargin = 0;
-  XFA_AttributeEnum eLayout = GetFormNode()
-                                  ->JSObject()
-                                  ->TryEnum(XFA_Attribute::Layout, true)
-                                  .value_or(XFA_AttributeEnum::Position);
+  XFA_AttributeValue eLayout = GetFormNode()
+                                   ->JSObject()
+                                   ->TryEnum(XFA_Attribute::Layout, true)
+                                   .value_or(XFA_AttributeValue::Position);
   bool bCalculateMargin = true;
-  if (eLayout == XFA_AttributeEnum::Position)
+  if (eLayout == XFA_AttributeValue::Position)
     bCalculateMargin = false;
 
   CXFA_Margin* pMarginNode =
@@ -1008,7 +1008,8 @@
     XFA_ItemLayoutProcessorStages* nCurStage,
     CXFA_Node*& pNextContainer,
     bool& bLastKeepNode) {
-  const bool bCanSplit = pNextContainer->GetIntact() == XFA_AttributeEnum::None;
+  const bool bCanSplit =
+      pNextContainer->GetIntact() == XFA_AttributeValue::None;
   bool bNextKeep = false;
   if (ExistContainerKeep(pNextContainer, false))
     bNextKeep = true;
@@ -1125,8 +1126,8 @@
   bool bIgnoreXY = (GetFormNode()
                         ->JSObject()
                         ->TryEnum(XFA_Attribute::Layout, true)
-                        .value_or(XFA_AttributeEnum::Position) !=
-                    XFA_AttributeEnum::Position);
+                        .value_or(XFA_AttributeValue::Position) !=
+                    XFA_AttributeValue::Position);
   bool bContainerWidthAutoSize = true;
   bool bContainerHeightAutoSize = true;
   CFX_SizeF containerSize = CalculateContainerSpecifiedSize(
@@ -1315,11 +1316,11 @@
       if (!pLayoutChild->GetFormNode()->PresenceRequiresSpace())
         continue;
 
-      XFA_AttributeEnum eLayout =
+      XFA_AttributeValue eLayout =
           pLayoutChild->GetFormNode()->JSObject()->GetEnum(
               XFA_Attribute::Layout);
-      if (eLayout != XFA_AttributeEnum::Row &&
-          eLayout != XFA_AttributeEnum::Rl_row) {
+      if (eLayout != XFA_AttributeValue::Row &&
+          eLayout != XFA_AttributeValue::Rl_row) {
         continue;
       }
       CXFA_ContentLayoutItem* pRowLayoutCell =
@@ -1407,11 +1408,11 @@
       continue;
 
     if (pLayoutChild->GetFormNode()->GetElementType() == XFA_Element::Subform) {
-      XFA_AttributeEnum eSubformLayout =
+      XFA_AttributeValue eSubformLayout =
           pLayoutChild->GetFormNode()->JSObject()->GetEnum(
               XFA_Attribute::Layout);
-      if (eSubformLayout == XFA_AttributeEnum::Row ||
-          eSubformLayout == XFA_AttributeEnum::Rl_row) {
+      if (eSubformLayout == XFA_AttributeValue::Row ||
+          eSubformLayout == XFA_AttributeValue::Rl_row) {
         RelocateTableRowCells(pLayoutChild, m_rgSpecifiedColumnWidths,
                               eSubformLayout);
       }
@@ -1423,15 +1424,15 @@
     } else {
       switch (pLayoutChild->GetFormNode()->JSObject()->GetEnum(
           XFA_Attribute::HAlign)) {
-        case XFA_AttributeEnum::Center:
+        case XFA_AttributeValue::Center:
           pLayoutChild->m_sPos.x =
               (fContentWidthLimit - pLayoutChild->m_sSize.width) / 2;
           break;
-        case XFA_AttributeEnum::Right:
+        case XFA_AttributeValue::Right:
           pLayoutChild->m_sPos.x =
               fContentWidthLimit - pLayoutChild->m_sSize.width;
           break;
-        case XFA_AttributeEnum::Left:
+        case XFA_AttributeValue::Left:
         default:
           pLayoutChild->m_sPos.x = 0;
           break;
@@ -1466,9 +1467,9 @@
     return false;
 
   float fWidth = pTrailerItem->m_sSize.width;
-  XFA_AttributeEnum eLayout =
+  XFA_AttributeValue eLayout =
       GetFormNode()->JSObject()->GetEnum(XFA_Attribute::Layout);
-  return eLayout == XFA_AttributeEnum::Tb || m_fWidthLimite <= fWidth;
+  return eLayout == XFA_AttributeValue::Tb || m_fWidthLimite <= fWidth;
 }
 
 float CXFA_ItemLayoutProcessor::InsertKeepLayoutItems() {
@@ -1504,7 +1505,7 @@
   if (!pChildProcessor)
     return false;
 
-  if (m_pCurChildNode->GetIntact() == XFA_AttributeEnum::None &&
+  if (m_pCurChildNode->GetIntact() == XFA_AttributeValue::None &&
       pChildProcessor->m_bHasAvailHeight)
     return false;
 
@@ -1604,7 +1605,7 @@
 
 XFA_ItemLayoutProcessorResult CXFA_ItemLayoutProcessor::DoLayoutFlowedContainer(
     bool bUseBreakControl,
-    XFA_AttributeEnum eFlowStrategy,
+    XFA_AttributeValue eFlowStrategy,
     float fHeightLimit,
     float fRealHeight,
     CXFA_LayoutContext* pContext,
@@ -1633,7 +1634,7 @@
     CXFA_Node* pParentNode = GetFormNode()->GetParent();
     bool bFocrTb = false;
     if (pParentNode &&
-        GetLayout(pParentNode, &bFocrTb) == XFA_AttributeEnum::Row) {
+        GetLayout(pParentNode, &bFocrTb) == XFA_AttributeValue::Row) {
       CXFA_Node* pChildContainer = GetFormNode()->GetFirstContainerChild();
       if (pChildContainer && pChildContainer->GetNextContainerSibling()) {
         containerSize.height = 0;
@@ -1676,7 +1677,7 @@
   CXFA_ContentLayoutItem* pLayoutChild = nullptr;
   if (m_pLayoutItem) {
     if (m_nCurChildNodeStage != XFA_ItemLayoutProcessorStages::Done &&
-        eFlowStrategy != XFA_AttributeEnum::Tb) {
+        eFlowStrategy != XFA_AttributeValue::Tb) {
       pLayoutChild = ToContentLayoutItem(m_pLayoutItem->m_pFirstChild);
       for (CXFA_LayoutItem* pLayoutNext = pLayoutChild; pLayoutNext;
            pLayoutNext = pLayoutNext->m_pNextSibling) {
@@ -1735,7 +1736,7 @@
     m_fWidthLimite = fContentCurRowAvailWidth;
     std::vector<CXFA_ContentLayoutItem*> rgCurLineLayoutItems[3];
     uint8_t uCurHAlignState =
-        (eFlowStrategy != XFA_AttributeEnum::Rl_tb ? 0 : 2);
+        (eFlowStrategy != XFA_AttributeValue::Rl_tb ? 0 : 2);
     if (pLayoutChild) {
       for (CXFA_LayoutItem* pNext = pLayoutChild; pNext;
            pNext = pNext->m_pNextSibling) {
@@ -1753,7 +1754,7 @@
             HAlignEnumToInt(pLayoutNext->GetFormNode()->JSObject()->GetEnum(
                 XFA_Attribute::HAlign));
         rgCurLineLayoutItems[uHAlign].push_back(pLayoutNext);
-        if (eFlowStrategy == XFA_AttributeEnum::Lr_tb) {
+        if (eFlowStrategy == XFA_AttributeValue::Lr_tb) {
           if (uHAlign > uCurHAlignState)
             uCurHAlignState = uHAlign;
         } else if (uHAlign < uCurHAlignState) {
@@ -2011,7 +2012,7 @@
       }
       GotoNextContainerNode(m_pCurChildNode, &m_nCurChildNodeStage,
                             GetFormNode(), true);
-      if (bAddedItemInRow && eFlowStrategy == XFA_AttributeEnum::Tb)
+      if (bAddedItemInRow && eFlowStrategy == XFA_AttributeValue::Tb)
         break;
       continue;
     SuspendAndCreateNewRow:
@@ -2061,7 +2062,7 @@
 
 bool CXFA_ItemLayoutProcessor::CalculateRowChildPosition(
     std::vector<CXFA_ContentLayoutItem*> (&rgCurLineLayoutItems)[3],
-    XFA_AttributeEnum eFlowStrategy,
+    XFA_AttributeValue eFlowStrategy,
     bool bContainerHeightAutoSize,
     bool bContainerWidthAutoSize,
     float* fContentCalculatedWidth,
@@ -2091,7 +2092,7 @@
   if (!m_pLayoutItem)
     m_pLayoutItem = CreateContentLayoutItem(GetFormNode());
 
-  if (eFlowStrategy != XFA_AttributeEnum::Rl_tb) {
+  if (eFlowStrategy != XFA_AttributeValue::Rl_tb) {
     float fCurPos;
     fCurPos = 0;
     for (int32_t c = nGroupLengths[0], j = 0; j < c; j++) {
@@ -2240,22 +2241,23 @@
     case XFA_Element::SubformSet: {
       bool bRootForceTb = false;
       CXFA_Node* pLayoutNode = GetSubformSetParent(GetFormNode());
-      XFA_AttributeEnum eLayoutStrategy = GetLayout(pLayoutNode, &bRootForceTb);
+      XFA_AttributeValue eLayoutStrategy =
+          GetLayout(pLayoutNode, &bRootForceTb);
       switch (eLayoutStrategy) {
-        case XFA_AttributeEnum::Tb:
-        case XFA_AttributeEnum::Lr_tb:
-        case XFA_AttributeEnum::Rl_tb:
+        case XFA_AttributeValue::Tb:
+        case XFA_AttributeValue::Lr_tb:
+        case XFA_AttributeValue::Rl_tb:
           return DoLayoutFlowedContainer(bUseBreakControl, eLayoutStrategy,
                                          fHeightLimit, fRealHeight, pContext,
                                          bRootForceTb);
-        case XFA_AttributeEnum::Position:
-        case XFA_AttributeEnum::Row:
-        case XFA_AttributeEnum::Rl_row:
+        case XFA_AttributeValue::Position:
+        case XFA_AttributeValue::Row:
+        case XFA_AttributeValue::Rl_row:
         default:
           DoLayoutPositionedContainer(pContext);
           m_nCurChildNodeStage = XFA_ItemLayoutProcessorStages::Done;
           return XFA_ItemLayoutProcessorResult::Done;
-        case XFA_AttributeEnum::Table:
+        case XFA_AttributeValue::Table:
           DoLayoutTableContainer(pLayoutNode);
           m_nCurChildNodeStage = XFA_ItemLayoutProcessorStages::Done;
           return XFA_ItemLayoutProcessorResult::Done;
@@ -2309,11 +2311,11 @@
 
 void CXFA_ItemLayoutProcessor::UpdatePendingItemLayout(
     CXFA_ContentLayoutItem* pLayoutItem) {
-  XFA_AttributeEnum eLayout =
+  XFA_AttributeValue eLayout =
       pLayoutItem->GetFormNode()->JSObject()->GetEnum(XFA_Attribute::Layout);
   switch (eLayout) {
-    case XFA_AttributeEnum::Row:
-    case XFA_AttributeEnum::Rl_row:
+    case XFA_AttributeValue::Row:
+    case XFA_AttributeValue::Rl_row:
       RelocateTableRowCells(pLayoutItem, m_rgSpecifiedColumnWidths, eLayout);
       break;
     default:
@@ -2381,18 +2383,18 @@
 
   switch (pTrailerLayoutItem->GetFormNode()->JSObject()->GetEnum(
       XFA_Attribute::HAlign)) {
-    case XFA_AttributeEnum::Right:
+    case XFA_AttributeValue::Right:
       pTrailerLayoutItem->m_sPos.x = m_pLayoutItem->m_sSize.width -
                                      fRightInset -
                                      pTrailerLayoutItem->m_sSize.width;
       break;
-    case XFA_AttributeEnum::Center:
+    case XFA_AttributeValue::Center:
       pTrailerLayoutItem->m_sPos.x =
           (m_pLayoutItem->m_sSize.width - fLeftInset - fRightInset -
            pTrailerLayoutItem->m_sSize.width) /
           2;
       break;
-    case XFA_AttributeEnum::Left:
+    case XFA_AttributeValue::Left:
     default:
       pTrailerLayoutItem->m_sPos.x = fLeftInset;
       break;
@@ -2431,17 +2433,17 @@
 
   switch (pLeaderLayoutItem->GetFormNode()->JSObject()->GetEnum(
       XFA_Attribute::HAlign)) {
-    case XFA_AttributeEnum::Right:
+    case XFA_AttributeValue::Right:
       pLeaderLayoutItem->m_sPos.x = m_pLayoutItem->m_sSize.width - fRightInset -
                                     pLeaderLayoutItem->m_sSize.width;
       break;
-    case XFA_AttributeEnum::Center:
+    case XFA_AttributeValue::Center:
       pLeaderLayoutItem->m_sPos.x =
           (m_pLayoutItem->m_sSize.width - fLeftInset - fRightInset -
            pLeaderLayoutItem->m_sSize.width) /
           2;
       break;
-    case XFA_AttributeEnum::Left:
+    case XFA_AttributeValue::Left:
     default:
       pLeaderLayoutItem->m_sPos.x = fLeftInset;
       break;
@@ -2489,7 +2491,7 @@
     bool bContainerWidthAutoSize,
     bool bContainerHeightAutoSize,
     float fContainerHeight,
-    XFA_AttributeEnum eFlowStrategy,
+    XFA_AttributeValue eFlowStrategy,
     uint8_t* uCurHAlignState,
     std::vector<CXFA_ContentLayoutItem*> (&rgCurLineLayoutItems)[3],
     bool bUseBreakControl,
@@ -2509,26 +2511,26 @@
   if (bContainerWidthAutoSize)
     uHAlign = 0;
 
-  if ((eFlowStrategy != XFA_AttributeEnum::Rl_tb &&
+  if ((eFlowStrategy != XFA_AttributeValue::Rl_tb &&
        uHAlign < *uCurHAlignState) ||
-      (eFlowStrategy == XFA_AttributeEnum::Rl_tb &&
+      (eFlowStrategy == XFA_AttributeValue::Rl_tb &&
        uHAlign > *uCurHAlignState)) {
     return XFA_ItemLayoutProcessorResult::RowFullBreak;
   }
 
   *uCurHAlignState = uHAlign;
   bool bIsOwnSplit =
-      pProcessor->GetFormNode()->GetIntact() == XFA_AttributeEnum::None;
+      pProcessor->GetFormNode()->GetIntact() == XFA_AttributeValue::None;
   bool bUseRealHeight = bTakeSpace && bContainerHeightAutoSize && bIsOwnSplit &&
                         pProcessor->GetFormNode()->GetParent()->GetIntact() ==
-                            XFA_AttributeEnum::None;
+                            XFA_AttributeValue::None;
   bool bIsTransHeight = bTakeSpace;
   if (bIsTransHeight && !bIsOwnSplit) {
     bool bRootForceTb = false;
-    XFA_AttributeEnum eLayoutStrategy =
+    XFA_AttributeValue eLayoutStrategy =
         GetLayout(pProcessor->GetFormNode(), &bRootForceTb);
-    if (eLayoutStrategy == XFA_AttributeEnum::Lr_tb ||
-        eLayoutStrategy == XFA_AttributeEnum::Rl_tb) {
+    if (eLayoutStrategy == XFA_AttributeValue::Lr_tb ||
+        eLayoutStrategy == XFA_AttributeValue::Rl_tb) {
       bIsTransHeight = false;
     }
   }
@@ -2579,7 +2581,7 @@
   CXFA_ContentLayoutItem* pTrailerLayoutItem = nullptr;
   bool bIsAddTrailerHeight = false;
   if (m_pPageMgr &&
-      pProcessor->GetFormNode()->GetIntact() == XFA_AttributeEnum::None) {
+      pProcessor->GetFormNode()->GetIntact() == XFA_AttributeValue::None) {
     pFormNode = m_pPageMgr->QueryOverflow(pProcessor->GetFormNode());
     if (!pFormNode && pLayoutContext && pLayoutContext->m_pOverflowProcessor) {
       pFormNode = pLayoutContext->m_pOverflowNode.Get();
@@ -2638,7 +2640,7 @@
       CXFA_ContentLayoutItem* pChildLayoutItem =
           pProcessor->ExtractLayoutItem();
       if (ExistContainerKeep(pProcessor->GetFormNode(), false) &&
-          pProcessor->GetFormNode()->GetIntact() == XFA_AttributeEnum::None) {
+          pProcessor->GetFormNode()->GetIntact() == XFA_AttributeValue::None) {
         m_arrayKeepItems.push_back(pChildLayoutItem);
       } else {
         m_arrayKeepItems.clear();
@@ -2690,9 +2692,9 @@
   *bForceEndPage = true;
   float fSplitPos = pProcessor->FindSplitPos(fAvailHeight - *fContentCurRowY);
   if (fSplitPos > XFA_LAYOUT_FLOAT_PERCISION) {
-    XFA_AttributeEnum eLayout =
+    XFA_AttributeValue eLayout =
         pProcessor->GetFormNode()->JSObject()->GetEnum(XFA_Attribute::Layout);
-    if (eLayout == XFA_AttributeEnum::Tb &&
+    if (eLayout == XFA_AttributeValue::Tb &&
         eRetValue == XFA_ItemLayoutProcessorResult::Done) {
       pProcessor->ProcessUnUseOverFlow(pOverflowLeaderNode,
                                        pOverflowTrailerNode, pTrailerLayoutItem,
@@ -2785,10 +2787,10 @@
     return eRetValue;
   }
 
-  XFA_AttributeEnum eLayout =
+  XFA_AttributeValue eLayout =
       pProcessor->GetFormNode()->JSObject()->GetEnum(XFA_Attribute::Layout);
-  if (pProcessor->GetFormNode()->GetIntact() == XFA_AttributeEnum::None &&
-      eLayout == XFA_AttributeEnum::Tb) {
+  if (pProcessor->GetFormNode()->GetIntact() == XFA_AttributeValue::None &&
+      eLayout == XFA_AttributeValue::Tb) {
     if (m_pPageMgr) {
       m_pPageMgr->ProcessOverflow(pFormNode, pOverflowLeaderNode,
                                   pOverflowTrailerNode, false, true);
diff --git a/xfa/fxfa/parser/cxfa_itemlayoutprocessor.h b/xfa/fxfa/parser/cxfa_itemlayoutprocessor.h
index d021ca3..70eb870 100644
--- a/xfa/fxfa/parser/cxfa_itemlayoutprocessor.h
+++ b/xfa/fxfa/parser/cxfa_itemlayoutprocessor.h
@@ -94,7 +94,7 @@
   float InsertKeepLayoutItems();
   bool CalculateRowChildPosition(
       std::vector<CXFA_ContentLayoutItem*> (&rgCurLineLayoutItems)[3],
-      XFA_AttributeEnum eFlowStrategy,
+      XFA_AttributeValue eFlowStrategy,
       bool bContainerHeightAutoSize,
       bool bContainerWidthAutoSize,
       float* fContentCalculatedWidth,
@@ -112,7 +112,7 @@
   void DoLayoutTableContainer(CXFA_Node* pLayoutNode);
   XFA_ItemLayoutProcessorResult DoLayoutFlowedContainer(
       bool bUseBreakControl,
-      XFA_AttributeEnum eFlowStrategy,
+      XFA_AttributeValue eFlowStrategy,
       float fHeightLimit,
       float fRealHeight,
       CXFA_LayoutContext* pContext,
@@ -147,7 +147,7 @@
       bool bContainerWidthAutoSize,
       bool bContainerHeightAutoSize,
       float fContainerHeight,
-      XFA_AttributeEnum eFlowStrategy,
+      XFA_AttributeValue eFlowStrategy,
       uint8_t* uCurHAlignState,
       std::vector<CXFA_ContentLayoutItem*> (&rgCurLineLayoutItems)[3],
       bool bUseBreakControl,
diff --git a/xfa/fxfa/parser/cxfa_items.cpp b/xfa/fxfa/parser/cxfa_items.cpp
index f72909c..ad2fe1d 100644
--- a/xfa/fxfa/parser/cxfa_items.cpp
+++ b/xfa/fxfa/parser/cxfa_items.cpp
@@ -17,7 +17,7 @@
     {XFA_Attribute::Ref, XFA_AttributeType::CData, nullptr},
     {XFA_Attribute::Use, XFA_AttributeType::CData, nullptr},
     {XFA_Attribute::Presence, XFA_AttributeType::Enum,
-     (void*)XFA_AttributeEnum::Visible},
+     (void*)XFA_AttributeValue::Visible},
     {XFA_Attribute::Save, XFA_AttributeType::Boolean, (void*)0},
     {XFA_Attribute::Usehref, XFA_AttributeType::CData, nullptr},
     {XFA_Attribute::Unknown, XFA_AttributeType::Integer, nullptr}};
diff --git a/xfa/fxfa/parser/cxfa_keep.cpp b/xfa/fxfa/parser/cxfa_keep.cpp
index 4d619da..e58fa2c 100644
--- a/xfa/fxfa/parser/cxfa_keep.cpp
+++ b/xfa/fxfa/parser/cxfa_keep.cpp
@@ -17,13 +17,13 @@
 const CXFA_Node::AttributeData kKeepAttributeData[] = {
     {XFA_Attribute::Id, XFA_AttributeType::CData, nullptr},
     {XFA_Attribute::Next, XFA_AttributeType::Enum,
-     (void*)XFA_AttributeEnum::None},
+     (void*)XFA_AttributeValue::None},
     {XFA_Attribute::Use, XFA_AttributeType::CData, nullptr},
     {XFA_Attribute::Previous, XFA_AttributeType::Enum,
-     (void*)XFA_AttributeEnum::None},
+     (void*)XFA_AttributeValue::None},
     {XFA_Attribute::Usehref, XFA_AttributeType::CData, nullptr},
     {XFA_Attribute::Intact, XFA_AttributeType::Enum,
-     (void*)XFA_AttributeEnum::None},
+     (void*)XFA_AttributeValue::None},
     {XFA_Attribute::Unknown, XFA_AttributeType::Integer, nullptr}};
 
 constexpr wchar_t kKeepName[] = L"keep";
diff --git a/xfa/fxfa/parser/cxfa_keyusage.cpp b/xfa/fxfa/parser/cxfa_keyusage.cpp
index ba73155..6f8ee25 100644
--- a/xfa/fxfa/parser/cxfa_keyusage.cpp
+++ b/xfa/fxfa/parser/cxfa_keyusage.cpp
@@ -17,7 +17,7 @@
     {XFA_Attribute::NonRepudiation, XFA_AttributeType::CData, nullptr},
     {XFA_Attribute::EncipherOnly, XFA_AttributeType::CData, nullptr},
     {XFA_Attribute::Type, XFA_AttributeType::Enum,
-     (void*)XFA_AttributeEnum::Optional},
+     (void*)XFA_AttributeValue::Optional},
     {XFA_Attribute::DigitalSignature, XFA_AttributeType::CData, nullptr},
     {XFA_Attribute::CrlSign, XFA_AttributeType::CData, nullptr},
     {XFA_Attribute::KeyAgreement, XFA_AttributeType::CData, nullptr},
diff --git a/xfa/fxfa/parser/cxfa_labelprinter.cpp b/xfa/fxfa/parser/cxfa_labelprinter.cpp
index 22f9248..fa2256d 100644
--- a/xfa/fxfa/parser/cxfa_labelprinter.cpp
+++ b/xfa/fxfa/parser/cxfa_labelprinter.cpp
@@ -16,7 +16,7 @@
     {XFA_Element::Unknown, 0, 0}};
 const CXFA_Node::AttributeData kLabelPrinterAttributeData[] = {
     {XFA_Attribute::Name, XFA_AttributeType::Enum,
-     (void*)XFA_AttributeEnum::Zpl},
+     (void*)XFA_AttributeValue::Zpl},
     {XFA_Attribute::Desc, XFA_AttributeType::CData, nullptr},
     {XFA_Attribute::Lock, XFA_AttributeType::Integer, (void*)0},
     {XFA_Attribute::Unknown, XFA_AttributeType::Integer, nullptr}};
diff --git a/xfa/fxfa/parser/cxfa_layoutpagemgr.cpp b/xfa/fxfa/parser/cxfa_layoutpagemgr.cpp
index e520684..e0814cc 100644
--- a/xfa/fxfa/parser/cxfa_layoutpagemgr.cpp
+++ b/xfa/fxfa/parser/cxfa_layoutpagemgr.cpp
@@ -107,12 +107,12 @@
   uint32_t dwStatus = 0;
   uint32_t dwRelevantContainer = 0;
   if (bVisible) {
-    XFA_AttributeEnum eAttributeValue =
+    XFA_AttributeValue eAttributeValue =
         pContainerItem->GetFormNode()
             ->JSObject()
             ->TryEnum(XFA_Attribute::Presence, true)
-            .value_or(XFA_AttributeEnum::Visible);
-    if (eAttributeValue == XFA_AttributeEnum::Visible)
+            .value_or(XFA_AttributeValue::Visible);
+    if (eAttributeValue == XFA_AttributeValue::Visible)
       bVisibleItem = true;
 
     dwRelevantContainer =
@@ -276,7 +276,7 @@
       m_pCurPageArea(nullptr),
       m_nAvailPages(0),
       m_nCurPageCount(0),
-      m_ePageSetMode(XFA_AttributeEnum::OrderedOccurrence),
+      m_ePageSetMode(XFA_AttributeValue::OrderedOccurrence),
       m_bCreateOverFlowPage(false) {}
 
 CXFA_LayoutPageMgr::~CXFA_LayoutPageMgr() {
@@ -312,9 +312,9 @@
   m_pPageSetCurRoot = m_pPageSetLayoutItemRoot;
   m_pTemplatePageSetRoot->JSObject()->SetLayoutItem(m_pPageSetLayoutItemRoot);
 
-  XFA_AttributeEnum eRelation =
+  XFA_AttributeValue eRelation =
       m_pTemplatePageSetRoot->JSObject()->GetEnum(XFA_Attribute::Relation);
-  if (eRelation != XFA_AttributeEnum::Unknown)
+  if (eRelation != XFA_AttributeValue::Unknown)
     m_ePageSetMode = eRelation;
 
   InitPageSetMap();
@@ -391,7 +391,7 @@
       if (eType == XFA_Element::BreakBefore ||
           (eType == XFA_Element::Break &&
            pBreakNode->JSObject()->GetEnum(XFA_Attribute::Before) !=
-               XFA_AttributeEnum::Auto)) {
+               XFA_AttributeValue::Auto)) {
         bProBreakBefore = true;
         pBreakBeforeNode = pBreakNode;
         break;
@@ -616,14 +616,14 @@
     PageSetIterator sIterator(pRootPageSetLayoutItem);
     for (CXFA_ContainerLayoutItem* pPageSetLayoutItem = sIterator.GetCurrent();
          pPageSetLayoutItem; pPageSetLayoutItem = sIterator.MoveToNext()) {
-      XFA_AttributeEnum ePageRelation =
+      XFA_AttributeValue ePageRelation =
           pPageSetLayoutItem->GetFormNode()->JSObject()->GetEnum(
               XFA_Attribute::Relation);
       switch (ePageRelation) {
-        case XFA_AttributeEnum::OrderedOccurrence:
+        case XFA_AttributeValue::OrderedOccurrence:
         default: { ProcessLastPageSet(); } break;
-        case XFA_AttributeEnum::SimplexPaginated:
-        case XFA_AttributeEnum::DuplexPaginated: {
+        case XFA_AttributeValue::SimplexPaginated:
+        case XFA_AttributeValue::DuplexPaginated: {
           CXFA_LayoutItem* pLastPageAreaLayoutItem = nullptr;
           int32_t nPageAreaCount = 0;
           for (CXFA_LayoutItem* pPageAreaLayoutItem =
@@ -643,26 +643,26 @@
           if (!FindPageAreaFromPageSet_SimplexDuplex(
                   pPageSetLayoutItem->GetFormNode(), nullptr, nullptr, nullptr,
                   true, true,
-                  nPageAreaCount == 1 ? XFA_AttributeEnum::Only
-                                      : XFA_AttributeEnum::Last) &&
+                  nPageAreaCount == 1 ? XFA_AttributeValue::Only
+                                      : XFA_AttributeValue::Last) &&
               (nPageAreaCount == 1 &&
                !FindPageAreaFromPageSet_SimplexDuplex(
                    pPageSetLayoutItem->GetFormNode(), nullptr, nullptr, nullptr,
-                   true, true, XFA_AttributeEnum::Last))) {
+                   true, true, XFA_AttributeValue::Last))) {
             break;
           }
           CXFA_Node* pNode = m_pCurPageArea;
-          XFA_AttributeEnum eCurChoice =
+          XFA_AttributeValue eCurChoice =
               pNode->JSObject()->GetEnum(XFA_Attribute::PagePosition);
-          if (eCurChoice == XFA_AttributeEnum::Last) {
-            XFA_AttributeEnum eOddOrEven =
+          if (eCurChoice == XFA_AttributeValue::Last) {
+            XFA_AttributeValue eOddOrEven =
                 pNode->JSObject()->GetEnum(XFA_Attribute::OddOrEven);
-            XFA_AttributeEnum eLastChoice =
+            XFA_AttributeValue eLastChoice =
                 pLastPageAreaLayoutItem->GetFormNode()->JSObject()->GetEnum(
                     XFA_Attribute::PagePosition);
-            if (eLastChoice == XFA_AttributeEnum::First &&
-                (ePageRelation == XFA_AttributeEnum::SimplexPaginated ||
-                 eOddOrEven != XFA_AttributeEnum::Odd)) {
+            if (eLastChoice == XFA_AttributeValue::First &&
+                (ePageRelation == XFA_AttributeValue::SimplexPaginated ||
+                 eOddOrEven != XFA_AttributeValue::Odd)) {
               CXFA_ContainerRecord* pRecord =
                   CreateContainerRecord(nullptr, false);
               AddPageAreaLayoutItem(pRecord, pNode);
@@ -731,7 +731,7 @@
               pContentAreaNode = pContentAreaNode->GetNextSibling();
             }
           } else if (pNode->JSObject()->GetEnum(XFA_Attribute::PagePosition) ==
-                     XFA_AttributeEnum::Last) {
+                     XFA_AttributeValue::Last) {
             CXFA_ContainerRecord* pRecord =
                 CreateContainerRecord(nullptr, false);
             AddPageAreaLayoutItem(pRecord, pNode);
@@ -759,12 +759,12 @@
 }
 
 bool CXFA_LayoutPageMgr::RunBreak(XFA_Element eBreakType,
-                                  XFA_AttributeEnum eTargetType,
+                                  XFA_AttributeValue eTargetType,
                                   CXFA_Node* pTarget,
                                   bool bStartNew) {
   bool bRet = false;
   switch (eTargetType) {
-    case XFA_AttributeEnum::ContentArea:
+    case XFA_AttributeValue::ContentArea:
       if (pTarget && pTarget->GetElementType() != XFA_Element::ContentArea)
         pTarget = nullptr;
       if (!pTarget ||
@@ -780,7 +780,7 @@
         bRet = !!pPageArea;
       }
       break;
-    case XFA_AttributeEnum::PageArea:
+    case XFA_AttributeValue::PageArea:
       if (pTarget && pTarget->GetElementType() != XFA_Element::PageArea)
         pTarget = nullptr;
       if (!pTarget ||
@@ -792,15 +792,15 @@
         bRet = !!pPageArea;
       }
       break;
-    case XFA_AttributeEnum::PageOdd:
+    case XFA_AttributeValue::PageOdd:
       if (pTarget && pTarget->GetElementType() != XFA_Element::PageArea)
         pTarget = nullptr;
       break;
-    case XFA_AttributeEnum::PageEven:
+    case XFA_AttributeValue::PageEven:
       if (pTarget && pTarget->GetElementType() != XFA_Element::PageArea)
         pTarget = nullptr;
       break;
-    case XFA_AttributeEnum::Auto:
+    case XFA_AttributeValue::Auto:
     default:
       break;
   }
@@ -966,11 +966,11 @@
         m_bCreateOverFlowPage = true;
         switch (pTarget->GetElementType()) {
           case XFA_Element::PageArea:
-            RunBreak(XFA_Element::Overflow, XFA_AttributeEnum::PageArea,
+            RunBreak(XFA_Element::Overflow, XFA_AttributeValue::PageArea,
                      pTarget, true);
             break;
           case XFA_Element::ContentArea:
-            RunBreak(XFA_Element::Overflow, XFA_AttributeEnum::ContentArea,
+            RunBreak(XFA_Element::Overflow, XFA_AttributeValue::ContentArea,
                      pTarget, true);
             break;
           default:
@@ -998,11 +998,11 @@
       m_bCreateOverFlowPage = true;
       switch (pTarget->GetElementType()) {
         case XFA_Element::PageArea:
-          RunBreak(XFA_Element::Overflow, XFA_AttributeEnum::PageArea, pTarget,
+          RunBreak(XFA_Element::Overflow, XFA_AttributeValue::PageArea, pTarget,
                    true);
           break;
         case XFA_Element::ContentArea:
-          RunBreak(XFA_Element::Overflow, XFA_AttributeEnum::ContentArea,
+          RunBreak(XFA_Element::Overflow, XFA_AttributeValue::ContentArea,
                    pTarget, true);
           break;
         default:
@@ -1112,10 +1112,10 @@
                                            pTargetPageArea, pTargetContentArea,
                                            bNewPage, bQuery);
   }
-  XFA_AttributeEnum ePreferredPosition =
+  XFA_AttributeValue ePreferredPosition =
       m_CurrentContainerRecordIter != m_ProposedContainerRecords.end()
-          ? XFA_AttributeEnum::Rest
-          : XFA_AttributeEnum::First;
+          ? XFA_AttributeValue::Rest
+          : XFA_AttributeValue::First;
   return FindPageAreaFromPageSet_SimplexDuplex(
       pPageSet, pStartChild, pTargetPageArea, pTargetContentArea, bNewPage,
       bQuery, ePreferredPosition);
@@ -1201,8 +1201,8 @@
     CXFA_Node* pTargetContentArea,
     bool bNewPage,
     bool bQuery,
-    XFA_AttributeEnum ePreferredPosition) {
-  const XFA_AttributeEnum eFallbackPosition = XFA_AttributeEnum::Any;
+    XFA_AttributeValue ePreferredPosition) {
+  const XFA_AttributeValue eFallbackPosition = XFA_AttributeValue::Any;
   CXFA_Node* pPreferredPageArea = nullptr;
   CXFA_Node* pFallbackPageArea = nullptr;
   CXFA_Node* pCurrentNode = nullptr;
@@ -1216,14 +1216,14 @@
       if (!MatchPageAreaOddOrEven(pCurrentNode))
         continue;
 
-      XFA_AttributeEnum eCurPagePosition =
+      XFA_AttributeValue eCurPagePosition =
           pCurrentNode->JSObject()->GetEnum(XFA_Attribute::PagePosition);
-      if (ePreferredPosition == XFA_AttributeEnum::Last) {
+      if (ePreferredPosition == XFA_AttributeValue::Last) {
         if (eCurPagePosition != ePreferredPosition)
           continue;
-        if (m_ePageSetMode == XFA_AttributeEnum::SimplexPaginated ||
+        if (m_ePageSetMode == XFA_AttributeValue::SimplexPaginated ||
             pCurrentNode->JSObject()->GetEnum(XFA_Attribute::OddOrEven) ==
-                XFA_AttributeEnum::Any) {
+                XFA_AttributeValue::Any) {
           pPreferredPageArea = pCurrentNode;
           break;
         }
@@ -1236,12 +1236,12 @@
         pPreferredPageArea = pCurrentNode;
         return false;
       }
-      if (ePreferredPosition == XFA_AttributeEnum::Only) {
+      if (ePreferredPosition == XFA_AttributeValue::Only) {
         if (eCurPagePosition != ePreferredPosition)
           continue;
-        if (m_ePageSetMode != XFA_AttributeEnum::DuplexPaginated ||
+        if (m_ePageSetMode != XFA_AttributeValue::DuplexPaginated ||
             pCurrentNode->JSObject()->GetEnum(XFA_Attribute::OddOrEven) ==
-                XFA_AttributeEnum::Any) {
+                XFA_AttributeValue::Any) {
           pPreferredPageArea = pCurrentNode;
           break;
         }
@@ -1258,8 +1258,8 @@
           }
           continue;
         }
-        if ((ePreferredPosition == XFA_AttributeEnum::Rest &&
-             eCurPagePosition == XFA_AttributeEnum::Any) ||
+        if ((ePreferredPosition == XFA_AttributeValue::Rest &&
+             eCurPagePosition == XFA_AttributeValue::Any) ||
             eCurPagePosition == ePreferredPosition) {
           pPreferredPageArea = pCurrentNode;
           break;
@@ -1307,16 +1307,16 @@
 }
 
 bool CXFA_LayoutPageMgr::MatchPageAreaOddOrEven(CXFA_Node* pPageArea) {
-  if (m_ePageSetMode != XFA_AttributeEnum::DuplexPaginated)
+  if (m_ePageSetMode != XFA_AttributeValue::DuplexPaginated)
     return true;
 
-  Optional<XFA_AttributeEnum> ret =
+  Optional<XFA_AttributeValue> ret =
       pPageArea->JSObject()->TryEnum(XFA_Attribute::OddOrEven, true);
-  if (!ret || *ret == XFA_AttributeEnum::Any)
+  if (!ret || *ret == XFA_AttributeValue::Any)
     return true;
 
   int32_t iPageLast = GetPageCount() % 2;
-  return *ret == XFA_AttributeEnum::Odd ? iPageLast == 0 : iPageLast == 1;
+  return *ret == XFA_AttributeValue::Odd ? iPageLast == 0 : iPageLast == 1;
 }
 
 CXFA_Node* CXFA_LayoutPageMgr::GetNextAvailPageArea(
@@ -1432,9 +1432,9 @@
   for (CXFA_Node* pPageSetNode = sIterator.GetCurrent(); pPageSetNode;
        pPageSetNode = sIterator.MoveToNext()) {
     if (pPageSetNode->GetElementType() == XFA_Element::PageSet) {
-      XFA_AttributeEnum eRelation =
+      XFA_AttributeValue eRelation =
           pPageSetNode->JSObject()->GetEnum(XFA_Attribute::Relation);
-      if (eRelation == XFA_AttributeEnum::OrderedOccurrence)
+      if (eRelation == XFA_AttributeValue::OrderedOccurrence)
         m_pPageSetMap[pPageSetNode] = 0;
     }
   }
@@ -1940,12 +1940,12 @@
               continue;
             }
 
-            XFA_AttributeEnum presence =
+            XFA_AttributeValue presence =
                 pContentItem->GetFormNode()
                     ->JSObject()
                     ->TryEnum(XFA_Attribute::Presence, true)
-                    .value_or(XFA_AttributeEnum::Visible);
-            bool bVisible = presence == XFA_AttributeEnum::Visible;
+                    .value_or(XFA_AttributeValue::Visible);
+            bool bVisible = presence == XFA_AttributeValue::Visible;
             uint32_t dwRelevantChild =
                 GetRelevant(pContentItem->GetFormNode(), dwRelevant);
             SyncContainer(pNotify, m_pLayoutProcessor, pContentItem,
@@ -1984,7 +1984,7 @@
 
 void CXFA_LayoutPageMgr::PrepareLayout() {
   m_pPageSetCurRoot = nullptr;
-  m_ePageSetMode = XFA_AttributeEnum::OrderedOccurrence;
+  m_ePageSetMode = XFA_AttributeValue::OrderedOccurrence;
   m_nAvailPages = 0;
   ClearData();
   if (!m_pPageSetLayoutItemRoot)
diff --git a/xfa/fxfa/parser/cxfa_layoutpagemgr.h b/xfa/fxfa/parser/cxfa_layoutpagemgr.h
index 6acd5b4..c71947c 100644
--- a/xfa/fxfa/parser/cxfa_layoutpagemgr.h
+++ b/xfa/fxfa/parser/cxfa_layoutpagemgr.h
@@ -72,7 +72,7 @@
   void AddContentAreaLayoutItem(CXFA_ContainerRecord* pNewRecord,
                                 CXFA_Node* pContentArea);
   bool RunBreak(XFA_Element eBreakType,
-                XFA_AttributeEnum eTargetType,
+                XFA_AttributeValue eTargetType,
                 CXFA_Node* pTarget,
                 bool bStartNew);
   CXFA_Node* BreakOverflow(CXFA_Node* pOverflowNode,
@@ -111,7 +111,7 @@
       CXFA_Node* pTargetContentArea = nullptr,
       bool bNewPage = false,
       bool bQuery = false,
-      XFA_AttributeEnum ePreferredPosition = XFA_AttributeEnum::First);
+      XFA_AttributeValue ePreferredPosition = XFA_AttributeValue::First);
   bool MatchPageAreaOddOrEven(CXFA_Node* pPageArea);
   CXFA_Node* GetNextAvailPageArea(CXFA_Node* pTargetPageArea,
                                   CXFA_Node* pTargetContentArea,
@@ -121,7 +121,7 @@
   void InitPageSetMap();
   void ProcessLastPageSet();
   bool IsPageSetRootOrderedOccurrence() const {
-    return m_ePageSetMode == XFA_AttributeEnum::OrderedOccurrence;
+    return m_ePageSetMode == XFA_AttributeValue::OrderedOccurrence;
   }
   void ClearData();
   void MergePageSetContents();
@@ -138,7 +138,7 @@
   CXFA_Node* m_pCurPageArea;
   int32_t m_nAvailPages;
   int32_t m_nCurPageCount;
-  XFA_AttributeEnum m_ePageSetMode;
+  XFA_AttributeValue m_ePageSetMode;
   bool m_bCreateOverFlowPage;
   std::map<CXFA_Node*, int32_t> m_pPageSetMap;
   std::vector<CXFA_ContainerLayoutItem*> m_PageArray;
diff --git a/xfa/fxfa/parser/cxfa_line.cpp b/xfa/fxfa/parser/cxfa_line.cpp
index 0f54e91..2378557 100644
--- a/xfa/fxfa/parser/cxfa_line.cpp
+++ b/xfa/fxfa/parser/cxfa_line.cpp
@@ -20,10 +20,10 @@
     {XFA_Attribute::Id, XFA_AttributeType::CData, nullptr},
     {XFA_Attribute::Use, XFA_AttributeType::CData, nullptr},
     {XFA_Attribute::Slope, XFA_AttributeType::Enum,
-     (void*)XFA_AttributeEnum::Backslash},
+     (void*)XFA_AttributeValue::Backslash},
     {XFA_Attribute::Usehref, XFA_AttributeType::CData, nullptr},
     {XFA_Attribute::Hand, XFA_AttributeType::Enum,
-     (void*)XFA_AttributeEnum::Even},
+     (void*)XFA_AttributeValue::Even},
     {XFA_Attribute::Unknown, XFA_AttributeType::Integer, nullptr}};
 
 constexpr wchar_t kLineName[] = L"line";
@@ -43,12 +43,12 @@
 
 CXFA_Line::~CXFA_Line() {}
 
-XFA_AttributeEnum CXFA_Line::GetHand() {
+XFA_AttributeValue CXFA_Line::GetHand() {
   return JSObject()->GetEnum(XFA_Attribute::Hand);
 }
 
 bool CXFA_Line::GetSlope() {
-  return JSObject()->GetEnum(XFA_Attribute::Slope) == XFA_AttributeEnum::Slash;
+  return JSObject()->GetEnum(XFA_Attribute::Slope) == XFA_AttributeValue::Slash;
 }
 
 CXFA_Edge* CXFA_Line::GetEdgeIfExists() {
diff --git a/xfa/fxfa/parser/cxfa_line.h b/xfa/fxfa/parser/cxfa_line.h
index 98a132d..53584fa 100644
--- a/xfa/fxfa/parser/cxfa_line.h
+++ b/xfa/fxfa/parser/cxfa_line.h
@@ -16,7 +16,7 @@
   CXFA_Line(CXFA_Document* doc, XFA_PacketType packet);
   ~CXFA_Line() override;
 
-  XFA_AttributeEnum GetHand();
+  XFA_AttributeValue GetHand();
   bool GetSlope();
   CXFA_Edge* GetEdgeIfExists();
 };
diff --git a/xfa/fxfa/parser/cxfa_linear.cpp b/xfa/fxfa/parser/cxfa_linear.cpp
index e730c14..920aa47 100644
--- a/xfa/fxfa/parser/cxfa_linear.cpp
+++ b/xfa/fxfa/parser/cxfa_linear.cpp
@@ -21,7 +21,7 @@
     {XFA_Attribute::Id, XFA_AttributeType::CData, nullptr},
     {XFA_Attribute::Use, XFA_AttributeType::CData, nullptr},
     {XFA_Attribute::Type, XFA_AttributeType::Enum,
-     (void*)XFA_AttributeEnum::ToRight},
+     (void*)XFA_AttributeValue::ToRight},
     {XFA_Attribute::Usehref, XFA_AttributeType::CData, nullptr},
     {XFA_Attribute::Unknown, XFA_AttributeType::Integer, nullptr}};
 
@@ -42,10 +42,10 @@
 
 CXFA_Linear::~CXFA_Linear() {}
 
-XFA_AttributeEnum CXFA_Linear::GetType() {
+XFA_AttributeValue CXFA_Linear::GetType() {
   return JSObject()
       ->TryEnum(XFA_Attribute::Type, true)
-      .value_or(XFA_AttributeEnum::ToRight);
+      .value_or(XFA_AttributeValue::ToRight);
 }
 
 CXFA_Color* CXFA_Linear::GetColorIfExists() {
@@ -63,19 +63,19 @@
   CFX_PointF ptStart;
   CFX_PointF ptEnd;
   switch (GetType()) {
-    case XFA_AttributeEnum::ToRight:
+    case XFA_AttributeValue::ToRight:
       ptStart = CFX_PointF(rtFill.left, rtFill.top);
       ptEnd = CFX_PointF(rtFill.right(), rtFill.top);
       break;
-    case XFA_AttributeEnum::ToBottom:
+    case XFA_AttributeValue::ToBottom:
       ptStart = CFX_PointF(rtFill.left, rtFill.top);
       ptEnd = CFX_PointF(rtFill.left, rtFill.bottom());
       break;
-    case XFA_AttributeEnum::ToLeft:
+    case XFA_AttributeValue::ToLeft:
       ptStart = CFX_PointF(rtFill.right(), rtFill.top);
       ptEnd = CFX_PointF(rtFill.left, rtFill.top);
       break;
-    case XFA_AttributeEnum::ToTop:
+    case XFA_AttributeValue::ToTop:
       ptStart = CFX_PointF(rtFill.left, rtFill.bottom());
       ptEnd = CFX_PointF(rtFill.left, rtFill.top);
       break;
diff --git a/xfa/fxfa/parser/cxfa_linear.h b/xfa/fxfa/parser/cxfa_linear.h
index 1315f9a..0fa5e1a 100644
--- a/xfa/fxfa/parser/cxfa_linear.h
+++ b/xfa/fxfa/parser/cxfa_linear.h
@@ -16,7 +16,8 @@
 
 class CXFA_Linear final : public CXFA_Node {
  public:
-  static constexpr XFA_AttributeEnum kDefaultType = XFA_AttributeEnum::ToRight;
+  static constexpr XFA_AttributeValue kDefaultType =
+      XFA_AttributeValue::ToRight;
 
   CXFA_Linear(CXFA_Document* doc, XFA_PacketType packet);
   ~CXFA_Linear() override;
@@ -28,7 +29,7 @@
             const CFX_Matrix& matrix);
 
  private:
-  XFA_AttributeEnum GetType();
+  XFA_AttributeValue GetType();
   CXFA_Color* GetColorIfExists();
 };
 
diff --git a/xfa/fxfa/parser/cxfa_lockdocument.cpp b/xfa/fxfa/parser/cxfa_lockdocument.cpp
index b38234c..3364f69 100644
--- a/xfa/fxfa/parser/cxfa_lockdocument.cpp
+++ b/xfa/fxfa/parser/cxfa_lockdocument.cpp
@@ -12,7 +12,7 @@
     {XFA_Attribute::Id, XFA_AttributeType::CData, nullptr},
     {XFA_Attribute::Use, XFA_AttributeType::CData, nullptr},
     {XFA_Attribute::Type, XFA_AttributeType::Enum,
-     (void*)XFA_AttributeEnum::Optional},
+     (void*)XFA_AttributeValue::Optional},
     {XFA_Attribute::Usehref, XFA_AttributeType::CData, nullptr},
     {XFA_Attribute::Unknown, XFA_AttributeType::Integer, nullptr}};
 
diff --git a/xfa/fxfa/parser/cxfa_manifest.cpp b/xfa/fxfa/parser/cxfa_manifest.cpp
index fd7d96f..8d9a9fa 100644
--- a/xfa/fxfa/parser/cxfa_manifest.cpp
+++ b/xfa/fxfa/parser/cxfa_manifest.cpp
@@ -19,7 +19,7 @@
     {XFA_Attribute::Name, XFA_AttributeType::CData, nullptr},
     {XFA_Attribute::Use, XFA_AttributeType::CData, nullptr},
     {XFA_Attribute::Action, XFA_AttributeType::Enum,
-     (void*)XFA_AttributeEnum::Include},
+     (void*)XFA_AttributeValue::Include},
     {XFA_Attribute::Usehref, XFA_AttributeType::CData, nullptr},
     {XFA_Attribute::Unknown, XFA_AttributeType::Integer, nullptr}};
 
diff --git a/xfa/fxfa/parser/cxfa_mdp.cpp b/xfa/fxfa/parser/cxfa_mdp.cpp
index 1d9529a..f64822f 100644
--- a/xfa/fxfa/parser/cxfa_mdp.cpp
+++ b/xfa/fxfa/parser/cxfa_mdp.cpp
@@ -15,7 +15,7 @@
     {XFA_Attribute::Id, XFA_AttributeType::CData, nullptr},
     {XFA_Attribute::Use, XFA_AttributeType::CData, nullptr},
     {XFA_Attribute::SignatureType, XFA_AttributeType::Enum,
-     (void*)XFA_AttributeEnum::Filter},
+     (void*)XFA_AttributeValue::Filter},
     {XFA_Attribute::Usehref, XFA_AttributeType::CData, nullptr},
     {XFA_Attribute::Permissions, XFA_AttributeType::Integer, (void*)2},
     {XFA_Attribute::Unknown, XFA_AttributeType::Integer, nullptr}};
diff --git a/xfa/fxfa/parser/cxfa_medium.cpp b/xfa/fxfa/parser/cxfa_medium.cpp
index ec70078..7e47e83 100644
--- a/xfa/fxfa/parser/cxfa_medium.cpp
+++ b/xfa/fxfa/parser/cxfa_medium.cpp
@@ -14,14 +14,14 @@
 const CXFA_Node::AttributeData kMediumAttributeData[] = {
     {XFA_Attribute::Id, XFA_AttributeType::CData, nullptr},
     {XFA_Attribute::TrayOut, XFA_AttributeType::Enum,
-     (void*)XFA_AttributeEnum::Auto},
+     (void*)XFA_AttributeValue::Auto},
     {XFA_Attribute::Use, XFA_AttributeType::CData, nullptr},
     {XFA_Attribute::Orientation, XFA_AttributeType::Enum,
-     (void*)XFA_AttributeEnum::Portrait},
+     (void*)XFA_AttributeValue::Portrait},
     {XFA_Attribute::ImagingBBox, XFA_AttributeType::CData, (void*)L"none"},
     {XFA_Attribute::Short, XFA_AttributeType::Measure, (void*)L"0in"},
     {XFA_Attribute::TrayIn, XFA_AttributeType::Enum,
-     (void*)XFA_AttributeEnum::Auto},
+     (void*)XFA_AttributeValue::Auto},
     {XFA_Attribute::Usehref, XFA_AttributeType::CData, nullptr},
     {XFA_Attribute::Stock, XFA_AttributeType::CData, nullptr},
     {XFA_Attribute::Long, XFA_AttributeType::Measure, (void*)L"0in"},
diff --git a/xfa/fxfa/parser/cxfa_node.cpp b/xfa/fxfa/parser/cxfa_node.cpp
index b7a2852..b3fc920 100644
--- a/xfa/fxfa/parser/cxfa_node.cpp
+++ b/xfa/fxfa/parser/cxfa_node.cpp
@@ -203,8 +203,8 @@
   std::vector<uint8_t> buffer;
   RetainPtr<IFX_SeekableReadStream> pImageFileRead;
   if (wsImage.GetLength() > 0) {
-    XFA_AttributeEnum iEncoding = pImage->GetTransferEncoding();
-    if (iEncoding == XFA_AttributeEnum::Base64) {
+    XFA_AttributeValue iEncoding = pImage->GetTransferEncoding();
+    if (iEncoding == XFA_AttributeValue::Base64) {
       ByteString bsData = wsImage.ToUTF8();
       buffer.resize(bsData.GetLength());
       int32_t iRead = XFA_Base64Decode(bsData.c_str(), buffer.data());
@@ -543,12 +543,12 @@
 };
 
 // static
-ByteStringView CXFA_Node::AttributeEnumToName(XFA_AttributeEnum item) {
+ByteStringView CXFA_Node::AttributeEnumToName(XFA_AttributeValue item) {
   return g_XFAEnumData[static_cast<int32_t>(item)].pName;
 }
 
 // static
-Optional<XFA_AttributeEnum> CXFA_Node::NameToAttributeEnum(
+Optional<XFA_AttributeValue> CXFA_Node::NameToAttributeEnum(
     const WideStringView& name) {
   if (name.IsEmpty())
     return {};
@@ -556,7 +556,7 @@
   static const auto* kXFAEnumDataEnd = g_XFAEnumData + g_szXFAEnumCount;
   auto* it = std::lower_bound(g_XFAEnumData, kXFAEnumDataEnd,
                               FX_HashCode_GetW(name, false),
-                              [](const XFA_AttributeEnumInfo& arg,
+                              [](const XFA_AttributeValueInfo& arg,
                                  uint32_t hash) { return arg.uHash < hash; });
   if (it != kXFAEnumDataEnd && name.EqualsASCII(it->pName))
     return it->eName;
@@ -633,7 +633,7 @@
       pCloneXML = pCloneXMLElement;
 
       pClone->JSObject()->SetEnum(XFA_Attribute::Contains,
-                                  XFA_AttributeEnum::Unknown, false);
+                                  XFA_AttributeValue::Unknown, false);
     } else {
       pCloneXML = xml_node_->Clone(
           GetDocument()->GetNotify()->GetHDOC()->GetXMLDocument());
@@ -1022,37 +1022,37 @@
   return {pLocale->GetName()};
 }
 
-XFA_AttributeEnum CXFA_Node::GetIntact() {
+XFA_AttributeValue CXFA_Node::GetIntact() {
   CXFA_Keep* pKeep = GetFirstChildByClass<CXFA_Keep>(XFA_Element::Keep);
-  XFA_AttributeEnum eLayoutType = JSObject()
-                                      ->TryEnum(XFA_Attribute::Layout, true)
-                                      .value_or(XFA_AttributeEnum::Position);
+  XFA_AttributeValue eLayoutType = JSObject()
+                                       ->TryEnum(XFA_Attribute::Layout, true)
+                                       .value_or(XFA_AttributeValue::Position);
   if (pKeep) {
-    Optional<XFA_AttributeEnum> intact =
+    Optional<XFA_AttributeValue> intact =
         pKeep->JSObject()->TryEnum(XFA_Attribute::Intact, false);
     if (intact) {
-      if (*intact == XFA_AttributeEnum::None &&
-          eLayoutType == XFA_AttributeEnum::Row &&
+      if (*intact == XFA_AttributeValue::None &&
+          eLayoutType == XFA_AttributeValue::Row &&
           m_pDocument->GetCurVersionMode() < XFA_VERSION_208) {
         CXFA_Node* pPreviewRow = GetPrevContainerSibling();
         if (pPreviewRow &&
             pPreviewRow->JSObject()->GetEnum(XFA_Attribute::Layout) ==
-                XFA_AttributeEnum::Row) {
-          Optional<XFA_AttributeEnum> value =
+                XFA_AttributeValue::Row) {
+          Optional<XFA_AttributeValue> value =
               pKeep->JSObject()->TryEnum(XFA_Attribute::Previous, false);
-          if (value && (*value == XFA_AttributeEnum::ContentArea ||
-                        *value == XFA_AttributeEnum::PageArea)) {
-            return XFA_AttributeEnum::ContentArea;
+          if (value && (*value == XFA_AttributeValue::ContentArea ||
+                        *value == XFA_AttributeValue::PageArea)) {
+            return XFA_AttributeValue::ContentArea;
           }
 
           CXFA_Keep* pNode =
               pPreviewRow->GetFirstChildByClass<CXFA_Keep>(XFA_Element::Keep);
-          Optional<XFA_AttributeEnum> ret;
+          Optional<XFA_AttributeValue> ret;
           if (pNode)
             ret = pNode->JSObject()->TryEnum(XFA_Attribute::Next, false);
-          if (ret && (*ret == XFA_AttributeEnum::ContentArea ||
-                      *ret == XFA_AttributeEnum::PageArea)) {
-            return XFA_AttributeEnum::ContentArea;
+          if (ret && (*ret == XFA_AttributeValue::ContentArea ||
+                      *ret == XFA_AttributeValue::PageArea)) {
+            return XFA_AttributeValue::ContentArea;
           }
         }
       }
@@ -1063,41 +1063,42 @@
   switch (GetElementType()) {
     case XFA_Element::Subform:
       switch (eLayoutType) {
-        case XFA_AttributeEnum::Position:
-        case XFA_AttributeEnum::Row:
-          return XFA_AttributeEnum::ContentArea;
+        case XFA_AttributeValue::Position:
+        case XFA_AttributeValue::Row:
+          return XFA_AttributeValue::ContentArea;
         default:
-          return XFA_AttributeEnum::None;
+          return XFA_AttributeValue::None;
       }
     case XFA_Element::Field: {
       CXFA_Node* parent = GetParent();
       if (!parent || parent->GetElementType() == XFA_Element::PageArea)
-        return XFA_AttributeEnum::ContentArea;
-      if (parent->GetIntact() != XFA_AttributeEnum::None)
-        return XFA_AttributeEnum::ContentArea;
+        return XFA_AttributeValue::ContentArea;
+      if (parent->GetIntact() != XFA_AttributeValue::None)
+        return XFA_AttributeValue::ContentArea;
 
-      XFA_AttributeEnum eParLayout = parent->JSObject()
-                                         ->TryEnum(XFA_Attribute::Layout, true)
-                                         .value_or(XFA_AttributeEnum::Position);
-      if (eParLayout == XFA_AttributeEnum::Position ||
-          eParLayout == XFA_AttributeEnum::Row ||
-          eParLayout == XFA_AttributeEnum::Table) {
-        return XFA_AttributeEnum::None;
+      XFA_AttributeValue eParLayout =
+          parent->JSObject()
+              ->TryEnum(XFA_Attribute::Layout, true)
+              .value_or(XFA_AttributeValue::Position);
+      if (eParLayout == XFA_AttributeValue::Position ||
+          eParLayout == XFA_AttributeValue::Row ||
+          eParLayout == XFA_AttributeValue::Table) {
+        return XFA_AttributeValue::None;
       }
 
       XFA_VERSION version = m_pDocument->GetCurVersionMode();
-      if (eParLayout == XFA_AttributeEnum::Tb && version < XFA_VERSION_208) {
+      if (eParLayout == XFA_AttributeValue::Tb && version < XFA_VERSION_208) {
         Optional<CXFA_Measurement> measureH =
             JSObject()->TryMeasure(XFA_Attribute::H, false);
         if (measureH)
-          return XFA_AttributeEnum::ContentArea;
+          return XFA_AttributeValue::ContentArea;
       }
-      return XFA_AttributeEnum::None;
+      return XFA_AttributeValue::None;
     }
     case XFA_Element::Draw:
-      return XFA_AttributeEnum::ContentArea;
+      return XFA_AttributeValue::ContentArea;
     default:
-      return XFA_AttributeEnum::None;
+      return XFA_AttributeValue::None;
   }
 }
 
@@ -1308,7 +1309,7 @@
   }
   pNode->xml_node_ = pNewXMLElement;
   pNode->JSObject()->SetEnum(XFA_Attribute::Contains,
-                             XFA_AttributeEnum::Unknown, false);
+                             XFA_AttributeValue::Unknown, false);
 }
 
 CXFA_Node* CXFA_Node::GetFirstChildByName(const WideStringView& wsName) const {
@@ -1419,7 +1420,7 @@
 
 bool CXFA_Node::IsAttributeInXML() {
   return JSObject()->GetEnum(XFA_Attribute::Contains) ==
-         XFA_AttributeEnum::MetaData;
+         XFA_AttributeValue::MetaData;
 }
 
 void CXFA_Node::OnRemoved(bool bNotify) {
@@ -1678,12 +1679,12 @@
   return {WideString(static_cast<const wchar_t*>(*value))};
 }
 
-Optional<XFA_AttributeEnum> CXFA_Node::GetDefaultEnum(
+Optional<XFA_AttributeValue> CXFA_Node::GetDefaultEnum(
     XFA_Attribute attr) const {
   Optional<void*> value = GetDefaultValue(attr, XFA_AttributeType::Enum);
   if (!value)
     return {};
-  return {static_cast<XFA_AttributeEnum>(reinterpret_cast<uintptr_t>(*value))};
+  return {static_cast<XFA_AttributeValue>(reinterpret_cast<uintptr_t>(*value))};
 }
 
 Optional<void*> CXFA_Node::GetDefaultValue(XFA_Attribute attr,
@@ -1918,8 +1919,8 @@
 
 bool CXFA_Node::IsOpenAccess() {
   for (auto* pNode = this; pNode; pNode = pNode->GetContainerParent()) {
-    XFA_AttributeEnum iAcc = pNode->JSObject()->GetEnum(XFA_Attribute::Access);
-    if (iAcc != XFA_AttributeEnum::Open)
+    XFA_AttributeValue iAcc = pNode->JSObject()->GetEnum(XFA_Attribute::Access);
+    if (iAcc != XFA_AttributeValue::Open)
       return false;
   }
   return true;
@@ -1985,7 +1986,7 @@
 }
 
 int32_t CXFA_Node::ProcessEvent(CXFA_FFDocView* docView,
-                                XFA_AttributeEnum iActivity,
+                                XFA_AttributeValue iActivity,
                                 CXFA_EventParam* pEventParam) {
   if (GetElementType() == XFA_Element::Draw)
     return XFA_EVENTERROR_NotExist;
@@ -2075,7 +2076,7 @@
 
   WideString wsTitle = pAppProvider->GetAppTitle();
   WideString wsScriptMsg = validate->GetScriptMessageText();
-  if (validate->GetScriptTest() == XFA_AttributeEnum::Warning) {
+  if (validate->GetScriptTest() == XFA_AttributeValue::Warning) {
     if (IsUserInteractive())
       return;
     if (wsScriptMsg.IsEmpty())
@@ -2129,7 +2130,7 @@
 
   WideString wsFormatMsg = validate->GetFormatMessageText();
   WideString wsTitle = pAppProvider->GetAppTitle();
-  if (validate->GetFormatTest() == XFA_AttributeEnum::Error) {
+  if (validate->GetFormatTest() == XFA_AttributeValue::Error) {
     if (wsFormatMsg.IsEmpty())
       wsFormatMsg = GetValidateMessage(true, bVersionFlag);
     pAppProvider->MsgBox(wsFormatMsg, wsTitle,
@@ -2167,15 +2168,15 @@
   if (m_bIsNull && m_bPreNull)
     return XFA_EVENTERROR_Success;
 
-  XFA_AttributeEnum eNullTest = validate->GetNullTest();
+  XFA_AttributeValue eNullTest = validate->GetNullTest();
   WideString wsNullMsg = validate->GetNullMessageText();
   if (iFlags & 0x01) {
     int32_t iRet = XFA_EVENTERROR_Success;
-    if (eNullTest != XFA_AttributeEnum::Disabled)
+    if (eNullTest != XFA_AttributeValue::Disabled)
       iRet = XFA_EVENTERROR_Error;
 
     if (!wsNullMsg.IsEmpty()) {
-      if (eNullTest != XFA_AttributeEnum::Disabled) {
+      if (eNullTest != XFA_AttributeValue::Disabled) {
         docView->m_arrNullTestMsg.push_back(wsNullMsg);
         return XFA_EVENTERROR_Error;
       }
@@ -2184,7 +2185,7 @@
     return iRet;
   }
   if (wsNullMsg.IsEmpty() && bVersionFlag &&
-      eNullTest != XFA_AttributeEnum::Disabled) {
+      eNullTest != XFA_AttributeValue::Disabled) {
     return XFA_EVENTERROR_Error;
   }
   IXFA_AppProvider* pAppProvider =
@@ -2195,7 +2196,7 @@
   WideString wsCaptionName;
   WideString wsTitle = pAppProvider->GetAppTitle();
   switch (eNullTest) {
-    case XFA_AttributeEnum::Error: {
+    case XFA_AttributeValue::Error: {
       if (wsNullMsg.IsEmpty()) {
         wsCaptionName = GetValidateCaptionName(bVersionFlag);
         wsNullMsg = wsCaptionName + L" cannot be blank.";
@@ -2205,7 +2206,7 @@
                            static_cast<uint32_t>(AlertButton::kOK));
       return XFA_EVENTERROR_Error;
     }
-    case XFA_AttributeEnum::Warning: {
+    case XFA_AttributeValue::Warning: {
       if (IsUserInteractive())
         return true;
 
@@ -2223,7 +2224,7 @@
       }
       return XFA_EVENTERROR_Error;
     }
-    case XFA_AttributeEnum::Disabled:
+    case XFA_AttributeValue::Disabled:
     default:
       break;
   }
@@ -2326,7 +2327,7 @@
   ASSERT(pEventParam);
   if (!script)
     return {XFA_EVENTERROR_NotExist, false};
-  if (script->GetRunAt() == XFA_AttributeEnum::Server)
+  if (script->GetRunAt() == XFA_AttributeValue::Server)
     return {XFA_EVENTERROR_Disabled, false};
 
   WideString wsExpression = script->GetExpression();
@@ -2581,7 +2582,7 @@
     return CFX_RectF();
 
   CXFA_Border* border = GetUIBorder();
-  if (border && border->GetPresence() != XFA_AttributeEnum::Visible)
+  if (border && border->GetPresence() != XFA_AttributeValue::Visible)
     return CFX_RectF();
 
   Optional<float> left = mgUI->TryLeftInset();
@@ -2591,7 +2592,7 @@
   if (border) {
     bool bVisible = false;
     float fThickness = 0;
-    XFA_AttributeEnum iType = XFA_AttributeEnum::Unknown;
+    XFA_AttributeValue iType = XFA_AttributeValue::Unknown;
     std::tie(iType, bVisible, fThickness) = border->Get3DStyle();
     if (!left || !top || !right || !bottom) {
       std::vector<CXFA_Stroke*> strokes = border->GetStrokes();
@@ -2610,7 +2611,7 @@
 }
 
 std::vector<CXFA_Event*> CXFA_Node::GetEventByActivity(
-    XFA_AttributeEnum iActivity,
+    XFA_AttributeValue iActivity,
     bool bIsFormReady) {
   std::vector<CXFA_Event*> events;
   for (CXFA_Node* node : GetNodeList(0, XFA_Element::Event)) {
@@ -2618,7 +2619,7 @@
     if (event->GetActivity() != iActivity)
       continue;
 
-    if (iActivity != XFA_AttributeEnum::Ready) {
+    if (iActivity != XFA_AttributeValue::Ready) {
       events.push_back(event);
       continue;
     }
@@ -2716,7 +2717,7 @@
   CXFA_Node* pBind = GetBindData();
   if (!pBind) {
     if (image)
-      image->SetTransferEncoding(XFA_AttributeEnum::Base64);
+      image->SetTransferEncoding(XFA_AttributeValue::Base64);
     return;
   }
   pBind->JSObject()->SetCData(XFA_Attribute::ContentType, wsContentType, false,
@@ -2756,10 +2757,10 @@
   LoadCaption(doc);
 
   const float fCapReserve = caption->GetReserve();
-  const XFA_AttributeEnum iCapPlacement = caption->GetPlacementType();
+  const XFA_AttributeValue iCapPlacement = caption->GetPlacementType();
   const bool bReserveExit = fCapReserve > 0.01;
-  const bool bVert = iCapPlacement == XFA_AttributeEnum::Top ||
-                     iCapPlacement == XFA_AttributeEnum::Bottom;
+  const bool bVert = iCapPlacement == XFA_AttributeValue::Top ||
+                     iCapPlacement == XFA_AttributeValue::Bottom;
   CXFA_TextLayout* pCapTextLayout =
       m_pLayoutData->AsFieldLayoutData()->m_pCapTextLayout.get();
   if (pCapTextLayout) {
@@ -2815,17 +2816,18 @@
   pSize->height += rtUIMargin.top + rtUIMargin.height;
   if (szCap.width > 0 && szCap.height > 0) {
     CXFA_Caption* caption = GetCaptionIfExists();
-    XFA_AttributeEnum placement = caption ? caption->GetPlacementType()
-                                          : CXFA_Caption::kDefaultPlacementType;
+    XFA_AttributeValue placement = caption
+                                       ? caption->GetPlacementType()
+                                       : CXFA_Caption::kDefaultPlacementType;
     switch (placement) {
-      case XFA_AttributeEnum::Left:
-      case XFA_AttributeEnum::Right:
-      case XFA_AttributeEnum::Inline: {
+      case XFA_AttributeValue::Left:
+      case XFA_AttributeValue::Right:
+      case XFA_AttributeValue::Inline: {
         pSize->width += szCap.width;
         pSize->height = std::max(pSize->height, szCap.height);
       } break;
-      case XFA_AttributeEnum::Top:
-      case XFA_AttributeEnum::Bottom: {
+      case XFA_AttributeValue::Top:
+      case XFA_AttributeValue::Bottom: {
         pSize->height += szCap.height;
         pSize->width = std::max(pSize->width, szCap.width);
         break;
@@ -2914,15 +2916,15 @@
     CFX_SizeF szCap;
     CalcCaptionSize(doc, &szCap);
     bool bCapExit = szCap.width > 0.01 && szCap.height > 0.01;
-    XFA_AttributeEnum iCapPlacement = XFA_AttributeEnum::Unknown;
+    XFA_AttributeValue iCapPlacement = XFA_AttributeValue::Unknown;
     if (bCapExit) {
       CXFA_Caption* caption = GetCaptionIfExists();
       iCapPlacement = caption ? caption->GetPlacementType()
                               : CXFA_Caption::kDefaultPlacementType;
       switch (iCapPlacement) {
-        case XFA_AttributeEnum::Left:
-        case XFA_AttributeEnum::Right:
-        case XFA_AttributeEnum::Inline: {
+        case XFA_AttributeValue::Left:
+        case XFA_AttributeValue::Right:
+        case XFA_AttributeValue::Inline: {
           pSize->width -= szCap.width;
           break;
         }
@@ -2940,13 +2942,13 @@
     pSize->height += rtUIMargin.top + rtUIMargin.height;
     if (bCapExit) {
       switch (iCapPlacement) {
-        case XFA_AttributeEnum::Left:
-        case XFA_AttributeEnum::Right:
-        case XFA_AttributeEnum::Inline: {
+        case XFA_AttributeValue::Left:
+        case XFA_AttributeValue::Right:
+        case XFA_AttributeValue::Inline: {
           pSize->height = std::max(pSize->height, szCap.height);
         } break;
-        case XFA_AttributeEnum::Top:
-        case XFA_AttributeEnum::Bottom: {
+        case XFA_AttributeValue::Top:
+        case XFA_AttributeValue::Bottom: {
           pSize->height += szCap.height;
           break;
         }
@@ -3236,7 +3238,7 @@
     return true;
   }
 
-  XFA_AttributeEnum iCapPlacement = XFA_AttributeEnum::Unknown;
+  XFA_AttributeValue iCapPlacement = XFA_AttributeValue::Unknown;
   float fCapReserve = 0;
   if (iBlockIndex == 0) {
     CXFA_Caption* caption = GetCaptionIfExists();
@@ -3244,17 +3246,17 @@
       iCapPlacement = caption->GetPlacementType();
       fCapReserve = caption->GetReserve();
     }
-    if (iCapPlacement == XFA_AttributeEnum::Top &&
+    if (iCapPlacement == XFA_AttributeValue::Top &&
         *pCalcHeight < fCapReserve + fTopInset) {
       *pCalcHeight = 0;
       return true;
     }
-    if (iCapPlacement == XFA_AttributeEnum::Bottom &&
+    if (iCapPlacement == XFA_AttributeValue::Bottom &&
         m_pLayoutData->m_fWidgetHeight - fCapReserve - fBottomInset) {
       *pCalcHeight = 0;
       return true;
     }
-    if (iCapPlacement != XFA_AttributeEnum::Top)
+    if (iCapPlacement != XFA_AttributeValue::Top)
       fCapReserve = 0;
   }
   CXFA_FieldLayoutData* pFieldData = m_pLayoutData->AsFieldLayoutData();
@@ -3297,13 +3299,13 @@
       float fSpaceBelow = para->GetSpaceBelow();
       fHeight -= (fSpaceAbove + fSpaceBelow);
       switch (para->GetVerticalAlign()) {
-        case XFA_AttributeEnum::Top:
+        case XFA_AttributeValue::Top:
           fStartOffset += fSpaceAbove;
           break;
-        case XFA_AttributeEnum::Middle:
+        case XFA_AttributeValue::Middle:
           fStartOffset += ((fHeight - fTextHeight) / 2 + fSpaceAbove);
           break;
-        case XFA_AttributeEnum::Bottom:
+        case XFA_AttributeValue::Bottom:
           fStartOffset += (fHeight - fTextHeight + fSpaceAbove);
           break;
         default:
@@ -3326,20 +3328,20 @@
 
   XFA_VERSION version = docView->GetDoc()->GetXFADoc()->GetCurVersionMode();
   bool bCanSplitNoContent = false;
-  XFA_AttributeEnum eLayoutMode = GetParent()
-                                      ->JSObject()
-                                      ->TryEnum(XFA_Attribute::Layout, true)
-                                      .value_or(XFA_AttributeEnum::Position);
-  if ((eLayoutMode == XFA_AttributeEnum::Position ||
-       eLayoutMode == XFA_AttributeEnum::Tb ||
-       eLayoutMode == XFA_AttributeEnum::Row ||
-       eLayoutMode == XFA_AttributeEnum::Table) &&
+  XFA_AttributeValue eLayoutMode = GetParent()
+                                       ->JSObject()
+                                       ->TryEnum(XFA_Attribute::Layout, true)
+                                       .value_or(XFA_AttributeValue::Position);
+  if ((eLayoutMode == XFA_AttributeValue::Position ||
+       eLayoutMode == XFA_AttributeValue::Tb ||
+       eLayoutMode == XFA_AttributeValue::Row ||
+       eLayoutMode == XFA_AttributeValue::Table) &&
       version > XFA_VERSION_208) {
     bCanSplitNoContent = true;
   }
-  if ((eLayoutMode == XFA_AttributeEnum::Tb ||
-       eLayoutMode == XFA_AttributeEnum::Row ||
-       eLayoutMode == XFA_AttributeEnum::Table) &&
+  if ((eLayoutMode == XFA_AttributeValue::Tb ||
+       eLayoutMode == XFA_AttributeValue::Row ||
+       eLayoutMode == XFA_AttributeValue::Table) &&
       version <= XFA_VERSION_208) {
     if (fStartOffset < *pCalcHeight) {
       bCanSplitNoContent = true;
@@ -3768,7 +3770,7 @@
   CXFA_Node* pUIChild = GetUIChildNode();
   if (pUIChild) {
     return pUIChild->JSObject()->GetEnum(XFA_Attribute::CommitOn) ==
-           XFA_AttributeEnum::Select;
+           XFA_AttributeValue::Select;
   }
   return true;
 }
@@ -3782,7 +3784,7 @@
   CXFA_Node* pUIChild = GetUIChildNode();
   if (pUIChild) {
     return pUIChild->JSObject()->GetEnum(XFA_Attribute::Open) ==
-           XFA_AttributeEnum::MultiSelect;
+           XFA_AttributeValue::MultiSelect;
   }
   return false;
 }
@@ -3792,9 +3794,9 @@
   if (!pUIChild)
     return false;
 
-  XFA_AttributeEnum attr = pUIChild->JSObject()->GetEnum(XFA_Attribute::Open);
-  return attr == XFA_AttributeEnum::Always ||
-         attr == XFA_AttributeEnum::MultiSelect;
+  XFA_AttributeValue attr = pUIChild->JSObject()->GetEnum(XFA_Attribute::Open);
+  return attr == XFA_AttributeValue::Always ||
+         attr == XFA_AttributeValue::MultiSelect;
 }
 
 int32_t CXFA_Node::CountChoiceListItems(bool bSaveValue) {
@@ -4074,12 +4076,12 @@
     CXFA_Node* pNode = listitems[0];
     pNode->JSObject()->SetBoolean(XFA_Attribute::Save, false, false);
     pNode->JSObject()->SetEnum(XFA_Attribute::Presence,
-                               XFA_AttributeEnum::Visible, false);
+                               XFA_AttributeValue::Visible, false);
     CXFA_Node* pSaveItems = CreateSamePacketNode(XFA_Element::Items);
     InsertChild(-1, pSaveItems);
     pSaveItems->JSObject()->SetBoolean(XFA_Attribute::Save, true, false);
     pSaveItems->JSObject()->SetEnum(XFA_Attribute::Presence,
-                                    XFA_AttributeEnum::Hidden, false);
+                                    XFA_AttributeValue::Hidden, false);
     CXFA_Node* pListNode = pNode->GetFirstChild();
     int32_t i = 0;
     while (pListNode) {
@@ -4218,7 +4220,7 @@
   CXFA_Node* pUIChild = GetUIChildNode();
   if (pUIChild) {
     return pUIChild->JSObject()->GetEnum(XFA_Attribute::HScrollPolicy) ==
-           XFA_AttributeEnum::Off;
+           XFA_AttributeValue::Off;
   }
   return false;
 }
@@ -4227,7 +4229,7 @@
   CXFA_Node* pUIChild = GetUIChildNode();
   if (pUIChild) {
     return pUIChild->JSObject()->GetEnum(XFA_Attribute::VScrollPolicy) ==
-           XFA_AttributeEnum::Off;
+           XFA_AttributeValue::Off;
   }
   return false;
 }
@@ -4661,11 +4663,11 @@
 }
 
 bool CXFA_Node::PresenceRequiresSpace() const {
-  XFA_AttributeEnum ePresence = JSObject()
-                                    ->TryEnum(XFA_Attribute::Presence, true)
-                                    .value_or(XFA_AttributeEnum::Visible);
-  return ePresence == XFA_AttributeEnum::Visible ||
-         ePresence == XFA_AttributeEnum::Invisible;
+  XFA_AttributeValue ePresence = JSObject()
+                                     ->TryEnum(XFA_Attribute::Presence, true)
+                                     .value_or(XFA_AttributeValue::Visible);
+  return ePresence == XFA_AttributeValue::Visible ||
+         ePresence == XFA_AttributeValue::Invisible;
 }
 
 void CXFA_Node::SetToXML(const WideString& value) {
diff --git a/xfa/fxfa/parser/cxfa_node.h b/xfa/fxfa/parser/cxfa_node.h
index 196d28c..8a934a2 100644
--- a/xfa/fxfa/parser/cxfa_node.h
+++ b/xfa/fxfa/parser/cxfa_node.h
@@ -83,8 +83,8 @@
     void* default_value;
   };
 
-  static ByteStringView AttributeEnumToName(XFA_AttributeEnum item);
-  static Optional<XFA_AttributeEnum> NameToAttributeEnum(
+  static ByteStringView AttributeEnumToName(XFA_AttributeValue item);
+  static Optional<XFA_AttributeValue> NameToAttributeEnum(
       const WideStringView& name);
   static XFA_Attribute NameToAttribute(const WideStringView& name);
   static WideString AttributeToName(XFA_Attribute attr);
@@ -198,7 +198,7 @@
   CXFA_Node* GetContainerNode();
   LocaleIface* GetLocale();
   Optional<WideString> GetLocaleName();
-  XFA_AttributeEnum GetIntact();
+  XFA_AttributeValue GetIntact();
 
   CXFA_Node* GetFirstChildByName(const WideStringView& wsNodeName) const;
   CXFA_Node* GetFirstChildByName(uint32_t dwNodeNameHash) const;
@@ -222,7 +222,7 @@
   Optional<int32_t> GetDefaultInteger(XFA_Attribute attr) const;
   Optional<CXFA_Measurement> GetDefaultMeasurement(XFA_Attribute attr) const;
   Optional<WideString> GetDefaultCData(XFA_Attribute attr) const;
-  Optional<XFA_AttributeEnum> GetDefaultEnum(XFA_Attribute attr) const;
+  Optional<XFA_AttributeValue> GetDefaultEnum(XFA_Attribute attr) const;
 
   bool IsOpenAccess();
 
@@ -252,7 +252,7 @@
   CXFA_Node* GetExclGroupIfExists();
 
   int32_t ProcessEvent(CXFA_FFDocView* docView,
-                       XFA_AttributeEnum iActivity,
+                       XFA_AttributeValue iActivity,
                        CXFA_EventParam* pEventParam);
   int32_t ProcessCalculate(CXFA_FFDocView* docView);
   int32_t ProcessValidate(CXFA_FFDocView* docView, int32_t iFlags);
@@ -275,7 +275,7 @@
 
   void SetWidgetReady() { is_widget_ready_ = true; }
   bool IsWidgetReady() const { return is_widget_ready_; }
-  std::vector<CXFA_Event*> GetEventByActivity(XFA_AttributeEnum iActivity,
+  std::vector<CXFA_Event*> GetEventByActivity(XFA_AttributeValue iActivity,
                                               bool bIsFormReady);
 
   void ResetData();
diff --git a/xfa/fxfa/parser/cxfa_node_unittest.cpp b/xfa/fxfa/parser/cxfa_node_unittest.cpp
index 7b3c09d..80ddd90 100644
--- a/xfa/fxfa/parser/cxfa_node_unittest.cpp
+++ b/xfa/fxfa/parser/cxfa_node_unittest.cpp
@@ -59,10 +59,11 @@
 TEST_F(CXFANodeTest, GetAttributeEnumByName) {
   EXPECT_FALSE(!!CXFA_Node::NameToAttributeEnum(L""));
   EXPECT_FALSE(!!CXFA_Node::NameToAttributeEnum(L"nonesuch"));
-  EXPECT_EQ(XFA_AttributeEnum::Asterisk, *CXFA_Node::NameToAttributeEnum(L"*"));
-  EXPECT_EQ(XFA_AttributeEnum::Visible,
+  EXPECT_EQ(XFA_AttributeValue::Asterisk,
+            *CXFA_Node::NameToAttributeEnum(L"*"));
+  EXPECT_EQ(XFA_AttributeValue::Visible,
             *CXFA_Node::NameToAttributeEnum(L"visible"));
-  EXPECT_EQ(XFA_AttributeEnum::Lowered,
+  EXPECT_EQ(XFA_AttributeValue::Lowered,
             *CXFA_Node::NameToAttributeEnum(L"lowered"));
 }
 
diff --git a/xfa/fxfa/parser/cxfa_numberpattern.cpp b/xfa/fxfa/parser/cxfa_numberpattern.cpp
index 545ecfa..4d8ca1b 100644
--- a/xfa/fxfa/parser/cxfa_numberpattern.cpp
+++ b/xfa/fxfa/parser/cxfa_numberpattern.cpp
@@ -10,7 +10,7 @@
 
 const CXFA_Node::AttributeData kNumberPatternAttributeData[] = {
     {XFA_Attribute::Name, XFA_AttributeType::Enum,
-     (void*)XFA_AttributeEnum::Numeric},
+     (void*)XFA_AttributeValue::Numeric},
     {XFA_Attribute::Unknown, XFA_AttributeType::Integer, nullptr}};
 
 constexpr wchar_t kNumberPatternName[] = L"numberPattern";
diff --git a/xfa/fxfa/parser/cxfa_numbersymbol.cpp b/xfa/fxfa/parser/cxfa_numbersymbol.cpp
index 3342cd2..582b12b 100644
--- a/xfa/fxfa/parser/cxfa_numbersymbol.cpp
+++ b/xfa/fxfa/parser/cxfa_numbersymbol.cpp
@@ -10,7 +10,7 @@
 
 const CXFA_Node::AttributeData kNumberSymbolAttributeData[] = {
     {XFA_Attribute::Name, XFA_AttributeType::Enum,
-     (void*)XFA_AttributeEnum::Decimal},
+     (void*)XFA_AttributeValue::Decimal},
     {XFA_Attribute::Unknown, XFA_AttributeType::Integer, nullptr}};
 
 constexpr wchar_t kNumberSymbolName[] = L"numberSymbol";
diff --git a/xfa/fxfa/parser/cxfa_numericedit.cpp b/xfa/fxfa/parser/cxfa_numericedit.cpp
index bdc4868..20e0e41 100644
--- a/xfa/fxfa/parser/cxfa_numericedit.cpp
+++ b/xfa/fxfa/parser/cxfa_numericedit.cpp
@@ -22,7 +22,7 @@
     {XFA_Attribute::Use, XFA_AttributeType::CData, nullptr},
     {XFA_Attribute::Usehref, XFA_AttributeType::CData, nullptr},
     {XFA_Attribute::HScrollPolicy, XFA_AttributeType::Enum,
-     (void*)XFA_AttributeEnum::Auto},
+     (void*)XFA_AttributeValue::Auto},
     {XFA_Attribute::Unknown, XFA_AttributeType::Integer, nullptr}};
 
 constexpr wchar_t kNumericEditName[] = L"numericEdit";
diff --git a/xfa/fxfa/parser/cxfa_oids.cpp b/xfa/fxfa/parser/cxfa_oids.cpp
index 75ab0b9..4d76434 100644
--- a/xfa/fxfa/parser/cxfa_oids.cpp
+++ b/xfa/fxfa/parser/cxfa_oids.cpp
@@ -15,7 +15,7 @@
     {XFA_Attribute::Id, XFA_AttributeType::CData, nullptr},
     {XFA_Attribute::Use, XFA_AttributeType::CData, nullptr},
     {XFA_Attribute::Type, XFA_AttributeType::Enum,
-     (void*)XFA_AttributeEnum::Optional},
+     (void*)XFA_AttributeValue::Optional},
     {XFA_Attribute::Usehref, XFA_AttributeType::CData, nullptr},
     {XFA_Attribute::Unknown, XFA_AttributeType::Integer, nullptr}};
 
diff --git a/xfa/fxfa/parser/cxfa_pagearea.cpp b/xfa/fxfa/parser/cxfa_pagearea.cpp
index b67efbc..9462f29 100644
--- a/xfa/fxfa/parser/cxfa_pagearea.cpp
+++ b/xfa/fxfa/parser/cxfa_pagearea.cpp
@@ -22,15 +22,15 @@
     {XFA_Attribute::Name, XFA_AttributeType::CData, nullptr},
     {XFA_Attribute::Use, XFA_AttributeType::CData, nullptr},
     {XFA_Attribute::PagePosition, XFA_AttributeType::Enum,
-     (void*)XFA_AttributeEnum::Any},
+     (void*)XFA_AttributeValue::Any},
     {XFA_Attribute::OddOrEven, XFA_AttributeType::Enum,
-     (void*)XFA_AttributeEnum::Any},
+     (void*)XFA_AttributeValue::Any},
     {XFA_Attribute::Relevant, XFA_AttributeType::CData, nullptr},
     {XFA_Attribute::InitialNumber, XFA_AttributeType::Integer, (void*)1},
     {XFA_Attribute::Usehref, XFA_AttributeType::CData, nullptr},
     {XFA_Attribute::Numbered, XFA_AttributeType::Integer, (void*)1},
     {XFA_Attribute::BlankOrNotBlank, XFA_AttributeType::Enum,
-     (void*)XFA_AttributeEnum::Any},
+     (void*)XFA_AttributeValue::Any},
     {XFA_Attribute::Unknown, XFA_AttributeType::Integer, nullptr}};
 
 constexpr wchar_t kPageAreaName[] = L"pageArea";
diff --git a/xfa/fxfa/parser/cxfa_pageset.cpp b/xfa/fxfa/parser/cxfa_pageset.cpp
index 74f13b9..350651e 100644
--- a/xfa/fxfa/parser/cxfa_pageset.cpp
+++ b/xfa/fxfa/parser/cxfa_pageset.cpp
@@ -20,10 +20,10 @@
     {XFA_Attribute::Name, XFA_AttributeType::CData, nullptr},
     {XFA_Attribute::Use, XFA_AttributeType::CData, nullptr},
     {XFA_Attribute::Relation, XFA_AttributeType::Enum,
-     (void*)XFA_AttributeEnum::OrderedOccurrence},
+     (void*)XFA_AttributeValue::OrderedOccurrence},
     {XFA_Attribute::Relevant, XFA_AttributeType::CData, nullptr},
     {XFA_Attribute::DuplexImposition, XFA_AttributeType::Enum,
-     (void*)XFA_AttributeEnum::LongEdge},
+     (void*)XFA_AttributeValue::LongEdge},
     {XFA_Attribute::Usehref, XFA_AttributeType::CData, nullptr},
     {XFA_Attribute::Unknown, XFA_AttributeType::Integer, nullptr}};
 
diff --git a/xfa/fxfa/parser/cxfa_para.cpp b/xfa/fxfa/parser/cxfa_para.cpp
index cb1312d..9c7243b 100644
--- a/xfa/fxfa/parser/cxfa_para.cpp
+++ b/xfa/fxfa/parser/cxfa_para.cpp
@@ -18,7 +18,7 @@
 const CXFA_Node::AttributeData kParaAttributeData[] = {
     {XFA_Attribute::Id, XFA_AttributeType::CData, nullptr},
     {XFA_Attribute::HAlign, XFA_AttributeType::Enum,
-     (void*)XFA_AttributeEnum::Left},
+     (void*)XFA_AttributeValue::Left},
     {XFA_Attribute::TextIndent, XFA_AttributeType::Measure, (void*)L"0in"},
     {XFA_Attribute::Use, XFA_AttributeType::CData, nullptr},
     {XFA_Attribute::Widows, XFA_AttributeType::Integer, (void*)0},
@@ -28,7 +28,7 @@
     {XFA_Attribute::Preserve, XFA_AttributeType::CData, nullptr},
     {XFA_Attribute::SpaceBelow, XFA_AttributeType::Measure, (void*)L"0in"},
     {XFA_Attribute::VAlign, XFA_AttributeType::Enum,
-     (void*)XFA_AttributeEnum::Top},
+     (void*)XFA_AttributeValue::Top},
     {XFA_Attribute::TabDefault, XFA_AttributeType::CData, nullptr},
     {XFA_Attribute::TabStops, XFA_AttributeType::CData, nullptr},
     {XFA_Attribute::Orphans, XFA_AttributeType::Integer, (void*)0},
@@ -54,16 +54,16 @@
 
 CXFA_Para::~CXFA_Para() {}
 
-XFA_AttributeEnum CXFA_Para::GetHorizontalAlign() {
+XFA_AttributeValue CXFA_Para::GetHorizontalAlign() {
   return JSObject()
       ->TryEnum(XFA_Attribute::HAlign, true)
-      .value_or(XFA_AttributeEnum::Left);
+      .value_or(XFA_AttributeValue::Left);
 }
 
-XFA_AttributeEnum CXFA_Para::GetVerticalAlign() {
+XFA_AttributeValue CXFA_Para::GetVerticalAlign() {
   return JSObject()
       ->TryEnum(XFA_Attribute::VAlign, true)
-      .value_or(XFA_AttributeEnum::Top);
+      .value_or(XFA_AttributeValue::Top);
 }
 
 float CXFA_Para::GetLineHeight() {
diff --git a/xfa/fxfa/parser/cxfa_para.h b/xfa/fxfa/parser/cxfa_para.h
index 7fd39a6..735a199 100644
--- a/xfa/fxfa/parser/cxfa_para.h
+++ b/xfa/fxfa/parser/cxfa_para.h
@@ -14,8 +14,8 @@
   CXFA_Para(CXFA_Document* doc, XFA_PacketType packet);
   ~CXFA_Para() override;
 
-  XFA_AttributeEnum GetHorizontalAlign();
-  XFA_AttributeEnum GetVerticalAlign();
+  XFA_AttributeValue GetHorizontalAlign();
+  XFA_AttributeValue GetVerticalAlign();
   float GetLineHeight();
   float GetMarginLeft();
   float GetMarginRight();
diff --git a/xfa/fxfa/parser/cxfa_passwordedit.cpp b/xfa/fxfa/parser/cxfa_passwordedit.cpp
index d16d35a..35612f6 100644
--- a/xfa/fxfa/parser/cxfa_passwordedit.cpp
+++ b/xfa/fxfa/parser/cxfa_passwordedit.cpp
@@ -21,7 +21,7 @@
     {XFA_Attribute::PasswordChar, XFA_AttributeType::CData, (void*)L"*"},
     {XFA_Attribute::Usehref, XFA_AttributeType::CData, nullptr},
     {XFA_Attribute::HScrollPolicy, XFA_AttributeType::Enum,
-     (void*)XFA_AttributeEnum::Auto},
+     (void*)XFA_AttributeValue::Auto},
     {XFA_Attribute::Unknown, XFA_AttributeType::Integer, nullptr}};
 
 constexpr wchar_t kPasswordEditName[] = L"passwordEdit";
diff --git a/xfa/fxfa/parser/cxfa_pattern.cpp b/xfa/fxfa/parser/cxfa_pattern.cpp
index 81391c9..f5c2e78 100644
--- a/xfa/fxfa/parser/cxfa_pattern.cpp
+++ b/xfa/fxfa/parser/cxfa_pattern.cpp
@@ -21,7 +21,7 @@
     {XFA_Attribute::Id, XFA_AttributeType::CData, nullptr},
     {XFA_Attribute::Use, XFA_AttributeType::CData, nullptr},
     {XFA_Attribute::Type, XFA_AttributeType::Enum,
-     (void*)XFA_AttributeEnum::CrossHatch},
+     (void*)XFA_AttributeValue::CrossHatch},
     {XFA_Attribute::Usehref, XFA_AttributeType::CData, nullptr},
     {XFA_Attribute::Unknown, XFA_AttributeType::Integer, nullptr}};
 
@@ -46,7 +46,7 @@
   return GetChild<CXFA_Color>(0, XFA_Element::Color, false);
 }
 
-XFA_AttributeEnum CXFA_Pattern::GetType() {
+XFA_AttributeValue CXFA_Pattern::GetType() {
   return JSObject()->GetEnum(XFA_Attribute::Type);
 }
 
@@ -60,19 +60,19 @@
 
   FX_HatchStyle iHatch = FX_HatchStyle::Cross;
   switch (GetType()) {
-    case XFA_AttributeEnum::CrossDiagonal:
+    case XFA_AttributeValue::CrossDiagonal:
       iHatch = FX_HatchStyle::DiagonalCross;
       break;
-    case XFA_AttributeEnum::DiagonalLeft:
+    case XFA_AttributeValue::DiagonalLeft:
       iHatch = FX_HatchStyle::ForwardDiagonal;
       break;
-    case XFA_AttributeEnum::DiagonalRight:
+    case XFA_AttributeValue::DiagonalRight:
       iHatch = FX_HatchStyle::BackwardDiagonal;
       break;
-    case XFA_AttributeEnum::Horizontal:
+    case XFA_AttributeValue::Horizontal:
       iHatch = FX_HatchStyle::Horizontal;
       break;
-    case XFA_AttributeEnum::Vertical:
+    case XFA_AttributeValue::Vertical:
       iHatch = FX_HatchStyle::Vertical;
       break;
     default:
diff --git a/xfa/fxfa/parser/cxfa_pattern.h b/xfa/fxfa/parser/cxfa_pattern.h
index 04119c4..bf5c526 100644
--- a/xfa/fxfa/parser/cxfa_pattern.h
+++ b/xfa/fxfa/parser/cxfa_pattern.h
@@ -16,7 +16,8 @@
 
 class CXFA_Pattern final : public CXFA_Node {
  public:
-  static constexpr XFA_AttributeEnum kDefaultType = XFA_AttributeEnum::Unknown;
+  static constexpr XFA_AttributeValue kDefaultType =
+      XFA_AttributeValue::Unknown;
 
   CXFA_Pattern(CXFA_Document* doc, XFA_PacketType packet);
   ~CXFA_Pattern() override;
@@ -28,7 +29,7 @@
             const CFX_Matrix& matrix);
 
  private:
-  XFA_AttributeEnum GetType();
+  XFA_AttributeValue GetType();
   CXFA_Color* GetColorIfExists();
 };
 
diff --git a/xfa/fxfa/parser/cxfa_query.cpp b/xfa/fxfa/parser/cxfa_query.cpp
index b38f238..dd0c617 100644
--- a/xfa/fxfa/parser/cxfa_query.cpp
+++ b/xfa/fxfa/parser/cxfa_query.cpp
@@ -20,7 +20,7 @@
     {XFA_Attribute::Name, XFA_AttributeType::CData, nullptr},
     {XFA_Attribute::Use, XFA_AttributeType::CData, nullptr},
     {XFA_Attribute::CommandType, XFA_AttributeType::Enum,
-     (void*)XFA_AttributeEnum::Unknown},
+     (void*)XFA_AttributeValue::Unknown},
     {XFA_Attribute::Usehref, XFA_AttributeType::CData, nullptr},
     {XFA_Attribute::Unknown, XFA_AttributeType::Integer, nullptr}};
 
diff --git a/xfa/fxfa/parser/cxfa_radial.cpp b/xfa/fxfa/parser/cxfa_radial.cpp
index aaf028d..0543b07 100644
--- a/xfa/fxfa/parser/cxfa_radial.cpp
+++ b/xfa/fxfa/parser/cxfa_radial.cpp
@@ -23,7 +23,7 @@
     {XFA_Attribute::Id, XFA_AttributeType::CData, nullptr},
     {XFA_Attribute::Use, XFA_AttributeType::CData, nullptr},
     {XFA_Attribute::Type, XFA_AttributeType::Enum,
-     (void*)XFA_AttributeEnum::ToEdge},
+     (void*)XFA_AttributeValue::ToEdge},
     {XFA_Attribute::Usehref, XFA_AttributeType::CData, nullptr},
     {XFA_Attribute::Unknown, XFA_AttributeType::Integer, nullptr}};
 
@@ -47,7 +47,8 @@
 bool CXFA_Radial::IsToEdge() {
   return JSObject()
              ->TryEnum(XFA_Attribute::Type, true)
-             .value_or(XFA_AttributeEnum::ToEdge) == XFA_AttributeEnum::ToEdge;
+             .value_or(XFA_AttributeValue::ToEdge) ==
+         XFA_AttributeValue::ToEdge;
 }
 
 CXFA_Color* CXFA_Radial::GetColorIfExists() {
diff --git a/xfa/fxfa/parser/cxfa_reasons.cpp b/xfa/fxfa/parser/cxfa_reasons.cpp
index d82700e..63ca32b 100644
--- a/xfa/fxfa/parser/cxfa_reasons.cpp
+++ b/xfa/fxfa/parser/cxfa_reasons.cpp
@@ -15,7 +15,7 @@
     {XFA_Attribute::Id, XFA_AttributeType::CData, nullptr},
     {XFA_Attribute::Use, XFA_AttributeType::CData, nullptr},
     {XFA_Attribute::Type, XFA_AttributeType::Enum,
-     (void*)XFA_AttributeEnum::Optional},
+     (void*)XFA_AttributeValue::Optional},
     {XFA_Attribute::Usehref, XFA_AttributeType::CData, nullptr},
     {XFA_Attribute::Unknown, XFA_AttributeType::Integer, nullptr}};
 
diff --git a/xfa/fxfa/parser/cxfa_recordset.cpp b/xfa/fxfa/parser/cxfa_recordset.cpp
index 33d929c..a16af23 100644
--- a/xfa/fxfa/parser/cxfa_recordset.cpp
+++ b/xfa/fxfa/parser/cxfa_recordset.cpp
@@ -17,16 +17,16 @@
     {XFA_Attribute::Max, XFA_AttributeType::Integer, (void*)0},
     {XFA_Attribute::Use, XFA_AttributeType::CData, nullptr},
     {XFA_Attribute::EofAction, XFA_AttributeType::Enum,
-     (void*)XFA_AttributeEnum::MoveLast},
+     (void*)XFA_AttributeValue::MoveLast},
     {XFA_Attribute::CursorType, XFA_AttributeType::Enum,
-     (void*)XFA_AttributeEnum::ForwardOnly},
+     (void*)XFA_AttributeValue::ForwardOnly},
     {XFA_Attribute::LockType, XFA_AttributeType::Enum,
-     (void*)XFA_AttributeEnum::ReadOnly},
+     (void*)XFA_AttributeValue::ReadOnly},
     {XFA_Attribute::BofAction, XFA_AttributeType::Enum,
-     (void*)XFA_AttributeEnum::MoveFirst},
+     (void*)XFA_AttributeValue::MoveFirst},
     {XFA_Attribute::Usehref, XFA_AttributeType::CData, nullptr},
     {XFA_Attribute::CursorLocation, XFA_AttributeType::Enum,
-     (void*)XFA_AttributeEnum::Client},
+     (void*)XFA_AttributeValue::Client},
     {XFA_Attribute::Unknown, XFA_AttributeType::Integer, nullptr}};
 
 constexpr wchar_t kRecordSetName[] = L"recordSet";
diff --git a/xfa/fxfa/parser/cxfa_rectangle.cpp b/xfa/fxfa/parser/cxfa_rectangle.cpp
index 0a7ebea..7f07097 100644
--- a/xfa/fxfa/parser/cxfa_rectangle.cpp
+++ b/xfa/fxfa/parser/cxfa_rectangle.cpp
@@ -25,7 +25,7 @@
     {XFA_Attribute::Use, XFA_AttributeType::CData, nullptr},
     {XFA_Attribute::Usehref, XFA_AttributeType::CData, nullptr},
     {XFA_Attribute::Hand, XFA_AttributeType::Enum,
-     (void*)XFA_AttributeEnum::Even},
+     (void*)XFA_AttributeValue::Even},
     {XFA_Attribute::Unknown, XFA_AttributeType::Integer, nullptr}};
 
 constexpr wchar_t kRectangleName[] = L"rectangle";
@@ -93,7 +93,7 @@
       stroke1 = strokes[0];
       if (stroke1->IsInverted())
         bSameStyles = false;
-      if (stroke1->GetJoinType() != XFA_AttributeEnum::Square)
+      if (stroke1->GetJoinType() != XFA_AttributeValue::Square)
         bSameStyles = false;
     }
   }
@@ -116,7 +116,7 @@
     float fRadius1 = corner1->GetRadius();
     float fRadius2 = corner2->GetRadius();
     bool bInverted = corner1->IsInverted();
-    bool bRound = corner1->GetJoinType() == XFA_AttributeEnum::Round;
+    bool bRound = corner1->GetJoinType() == XFA_AttributeValue::Round;
     if (bRound) {
       sy = FX_PI / 2;
     }
@@ -215,36 +215,36 @@
   for (int32_t i = 1; i < 8; i += 2) {
     float fThickness = std::fmax(0.0, strokes[i]->GetThickness());
     float fHalf = fThickness / 2;
-    XFA_AttributeEnum iHand = GetHand();
+    XFA_AttributeValue iHand = GetHand();
     switch (i) {
       case 1:
-        if (iHand == XFA_AttributeEnum::Left) {
+        if (iHand == XFA_AttributeValue::Left) {
           rtWidget.top -= fHalf;
           rtWidget.height += fHalf;
-        } else if (iHand == XFA_AttributeEnum::Right) {
+        } else if (iHand == XFA_AttributeValue::Right) {
           rtWidget.top += fHalf;
           rtWidget.height -= fHalf;
         }
         break;
       case 3:
-        if (iHand == XFA_AttributeEnum::Left) {
+        if (iHand == XFA_AttributeValue::Left) {
           rtWidget.width += fHalf;
-        } else if (iHand == XFA_AttributeEnum::Right) {
+        } else if (iHand == XFA_AttributeValue::Right) {
           rtWidget.width -= fHalf;
         }
         break;
       case 5:
-        if (iHand == XFA_AttributeEnum::Left) {
+        if (iHand == XFA_AttributeValue::Left) {
           rtWidget.height += fHalf;
-        } else if (iHand == XFA_AttributeEnum::Right) {
+        } else if (iHand == XFA_AttributeValue::Right) {
           rtWidget.height -= fHalf;
         }
         break;
       case 7:
-        if (iHand == XFA_AttributeEnum::Left) {
+        if (iHand == XFA_AttributeValue::Left) {
           rtWidget.left -= fHalf;
           rtWidget.width += fHalf;
-        } else if (iHand == XFA_AttributeEnum::Right) {
+        } else if (iHand == XFA_AttributeValue::Right) {
           rtWidget.left += fHalf;
           rtWidget.width -= fHalf;
         }
@@ -260,23 +260,23 @@
                             const CFX_Matrix& matrix) {
   bool bVisible;
   float fThickness;
-  XFA_AttributeEnum i3DType;
+  XFA_AttributeValue i3DType;
   std::tie(i3DType, bVisible, fThickness) = Get3DStyle();
-  if (i3DType != XFA_AttributeEnum::Unknown) {
+  if (i3DType != XFA_AttributeValue::Unknown) {
     if (!bVisible || fThickness < 0.001f)
       return;
 
     switch (i3DType) {
-      case XFA_AttributeEnum::Lowered:
+      case XFA_AttributeValue::Lowered:
         StrokeLowered(pGS, rtWidget, fThickness, matrix);
         break;
-      case XFA_AttributeEnum::Raised:
+      case XFA_AttributeValue::Raised:
         StrokeRaised(pGS, rtWidget, fThickness, matrix);
         break;
-      case XFA_AttributeEnum::Etched:
+      case XFA_AttributeValue::Etched:
         StrokeEtched(pGS, rtWidget, fThickness, matrix);
         break;
-      case XFA_AttributeEnum::Embossed:
+      case XFA_AttributeValue::Embossed:
         StrokeEmbossed(pGS, rtWidget, fThickness, matrix);
         break;
       default:
@@ -313,7 +313,7 @@
       stroke1 = strokes[0];
       if (stroke1->IsInverted())
         bSameStyles = false;
-      if (stroke1->GetJoinType() != XFA_AttributeEnum::Square)
+      if (stroke1->GetJoinType() != XFA_AttributeValue::Square)
         bSameStyles = false;
     }
   }
@@ -457,7 +457,7 @@
   bool bInverted = corner1->IsInverted();
   float offsetY = 0.0f;
   float offsetX = 0.0f;
-  bool bRound = corner1->GetJoinType() == XFA_AttributeEnum::Round;
+  bool bRound = corner1->GetJoinType() == XFA_AttributeValue::Round;
   float halfAfter = 0.0f;
   float halfBefore = 0.0f;
 
diff --git a/xfa/fxfa/parser/cxfa_script.cpp b/xfa/fxfa/parser/cxfa_script.cpp
index 97adb9d..3f40c36 100644
--- a/xfa/fxfa/parser/cxfa_script.cpp
+++ b/xfa/fxfa/parser/cxfa_script.cpp
@@ -22,7 +22,7 @@
     {XFA_Attribute::Use, XFA_AttributeType::CData, nullptr},
     {XFA_Attribute::ContentType, XFA_AttributeType::CData, nullptr},
     {XFA_Attribute::RunAt, XFA_AttributeType::Enum,
-     (void*)XFA_AttributeEnum::Client},
+     (void*)XFA_AttributeValue::Client},
     {XFA_Attribute::Binding, XFA_AttributeType::CData, nullptr},
     {XFA_Attribute::Usehref, XFA_AttributeType::CData, nullptr},
     {XFA_Attribute::Desc, XFA_AttributeType::CData, nullptr},
@@ -59,7 +59,7 @@
   return Type::Unknown;
 }
 
-XFA_AttributeEnum CXFA_Script::GetRunAt() {
+XFA_AttributeValue CXFA_Script::GetRunAt() {
   return JSObject()->GetEnum(XFA_Attribute::RunAt);
 }
 
diff --git a/xfa/fxfa/parser/cxfa_script.h b/xfa/fxfa/parser/cxfa_script.h
index 5f48f45..f559284 100644
--- a/xfa/fxfa/parser/cxfa_script.h
+++ b/xfa/fxfa/parser/cxfa_script.h
@@ -22,7 +22,7 @@
   ~CXFA_Script() override;
 
   Type GetContentType();
-  XFA_AttributeEnum GetRunAt();
+  XFA_AttributeValue GetRunAt();
   WideString GetExpression();
 };
 
diff --git a/xfa/fxfa/parser/cxfa_signature.cpp b/xfa/fxfa/parser/cxfa_signature.cpp
index 27a1c87..626755a 100644
--- a/xfa/fxfa/parser/cxfa_signature.cpp
+++ b/xfa/fxfa/parser/cxfa_signature.cpp
@@ -19,7 +19,7 @@
     {XFA_Attribute::Id, XFA_AttributeType::CData, nullptr},
     {XFA_Attribute::Use, XFA_AttributeType::CData, nullptr},
     {XFA_Attribute::Type, XFA_AttributeType::Enum,
-     (void*)XFA_AttributeEnum::PDF1_3},
+     (void*)XFA_AttributeValue::PDF1_3},
     {XFA_Attribute::Usehref, XFA_AttributeType::CData, nullptr},
     {XFA_Attribute::Unknown, XFA_AttributeType::Integer, nullptr}};
 
diff --git a/xfa/fxfa/parser/cxfa_signdata.cpp b/xfa/fxfa/parser/cxfa_signdata.cpp
index 183d62d..74966d5 100644
--- a/xfa/fxfa/parser/cxfa_signdata.cpp
+++ b/xfa/fxfa/parser/cxfa_signdata.cpp
@@ -20,7 +20,7 @@
     {XFA_Attribute::Ref, XFA_AttributeType::CData, nullptr},
     {XFA_Attribute::Use, XFA_AttributeType::CData, nullptr},
     {XFA_Attribute::Operation, XFA_AttributeType::Enum,
-     (void*)XFA_AttributeEnum::Sign},
+     (void*)XFA_AttributeValue::Sign},
     {XFA_Attribute::Usehref, XFA_AttributeType::CData, nullptr},
     {XFA_Attribute::Target, XFA_AttributeType::CData, nullptr},
     {XFA_Attribute::Unknown, XFA_AttributeType::Integer, nullptr}};
diff --git a/xfa/fxfa/parser/cxfa_signing.cpp b/xfa/fxfa/parser/cxfa_signing.cpp
index e1316fa..a4b4df7 100644
--- a/xfa/fxfa/parser/cxfa_signing.cpp
+++ b/xfa/fxfa/parser/cxfa_signing.cpp
@@ -15,7 +15,7 @@
     {XFA_Attribute::Id, XFA_AttributeType::CData, nullptr},
     {XFA_Attribute::Use, XFA_AttributeType::CData, nullptr},
     {XFA_Attribute::Type, XFA_AttributeType::Enum,
-     (void*)XFA_AttributeEnum::Optional},
+     (void*)XFA_AttributeValue::Optional},
     {XFA_Attribute::Usehref, XFA_AttributeType::CData, nullptr},
     {XFA_Attribute::Unknown, XFA_AttributeType::Integer, nullptr}};
 
diff --git a/xfa/fxfa/parser/cxfa_speak.cpp b/xfa/fxfa/parser/cxfa_speak.cpp
index 5d9f306..3043789 100644
--- a/xfa/fxfa/parser/cxfa_speak.cpp
+++ b/xfa/fxfa/parser/cxfa_speak.cpp
@@ -16,7 +16,7 @@
     {XFA_Attribute::Rid, XFA_AttributeType::CData, nullptr},
     {XFA_Attribute::Use, XFA_AttributeType::CData, nullptr},
     {XFA_Attribute::Priority, XFA_AttributeType::Enum,
-     (void*)XFA_AttributeEnum::Custom},
+     (void*)XFA_AttributeValue::Custom},
     {XFA_Attribute::Usehref, XFA_AttributeType::CData, nullptr},
     {XFA_Attribute::Disable, XFA_AttributeType::Boolean, (void*)0},
     {XFA_Attribute::Unknown, XFA_AttributeType::Integer, nullptr}};
diff --git a/xfa/fxfa/parser/cxfa_staple.cpp b/xfa/fxfa/parser/cxfa_staple.cpp
index e1fb759..d2efc17 100644
--- a/xfa/fxfa/parser/cxfa_staple.cpp
+++ b/xfa/fxfa/parser/cxfa_staple.cpp
@@ -10,7 +10,7 @@
 
 const CXFA_Node::AttributeData kStapleAttributeData[] = {
     {XFA_Attribute::Mode, XFA_AttributeType::Enum,
-     (void*)XFA_AttributeEnum::UsePrinterSetting},
+     (void*)XFA_AttributeValue::UsePrinterSetting},
     {XFA_Attribute::Desc, XFA_AttributeType::CData, nullptr},
     {XFA_Attribute::Lock, XFA_AttributeType::Integer, (void*)0},
     {XFA_Attribute::Unknown, XFA_AttributeType::Integer, nullptr}};
diff --git a/xfa/fxfa/parser/cxfa_stroke.cpp b/xfa/fxfa/parser/cxfa_stroke.cpp
index a19dd3c..a85442f 100644
--- a/xfa/fxfa/parser/cxfa_stroke.cpp
+++ b/xfa/fxfa/parser/cxfa_stroke.cpp
@@ -17,21 +17,21 @@
 #include "xfa/fxgraphics/cxfa_graphics.h"
 
 void XFA_StrokeTypeSetLineDash(CXFA_Graphics* pGraphics,
-                               XFA_AttributeEnum iStrokeType,
-                               XFA_AttributeEnum iCapType) {
+                               XFA_AttributeValue iStrokeType,
+                               XFA_AttributeValue iCapType) {
   switch (iStrokeType) {
-    case XFA_AttributeEnum::DashDot: {
+    case XFA_AttributeValue::DashDot: {
       float dashArray[] = {4, 1, 2, 1};
-      if (iCapType != XFA_AttributeEnum::Butt) {
+      if (iCapType != XFA_AttributeValue::Butt) {
         dashArray[1] = 2;
         dashArray[3] = 2;
       }
       pGraphics->SetLineDash(0, dashArray, FX_ArraySize(dashArray));
       break;
     }
-    case XFA_AttributeEnum::DashDotDot: {
+    case XFA_AttributeValue::DashDotDot: {
       float dashArray[] = {4, 1, 2, 1, 2, 1};
-      if (iCapType != XFA_AttributeEnum::Butt) {
+      if (iCapType != XFA_AttributeValue::Butt) {
         dashArray[1] = 2;
         dashArray[3] = 2;
         dashArray[5] = 2;
@@ -39,17 +39,17 @@
       pGraphics->SetLineDash(0, dashArray, FX_ArraySize(dashArray));
       break;
     }
-    case XFA_AttributeEnum::Dashed: {
+    case XFA_AttributeValue::Dashed: {
       float dashArray[] = {5, 1};
-      if (iCapType != XFA_AttributeEnum::Butt)
+      if (iCapType != XFA_AttributeValue::Butt)
         dashArray[1] = 2;
 
       pGraphics->SetLineDash(0, dashArray, FX_ArraySize(dashArray));
       break;
     }
-    case XFA_AttributeEnum::Dotted: {
+    case XFA_AttributeValue::Dotted: {
       float dashArray[] = {2, 1};
-      if (iCapType != XFA_AttributeEnum::Butt)
+      if (iCapType != XFA_AttributeValue::Butt)
         dashArray[1] = 2;
 
       pGraphics->SetLineDash(0, dashArray, FX_ArraySize(dashArray));
@@ -83,17 +83,17 @@
 CXFA_Stroke::~CXFA_Stroke() = default;
 
 bool CXFA_Stroke::IsVisible() {
-  XFA_AttributeEnum presence = JSObject()
-                                   ->TryEnum(XFA_Attribute::Presence, true)
-                                   .value_or(XFA_AttributeEnum::Visible);
-  return presence == XFA_AttributeEnum::Visible;
+  XFA_AttributeValue presence = JSObject()
+                                    ->TryEnum(XFA_Attribute::Presence, true)
+                                    .value_or(XFA_AttributeValue::Visible);
+  return presence == XFA_AttributeValue::Visible;
 }
 
-XFA_AttributeEnum CXFA_Stroke::GetCapType() {
+XFA_AttributeValue CXFA_Stroke::GetCapType() {
   return JSObject()->GetEnum(XFA_Attribute::Cap);
 }
 
-XFA_AttributeEnum CXFA_Stroke::GetStrokeType() {
+XFA_AttributeValue CXFA_Stroke::GetStrokeType() {
   return JSObject()->GetEnum(XFA_Attribute::Stroke);
 }
 
@@ -134,7 +134,7 @@
                               false);
 }
 
-XFA_AttributeEnum CXFA_Stroke::GetJoinType() {
+XFA_AttributeValue CXFA_Stroke::GetJoinType() {
   return JSObject()->GetEnum(XFA_Attribute::Join);
 }
 
@@ -186,7 +186,7 @@
   pGS->SetLineWidth(fThickness);
   pGS->EnableActOnDash();
   pGS->SetLineCap(CFX_GraphStateData::LineCapButt);
-  XFA_StrokeTypeSetLineDash(pGS, GetStrokeType(), XFA_AttributeEnum::Butt);
+  XFA_StrokeTypeSetLineDash(pGS, GetStrokeType(), XFA_AttributeValue::Butt);
   pGS->SetStrokeColor(CXFA_GEColor(GetColor()));
   pGS->StrokePath(pPath, &matrix);
   pGS->RestoreGraphState();
diff --git a/xfa/fxfa/parser/cxfa_stroke.h b/xfa/fxfa/parser/cxfa_stroke.h
index ed41997..4c4036c 100644
--- a/xfa/fxfa/parser/cxfa_stroke.h
+++ b/xfa/fxfa/parser/cxfa_stroke.h
@@ -23,8 +23,8 @@
 class CXFA_Node;
 
 void XFA_StrokeTypeSetLineDash(CXFA_Graphics* pGraphics,
-                               XFA_AttributeEnum iStrokeType,
-                               XFA_AttributeEnum iCapType);
+                               XFA_AttributeValue iStrokeType,
+                               XFA_AttributeValue iCapType);
 
 class CXFA_Stroke : public CXFA_Node {
  public:
@@ -34,9 +34,9 @@
   bool IsVisible();
   bool IsInverted();
 
-  XFA_AttributeEnum GetCapType();
-  XFA_AttributeEnum GetStrokeType();
-  XFA_AttributeEnum GetJoinType();
+  XFA_AttributeValue GetCapType();
+  XFA_AttributeValue GetStrokeType();
+  XFA_AttributeValue GetJoinType();
   float GetRadius() const;
   float GetThickness() const;
 
diff --git a/xfa/fxfa/parser/cxfa_subform.cpp b/xfa/fxfa/parser/cxfa_subform.cpp
index d27443f..0a9b9ca 100644
--- a/xfa/fxfa/parser/cxfa_subform.cpp
+++ b/xfa/fxfa/parser/cxfa_subform.cpp
@@ -28,35 +28,35 @@
     {XFA_Attribute::Y, XFA_AttributeType::Measure, (void*)L"0in"},
     {XFA_Attribute::Id, XFA_AttributeType::CData, nullptr},
     {XFA_Attribute::HAlign, XFA_AttributeType::Enum,
-     (void*)XFA_AttributeEnum::Left},
+     (void*)XFA_AttributeValue::Left},
     {XFA_Attribute::Name, XFA_AttributeType::CData, nullptr},
     {XFA_Attribute::Use, XFA_AttributeType::CData, nullptr},
     {XFA_Attribute::AllowMacro, XFA_AttributeType::Boolean, (void*)0},
     {XFA_Attribute::ColumnWidths, XFA_AttributeType::CData, nullptr},
     {XFA_Attribute::Access, XFA_AttributeType::Enum,
-     (void*)XFA_AttributeEnum::Open},
+     (void*)XFA_AttributeValue::Open},
     {XFA_Attribute::Presence, XFA_AttributeType::Enum,
-     (void*)XFA_AttributeEnum::Visible},
+     (void*)XFA_AttributeValue::Visible},
     {XFA_Attribute::VAlign, XFA_AttributeType::Enum,
-     (void*)XFA_AttributeEnum::Top},
+     (void*)XFA_AttributeValue::Top},
     {XFA_Attribute::MaxH, XFA_AttributeType::Measure, (void*)L"0in"},
     {XFA_Attribute::MaxW, XFA_AttributeType::Measure, (void*)L"0in"},
     {XFA_Attribute::MinH, XFA_AttributeType::Measure, (void*)L"0in"},
     {XFA_Attribute::MinW, XFA_AttributeType::Measure, (void*)L"0in"},
     {XFA_Attribute::Layout, XFA_AttributeType::Enum,
-     (void*)XFA_AttributeEnum::Position},
+     (void*)XFA_AttributeValue::Position},
     {XFA_Attribute::Relevant, XFA_AttributeType::CData, nullptr},
     {XFA_Attribute::MergeMode, XFA_AttributeType::Enum,
-     (void*)XFA_AttributeEnum::ConsumeData},
+     (void*)XFA_AttributeValue::ConsumeData},
     {XFA_Attribute::ColSpan, XFA_AttributeType::Integer, (void*)1},
     {XFA_Attribute::Usehref, XFA_AttributeType::CData, nullptr},
     {XFA_Attribute::Locale, XFA_AttributeType::CData, nullptr},
     {XFA_Attribute::AnchorType, XFA_AttributeType::Enum,
-     (void*)XFA_AttributeEnum::TopLeft},
+     (void*)XFA_AttributeValue::TopLeft},
     {XFA_Attribute::RestoreState, XFA_AttributeType::Enum,
-     (void*)XFA_AttributeEnum::Manual},
+     (void*)XFA_AttributeValue::Manual},
     {XFA_Attribute::Scope, XFA_AttributeType::Enum,
-     (void*)XFA_AttributeEnum::Name},
+     (void*)XFA_AttributeValue::Name},
     {XFA_Attribute::Unknown, XFA_AttributeType::Integer, nullptr}};
 
 constexpr wchar_t kSubformName[] = L"subform";
diff --git a/xfa/fxfa/parser/cxfa_subformset.cpp b/xfa/fxfa/parser/cxfa_subformset.cpp
index ccf18d7..1f61346 100644
--- a/xfa/fxfa/parser/cxfa_subformset.cpp
+++ b/xfa/fxfa/parser/cxfa_subformset.cpp
@@ -21,7 +21,7 @@
     {XFA_Attribute::Name, XFA_AttributeType::CData, nullptr},
     {XFA_Attribute::Use, XFA_AttributeType::CData, nullptr},
     {XFA_Attribute::Relation, XFA_AttributeType::Enum,
-     (void*)XFA_AttributeEnum::Ordered},
+     (void*)XFA_AttributeValue::Ordered},
     {XFA_Attribute::Relevant, XFA_AttributeType::CData, nullptr},
     {XFA_Attribute::Usehref, XFA_AttributeType::CData, nullptr},
     {XFA_Attribute::Unknown, XFA_AttributeType::Integer, nullptr}};
diff --git a/xfa/fxfa/parser/cxfa_subjectdns.cpp b/xfa/fxfa/parser/cxfa_subjectdns.cpp
index edcf2f5..a99662e 100644
--- a/xfa/fxfa/parser/cxfa_subjectdns.cpp
+++ b/xfa/fxfa/parser/cxfa_subjectdns.cpp
@@ -15,7 +15,7 @@
     {XFA_Attribute::Id, XFA_AttributeType::CData, nullptr},
     {XFA_Attribute::Use, XFA_AttributeType::CData, nullptr},
     {XFA_Attribute::Type, XFA_AttributeType::Enum,
-     (void*)XFA_AttributeEnum::Optional},
+     (void*)XFA_AttributeValue::Optional},
     {XFA_Attribute::Usehref, XFA_AttributeType::CData, nullptr},
     {XFA_Attribute::Unknown, XFA_AttributeType::Integer, nullptr}};
 
diff --git a/xfa/fxfa/parser/cxfa_submit.cpp b/xfa/fxfa/parser/cxfa_submit.cpp
index 08da1e6..9d9c816 100644
--- a/xfa/fxfa/parser/cxfa_submit.cpp
+++ b/xfa/fxfa/parser/cxfa_submit.cpp
@@ -18,7 +18,7 @@
     {XFA_Attribute::Id, XFA_AttributeType::CData, nullptr},
     {XFA_Attribute::Use, XFA_AttributeType::CData, nullptr},
     {XFA_Attribute::Format, XFA_AttributeType::Enum,
-     (void*)XFA_AttributeEnum::Xdp},
+     (void*)XFA_AttributeValue::Xdp},
     {XFA_Attribute::EmbedPDF, XFA_AttributeType::Boolean, (void*)0},
     {XFA_Attribute::Usehref, XFA_AttributeType::CData, nullptr},
     {XFA_Attribute::Target, XFA_AttributeType::CData, nullptr},
@@ -47,7 +47,7 @@
   return JSObject()->GetBoolean(XFA_Attribute::EmbedPDF);
 }
 
-XFA_AttributeEnum CXFA_Submit::GetSubmitFormat() {
+XFA_AttributeValue CXFA_Submit::GetSubmitFormat() {
   return JSObject()->GetEnum(XFA_Attribute::Format);
 }
 
diff --git a/xfa/fxfa/parser/cxfa_submit.h b/xfa/fxfa/parser/cxfa_submit.h
index 8f7b4bf..13cad86 100644
--- a/xfa/fxfa/parser/cxfa_submit.h
+++ b/xfa/fxfa/parser/cxfa_submit.h
@@ -16,7 +16,7 @@
   ~CXFA_Submit() override;
 
   bool IsSubmitEmbedPDF();
-  XFA_AttributeEnum GetSubmitFormat();
+  XFA_AttributeValue GetSubmitFormat();
   WideString GetSubmitTarget();
   WideString GetSubmitXDPContent();
 };
diff --git a/xfa/fxfa/parser/cxfa_template.cpp b/xfa/fxfa/parser/cxfa_template.cpp
index 28c3456..fe0609e 100644
--- a/xfa/fxfa/parser/cxfa_template.cpp
+++ b/xfa/fxfa/parser/cxfa_template.cpp
@@ -19,7 +19,7 @@
 const CXFA_Node::AttributeData kTemplateAttributeData[] = {
     {XFA_Attribute::Desc, XFA_AttributeType::CData, nullptr},
     {XFA_Attribute::BaseProfile, XFA_AttributeType::Enum,
-     (void*)XFA_AttributeEnum::Full},
+     (void*)XFA_AttributeValue::Full},
     {XFA_Attribute::Lock, XFA_AttributeType::Integer, (void*)0},
     {XFA_Attribute::Unknown, XFA_AttributeType::Integer, nullptr}};
 
diff --git a/xfa/fxfa/parser/cxfa_textedit.cpp b/xfa/fxfa/parser/cxfa_textedit.cpp
index c752db7..881c194 100644
--- a/xfa/fxfa/parser/cxfa_textedit.cpp
+++ b/xfa/fxfa/parser/cxfa_textedit.cpp
@@ -20,13 +20,13 @@
 const CXFA_Node::AttributeData kTextEditAttributeData[] = {
     {XFA_Attribute::Id, XFA_AttributeType::CData, nullptr},
     {XFA_Attribute::VScrollPolicy, XFA_AttributeType::Enum,
-     (void*)XFA_AttributeEnum::Auto},
+     (void*)XFA_AttributeValue::Auto},
     {XFA_Attribute::Use, XFA_AttributeType::CData, nullptr},
     {XFA_Attribute::AllowRichText, XFA_AttributeType::Boolean, (void*)0},
     {XFA_Attribute::MultiLine, XFA_AttributeType::Boolean, (void*)0},
     {XFA_Attribute::Usehref, XFA_AttributeType::CData, nullptr},
     {XFA_Attribute::HScrollPolicy, XFA_AttributeType::Enum,
-     (void*)XFA_AttributeEnum::Auto},
+     (void*)XFA_AttributeValue::Auto},
     {XFA_Attribute::Unknown, XFA_AttributeType::Integer, nullptr}};
 
 constexpr wchar_t kTextEditName[] = L"textEdit";
diff --git a/xfa/fxfa/parser/cxfa_timepattern.cpp b/xfa/fxfa/parser/cxfa_timepattern.cpp
index 75041e1..f8cb7cf 100644
--- a/xfa/fxfa/parser/cxfa_timepattern.cpp
+++ b/xfa/fxfa/parser/cxfa_timepattern.cpp
@@ -10,7 +10,7 @@
 
 const CXFA_Node::AttributeData kTimePatternAttributeData[] = {
     {XFA_Attribute::Name, XFA_AttributeType::Enum,
-     (void*)XFA_AttributeEnum::Med},
+     (void*)XFA_AttributeValue::Med},
     {XFA_Attribute::Unknown, XFA_AttributeType::Integer, nullptr}};
 
 constexpr wchar_t kTimePatternName[] = L"timePattern";
diff --git a/xfa/fxfa/parser/cxfa_timestamp.cpp b/xfa/fxfa/parser/cxfa_timestamp.cpp
index 246d581..3258abc 100644
--- a/xfa/fxfa/parser/cxfa_timestamp.cpp
+++ b/xfa/fxfa/parser/cxfa_timestamp.cpp
@@ -14,7 +14,7 @@
     {XFA_Attribute::Id, XFA_AttributeType::CData, nullptr},
     {XFA_Attribute::Use, XFA_AttributeType::CData, nullptr},
     {XFA_Attribute::Type, XFA_AttributeType::Enum,
-     (void*)XFA_AttributeEnum::Optional},
+     (void*)XFA_AttributeValue::Optional},
     {XFA_Attribute::Server, XFA_AttributeType::CData, nullptr},
     {XFA_Attribute::Usehref, XFA_AttributeType::CData, nullptr},
     {XFA_Attribute::Unknown, XFA_AttributeType::Integer, nullptr}};
diff --git a/xfa/fxfa/parser/cxfa_traverse.cpp b/xfa/fxfa/parser/cxfa_traverse.cpp
index ee8b448..3325ef8 100644
--- a/xfa/fxfa/parser/cxfa_traverse.cpp
+++ b/xfa/fxfa/parser/cxfa_traverse.cpp
@@ -20,7 +20,7 @@
     {XFA_Attribute::Ref, XFA_AttributeType::CData, nullptr},
     {XFA_Attribute::Use, XFA_AttributeType::CData, nullptr},
     {XFA_Attribute::Operation, XFA_AttributeType::Enum,
-     (void*)XFA_AttributeEnum::Next},
+     (void*)XFA_AttributeValue::Next},
     {XFA_Attribute::Usehref, XFA_AttributeType::CData, nullptr},
     {XFA_Attribute::Unknown, XFA_AttributeType::Integer, nullptr}};
 
diff --git a/xfa/fxfa/parser/cxfa_validate.cpp b/xfa/fxfa/parser/cxfa_validate.cpp
index f5776a4..233b252 100644
--- a/xfa/fxfa/parser/cxfa_validate.cpp
+++ b/xfa/fxfa/parser/cxfa_validate.cpp
@@ -25,13 +25,13 @@
     {XFA_Attribute::Id, XFA_AttributeType::CData, nullptr},
     {XFA_Attribute::Use, XFA_AttributeType::CData, nullptr},
     {XFA_Attribute::ScriptTest, XFA_AttributeType::Enum,
-     (void*)XFA_AttributeEnum::Error},
+     (void*)XFA_AttributeValue::Error},
     {XFA_Attribute::NullTest, XFA_AttributeType::Enum,
-     (void*)XFA_AttributeEnum::Disabled},
+     (void*)XFA_AttributeValue::Disabled},
     {XFA_Attribute::Usehref, XFA_AttributeType::CData, nullptr},
     {XFA_Attribute::Desc, XFA_AttributeType::CData, nullptr},
     {XFA_Attribute::FormatTest, XFA_AttributeType::Enum,
-     (void*)XFA_AttributeEnum::Warning},
+     (void*)XFA_AttributeValue::Warning},
     {XFA_Attribute::Lock, XFA_AttributeType::Integer, (void*)0},
     {XFA_Attribute::Unknown, XFA_AttributeType::Integer, nullptr}};
 
@@ -56,22 +56,22 @@
 
 CXFA_Validate::~CXFA_Validate() {}
 
-XFA_AttributeEnum CXFA_Validate::GetFormatTest() {
+XFA_AttributeValue CXFA_Validate::GetFormatTest() {
   return JSObject()->GetEnum(XFA_Attribute::FormatTest);
 }
 
 void CXFA_Validate::SetNullTest(const WideString& wsValue) {
-  Optional<XFA_AttributeEnum> item =
+  Optional<XFA_AttributeValue> item =
       CXFA_Node::NameToAttributeEnum(wsValue.AsStringView());
   JSObject()->SetEnum(XFA_Attribute::NullTest,
-                      item ? *item : XFA_AttributeEnum::Disabled, false);
+                      item ? *item : XFA_AttributeValue::Disabled, false);
 }
 
-XFA_AttributeEnum CXFA_Validate::GetNullTest() {
+XFA_AttributeValue CXFA_Validate::GetNullTest() {
   return JSObject()->GetEnum(XFA_Attribute::NullTest);
 }
 
-XFA_AttributeEnum CXFA_Validate::GetScriptTest() {
+XFA_AttributeValue CXFA_Validate::GetScriptTest() {
   return JSObject()->GetEnum(XFA_Attribute::ScriptTest);
 }
 
diff --git a/xfa/fxfa/parser/cxfa_validate.h b/xfa/fxfa/parser/cxfa_validate.h
index 140886f..0018cf9 100644
--- a/xfa/fxfa/parser/cxfa_validate.h
+++ b/xfa/fxfa/parser/cxfa_validate.h
@@ -16,17 +16,17 @@
   CXFA_Validate(CXFA_Document* doc, XFA_PacketType packet);
   ~CXFA_Validate() override;
 
-  XFA_AttributeEnum GetFormatTest();
+  XFA_AttributeValue GetFormatTest();
   WideString GetFormatMessageText();
   void SetFormatMessageText(const WideString& wsMessage);
 
-  XFA_AttributeEnum GetNullTest();
+  XFA_AttributeValue GetNullTest();
   void SetNullTest(const WideString& wsValue);
 
   WideString GetNullMessageText();
   void SetNullMessageText(const WideString& wsMessage);
 
-  XFA_AttributeEnum GetScriptTest();
+  XFA_AttributeValue GetScriptTest();
   WideString GetScriptMessageText();
   void SetScriptMessageText(const WideString& wsMessage);
 
diff --git a/xfa/fxfa/parser/cxfa_versioncontrol.cpp b/xfa/fxfa/parser/cxfa_versioncontrol.cpp
index 5d839c5..78db73c 100644
--- a/xfa/fxfa/parser/cxfa_versioncontrol.cpp
+++ b/xfa/fxfa/parser/cxfa_versioncontrol.cpp
@@ -10,11 +10,11 @@
 
 const CXFA_Node::AttributeData kVersionControlAttributeData[] = {
     {XFA_Attribute::SourceBelow, XFA_AttributeType::Enum,
-     (void*)XFA_AttributeEnum::Update},
+     (void*)XFA_AttributeValue::Update},
     {XFA_Attribute::OutputBelow, XFA_AttributeType::Enum,
-     (void*)XFA_AttributeEnum::Warn},
+     (void*)XFA_AttributeValue::Warn},
     {XFA_Attribute::SourceAbove, XFA_AttributeType::Enum,
-     (void*)XFA_AttributeEnum::Warn},
+     (void*)XFA_AttributeValue::Warn},
     {XFA_Attribute::Lock, XFA_AttributeType::Integer, (void*)0},
     {XFA_Attribute::Unknown, XFA_AttributeType::Integer, nullptr}};
 
diff --git a/xfa/fxfa/parser/xfa_basic_data.h b/xfa/fxfa/parser/xfa_basic_data.h
index 9adb4f8..d2e887d 100644
--- a/xfa/fxfa/parser/xfa_basic_data.h
+++ b/xfa/fxfa/parser/xfa_basic_data.h
@@ -11,7 +11,7 @@
 
 #include "xfa/fxfa/fxfa_basic.h"
 
-extern const XFA_AttributeEnumInfo g_XFAEnumData[];
+extern const XFA_AttributeValueInfo g_XFAEnumData[];
 extern const size_t g_szXFAEnumCount;
 
 extern const XFA_SCRIPTHIERARCHY g_XFAScriptIndex[];
diff --git a/xfa/fxfa/parser/xfa_basic_data_enum.cpp b/xfa/fxfa/parser/xfa_basic_data_enum.cpp
index bd73da8..dac21dd 100644
--- a/xfa/fxfa/parser/xfa_basic_data_enum.cpp
+++ b/xfa/fxfa/parser/xfa_basic_data_enum.cpp
@@ -12,289 +12,293 @@
 #undef INFO
 #define INFO(a, b, c) a, c, b
 
-const XFA_AttributeEnumInfo g_XFAEnumData[] = {
-    {INFO(0x2a, "*", XFA_AttributeEnum::Asterisk)},
-    {INFO(0x2f, "/", XFA_AttributeEnum::Slash)},
-    {INFO(0x5c, "\\", XFA_AttributeEnum::Backslash)},
-    {INFO(0x239bd, "on", XFA_AttributeEnum::On)},
-    {INFO(0x25356, "tb", XFA_AttributeEnum::Tb)},
-    {INFO(0x25885, "up", XFA_AttributeEnum::Up)},
-    {INFO(0x91b281, "metaData", XFA_AttributeEnum::MetaData)},
-    {INFO(0x1f8dedb, "delegate", XFA_AttributeEnum::Delegate)},
-    {INFO(0x2a6c55a, "postSubmit", XFA_AttributeEnum::PostSubmit)},
-    {INFO(0x31b19c1, "name", XFA_AttributeEnum::Name)},
-    {INFO(0x378a38a, "cross", XFA_AttributeEnum::Cross)},
-    {INFO(0x3848b3f, "next", XFA_AttributeEnum::Next)},
-    {INFO(0x48b6670, "none", XFA_AttributeEnum::None)},
-    {INFO(0x51aafe5, "shortEdge", XFA_AttributeEnum::ShortEdge)},
+const XFA_AttributeValueInfo g_XFAEnumData[] = {
+    {INFO(0x2a, "*", XFA_AttributeValue::Asterisk)},
+    {INFO(0x2f, "/", XFA_AttributeValue::Slash)},
+    {INFO(0x5c, "\\", XFA_AttributeValue::Backslash)},
+    {INFO(0x239bd, "on", XFA_AttributeValue::On)},
+    {INFO(0x25356, "tb", XFA_AttributeValue::Tb)},
+    {INFO(0x25885, "up", XFA_AttributeValue::Up)},
+    {INFO(0x91b281, "metaData", XFA_AttributeValue::MetaData)},
+    {INFO(0x1f8dedb, "delegate", XFA_AttributeValue::Delegate)},
+    {INFO(0x2a6c55a, "postSubmit", XFA_AttributeValue::PostSubmit)},
+    {INFO(0x31b19c1, "name", XFA_AttributeValue::Name)},
+    {INFO(0x378a38a, "cross", XFA_AttributeValue::Cross)},
+    {INFO(0x3848b3f, "next", XFA_AttributeValue::Next)},
+    {INFO(0x48b6670, "none", XFA_AttributeValue::None)},
+    {INFO(0x51aafe5, "shortEdge", XFA_AttributeValue::ShortEdge)},
     {INFO(0x55264c4,
           "1mod10_1mod11",
-          XFA_AttributeEnum::Checksum_1mod10_1mod11)},
-    {INFO(0x5a5c519, "height", XFA_AttributeEnum::Height)},
-    {INFO(0x89ce549, "crossDiagonal", XFA_AttributeEnum::CrossDiagonal)},
-    {INFO(0x9f9d0f9, "all", XFA_AttributeEnum::All)},
-    {INFO(0x9f9db48, "any", XFA_AttributeEnum::Any)},
-    {INFO(0xa126261, "toRight", XFA_AttributeEnum::ToRight)},
-    {INFO(0xa36de29, "matchTemplate", XFA_AttributeEnum::MatchTemplate)},
-    {INFO(0xa48d040, "dpl", XFA_AttributeEnum::Dpl)},
-    {INFO(0xa559c05, "invisible", XFA_AttributeEnum::Invisible)},
-    {INFO(0xa7d48e3, "fit", XFA_AttributeEnum::Fit)},
-    {INFO(0xa8a8f80, "width", XFA_AttributeEnum::Width)},
-    {INFO(0xab466bb, "preSubmit", XFA_AttributeEnum::PreSubmit)},
-    {INFO(0xacc5785, "ipl", XFA_AttributeEnum::Ipl)},
-    {INFO(0xafab0f8, "flateCompress", XFA_AttributeEnum::FlateCompress)},
-    {INFO(0xb355816, "med", XFA_AttributeEnum::Med)},
-    {INFO(0xb69ef77, "odd", XFA_AttributeEnum::Odd)},
-    {INFO(0xb69f9bb, "off", XFA_AttributeEnum::Off)},
-    {INFO(0xb843dba, "pdf", XFA_AttributeEnum::Pdf)},
-    {INFO(0xbb912b8, "row", XFA_AttributeEnum::Row)},
-    {INFO(0xbedaf33, "top", XFA_AttributeEnum::Top)},
-    {INFO(0xc56afcc, "xdp", XFA_AttributeEnum::Xdp)},
-    {INFO(0xc56ba02, "xfd", XFA_AttributeEnum::Xfd)},
-    {INFO(0xc56ddf1, "xml", XFA_AttributeEnum::Xml)},
-    {INFO(0xc8b65f3, "zip", XFA_AttributeEnum::Zip)},
-    {INFO(0xc8b89d6, "zpl", XFA_AttributeEnum::Zpl)},
-    {INFO(0xf55d7ee, "visible", XFA_AttributeEnum::Visible)},
-    {INFO(0xfe3596a, "exclude", XFA_AttributeEnum::Exclude)},
-    {INFO(0x109d7ce7, "mouseEnter", XFA_AttributeEnum::MouseEnter)},
-    {INFO(0x10f1bc0c, "pair", XFA_AttributeEnum::Pair)},
-    {INFO(0x1154efe6, "filter", XFA_AttributeEnum::Filter)},
-    {INFO(0x125bc94b, "moveLast", XFA_AttributeEnum::MoveLast)},
-    {INFO(0x12e1f1f0, "exportAndImport", XFA_AttributeEnum::ExportAndImport)},
-    {INFO(0x13000c60, "push", XFA_AttributeEnum::Push)},
-    {INFO(0x138ee315, "portrait", XFA_AttributeEnum::Portrait)},
-    {INFO(0x14da2125, "default", XFA_AttributeEnum::Default)},
-    {INFO(0x157749a5, "storedProc", XFA_AttributeEnum::StoredProc)},
-    {INFO(0x16641198, "stayBOF", XFA_AttributeEnum::StayBOF)},
-    {INFO(0x16b2fc5b, "stayEOF", XFA_AttributeEnum::StayEOF)},
-    {INFO(0x17fad373, "postPrint", XFA_AttributeEnum::PostPrint)},
-    {INFO(0x193207d0, "usCarrier", XFA_AttributeEnum::UsCarrier)},
-    {INFO(0x193ade3e, "right", XFA_AttributeEnum::Right)},
-    {INFO(0x1bfc72d9, "preOpen", XFA_AttributeEnum::PreOpen)},
-    {INFO(0x1cc9317a, "actual", XFA_AttributeEnum::Actual)},
-    {INFO(0x1f31df1e, "rest", XFA_AttributeEnum::Rest)},
-    {INFO(0x1fb1bf14, "topCenter", XFA_AttributeEnum::TopCenter)},
-    {INFO(0x207de667, "standardSymbol", XFA_AttributeEnum::StandardSymbol)},
-    {INFO(0x2196a452, "initialize", XFA_AttributeEnum::Initialize)},
-    {INFO(0x23bd40c7, "justifyAll", XFA_AttributeEnum::JustifyAll)},
-    {INFO(0x247cf3e9, "normal", XFA_AttributeEnum::Normal)},
-    {INFO(0x25aa946b, "landscape", XFA_AttributeEnum::Landscape)},
-    {INFO(0x2739b5c9, "nonInteractive", XFA_AttributeEnum::NonInteractive)},
-    {INFO(0x27410f03, "mouseExit", XFA_AttributeEnum::MouseExit)},
-    {INFO(0x2854e62c, "minus", XFA_AttributeEnum::Minus)},
-    {INFO(0x287e936a, "diagonalLeft", XFA_AttributeEnum::DiagonalLeft)},
-    {INFO(0x2972a98f, "simplexPaginated", XFA_AttributeEnum::SimplexPaginated)},
-    {INFO(0x29d8225f, "document", XFA_AttributeEnum::Document)},
-    {INFO(0x2a9d3016, "warning", XFA_AttributeEnum::Warning)},
-    {INFO(0x2b35b6d9, "auto", XFA_AttributeEnum::Auto)},
-    {INFO(0x2c1653d9, "below", XFA_AttributeEnum::Below)},
-    {INFO(0x2c1f0540, "bottomLeft", XFA_AttributeEnum::BottomLeft)},
-    {INFO(0x2c44e816, "bottomCenter", XFA_AttributeEnum::BottomCenter)},
-    {INFO(0x2cd3e9f3, "tcpl", XFA_AttributeEnum::Tcpl)},
-    {INFO(0x2d08af85, "text", XFA_AttributeEnum::Text)},
-    {INFO(0x2dc478eb, "grouping", XFA_AttributeEnum::Grouping)},
-    {INFO(0x2ef3afdd, "secureSymbol", XFA_AttributeEnum::SecureSymbol)},
-    {INFO(0x2f2dd29a, "preExecute", XFA_AttributeEnum::PreExecute)},
-    {INFO(0x33c43dec, "docClose", XFA_AttributeEnum::DocClose)},
-    {INFO(0x33f25bb5, "keyset", XFA_AttributeEnum::Keyset)},
-    {INFO(0x34e363da, "vertical", XFA_AttributeEnum::Vertical)},
-    {INFO(0x361fa1b6, "preSave", XFA_AttributeEnum::PreSave)},
-    {INFO(0x36f1c6d8, "preSign", XFA_AttributeEnum::PreSign)},
-    {INFO(0x399f02b5, "bottom", XFA_AttributeEnum::Bottom)},
-    {INFO(0x3b0ab096, "toTop", XFA_AttributeEnum::ToTop)},
-    {INFO(0x3c752495, "verify", XFA_AttributeEnum::Verify)},
-    {INFO(0x3ce05d68, "first", XFA_AttributeEnum::First)},
-    {INFO(0x3ecead94, "contentArea", XFA_AttributeEnum::ContentArea)},
-    {INFO(0x40623b5b, "solid", XFA_AttributeEnum::Solid)},
-    {INFO(0x42c6cd8d, "pessimistic", XFA_AttributeEnum::Pessimistic)},
-    {INFO(0x43ddc6bf, "duplexPaginated", XFA_AttributeEnum::DuplexPaginated)},
-    {INFO(0x442f68c8, "round", XFA_AttributeEnum::Round)},
-    {INFO(0x45efb847, "remerge", XFA_AttributeEnum::Remerge)},
-    {INFO(0x46972265, "ordered", XFA_AttributeEnum::Ordered)},
-    {INFO(0x46f95531, "percent", XFA_AttributeEnum::Percent)},
-    {INFO(0x46fd25ae, "even", XFA_AttributeEnum::Even)},
-    {INFO(0x4731d6ba, "exit", XFA_AttributeEnum::Exit)},
-    {INFO(0x4977356b, "toolTip", XFA_AttributeEnum::ToolTip)},
+          XFA_AttributeValue::Checksum_1mod10_1mod11)},
+    {INFO(0x5a5c519, "height", XFA_AttributeValue::Height)},
+    {INFO(0x89ce549, "crossDiagonal", XFA_AttributeValue::CrossDiagonal)},
+    {INFO(0x9f9d0f9, "all", XFA_AttributeValue::All)},
+    {INFO(0x9f9db48, "any", XFA_AttributeValue::Any)},
+    {INFO(0xa126261, "toRight", XFA_AttributeValue::ToRight)},
+    {INFO(0xa36de29, "matchTemplate", XFA_AttributeValue::MatchTemplate)},
+    {INFO(0xa48d040, "dpl", XFA_AttributeValue::Dpl)},
+    {INFO(0xa559c05, "invisible", XFA_AttributeValue::Invisible)},
+    {INFO(0xa7d48e3, "fit", XFA_AttributeValue::Fit)},
+    {INFO(0xa8a8f80, "width", XFA_AttributeValue::Width)},
+    {INFO(0xab466bb, "preSubmit", XFA_AttributeValue::PreSubmit)},
+    {INFO(0xacc5785, "ipl", XFA_AttributeValue::Ipl)},
+    {INFO(0xafab0f8, "flateCompress", XFA_AttributeValue::FlateCompress)},
+    {INFO(0xb355816, "med", XFA_AttributeValue::Med)},
+    {INFO(0xb69ef77, "odd", XFA_AttributeValue::Odd)},
+    {INFO(0xb69f9bb, "off", XFA_AttributeValue::Off)},
+    {INFO(0xb843dba, "pdf", XFA_AttributeValue::Pdf)},
+    {INFO(0xbb912b8, "row", XFA_AttributeValue::Row)},
+    {INFO(0xbedaf33, "top", XFA_AttributeValue::Top)},
+    {INFO(0xc56afcc, "xdp", XFA_AttributeValue::Xdp)},
+    {INFO(0xc56ba02, "xfd", XFA_AttributeValue::Xfd)},
+    {INFO(0xc56ddf1, "xml", XFA_AttributeValue::Xml)},
+    {INFO(0xc8b65f3, "zip", XFA_AttributeValue::Zip)},
+    {INFO(0xc8b89d6, "zpl", XFA_AttributeValue::Zpl)},
+    {INFO(0xf55d7ee, "visible", XFA_AttributeValue::Visible)},
+    {INFO(0xfe3596a, "exclude", XFA_AttributeValue::Exclude)},
+    {INFO(0x109d7ce7, "mouseEnter", XFA_AttributeValue::MouseEnter)},
+    {INFO(0x10f1bc0c, "pair", XFA_AttributeValue::Pair)},
+    {INFO(0x1154efe6, "filter", XFA_AttributeValue::Filter)},
+    {INFO(0x125bc94b, "moveLast", XFA_AttributeValue::MoveLast)},
+    {INFO(0x12e1f1f0, "exportAndImport", XFA_AttributeValue::ExportAndImport)},
+    {INFO(0x13000c60, "push", XFA_AttributeValue::Push)},
+    {INFO(0x138ee315, "portrait", XFA_AttributeValue::Portrait)},
+    {INFO(0x14da2125, "default", XFA_AttributeValue::Default)},
+    {INFO(0x157749a5, "storedProc", XFA_AttributeValue::StoredProc)},
+    {INFO(0x16641198, "stayBOF", XFA_AttributeValue::StayBOF)},
+    {INFO(0x16b2fc5b, "stayEOF", XFA_AttributeValue::StayEOF)},
+    {INFO(0x17fad373, "postPrint", XFA_AttributeValue::PostPrint)},
+    {INFO(0x193207d0, "usCarrier", XFA_AttributeValue::UsCarrier)},
+    {INFO(0x193ade3e, "right", XFA_AttributeValue::Right)},
+    {INFO(0x1bfc72d9, "preOpen", XFA_AttributeValue::PreOpen)},
+    {INFO(0x1cc9317a, "actual", XFA_AttributeValue::Actual)},
+    {INFO(0x1f31df1e, "rest", XFA_AttributeValue::Rest)},
+    {INFO(0x1fb1bf14, "topCenter", XFA_AttributeValue::TopCenter)},
+    {INFO(0x207de667, "standardSymbol", XFA_AttributeValue::StandardSymbol)},
+    {INFO(0x2196a452, "initialize", XFA_AttributeValue::Initialize)},
+    {INFO(0x23bd40c7, "justifyAll", XFA_AttributeValue::JustifyAll)},
+    {INFO(0x247cf3e9, "normal", XFA_AttributeValue::Normal)},
+    {INFO(0x25aa946b, "landscape", XFA_AttributeValue::Landscape)},
+    {INFO(0x2739b5c9, "nonInteractive", XFA_AttributeValue::NonInteractive)},
+    {INFO(0x27410f03, "mouseExit", XFA_AttributeValue::MouseExit)},
+    {INFO(0x2854e62c, "minus", XFA_AttributeValue::Minus)},
+    {INFO(0x287e936a, "diagonalLeft", XFA_AttributeValue::DiagonalLeft)},
+    {INFO(0x2972a98f,
+          "simplexPaginated",
+          XFA_AttributeValue::SimplexPaginated)},
+    {INFO(0x29d8225f, "document", XFA_AttributeValue::Document)},
+    {INFO(0x2a9d3016, "warning", XFA_AttributeValue::Warning)},
+    {INFO(0x2b35b6d9, "auto", XFA_AttributeValue::Auto)},
+    {INFO(0x2c1653d9, "below", XFA_AttributeValue::Below)},
+    {INFO(0x2c1f0540, "bottomLeft", XFA_AttributeValue::BottomLeft)},
+    {INFO(0x2c44e816, "bottomCenter", XFA_AttributeValue::BottomCenter)},
+    {INFO(0x2cd3e9f3, "tcpl", XFA_AttributeValue::Tcpl)},
+    {INFO(0x2d08af85, "text", XFA_AttributeValue::Text)},
+    {INFO(0x2dc478eb, "grouping", XFA_AttributeValue::Grouping)},
+    {INFO(0x2ef3afdd, "secureSymbol", XFA_AttributeValue::SecureSymbol)},
+    {INFO(0x2f2dd29a, "preExecute", XFA_AttributeValue::PreExecute)},
+    {INFO(0x33c43dec, "docClose", XFA_AttributeValue::DocClose)},
+    {INFO(0x33f25bb5, "keyset", XFA_AttributeValue::Keyset)},
+    {INFO(0x34e363da, "vertical", XFA_AttributeValue::Vertical)},
+    {INFO(0x361fa1b6, "preSave", XFA_AttributeValue::PreSave)},
+    {INFO(0x36f1c6d8, "preSign", XFA_AttributeValue::PreSign)},
+    {INFO(0x399f02b5, "bottom", XFA_AttributeValue::Bottom)},
+    {INFO(0x3b0ab096, "toTop", XFA_AttributeValue::ToTop)},
+    {INFO(0x3c752495, "verify", XFA_AttributeValue::Verify)},
+    {INFO(0x3ce05d68, "first", XFA_AttributeValue::First)},
+    {INFO(0x3ecead94, "contentArea", XFA_AttributeValue::ContentArea)},
+    {INFO(0x40623b5b, "solid", XFA_AttributeValue::Solid)},
+    {INFO(0x42c6cd8d, "pessimistic", XFA_AttributeValue::Pessimistic)},
+    {INFO(0x43ddc6bf, "duplexPaginated", XFA_AttributeValue::DuplexPaginated)},
+    {INFO(0x442f68c8, "round", XFA_AttributeValue::Round)},
+    {INFO(0x45efb847, "remerge", XFA_AttributeValue::Remerge)},
+    {INFO(0x46972265, "ordered", XFA_AttributeValue::Ordered)},
+    {INFO(0x46f95531, "percent", XFA_AttributeValue::Percent)},
+    {INFO(0x46fd25ae, "even", XFA_AttributeValue::Even)},
+    {INFO(0x4731d6ba, "exit", XFA_AttributeValue::Exit)},
+    {INFO(0x4977356b, "toolTip", XFA_AttributeValue::ToolTip)},
     {INFO(0x49b980ee,
           "orderedOccurrence",
-          XFA_AttributeEnum::OrderedOccurrence)},
-    {INFO(0x4a7e2dfe, "readOnly", XFA_AttributeEnum::ReadOnly)},
-    {INFO(0x4c4e8acb, "currency", XFA_AttributeEnum::Currency)},
-    {INFO(0x4dcf25f8, "concat", XFA_AttributeEnum::Concat)},
-    {INFO(0x4febb826, "Thai", XFA_AttributeEnum::Thai)},
-    {INFO(0x50ef95b2, "embossed", XFA_AttributeEnum::Embossed)},
-    {INFO(0x516e35ce, "formdata", XFA_AttributeEnum::Formdata)},
-    {INFO(0x52fa6f0e, "Greek", XFA_AttributeEnum::Greek)},
-    {INFO(0x54034c2f, "decimal", XFA_AttributeEnum::Decimal)},
-    {INFO(0x542c7300, "select", XFA_AttributeEnum::Select)},
-    {INFO(0x551f0ae5, "longEdge", XFA_AttributeEnum::LongEdge)},
-    {INFO(0x55520a8a, "protected", XFA_AttributeEnum::Protected)},
-    {INFO(0x559f76f3, "bottomRight", XFA_AttributeEnum::BottomRight)},
-    {INFO(0x568cb500, "zero", XFA_AttributeEnum::Zero)},
-    {INFO(0x56bcecb7, "forwardOnly", XFA_AttributeEnum::ForwardOnly)},
-    {INFO(0x56bf456b, "docReady", XFA_AttributeEnum::DocReady)},
-    {INFO(0x573cb40c, "hidden", XFA_AttributeEnum::Hidden)},
-    {INFO(0x582e3424, "include", XFA_AttributeEnum::Include)},
-    {INFO(0x58a3dd29, "dashed", XFA_AttributeEnum::Dashed)},
-    {INFO(0x5955b22b, "multiSelect", XFA_AttributeEnum::MultiSelect)},
-    {INFO(0x598d5c53, "inactive", XFA_AttributeEnum::Inactive)},
-    {INFO(0x59c8f27d, "embed", XFA_AttributeEnum::Embed)},
-    {INFO(0x5e7555e8, "static", XFA_AttributeEnum::Static)},
-    {INFO(0x606d4def, "onEntry", XFA_AttributeEnum::OnEntry)},
-    {INFO(0x6195eafb, "Cyrillic", XFA_AttributeEnum::Cyrillic)},
-    {INFO(0x6491b0f3, "nonBlank", XFA_AttributeEnum::NonBlank)},
-    {INFO(0x67bef031, "topRight", XFA_AttributeEnum::TopRight)},
-    {INFO(0x67df5ebd, "Hebrew", XFA_AttributeEnum::Hebrew)},
-    {INFO(0x6aea98be, "topLeft", XFA_AttributeEnum::TopLeft)},
-    {INFO(0x6c51afc1, "center", XFA_AttributeEnum::Center)},
-    {INFO(0x7145e6bf, "moveFirst", XFA_AttributeEnum::MoveFirst)},
-    {INFO(0x7375465c, "diamond", XFA_AttributeEnum::Diamond)},
-    {INFO(0x7461aef4, "pageOdd", XFA_AttributeEnum::PageOdd)},
-    {INFO(0x75f8aeb2, "1mod10", XFA_AttributeEnum::Checksum_1mod10)},
-    {INFO(0x76d708e0, "Korean", XFA_AttributeEnum::Korean)},
-    {INFO(0x789f14d7, "aboveEmbedded", XFA_AttributeEnum::AboveEmbedded)},
-    {INFO(0x792ea39f, "zipCompress", XFA_AttributeEnum::ZipCompress)},
-    {INFO(0x7a5b7193, "numeric", XFA_AttributeEnum::Numeric)},
-    {INFO(0x7abec0d2, "circle", XFA_AttributeEnum::Circle)},
-    {INFO(0x7afbba38, "toBottom", XFA_AttributeEnum::ToBottom)},
-    {INFO(0x7b95e661, "inverted", XFA_AttributeEnum::Inverted)},
-    {INFO(0x7baca2e3, "update", XFA_AttributeEnum::Update)},
-    {INFO(0x7eb5da2c, "isoname", XFA_AttributeEnum::Isoname)},
-    {INFO(0x7f6fd3d7, "server", XFA_AttributeEnum::Server)},
-    {INFO(0x814f82b5, "position", XFA_AttributeEnum::Position)},
-    {INFO(0x82deacf0, "middleCenter", XFA_AttributeEnum::MiddleCenter)},
-    {INFO(0x83a49dc6, "optional", XFA_AttributeEnum::Optional)},
+          XFA_AttributeValue::OrderedOccurrence)},
+    {INFO(0x4a7e2dfe, "readOnly", XFA_AttributeValue::ReadOnly)},
+    {INFO(0x4c4e8acb, "currency", XFA_AttributeValue::Currency)},
+    {INFO(0x4dcf25f8, "concat", XFA_AttributeValue::Concat)},
+    {INFO(0x4febb826, "Thai", XFA_AttributeValue::Thai)},
+    {INFO(0x50ef95b2, "embossed", XFA_AttributeValue::Embossed)},
+    {INFO(0x516e35ce, "formdata", XFA_AttributeValue::Formdata)},
+    {INFO(0x52fa6f0e, "Greek", XFA_AttributeValue::Greek)},
+    {INFO(0x54034c2f, "decimal", XFA_AttributeValue::Decimal)},
+    {INFO(0x542c7300, "select", XFA_AttributeValue::Select)},
+    {INFO(0x551f0ae5, "longEdge", XFA_AttributeValue::LongEdge)},
+    {INFO(0x55520a8a, "protected", XFA_AttributeValue::Protected)},
+    {INFO(0x559f76f3, "bottomRight", XFA_AttributeValue::BottomRight)},
+    {INFO(0x568cb500, "zero", XFA_AttributeValue::Zero)},
+    {INFO(0x56bcecb7, "forwardOnly", XFA_AttributeValue::ForwardOnly)},
+    {INFO(0x56bf456b, "docReady", XFA_AttributeValue::DocReady)},
+    {INFO(0x573cb40c, "hidden", XFA_AttributeValue::Hidden)},
+    {INFO(0x582e3424, "include", XFA_AttributeValue::Include)},
+    {INFO(0x58a3dd29, "dashed", XFA_AttributeValue::Dashed)},
+    {INFO(0x5955b22b, "multiSelect", XFA_AttributeValue::MultiSelect)},
+    {INFO(0x598d5c53, "inactive", XFA_AttributeValue::Inactive)},
+    {INFO(0x59c8f27d, "embed", XFA_AttributeValue::Embed)},
+    {INFO(0x5e7555e8, "static", XFA_AttributeValue::Static)},
+    {INFO(0x606d4def, "onEntry", XFA_AttributeValue::OnEntry)},
+    {INFO(0x6195eafb, "Cyrillic", XFA_AttributeValue::Cyrillic)},
+    {INFO(0x6491b0f3, "nonBlank", XFA_AttributeValue::NonBlank)},
+    {INFO(0x67bef031, "topRight", XFA_AttributeValue::TopRight)},
+    {INFO(0x67df5ebd, "Hebrew", XFA_AttributeValue::Hebrew)},
+    {INFO(0x6aea98be, "topLeft", XFA_AttributeValue::TopLeft)},
+    {INFO(0x6c51afc1, "center", XFA_AttributeValue::Center)},
+    {INFO(0x7145e6bf, "moveFirst", XFA_AttributeValue::MoveFirst)},
+    {INFO(0x7375465c, "diamond", XFA_AttributeValue::Diamond)},
+    {INFO(0x7461aef4, "pageOdd", XFA_AttributeValue::PageOdd)},
+    {INFO(0x75f8aeb2, "1mod10", XFA_AttributeValue::Checksum_1mod10)},
+    {INFO(0x76d708e0, "Korean", XFA_AttributeValue::Korean)},
+    {INFO(0x789f14d7, "aboveEmbedded", XFA_AttributeValue::AboveEmbedded)},
+    {INFO(0x792ea39f, "zipCompress", XFA_AttributeValue::ZipCompress)},
+    {INFO(0x7a5b7193, "numeric", XFA_AttributeValue::Numeric)},
+    {INFO(0x7abec0d2, "circle", XFA_AttributeValue::Circle)},
+    {INFO(0x7afbba38, "toBottom", XFA_AttributeValue::ToBottom)},
+    {INFO(0x7b95e661, "inverted", XFA_AttributeValue::Inverted)},
+    {INFO(0x7baca2e3, "update", XFA_AttributeValue::Update)},
+    {INFO(0x7eb5da2c, "isoname", XFA_AttributeValue::Isoname)},
+    {INFO(0x7f6fd3d7, "server", XFA_AttributeValue::Server)},
+    {INFO(0x814f82b5, "position", XFA_AttributeValue::Position)},
+    {INFO(0x82deacf0, "middleCenter", XFA_AttributeValue::MiddleCenter)},
+    {INFO(0x83a49dc6, "optional", XFA_AttributeValue::Optional)},
     {INFO(0x861a116f,
           "usePrinterSetting",
-          XFA_AttributeEnum::UsePrinterSetting)},
-    {INFO(0x86701ce0, "outline", XFA_AttributeEnum::Outline)},
-    {INFO(0x8808385e, "indexChange", XFA_AttributeEnum::IndexChange)},
-    {INFO(0x891f4606, "change", XFA_AttributeEnum::Change)},
-    {INFO(0x89939f36, "pageArea", XFA_AttributeEnum::PageArea)},
-    {INFO(0x8b5c3b25, "once", XFA_AttributeEnum::Once)},
-    {INFO(0x8b5c6962, "only", XFA_AttributeEnum::Only)},
-    {INFO(0x8b90e1f2, "open", XFA_AttributeEnum::Open)},
-    {INFO(0x8bcfe96e, "caption", XFA_AttributeEnum::Caption)},
-    {INFO(0x8ce83ef8, "raised", XFA_AttributeEnum::Raised)},
-    {INFO(0x8d269cae, "justify", XFA_AttributeEnum::Justify)},
+          XFA_AttributeValue::UsePrinterSetting)},
+    {INFO(0x86701ce0, "outline", XFA_AttributeValue::Outline)},
+    {INFO(0x8808385e, "indexChange", XFA_AttributeValue::IndexChange)},
+    {INFO(0x891f4606, "change", XFA_AttributeValue::Change)},
+    {INFO(0x89939f36, "pageArea", XFA_AttributeValue::PageArea)},
+    {INFO(0x8b5c3b25, "once", XFA_AttributeValue::Once)},
+    {INFO(0x8b5c6962, "only", XFA_AttributeValue::Only)},
+    {INFO(0x8b90e1f2, "open", XFA_AttributeValue::Open)},
+    {INFO(0x8bcfe96e, "caption", XFA_AttributeValue::Caption)},
+    {INFO(0x8ce83ef8, "raised", XFA_AttributeValue::Raised)},
+    {INFO(0x8d269cae, "justify", XFA_AttributeValue::Justify)},
     {INFO(0x8fd520dc,
           "refAndDescendants",
-          XFA_AttributeEnum::RefAndDescendants)},
-    {INFO(0x9041d4b0, "short", XFA_AttributeEnum::Short)},
-    {INFO(0x90c94426, "pageFront", XFA_AttributeEnum::PageFront)},
-    {INFO(0x936beee5, "monospace", XFA_AttributeEnum::Monospace)},
-    {INFO(0x947fa00f, "middle", XFA_AttributeEnum::Middle)},
-    {INFO(0x9528a7b4, "prePrint", XFA_AttributeEnum::PrePrint)},
-    {INFO(0x959ab231, "always", XFA_AttributeEnum::Always)},
-    {INFO(0x96d61bf0, "unknown", XFA_AttributeEnum::Unknown)},
-    {INFO(0x997194ee, "toLeft", XFA_AttributeEnum::ToLeft)},
-    {INFO(0x9a83a3cd, "above", XFA_AttributeEnum::Above)},
-    {INFO(0x9d0d71c7, "dashDot", XFA_AttributeEnum::DashDot)},
-    {INFO(0x9df56f3e, "gregorian", XFA_AttributeEnum::Gregorian)},
-    {INFO(0x9f6723fd, "Roman", XFA_AttributeEnum::Roman)},
-    {INFO(0x9f693b21, "mouseDown", XFA_AttributeEnum::MouseDown)},
-    {INFO(0xa1429b36, "symbol", XFA_AttributeEnum::Symbol)},
-    {INFO(0xa5aa45cb, "pageEven", XFA_AttributeEnum::PageEven)},
-    {INFO(0xa68635f1, "sign", XFA_AttributeEnum::Sign)},
-    {INFO(0xa7315093, "addNew", XFA_AttributeEnum::AddNew)},
-    {INFO(0xa7a773fa, "star", XFA_AttributeEnum::Star)},
-    {INFO(0xa7d57b45, "optimistic", XFA_AttributeEnum::Optimistic)},
-    {INFO(0xa8077321, "rl-tb", XFA_AttributeEnum::Rl_tb)},
-    {INFO(0xa8f1468d, "middleRight", XFA_AttributeEnum::MiddleRight)},
-    {INFO(0xaa84a1f1, "maintain", XFA_AttributeEnum::Maintain)},
-    {INFO(0xab40b12c, "package", XFA_AttributeEnum::Package)},
+          XFA_AttributeValue::RefAndDescendants)},
+    {INFO(0x9041d4b0, "short", XFA_AttributeValue::Short)},
+    {INFO(0x90c94426, "pageFront", XFA_AttributeValue::PageFront)},
+    {INFO(0x936beee5, "monospace", XFA_AttributeValue::Monospace)},
+    {INFO(0x947fa00f, "middle", XFA_AttributeValue::Middle)},
+    {INFO(0x9528a7b4, "prePrint", XFA_AttributeValue::PrePrint)},
+    {INFO(0x959ab231, "always", XFA_AttributeValue::Always)},
+    {INFO(0x96d61bf0, "unknown", XFA_AttributeValue::Unknown)},
+    {INFO(0x997194ee, "toLeft", XFA_AttributeValue::ToLeft)},
+    {INFO(0x9a83a3cd, "above", XFA_AttributeValue::Above)},
+    {INFO(0x9d0d71c7, "dashDot", XFA_AttributeValue::DashDot)},
+    {INFO(0x9df56f3e, "gregorian", XFA_AttributeValue::Gregorian)},
+    {INFO(0x9f6723fd, "Roman", XFA_AttributeValue::Roman)},
+    {INFO(0x9f693b21, "mouseDown", XFA_AttributeValue::MouseDown)},
+    {INFO(0xa1429b36, "symbol", XFA_AttributeValue::Symbol)},
+    {INFO(0xa5aa45cb, "pageEven", XFA_AttributeValue::PageEven)},
+    {INFO(0xa68635f1, "sign", XFA_AttributeValue::Sign)},
+    {INFO(0xa7315093, "addNew", XFA_AttributeValue::AddNew)},
+    {INFO(0xa7a773fa, "star", XFA_AttributeValue::Star)},
+    {INFO(0xa7d57b45, "optimistic", XFA_AttributeValue::Optimistic)},
+    {INFO(0xa8077321, "rl-tb", XFA_AttributeValue::Rl_tb)},
+    {INFO(0xa8f1468d, "middleRight", XFA_AttributeValue::MiddleRight)},
+    {INFO(0xaa84a1f1, "maintain", XFA_AttributeValue::Maintain)},
+    {INFO(0xab40b12c, "package", XFA_AttributeValue::Package)},
     {INFO(0xac8b4d85,
           "SimplifiedChinese",
-          XFA_AttributeEnum::SimplifiedChinese)},
-    {INFO(0xadae6744, "toCenter", XFA_AttributeEnum::ToCenter)},
-    {INFO(0xb0129df1, "back", XFA_AttributeEnum::Back)},
-    {INFO(0xb0f088cf, "unspecified", XFA_AttributeEnum::Unspecified)},
-    {INFO(0xb1271067, "batchOptimistic", XFA_AttributeEnum::BatchOptimistic)},
-    {INFO(0xb18313a1, "bold", XFA_AttributeEnum::Bold)},
-    {INFO(0xb1833cad, "both", XFA_AttributeEnum::Both)},
-    {INFO(0xb221123f, "butt", XFA_AttributeEnum::Butt)},
-    {INFO(0xb40c36bf, "client", XFA_AttributeEnum::Client)},
-    {INFO(0xb56c7053, "2mod10", XFA_AttributeEnum::Checksum_2mod10)},
-    {INFO(0xb683a345, "imageOnly", XFA_AttributeEnum::ImageOnly)},
-    {INFO(0xb7732dea, "horizontal", XFA_AttributeEnum::Horizontal)},
-    {INFO(0xb88652a4, "dotted", XFA_AttributeEnum::Dotted)},
-    {INFO(0xbb2f2880, "userControl", XFA_AttributeEnum::UserControl)},
-    {INFO(0xbbb79c5d, "diagonalRight", XFA_AttributeEnum::DiagonalRight)},
-    {INFO(0xbd077154, "consumeData", XFA_AttributeEnum::ConsumeData)},
-    {INFO(0xbd3fb11e, "check", XFA_AttributeEnum::Check)},
-    {INFO(0xbde9abda, "data", XFA_AttributeEnum::Data)},
-    {INFO(0xbf5a02d8, "down", XFA_AttributeEnum::Down)},
-    {INFO(0xbf7450ee, "sansSerif", XFA_AttributeEnum::SansSerif)},
-    {INFO(0xc02d649f, "inline", XFA_AttributeEnum::Inline)},
+          XFA_AttributeValue::SimplifiedChinese)},
+    {INFO(0xadae6744, "toCenter", XFA_AttributeValue::ToCenter)},
+    {INFO(0xb0129df1, "back", XFA_AttributeValue::Back)},
+    {INFO(0xb0f088cf, "unspecified", XFA_AttributeValue::Unspecified)},
+    {INFO(0xb1271067, "batchOptimistic", XFA_AttributeValue::BatchOptimistic)},
+    {INFO(0xb18313a1, "bold", XFA_AttributeValue::Bold)},
+    {INFO(0xb1833cad, "both", XFA_AttributeValue::Both)},
+    {INFO(0xb221123f, "butt", XFA_AttributeValue::Butt)},
+    {INFO(0xb40c36bf, "client", XFA_AttributeValue::Client)},
+    {INFO(0xb56c7053, "2mod10", XFA_AttributeValue::Checksum_2mod10)},
+    {INFO(0xb683a345, "imageOnly", XFA_AttributeValue::ImageOnly)},
+    {INFO(0xb7732dea, "horizontal", XFA_AttributeValue::Horizontal)},
+    {INFO(0xb88652a4, "dotted", XFA_AttributeValue::Dotted)},
+    {INFO(0xbb2f2880, "userControl", XFA_AttributeValue::UserControl)},
+    {INFO(0xbbb79c5d, "diagonalRight", XFA_AttributeValue::DiagonalRight)},
+    {INFO(0xbd077154, "consumeData", XFA_AttributeValue::ConsumeData)},
+    {INFO(0xbd3fb11e, "check", XFA_AttributeValue::Check)},
+    {INFO(0xbde9abda, "data", XFA_AttributeValue::Data)},
+    {INFO(0xbf5a02d8, "down", XFA_AttributeValue::Down)},
+    {INFO(0xbf7450ee, "sansSerif", XFA_AttributeValue::SansSerif)},
+    {INFO(0xc02d649f, "inline", XFA_AttributeValue::Inline)},
     {INFO(0xc11a9e3a,
           "TraditionalChinese",
-          XFA_AttributeEnum::TraditionalChinese)},
-    {INFO(0xc16169d8, "warn", XFA_AttributeEnum::Warn)},
-    {INFO(0xc16f071f, "refOnly", XFA_AttributeEnum::RefOnly)},
-    {INFO(0xc27c8ba5, "interactiveForms", XFA_AttributeEnum::InteractiveForms)},
-    {INFO(0xc2d1b15c, "word", XFA_AttributeEnum::Word)},
-    {INFO(0xc3621288, "unordered", XFA_AttributeEnum::Unordered)},
-    {INFO(0xc5251981, "required", XFA_AttributeEnum::Required)},
-    {INFO(0xc7088e7d, "importOnly", XFA_AttributeEnum::ImportOnly)},
-    {INFO(0xc72cf0e3, "belowEmbedded", XFA_AttributeEnum::BelowEmbedded)},
-    {INFO(0xc819cf07, "Japanese", XFA_AttributeEnum::Japanese)},
-    {INFO(0xcdce56b3, "full", XFA_AttributeEnum::Full)},
-    {INFO(0xce0122e3, "rl-row", XFA_AttributeEnum::Rl_row)},
-    {INFO(0xcf7d71f1, "Vietnamese", XFA_AttributeEnum::Vietnamese)},
+          XFA_AttributeValue::TraditionalChinese)},
+    {INFO(0xc16169d8, "warn", XFA_AttributeValue::Warn)},
+    {INFO(0xc16f071f, "refOnly", XFA_AttributeValue::RefOnly)},
+    {INFO(0xc27c8ba5,
+          "interactiveForms",
+          XFA_AttributeValue::InteractiveForms)},
+    {INFO(0xc2d1b15c, "word", XFA_AttributeValue::Word)},
+    {INFO(0xc3621288, "unordered", XFA_AttributeValue::Unordered)},
+    {INFO(0xc5251981, "required", XFA_AttributeValue::Required)},
+    {INFO(0xc7088e7d, "importOnly", XFA_AttributeValue::ImportOnly)},
+    {INFO(0xc72cf0e3, "belowEmbedded", XFA_AttributeValue::BelowEmbedded)},
+    {INFO(0xc819cf07, "Japanese", XFA_AttributeValue::Japanese)},
+    {INFO(0xcdce56b3, "full", XFA_AttributeValue::Full)},
+    {INFO(0xce0122e3, "rl-row", XFA_AttributeValue::Rl_row)},
+    {INFO(0xcf7d71f1, "Vietnamese", XFA_AttributeValue::Vietnamese)},
     {INFO(0xcfde3e09,
           "EastEuropeanRoman",
-          XFA_AttributeEnum::EastEuropeanRoman)},
-    {INFO(0xd576d08e, "mouseUp", XFA_AttributeEnum::MouseUp)},
-    {INFO(0xd7a92904, "exportOnly", XFA_AttributeEnum::ExportOnly)},
-    {INFO(0xd8ed1467, "clear", XFA_AttributeEnum::Clear)},
-    {INFO(0xd95657a6, "click", XFA_AttributeEnum::Click)},
-    {INFO(0xd96c7de5, "base64", XFA_AttributeEnum::Base64)},
-    {INFO(0xd9f47f36, "close", XFA_AttributeEnum::Close)},
-    {INFO(0xdb075bde, "host", XFA_AttributeEnum::Host)},
-    {INFO(0xdb103411, "global", XFA_AttributeEnum::Global)},
-    {INFO(0xdb647188, "blank", XFA_AttributeEnum::Blank)},
-    {INFO(0xdb9be968, "table", XFA_AttributeEnum::Table)},
-    {INFO(0xdf590fbb, "import", XFA_AttributeEnum::Import)},
-    {INFO(0xe0e573fb, "custom", XFA_AttributeEnum::Custom)},
-    {INFO(0xe0ecc79a, "middleLeft", XFA_AttributeEnum::MiddleLeft)},
-    {INFO(0xe1452019, "postExecute", XFA_AttributeEnum::PostExecute)},
-    {INFO(0xe1911d98, "radix", XFA_AttributeEnum::Radix)},
-    {INFO(0xe25fa7b8, "postOpen", XFA_AttributeEnum::PostOpen)},
-    {INFO(0xe28dce7e, "enter", XFA_AttributeEnum::Enter)},
-    {INFO(0xe2c44de4, "ignore", XFA_AttributeEnum::Ignore)},
-    {INFO(0xe2cd8c61, "lr-tb", XFA_AttributeEnum::Lr_tb)},
-    {INFO(0xe2da8336, "fantasy", XFA_AttributeEnum::Fantasy)},
-    {INFO(0xe31d5396, "italic", XFA_AttributeEnum::Italic)},
-    {INFO(0xe7ada113, "author", XFA_AttributeEnum::Author)},
-    {INFO(0xe8e7cc18, "toEdge", XFA_AttributeEnum::ToEdge)},
-    {INFO(0xe97aa98b, "choice", XFA_AttributeEnum::Choice)},
-    {INFO(0xeafd2a38, "disabled", XFA_AttributeEnum::Disabled)},
-    {INFO(0xeb2b7972, "crossHatch", XFA_AttributeEnum::CrossHatch)},
-    {INFO(0xeb2db2d7, "dataRef", XFA_AttributeEnum::DataRef)},
-    {INFO(0xec35dc6e, "dashDotDot", XFA_AttributeEnum::DashDotDot)},
-    {INFO(0xef85d351, "square", XFA_AttributeEnum::Square)},
-    {INFO(0xf2102445, "dynamic", XFA_AttributeEnum::Dynamic)},
-    {INFO(0xf272c7be, "manual", XFA_AttributeEnum::Manual)},
-    {INFO(0xf2bbb64d, "etched", XFA_AttributeEnum::Etched)},
-    {INFO(0xf3b8fc6c, "validationState", XFA_AttributeEnum::ValidationState)},
-    {INFO(0xf42f2b81, "cursive", XFA_AttributeEnum::Cursive)},
-    {INFO(0xf54481d4, "last", XFA_AttributeEnum::Last)},
-    {INFO(0xf5ad782b, "left", XFA_AttributeEnum::Left)},
-    {INFO(0xf616da2e, "link", XFA_AttributeEnum::Link)},
-    {INFO(0xf6b4afb0, "long", XFA_AttributeEnum::Long)},
+          XFA_AttributeValue::EastEuropeanRoman)},
+    {INFO(0xd576d08e, "mouseUp", XFA_AttributeValue::MouseUp)},
+    {INFO(0xd7a92904, "exportOnly", XFA_AttributeValue::ExportOnly)},
+    {INFO(0xd8ed1467, "clear", XFA_AttributeValue::Clear)},
+    {INFO(0xd95657a6, "click", XFA_AttributeValue::Click)},
+    {INFO(0xd96c7de5, "base64", XFA_AttributeValue::Base64)},
+    {INFO(0xd9f47f36, "close", XFA_AttributeValue::Close)},
+    {INFO(0xdb075bde, "host", XFA_AttributeValue::Host)},
+    {INFO(0xdb103411, "global", XFA_AttributeValue::Global)},
+    {INFO(0xdb647188, "blank", XFA_AttributeValue::Blank)},
+    {INFO(0xdb9be968, "table", XFA_AttributeValue::Table)},
+    {INFO(0xdf590fbb, "import", XFA_AttributeValue::Import)},
+    {INFO(0xe0e573fb, "custom", XFA_AttributeValue::Custom)},
+    {INFO(0xe0ecc79a, "middleLeft", XFA_AttributeValue::MiddleLeft)},
+    {INFO(0xe1452019, "postExecute", XFA_AttributeValue::PostExecute)},
+    {INFO(0xe1911d98, "radix", XFA_AttributeValue::Radix)},
+    {INFO(0xe25fa7b8, "postOpen", XFA_AttributeValue::PostOpen)},
+    {INFO(0xe28dce7e, "enter", XFA_AttributeValue::Enter)},
+    {INFO(0xe2c44de4, "ignore", XFA_AttributeValue::Ignore)},
+    {INFO(0xe2cd8c61, "lr-tb", XFA_AttributeValue::Lr_tb)},
+    {INFO(0xe2da8336, "fantasy", XFA_AttributeValue::Fantasy)},
+    {INFO(0xe31d5396, "italic", XFA_AttributeValue::Italic)},
+    {INFO(0xe7ada113, "author", XFA_AttributeValue::Author)},
+    {INFO(0xe8e7cc18, "toEdge", XFA_AttributeValue::ToEdge)},
+    {INFO(0xe97aa98b, "choice", XFA_AttributeValue::Choice)},
+    {INFO(0xeafd2a38, "disabled", XFA_AttributeValue::Disabled)},
+    {INFO(0xeb2b7972, "crossHatch", XFA_AttributeValue::CrossHatch)},
+    {INFO(0xeb2db2d7, "dataRef", XFA_AttributeValue::DataRef)},
+    {INFO(0xec35dc6e, "dashDotDot", XFA_AttributeValue::DashDotDot)},
+    {INFO(0xef85d351, "square", XFA_AttributeValue::Square)},
+    {INFO(0xf2102445, "dynamic", XFA_AttributeValue::Dynamic)},
+    {INFO(0xf272c7be, "manual", XFA_AttributeValue::Manual)},
+    {INFO(0xf2bbb64d, "etched", XFA_AttributeValue::Etched)},
+    {INFO(0xf3b8fc6c, "validationState", XFA_AttributeValue::ValidationState)},
+    {INFO(0xf42f2b81, "cursive", XFA_AttributeValue::Cursive)},
+    {INFO(0xf54481d4, "last", XFA_AttributeValue::Last)},
+    {INFO(0xf5ad782b, "left", XFA_AttributeValue::Left)},
+    {INFO(0xf616da2e, "link", XFA_AttributeValue::Link)},
+    {INFO(0xf6b4afb0, "long", XFA_AttributeValue::Long)},
     {INFO(0xf8636460,
           "internationalCarrier",
-          XFA_AttributeEnum::InternationalCarrier)},
-    {INFO(0xf9fb37ac, "PDF1.3", XFA_AttributeEnum::PDF1_3)},
-    {INFO(0xf9fb37af, "PDF1.6", XFA_AttributeEnum::PDF1_6)},
-    {INFO(0xfbce7f19, "serif", XFA_AttributeEnum::Serif)},
-    {INFO(0xfc82d695, "postSave", XFA_AttributeEnum::PostSave)},
-    {INFO(0xfcef86b5, "ready", XFA_AttributeEnum::Ready)},
-    {INFO(0xfd54fbb7, "postSign", XFA_AttributeEnum::PostSign)},
-    {INFO(0xfdc0aae2, "Arabic", XFA_AttributeEnum::Arabic)},
-    {INFO(0xfe06d2ca, "error", XFA_AttributeEnum::Error)},
-    {INFO(0xfefc4885, "urlencoded", XFA_AttributeEnum::Urlencoded)},
-    {INFO(0xff795ad2, "lowered", XFA_AttributeEnum::Lowered)},
+          XFA_AttributeValue::InternationalCarrier)},
+    {INFO(0xf9fb37ac, "PDF1.3", XFA_AttributeValue::PDF1_3)},
+    {INFO(0xf9fb37af, "PDF1.6", XFA_AttributeValue::PDF1_6)},
+    {INFO(0xfbce7f19, "serif", XFA_AttributeValue::Serif)},
+    {INFO(0xfc82d695, "postSave", XFA_AttributeValue::PostSave)},
+    {INFO(0xfcef86b5, "ready", XFA_AttributeValue::Ready)},
+    {INFO(0xfd54fbb7, "postSign", XFA_AttributeValue::PostSign)},
+    {INFO(0xfdc0aae2, "Arabic", XFA_AttributeValue::Arabic)},
+    {INFO(0xfe06d2ca, "error", XFA_AttributeValue::Error)},
+    {INFO(0xfefc4885, "urlencoded", XFA_AttributeValue::Urlencoded)},
+    {INFO(0xff795ad2, "lowered", XFA_AttributeValue::Lowered)},
 };
 #undef INFO
 
diff --git a/xfa/fxfa/parser/xfa_utils.cpp b/xfa/fxfa/parser/xfa_utils.cpp
index 4e1f1ed..ffc5fba 100644
--- a/xfa/fxfa/parser/xfa_utils.cpp
+++ b/xfa/fxfa/parser/xfa_utils.cpp
@@ -523,7 +523,7 @@
   }
 
   return pFirstChild->JSObject()->GetEnum(XFA_Attribute::Open) ==
-         XFA_AttributeEnum::MultiSelect;
+         XFA_AttributeValue::MultiSelect;
 }
 
 int32_t XFA_MapRotation(int32_t nRotation) {