diff options
Diffstat (limited to 'xfa/fde/css/cfde_cssstyleselector.cpp')
-rw-r--r-- | xfa/fde/css/cfde_cssstyleselector.cpp | 35 |
1 files changed, 19 insertions, 16 deletions
diff --git a/xfa/fde/css/cfde_cssstyleselector.cpp b/xfa/fde/css/cfde_cssstyleselector.cpp index b7275fca93..63d8e0986b 100644 --- a/xfa/fde/css/cfde_cssstyleselector.cpp +++ b/xfa/fde/css/cfde_cssstyleselector.cpp @@ -85,27 +85,30 @@ int32_t CFDE_CSSStyleSelector::MatchDeclarations( if (m_UARules.CountSelectors() == 0) return 0; - if (pCache->HashTag()) - MatchRules(pCache, m_UARules.GetTagRuleData(pCache->HashTag())); - - std::sort(m_MatchedRules.begin(), m_MatchedRules.end(), - [](const CFDE_CSSRuleCollection::Data* p1, - const CFDE_CSSRuleCollection::Data* p2) { - return p1->dwPriority < p2->dwPriority; - }); - for (const auto& rule : m_MatchedRules) + // The ::Data is owned by the m_RuleCollection. + std::vector<CFDE_CSSRuleCollection::Data*> matchedRules; + + if (pCache->HashTag()) { + MatchRules(&matchedRules, pCache, + m_UARules.GetTagRuleData(pCache->HashTag())); + } + + for (const auto& rule : matchedRules) matchedDecls.Add(rule->pDeclaration); - m_MatchedRules.clear(); return matchedDecls.GetSize(); } -void CFDE_CSSStyleSelector::MatchRules(CFDE_CSSTagCache* pCache, - CFDE_CSSRuleCollection::Data* pList) { - while (pList) { - if (MatchSelector(pCache, pList->pSelector)) - m_MatchedRules.push_back(pList); - pList = pList->pNext; +void CFDE_CSSStyleSelector::MatchRules( + std::vector<CFDE_CSSRuleCollection::Data*>* matchedRules, + CFDE_CSSTagCache* pCache, + const std::vector<std::unique_ptr<CFDE_CSSRuleCollection::Data>>* pList) { + if (!pList) + return; + + for (const auto& d : *pList) { + if (MatchSelector(pCache, d->pSelector)) + matchedRules->push_back(d.get()); } } |