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