Wrap access to xfa_basic_data.cpp tables with functions.

Then put these clunky tables into an anoymous namespace.

Change-Id: I51e56c88303720428a73ebae806da52b495367c0
Reviewed-on: https://pdfium-review.googlesource.com/c/46950
Reviewed-by: Lei Zhang <thestig@chromium.org>
Commit-Queue: Tom Sepez <tsepez@chromium.org>
diff --git a/fxjs/xfa/cjx_object.cpp b/fxjs/xfa/cjx_object.cpp
index 0550423..c59a6a5 100644
--- a/fxjs/xfa/cjx_object.cpp
+++ b/fxjs/xfa/cjx_object.cpp
@@ -39,6 +39,7 @@
 #include "xfa/fxfa/parser/cxfa_subform.h"
 #include "xfa/fxfa/parser/cxfa_validate.h"
 #include "xfa/fxfa/parser/cxfa_value.h"
+#include "xfa/fxfa/parser/xfa_basic_data.h"
 #include "xfa/fxfa/parser/xfa_utils.h"
 
 namespace {
@@ -220,8 +221,7 @@
                               bool bNotify) {
   switch (ToNode(GetXFAObject())->GetAttributeType(eAttr)) {
     case XFA_AttributeType::Enum: {
-      Optional<XFA_AttributeValue> item =
-          CXFA_Node::NameToAttributeEnum(wsValue);
+      Optional<XFA_AttributeValue> item = XFA_GetAttributeValueByName(wsValue);
       SetEnum(eAttr,
               item ? *item : *(ToNode(GetXFAObject())->GetDefaultEnum(eAttr)),
               bNotify);
@@ -281,7 +281,7 @@
       if (!value)
         return {};
 
-      return WideString::FromASCII(CXFA_Node::AttributeEnumToName(*value));
+      return WideString::FromASCII(XFA_AttributeValueToName(*value));
     }
     case XFA_AttributeType::CData:
       return TryCData(eAttr, bUseDefault);
@@ -398,9 +398,8 @@
   CFX_XMLElement* elem = SetValue(eAttr, XFA_AttributeType::Enum,
                                   (void*)(uintptr_t)eValue, bNotify);
   if (elem) {
-    elem->SetAttribute(
-        CXFA_Node::AttributeToName(eAttr),
-        WideString::FromASCII(CXFA_Node::AttributeEnumToName(eValue)));
+    elem->SetAttribute(CXFA_Node::AttributeToName(eAttr),
+                       WideString::FromASCII(XFA_AttributeValueToName(eValue)));
   }
 }
 
@@ -1544,7 +1543,7 @@
     return;
   }
 
-  pValue->SetString(CXFA_Node::AttributeEnumToName(validate->GetNullTest()));
+  pValue->SetString(XFA_AttributeValueToName(validate->GetNullTest()));
 }
 
 void CJX_Object::ScriptSomInstanceIndex(CFXJSE_Value* pValue,
diff --git a/xfa/fxfa/parser/BUILD.gn b/xfa/fxfa/parser/BUILD.gn
index 3b23f30..26c3fc5 100644
--- a/xfa/fxfa/parser/BUILD.gn
+++ b/xfa/fxfa/parser/BUILD.gn
@@ -727,6 +727,7 @@
     "cxfa_node_unittest.cpp",
     "cxfa_nodeiteratortemplate_unittest.cpp",
     "cxfa_xmllocale_unittest.cpp",
+    "xfa_basic_data_unittest.cpp",
     "xfa_utils_unittest.cpp",
   ]
   deps = [
diff --git a/xfa/fxfa/parser/cxfa_node.cpp b/xfa/fxfa/parser/cxfa_node.cpp
index adc0d7f..f10926d 100644
--- a/xfa/fxfa/parser/cxfa_node.cpp
+++ b/xfa/fxfa/parser/cxfa_node.cpp
@@ -546,28 +546,6 @@
   RetainPtr<CFX_DIBitmap> m_pDIBitmap;
 };
 
-// static
-ByteStringView CXFA_Node::AttributeEnumToName(XFA_AttributeValue item) {
-  return g_XFAEnumData[static_cast<int32_t>(item)].pName;
-}
-
-// static
-Optional<XFA_AttributeValue> CXFA_Node::NameToAttributeEnum(
-    const WideStringView& name) {
-  if (name.IsEmpty())
-    return {};
-
-  static const auto* kXFAEnumDataEnd = g_XFAEnumData + g_szXFAEnumCount;
-  auto* it = std::lower_bound(g_XFAEnumData, kXFAEnumDataEnd,
-                              FX_HashCode_GetW(name, false),
-                              [](const XFA_AttributeValueInfo& arg,
-                                 uint32_t hash) { return arg.uHash < hash; });
-  if (it != kXFAEnumDataEnd && name.EqualsASCII(it->pName))
-    return it->eName;
-
-  return {};
-}
-
 CXFA_Node::CXFA_Node(CXFA_Document* pDoc,
                      XFA_PacketType ePacket,
                      uint32_t validPackets,
diff --git a/xfa/fxfa/parser/cxfa_node.h b/xfa/fxfa/parser/cxfa_node.h
index 8a934a2..f713620 100644
--- a/xfa/fxfa/parser/cxfa_node.h
+++ b/xfa/fxfa/parser/cxfa_node.h
@@ -83,9 +83,6 @@
     void* default_value;
   };
 
-  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);
   static XFA_Element NameToElement(const WideString& name);
diff --git a/xfa/fxfa/parser/cxfa_node_unittest.cpp b/xfa/fxfa/parser/cxfa_node_unittest.cpp
index 80ddd90..bd62894 100644
--- a/xfa/fxfa/parser/cxfa_node_unittest.cpp
+++ b/xfa/fxfa/parser/cxfa_node_unittest.cpp
@@ -56,17 +56,6 @@
             CXFA_Node::NameToAttribute(L"decipherOnly"));
 }
 
-TEST_F(CXFANodeTest, GetAttributeEnumByName) {
-  EXPECT_FALSE(!!CXFA_Node::NameToAttributeEnum(L""));
-  EXPECT_FALSE(!!CXFA_Node::NameToAttributeEnum(L"nonesuch"));
-  EXPECT_EQ(XFA_AttributeValue::Asterisk,
-            *CXFA_Node::NameToAttributeEnum(L"*"));
-  EXPECT_EQ(XFA_AttributeValue::Visible,
-            *CXFA_Node::NameToAttributeEnum(L"visible"));
-  EXPECT_EQ(XFA_AttributeValue::Lowered,
-            *CXFA_Node::NameToAttributeEnum(L"lowered"));
-}
-
 TEST_F(CXFANodeTest, InsertFirstChild) {
   EXPECT_EQ(nullptr, GetNode()->GetFirstChild());
   EXPECT_EQ(nullptr, GetNode()->GetLastChild());
diff --git a/xfa/fxfa/parser/cxfa_validate.cpp b/xfa/fxfa/parser/cxfa_validate.cpp
index 233b252..2514c49 100644
--- a/xfa/fxfa/parser/cxfa_validate.cpp
+++ b/xfa/fxfa/parser/cxfa_validate.cpp
@@ -12,6 +12,7 @@
 #include "xfa/fxfa/parser/cxfa_message.h"
 #include "xfa/fxfa/parser/cxfa_picture.h"
 #include "xfa/fxfa/parser/cxfa_script.h"
+#include "xfa/fxfa/parser/xfa_basic_data.h"
 
 namespace {
 
@@ -62,7 +63,7 @@
 
 void CXFA_Validate::SetNullTest(const WideString& wsValue) {
   Optional<XFA_AttributeValue> item =
-      CXFA_Node::NameToAttributeEnum(wsValue.AsStringView());
+      XFA_GetAttributeValueByName(wsValue.AsStringView());
   JSObject()->SetEnum(XFA_Attribute::NullTest,
                       item ? *item : XFA_AttributeValue::Disabled, false);
 }
diff --git a/xfa/fxfa/parser/xfa_basic_data.cpp b/xfa/fxfa/parser/xfa_basic_data.cpp
index c98c6c1..69e5f14 100644
--- a/xfa/fxfa/parser/xfa_basic_data.cpp
+++ b/xfa/fxfa/parser/xfa_basic_data.cpp
@@ -149,6 +149,8 @@
 #include "fxjs/xfa/cjx_xsdconnection.h"
 #include "xfa/fxfa/fxfa_basic.h"
 
+namespace {
+
 const XFA_AttributeValueInfo g_XFAEnumData[] = {
 #undef VALUE____
 #define VALUE____(a, b, c) {a, XFA_AttributeValue::c, b},
@@ -156,8 +158,6 @@
 #undef VALUE____
 };
 
-const size_t g_szXFAEnumCount = FX_ArraySize(g_XFAEnumData);
-
 const XFA_Element g_XFAScriptParents[] = {
 #undef ELEM____
 #undef ELEM_HIDDEN____
@@ -6537,7 +6537,28 @@
 
 #undef ATTR
 
-const size_t g_szSomAttributeCount = FX_ArraySize(g_SomAttributeData);
+}  // namespace
+
+ByteStringView XFA_AttributeValueToName(XFA_AttributeValue item) {
+  return g_XFAEnumData[static_cast<int32_t>(item)].pName;
+}
+
+Optional<XFA_AttributeValue> XFA_GetAttributeValueByName(
+    const WideStringView& name) {
+  if (name.IsEmpty())
+    return {};
+
+  auto* it =
+      std::lower_bound(std::begin(g_XFAEnumData), std::end(g_XFAEnumData),
+                       FX_HashCode_GetW(name, false),
+                       [](const XFA_AttributeValueInfo& arg, uint32_t hash) {
+                         return arg.uHash < hash;
+                       });
+  if (it != std::end(g_XFAEnumData) && name.EqualsASCII(it->pName))
+    return it->eName;
+
+  return {};
+}
 
 const XFA_SCRIPTATTRIBUTEINFO* XFA_GetScriptAttributeByName(
     XFA_Element eElement,
diff --git a/xfa/fxfa/parser/xfa_basic_data.h b/xfa/fxfa/parser/xfa_basic_data.h
index 98accd3..0a12a75 100644
--- a/xfa/fxfa/parser/xfa_basic_data.h
+++ b/xfa/fxfa/parser/xfa_basic_data.h
@@ -12,11 +12,9 @@
 #include "core/fxcrt/widestring.h"
 #include "xfa/fxfa/fxfa_basic.h"
 
-extern const XFA_AttributeValueInfo g_XFAEnumData[];
-extern const size_t g_szXFAEnumCount;
-
-extern const XFA_SCRIPTATTRIBUTEINFO g_SomAttributeData[];
-extern const size_t g_szSomAttributeCount;
+ByteStringView XFA_AttributeValueToName(XFA_AttributeValue item);
+Optional<XFA_AttributeValue> XFA_GetAttributeValueByName(
+    const WideStringView& name);
 
 const XFA_SCRIPTATTRIBUTEINFO* XFA_GetScriptAttributeByName(
     XFA_Element eElement,
diff --git a/xfa/fxfa/parser/xfa_basic_data_unittest.cpp b/xfa/fxfa/parser/xfa_basic_data_unittest.cpp
new file mode 100644
index 0000000..5c58755
--- /dev/null
+++ b/xfa/fxfa/parser/xfa_basic_data_unittest.cpp
@@ -0,0 +1,17 @@
+// Copyright 2018 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "xfa/fxfa/parser/xfa_basic_data.h"
+
+#include "testing/gtest/include/gtest/gtest.h"
+
+TEST(XFABasicDataTest, GetAttributeValueByName) {
+  EXPECT_FALSE(!!XFA_GetAttributeValueByName(L""));
+  EXPECT_FALSE(!!XFA_GetAttributeValueByName(L"nonesuch"));
+  EXPECT_EQ(XFA_AttributeValue::Asterisk, *XFA_GetAttributeValueByName(L"*"));
+  EXPECT_EQ(XFA_AttributeValue::Visible,
+            *XFA_GetAttributeValueByName(L"visible"));
+  EXPECT_EQ(XFA_AttributeValue::Lowered,
+            *XFA_GetAttributeValueByName(L"lowered"));
+}