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"));
+}