Chromium Code Reviews| Index: xfa/fxfa/app/xfa_textlayout.cpp |
| diff --git a/xfa/fxfa/app/xfa_textlayout.cpp b/xfa/fxfa/app/xfa_textlayout.cpp |
| index b7dfa3f168cc841257237898fe01f9af7ca59d59..d5280cb2e29b4ef14d230d6555579e9b317899b1 100644 |
| --- a/xfa/fxfa/app/xfa_textlayout.cpp |
| +++ b/xfa/fxfa/app/xfa_textlayout.cpp |
| @@ -220,14 +220,14 @@ void CXFA_TextParser::DoParse(CFDE_XMLNode* pXMLContainer, |
| } |
| void CXFA_TextParser::ParseRichText(CFDE_XMLNode* pXMLNode, |
| IFDE_CSSComputedStyle* pParentStyle) { |
| - if (pXMLNode == NULL) { |
| + if (!pXMLNode) |
| return; |
| - } |
| + |
| CXFA_CSSTagProvider tagProvider; |
| ParseTagInfo(pXMLNode, tagProvider); |
| - if (!tagProvider.m_bTagAviliable) { |
| + if (!tagProvider.m_bTagAvailable) |
| return; |
| - } |
| + |
| IFDE_CSSComputedStyle* pNewStyle = NULL; |
| if ((tagProvider.GetTagName() != FX_WSTRC(L"body")) || |
| (tagProvider.GetTagName() != FX_WSTRC(L"html"))) { |
| @@ -263,30 +263,45 @@ void CXFA_TextParser::ParseRichText(CFDE_XMLNode* pXMLNode, |
| if (pNewStyle) |
| pNewStyle->Release(); |
| } |
| -void CXFA_TextParser::ParseTagInfo(CFDE_XMLNode* pXMLNode, |
| - CXFA_CSSTagProvider& tagProvider) { |
| + |
| +bool CXFA_TextParser::TagValidate(const CFX_WideString& wsName) const { |
| static const uint32_t s_XFATagName[] = { |
| - 0x61, 0x62, 0x69, 0x70, 0x0001f714, |
| - 0x00022a55, 0x000239bb, 0x00025881, 0x0bd37faa, 0x0bd37fb8, |
| - 0xa73e3af2, 0xb182eaae, 0xdb8ac455, |
| + 0x61, // a |
| + 0x62, // b |
| + 0x69, // i |
| + 0x70, // p |
| + 0x0001f714, // br |
| + 0x00022a55, // li |
| + 0x000239bb, // ol |
| + 0x00025881, // ul |
| + 0x0bd37faa, // sub |
| + 0x0bd37fb8, // sup |
| + 0xa73e3af2, // span |
| + 0xb182eaae, // body |
| + 0xdb8ac455, // html |
| }; |
| + |
| + uint32_t dwHashCode = FX_HashCode_GetW(wsName.AsStringC(), true); |
|
Tom Sepez
2016/05/19 16:37:10
nit: local only used once, not needed.
dsinclair
2016/05/19 17:50:47
Done.
|
| + static const int32_t s_iCount = sizeof(s_XFATagName) / sizeof(uint32_t); |
|
Tom Sepez
2016/05/19 16:37:10
nit: FX_ArraySize, also maybe move this up two lin
dsinclair
2016/05/19 17:50:47
Done.
|
| + return std::binary_search(s_XFATagName, s_XFATagName + s_iCount, dwHashCode); |
| +} |
| + |
| +void CXFA_TextParser::ParseTagInfo(CFDE_XMLNode* pXMLNode, |
| + CXFA_CSSTagProvider& tagProvider) { |
| CFX_WideString wsName; |
| if (pXMLNode->GetType() == FDE_XMLNODE_Element) { |
| CFDE_XMLElement* pXMLElement = static_cast<CFDE_XMLElement*>(pXMLNode); |
| pXMLElement->GetLocalTagName(wsName); |
| tagProvider.SetTagNameObj(wsName); |
| - uint32_t dwHashCode = FX_HashCode_GetW(wsName.AsStringC(), true); |
| - static const int32_t s_iCount = sizeof(s_XFATagName) / sizeof(uint32_t); |
| - CFX_DSPATemplate<uint32_t> lookup; |
| - tagProvider.m_bTagAviliable = |
| - lookup.Lookup(dwHashCode, s_XFATagName, s_iCount) > -1; |
| + tagProvider.m_bTagAvailable = TagValidate(wsName); |
| + |
| CFX_WideString wsValue; |
| pXMLElement->GetString(L"style", wsValue); |
| if (!wsValue.IsEmpty()) { |
| tagProvider.SetAttribute(L"style", wsValue); |
| } |
| } else if (pXMLNode->GetType() == FDE_XMLNODE_Text) { |
| - tagProvider.m_bTagAviliable = TRUE; |
| + tagProvider.m_bTagAvailable = TRUE; |
| tagProvider.m_bContent = TRUE; |
| } |
| } |