Index: xfa/src/fdp/src/css/fde_cssstyleselector.cpp |
diff --git a/xfa/src/fdp/src/css/fde_cssstyleselector.cpp b/xfa/src/fdp/src/css/fde_cssstyleselector.cpp |
index 6d05065e7d23a6e4b399a0ba00ebdfb1c3bb7192..f51d7418d91b3ded94366d11ac843d5217ef8f24 100644 |
--- a/xfa/src/fdp/src/css/fde_cssstyleselector.cpp |
+++ b/xfa/src/fdp/src/css/fde_cssstyleselector.cpp |
@@ -8,6 +8,7 @@ |
#include "xfa/src/fdp/src/css/fde_cssdeclaration.h" |
#include "xfa/src/fdp/src/css/fde_cssstyleselector.h" |
#include "xfa/src/foxitlib.h" |
+ |
int32_t CFDE_CSSCounterStyle::FindIndex(const FX_WCHAR* pszIdentifier) { |
int32_t iCount = m_arrCounterData.GetSize(); |
for (int32_t i = 0; i < iCount; i++) { |
@@ -188,23 +189,26 @@ void CFDE_CSSRuleCollection::AddRuleTo(CFX_MapPtrToPtr& map, |
map.SetAt(pKey, pList); |
} |
} |
-inline FX_BOOL CFDE_CSSRuleCollection::AddRuleTo(FDE_CSSRULEDATA*& pList, |
- FDE_CSSRULEDATA* pData) { |
- if (pList == NULL) { |
- pList = pData; |
- return TRUE; |
- } else { |
+ |
+FX_BOOL CFDE_CSSRuleCollection::AddRuleTo(FDE_CSSRULEDATA*& pList, |
+ FDE_CSSRULEDATA* pData) { |
+ if (pList) { |
pData->pNext = pList->pNext; |
pList->pNext = pData; |
return FALSE; |
} |
+ |
+ pList = pData; |
+ return TRUE; |
} |
-inline FDE_CSSRULEDATA* CFDE_CSSRuleCollection::NewRuleData( |
+ |
+FDE_CSSRULEDATA* CFDE_CSSRuleCollection::NewRuleData( |
IFDE_CSSSelector* pSel, |
IFDE_CSSDeclaration* pDecl) { |
return FDE_NewWith(m_pStaticStore) |
FDE_CSSRULEDATA(pSel, pDecl, ++m_iSelectors); |
} |
+ |
IFDE_CSSStyleSelector* IFDE_CSSStyleSelector::Create() { |
return new CFDE_CSSStyleSelector; |
} |
@@ -341,23 +345,28 @@ int32_t CFDE_CSSStyleSelector::MatchDeclarations( |
} else { |
MatchRules(pCache, rules.GetPersudoRuleData(), ePersudoType); |
} |
- if (m_MatchedRules.GetSize() > 0) { |
- SortRulesTo(matchedDecls); |
- m_MatchedRules.RemoveAt(0, m_MatchedRules.GetSize()); |
- } |
+ |
+ std::sort(m_MatchedRules.begin(), m_MatchedRules.end(), |
+ [](const FDE_CSSRULEDATA* p1, const FDE_CSSRULEDATA* p2) { |
+ return p1->dwPriority < p2->dwPriority; |
+ }); |
+ for (const auto& rule : m_MatchedRules) |
+ matchedDecls.Add(rule->pDeclaration); |
+ m_MatchedRules.clear(); |
} |
return matchedDecls.GetSize(); |
} |
-inline void CFDE_CSSStyleSelector::MatchRules(FDE_CSSTAGCACHE* pCache, |
- FDE_CSSRULEDATA* pList, |
- FDE_CSSPERSUDO ePersudoType) { |
- while (pList != NULL) { |
- if (MatchSelector(pCache, pList->pSelector, ePersudoType)) { |
- m_MatchedRules.Add(pList); |
- } |
+ |
+void CFDE_CSSStyleSelector::MatchRules(FDE_CSSTAGCACHE* pCache, |
+ FDE_CSSRULEDATA* pList, |
+ FDE_CSSPERSUDO ePersudoType) { |
+ while (pList) { |
+ if (MatchSelector(pCache, pList->pSelector, ePersudoType)) |
+ m_MatchedRules.push_back(pList); |
pList = pList->pNext; |
} |
} |
+ |
FX_BOOL CFDE_CSSStyleSelector::MatchSelector(FDE_CSSTAGCACHE* pCache, |
IFDE_CSSSelector* pSel, |
FDE_CSSPERSUDO ePersudoType) { |
@@ -407,22 +416,7 @@ FX_BOOL CFDE_CSSStyleSelector::MatchSelector(FDE_CSSTAGCACHE* pCache, |
} |
return pSel == NULL && pCache != NULL; |
} |
-void CFDE_CSSStyleSelector::SortRulesTo(CFDE_CSSDeclarationArray& matchDecls) { |
- for (int32_t j = m_MatchedRules.GetUpperBound(); j >= 0; --j) { |
- FDE_CSSRULEDATA*& pMin = m_MatchedRules.ElementAt(j); |
- FX_DWORD dwMin = pMin->dwPriority; |
- for (int32_t i = j - 1; i >= 0; --i) { |
- FDE_CSSRULEDATA*& pCur = m_MatchedRules.ElementAt(i); |
- if (dwMin > pCur->dwPriority) { |
- dwMin = pCur->dwPriority; |
- FDE_CSSRULEDATA* p = pMin; |
- pMin = pCur; |
- pCur = p; |
- } |
- } |
- matchDecls.Add(pMin->pDeclaration); |
- } |
-} |
+ |
void CFDE_CSSStyleSelector::ComputeStyle( |
IFDE_CSSTagProvider* pTag, |
const IFDE_CSSDeclaration** ppDeclArray, |