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) {
