| Index: xfa/fde/css/fde_csscache.cpp
|
| diff --git a/xfa/fde/css/fde_csscache.cpp b/xfa/fde/css/fde_csscache.cpp
|
| index 511c69798bd428ff5b5f7875097aaed0f56d8a3a..e23b4c6377c830bf9abe1650e85423bef185148b 100644
|
| --- a/xfa/fde/css/fde_csscache.cpp
|
| +++ b/xfa/fde/css/fde_csscache.cpp
|
| @@ -9,35 +9,40 @@
|
| #include <algorithm>
|
|
|
| #include "core/fxcrt/include/fx_ext.h"
|
| +#include "xfa/fxfa/app/xfa_textlayout.h"
|
|
|
| FDE_CSSCacheItem::FDE_CSSCacheItem(IFDE_CSSStyleSheet* p)
|
| : pStylesheet(p), dwActivity(0) {
|
| FXSYS_assert(pStylesheet);
|
| pStylesheet->AddRef();
|
| }
|
| +
|
| FDE_CSSCacheItem::~FDE_CSSCacheItem() {
|
| pStylesheet->Release();
|
| }
|
|
|
| FDE_CSSTagCache::FDE_CSSTagCache(FDE_CSSTagCache* parent,
|
| - IFDE_CSSTagProvider* tag)
|
| + CXFA_CSSTagProvider* tag)
|
| : pTag(tag),
|
| pParent(parent),
|
| dwIDHash(0),
|
| dwTagHash(0),
|
| iClassIndex(0),
|
| dwClassHashs(1) {
|
| - FXSYS_assert(pTag != NULL);
|
| - CFX_WideStringC wsValue, wsName = pTag->GetTagName();
|
| - dwTagHash = FX_HashCode_String_GetW(wsName.c_str(), wsName.GetLength(), TRUE);
|
| - FX_POSITION pos = pTag->GetFirstAttribute();
|
| - while (pos != NULL) {
|
| - pTag->GetNextAttribute(pos, wsName, wsValue);
|
| + static const uint32_t s_dwIDHash = FX_HashCode_String_GetW(L"id", 2, TRUE);
|
| + static const uint32_t s_dwClassHash =
|
| + FX_HashCode_String_GetW(L"class", 5, TRUE);
|
| +
|
| + CFX_WideString wsTag = pTag->GetTagName();
|
| + dwTagHash = FX_HashCode_String_GetW(wsTag.c_str(), wsTag.GetLength(), TRUE);
|
| +
|
| + for (auto it : *pTag) {
|
| + CFX_WideString wsValue = it.first;
|
| + CFX_WideString wsName = it.second;
|
| +
|
| uint32_t dwNameHash =
|
| FX_HashCode_String_GetW(wsName.c_str(), wsName.GetLength(), TRUE);
|
| - static const uint32_t s_dwIDHash = FX_HashCode_String_GetW(L"id", 2, TRUE);
|
| - static const uint32_t s_dwClassHash =
|
| - FX_HashCode_String_GetW(L"class", 5, TRUE);
|
| +
|
| if (dwNameHash == s_dwClassHash) {
|
| uint32_t dwHash =
|
| FX_HashCode_String_GetW(wsValue.c_str(), wsValue.GetLength());
|
| @@ -47,6 +52,7 @@ FDE_CSSTagCache::FDE_CSSTagCache(FDE_CSSTagCache* parent,
|
| }
|
| }
|
| }
|
| +
|
| FDE_CSSTagCache::FDE_CSSTagCache(const FDE_CSSTagCache& it)
|
| : pTag(it.pTag),
|
| pParent(it.pParent),
|
| @@ -54,16 +60,17 @@ FDE_CSSTagCache::FDE_CSSTagCache(const FDE_CSSTagCache& it)
|
| dwTagHash(it.dwTagHash),
|
| iClassIndex(0),
|
| dwClassHashs(1) {
|
| - if (it.dwClassHashs.GetSize() > 0) {
|
| + if (it.dwClassHashs.GetSize() > 0)
|
| dwClassHashs.Copy(it.dwClassHashs);
|
| - }
|
| }
|
| -void CFDE_CSSAccelerator::OnEnterTag(IFDE_CSSTagProvider* pTag) {
|
| +
|
| +void CFDE_CSSAccelerator::OnEnterTag(CXFA_CSSTagProvider* pTag) {
|
| FDE_CSSTagCache* pTop = GetTopElement();
|
| FDE_CSSTagCache item(pTop, pTag);
|
| m_Stack.Push(item);
|
| }
|
| -void CFDE_CSSAccelerator::OnLeaveTag(IFDE_CSSTagProvider* pTag) {
|
| +
|
| +void CFDE_CSSAccelerator::OnLeaveTag(CXFA_CSSTagProvider* pTag) {
|
| FXSYS_assert(m_Stack.GetTopElement());
|
| FXSYS_assert(m_Stack.GetTopElement()->GetTag() == pTag);
|
| m_Stack.Pop();
|
|
|