| 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..91dd814e8d8126bca52a1a94e4bda64fa1325e30 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
|
| };
|
| + static const int32_t s_iCount = FX_ArraySize(s_XFATagName);
|
| +
|
| + return std::binary_search(s_XFATagName, s_XFATagName + s_iCount,
|
| + FX_HashCode_GetW(wsName.AsStringC(), true));
|
| +}
|
| +
|
| +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;
|
| }
|
| }
|
|
|