From 6414b273506f97012f82c8a32c020b483d5df31a Mon Sep 17 00:00:00 2001 From: Dan Sinclair Date: Mon, 23 Jan 2017 13:54:53 -0500 Subject: Cleanup CSS parsing This Cl removes unused CSS parsing code. The only caller of CFDE_CSSStyleSheet::LoadeBuffer is from CXFA_TextParser which provides a static string. So, we know there are no Media rules, Import rules, FontFace rules or Page rules in the input style. These rules are also not allowed in inline styles. This CL removes the supporting code. Change-Id: I3a559352b2dd0769c465cbd3da40d1db5f9577b0 Reviewed-on: https://pdfium-review.googlesource.com/2330 Reviewed-by: Tom Sepez Commit-Queue: dsinclair --- xfa/fde/css/cfde_cssfontfacerule.cpp | 12 --- xfa/fde/css/cfde_cssfontfacerule.h | 24 ----- xfa/fde/css/cfde_cssmediarule.cpp | 26 ----- xfa/fde/css/cfde_cssmediarule.h | 31 ------ xfa/fde/css/cfde_cssrule.cpp | 11 -- xfa/fde/css/cfde_cssrule.h | 25 ----- xfa/fde/css/cfde_cssrulecollection.cpp | 102 +++++++----------- xfa/fde/css/cfde_cssrulecollection.h | 6 +- xfa/fde/css/cfde_cssstylerule.cpp | 2 +- xfa/fde/css/cfde_cssstylerule.h | 5 +- xfa/fde/css/cfde_cssstyleselector.cpp | 4 +- xfa/fde/css/cfde_cssstyleselector.h | 2 +- xfa/fde/css/cfde_cssstylesheet.cpp | 158 ++-------------------------- xfa/fde/css/cfde_cssstylesheet.h | 21 ++-- xfa/fde/css/cfde_cssstylesheet_unittest.cpp | 20 +--- xfa/fde/css/cfde_csssyntaxparser.cpp | 140 ------------------------ xfa/fde/css/cfde_csssyntaxparser.h | 14 --- xfa/fde/css/fde_css.h | 14 --- xfa/fde/css/fde_cssdatatable.cpp | 30 ------ xfa/fde/css/fde_cssdatatable.h | 8 -- 20 files changed, 68 insertions(+), 587 deletions(-) delete mode 100644 xfa/fde/css/cfde_cssfontfacerule.cpp delete mode 100644 xfa/fde/css/cfde_cssfontfacerule.h delete mode 100644 xfa/fde/css/cfde_cssmediarule.cpp delete mode 100644 xfa/fde/css/cfde_cssmediarule.h delete mode 100644 xfa/fde/css/cfde_cssrule.cpp delete mode 100644 xfa/fde/css/cfde_cssrule.h (limited to 'xfa/fde/css') diff --git a/xfa/fde/css/cfde_cssfontfacerule.cpp b/xfa/fde/css/cfde_cssfontfacerule.cpp deleted file mode 100644 index 5d56eb8c6c..0000000000 --- a/xfa/fde/css/cfde_cssfontfacerule.cpp +++ /dev/null @@ -1,12 +0,0 @@ -// Copyright 2017 PDFium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com - -#include "xfa/fde/css/cfde_cssfontfacerule.h" - -CFDE_CSSFontFaceRule::CFDE_CSSFontFaceRule() - : CFDE_CSSRule(FDE_CSSRuleType::FontFace) {} - -CFDE_CSSFontFaceRule::~CFDE_CSSFontFaceRule() {} diff --git a/xfa/fde/css/cfde_cssfontfacerule.h b/xfa/fde/css/cfde_cssfontfacerule.h deleted file mode 100644 index e5249ccf18..0000000000 --- a/xfa/fde/css/cfde_cssfontfacerule.h +++ /dev/null @@ -1,24 +0,0 @@ -// Copyright 2017 PDFium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com - -#ifndef XFA_FDE_CSS_CFDE_CSSFONTFACERULE_H_ -#define XFA_FDE_CSS_CFDE_CSSFONTFACERULE_H_ - -#include "xfa/fde/css/cfde_cssdeclaration.h" -#include "xfa/fde/css/cfde_cssrule.h" - -class CFDE_CSSFontFaceRule : public CFDE_CSSRule { - public: - CFDE_CSSFontFaceRule(); - ~CFDE_CSSFontFaceRule() override; - - CFDE_CSSDeclaration* GetDeclaration() { return &m_Declaration; } - - private: - CFDE_CSSDeclaration m_Declaration; -}; - -#endif // XFA_FDE_CSS_CFDE_CSSFONTFACERULE_H_ diff --git a/xfa/fde/css/cfde_cssmediarule.cpp b/xfa/fde/css/cfde_cssmediarule.cpp deleted file mode 100644 index 751f9d9fa1..0000000000 --- a/xfa/fde/css/cfde_cssmediarule.cpp +++ /dev/null @@ -1,26 +0,0 @@ -// Copyright 2017 PDFium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com - -#include "xfa/fde/css/cfde_cssmediarule.h" - -#include "third_party/base/stl_util.h" - -CFDE_CSSMediaRule::CFDE_CSSMediaRule(uint32_t dwMediaList) - : CFDE_CSSRule(FDE_CSSRuleType::Media), m_dwMediaList(dwMediaList) {} - -CFDE_CSSMediaRule::~CFDE_CSSMediaRule() {} - -uint32_t CFDE_CSSMediaRule::GetMediaList() const { - return m_dwMediaList; -} - -int32_t CFDE_CSSMediaRule::CountRules() const { - return pdfium::CollectionSize(m_RuleArray); -} - -CFDE_CSSRule* CFDE_CSSMediaRule::GetRule(int32_t index) { - return m_RuleArray[index].get(); -} diff --git a/xfa/fde/css/cfde_cssmediarule.h b/xfa/fde/css/cfde_cssmediarule.h deleted file mode 100644 index 59febb2008..0000000000 --- a/xfa/fde/css/cfde_cssmediarule.h +++ /dev/null @@ -1,31 +0,0 @@ -// Copyright 2017 PDFium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com - -#ifndef XFA_FDE_CSS_CFDE_CSSMEDIARULE_H_ -#define XFA_FDE_CSS_CFDE_CSSMEDIARULE_H_ - -#include -#include - -#include "xfa/fde/css/cfde_cssrule.h" - -class CFDE_CSSMediaRule : public CFDE_CSSRule { - public: - explicit CFDE_CSSMediaRule(uint32_t dwMediaList); - ~CFDE_CSSMediaRule() override; - - uint32_t GetMediaList() const; - int32_t CountRules() const; - CFDE_CSSRule* GetRule(int32_t index); - - std::vector>& GetArray() { return m_RuleArray; } - - protected: - uint32_t m_dwMediaList; - std::vector> m_RuleArray; -}; - -#endif // XFA_FDE_CSS_CFDE_CSSMEDIARULE_H_ diff --git a/xfa/fde/css/cfde_cssrule.cpp b/xfa/fde/css/cfde_cssrule.cpp deleted file mode 100644 index 7a46703881..0000000000 --- a/xfa/fde/css/cfde_cssrule.cpp +++ /dev/null @@ -1,11 +0,0 @@ -// Copyright 2017 PDFium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com - -#include "xfa/fde/css/cfde_cssrule.h" - -CFDE_CSSRule::CFDE_CSSRule(FDE_CSSRuleType type) : m_type(type) {} - -CFDE_CSSRule::~CFDE_CSSRule() {} diff --git a/xfa/fde/css/cfde_cssrule.h b/xfa/fde/css/cfde_cssrule.h deleted file mode 100644 index 946132179b..0000000000 --- a/xfa/fde/css/cfde_cssrule.h +++ /dev/null @@ -1,25 +0,0 @@ -// Copyright 2017 PDFium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com - -#ifndef XFA_FDE_CSS_CFDE_CSSRULE_H_ -#define XFA_FDE_CSS_CFDE_CSSRULE_H_ - -#include "xfa/fde/css/fde_css.h" - -class CFDE_CSSRule { - public: - virtual ~CFDE_CSSRule(); - - FDE_CSSRuleType GetType() const { return m_type; } - - protected: - explicit CFDE_CSSRule(FDE_CSSRuleType type); - - private: - FDE_CSSRuleType m_type; -}; - -#endif // XFA_FDE_CSS_CFDE_CSSRULE_H_ diff --git a/xfa/fde/css/cfde_cssrulecollection.cpp b/xfa/fde/css/cfde_cssrulecollection.cpp index 286f619b68..6f12105d85 100644 --- a/xfa/fde/css/cfde_cssrulecollection.cpp +++ b/xfa/fde/css/cfde_cssrulecollection.cpp @@ -11,8 +11,6 @@ #include #include "xfa/fde/css/cfde_cssdeclaration.h" -#include "xfa/fde/css/cfde_cssmediarule.h" -#include "xfa/fde/css/cfde_cssrule.h" #include "xfa/fde/css/cfde_cssselector.h" #include "xfa/fde/css/cfde_cssstylerule.h" #include "xfa/fde/css/cfde_cssstylesheet.h" @@ -38,78 +36,54 @@ CFDE_CSSRuleCollection::~CFDE_CSSRuleCollection() { void CFDE_CSSRuleCollection::AddRulesFrom( const CFX_ArrayTemplate& sheets, - uint32_t dwMediaList, CFGAS_FontMgr* pFontMgr) { int32_t iSheets = sheets.GetSize(); for (int32_t i = 0; i < iSheets; ++i) { CFDE_CSSStyleSheet* pSheet = sheets.GetAt(i); - if (uint32_t dwMatchMedia = pSheet->GetMediaList() & dwMediaList) { - int32_t iRules = pSheet->CountRules(); - for (int32_t j = 0; j < iRules; j++) { - AddRulesFrom(pSheet, pSheet->GetRule(j), dwMatchMedia, pFontMgr); - } + int32_t iRules = pSheet->CountRules(); + for (int32_t j = 0; j < iRules; j++) { + AddRulesFrom(pSheet, pSheet->GetRule(j), pFontMgr); } } } void CFDE_CSSRuleCollection::AddRulesFrom(CFDE_CSSStyleSheet* pStyleSheet, - CFDE_CSSRule* pRule, - uint32_t dwMediaList, + CFDE_CSSStyleRule* pStyleRule, CFGAS_FontMgr* pFontMgr) { - switch (pRule->GetType()) { - case FDE_CSSRuleType::Style: { - CFDE_CSSStyleRule* pStyleRule = static_cast(pRule); - CFDE_CSSDeclaration* pDeclaration = pStyleRule->GetDeclaration(); - int32_t iSelectors = pStyleRule->CountSelectorLists(); - for (int32_t i = 0; i < iSelectors; ++i) { - CFDE_CSSSelector* pSelector = pStyleRule->GetSelectorList(i); - if (pSelector->GetType() == FDE_CSSSelectorType::Pseudo) { - Data* pData = NewRuleData(pSelector, pDeclaration); - AddRuleTo(&m_pPseudoRules, pData); - continue; - } - if (pSelector->GetNameHash() != FDE_CSSUNIVERSALHASH) { - AddRuleTo(&m_TagRules, pSelector->GetNameHash(), pSelector, - pDeclaration); - continue; - } - CFDE_CSSSelector* pNext = pSelector->GetNextSelector(); - if (!pNext) { - Data* pData = NewRuleData(pSelector, pDeclaration); - AddRuleTo(&m_pUniversalRules, pData); - continue; - } - switch (pNext->GetType()) { - case FDE_CSSSelectorType::ID: - AddRuleTo(&m_IDRules, pNext->GetNameHash(), pSelector, - pDeclaration); - break; - case FDE_CSSSelectorType::Class: - AddRuleTo(&m_ClassRules, pNext->GetNameHash(), pSelector, - pDeclaration); - break; - case FDE_CSSSelectorType::Descendant: - case FDE_CSSSelectorType::Element: - AddRuleTo(&m_pUniversalRules, NewRuleData(pSelector, pDeclaration)); - break; - default: - ASSERT(false); - break; - } - } - } break; - case FDE_CSSRuleType::Media: { - CFDE_CSSMediaRule* pMediaRule = static_cast(pRule); - if (pMediaRule->GetMediaList() & dwMediaList) { - int32_t iRules = pMediaRule->CountRules(); - for (int32_t i = 0; i < iRules; ++i) { - AddRulesFrom(pStyleSheet, pMediaRule->GetRule(i), dwMediaList, - pFontMgr); - } - } - } break; - default: - break; + CFDE_CSSDeclaration* pDeclaration = pStyleRule->GetDeclaration(); + int32_t iSelectors = pStyleRule->CountSelectorLists(); + for (int32_t i = 0; i < iSelectors; ++i) { + CFDE_CSSSelector* pSelector = pStyleRule->GetSelectorList(i); + if (pSelector->GetType() == FDE_CSSSelectorType::Pseudo) { + Data* pData = NewRuleData(pSelector, pDeclaration); + AddRuleTo(&m_pPseudoRules, pData); + continue; + } + if (pSelector->GetNameHash() != FDE_CSSUNIVERSALHASH) { + AddRuleTo(&m_TagRules, pSelector->GetNameHash(), pSelector, pDeclaration); + continue; + } + CFDE_CSSSelector* pNext = pSelector->GetNextSelector(); + if (!pNext) { + Data* pData = NewRuleData(pSelector, pDeclaration); + AddRuleTo(&m_pUniversalRules, pData); + continue; + } + switch (pNext->GetType()) { + case FDE_CSSSelectorType::ID: + AddRuleTo(&m_IDRules, pNext->GetNameHash(), pSelector, pDeclaration); + break; + case FDE_CSSSelectorType::Class: + AddRuleTo(&m_ClassRules, pNext->GetNameHash(), pSelector, pDeclaration); + break; + case FDE_CSSSelectorType::Descendant: + case FDE_CSSSelectorType::Element: + AddRuleTo(&m_pUniversalRules, NewRuleData(pSelector, pDeclaration)); + break; + default: + ASSERT(false); + break; + } } } diff --git a/xfa/fde/css/cfde_cssrulecollection.h b/xfa/fde/css/cfde_cssrulecollection.h index 1433a5a5f2..75e232abaa 100644 --- a/xfa/fde/css/cfde_cssrulecollection.h +++ b/xfa/fde/css/cfde_cssrulecollection.h @@ -12,8 +12,8 @@ #include "core/fxcrt/fx_basic.h" class CFDE_CSSDeclaration; -class CFDE_CSSRule; class CFDE_CSSSelector; +class CFDE_CSSStyleRule; class CFDE_CSSStyleSheet; class CFGAS_FontMgr; @@ -33,7 +33,6 @@ class CFDE_CSSRuleCollection { ~CFDE_CSSRuleCollection(); void AddRulesFrom(const CFX_ArrayTemplate& sheets, - uint32_t dwMediaList, CFGAS_FontMgr* pFontMgr); void Clear(); int32_t CountSelectors() const { return m_iSelectors; } @@ -58,8 +57,7 @@ class CFDE_CSSRuleCollection { protected: void AddRulesFrom(CFDE_CSSStyleSheet* pStyleSheet, - CFDE_CSSRule* pRule, - uint32_t dwMediaList, + CFDE_CSSStyleRule* pRule, CFGAS_FontMgr* pFontMgr); void AddRuleTo(std::map* pMap, uint32_t dwKey, diff --git a/xfa/fde/css/cfde_cssstylerule.cpp b/xfa/fde/css/cfde_cssstylerule.cpp index 09c4a43f34..04f6cfff08 100644 --- a/xfa/fde/css/cfde_cssstylerule.cpp +++ b/xfa/fde/css/cfde_cssstylerule.cpp @@ -6,7 +6,7 @@ #include "xfa/fde/css/cfde_cssstylerule.h" -CFDE_CSSStyleRule::CFDE_CSSStyleRule() : CFDE_CSSRule(FDE_CSSRuleType::Style) {} +CFDE_CSSStyleRule::CFDE_CSSStyleRule() {} CFDE_CSSStyleRule::~CFDE_CSSStyleRule() {} diff --git a/xfa/fde/css/cfde_cssstylerule.h b/xfa/fde/css/cfde_cssstylerule.h index bed0a5ec12..075ab8d478 100644 --- a/xfa/fde/css/cfde_cssstylerule.h +++ b/xfa/fde/css/cfde_cssstylerule.h @@ -11,13 +11,12 @@ #include #include "xfa/fde/css/cfde_cssdeclaration.h" -#include "xfa/fde/css/cfde_cssrule.h" #include "xfa/fde/css/cfde_cssselector.h" -class CFDE_CSSStyleRule : public CFDE_CSSRule { +class CFDE_CSSStyleRule { public: CFDE_CSSStyleRule(); - ~CFDE_CSSStyleRule() override; + ~CFDE_CSSStyleRule(); size_t CountSelectorLists() const; CFDE_CSSSelector* GetSelectorList(int32_t index) const; diff --git a/xfa/fde/css/cfde_cssstyleselector.cpp b/xfa/fde/css/cfde_cssstyleselector.cpp index 1539894017..8452c78ff5 100644 --- a/xfa/fde/css/cfde_cssstyleselector.cpp +++ b/xfa/fde/css/cfde_cssstyleselector.cpp @@ -100,13 +100,13 @@ void CFDE_CSSStyleSelector::SetStylePriority( m_ePriorities[static_cast(ePriority)] = eType; } -void CFDE_CSSStyleSelector::UpdateStyleIndex(uint32_t dwMediaList) { +void CFDE_CSSStyleSelector::UpdateStyleIndex() { Reset(); // TODO(dsinclair): Hard coded size bad. This should probably just be a map. for (int32_t iGroup = 0; iGroup < 3; ++iGroup) { CFDE_CSSRuleCollection& rules = m_RuleCollection[iGroup]; - rules.AddRulesFrom(m_SheetGroups[iGroup], dwMediaList, m_pFontMgr); + rules.AddRulesFrom(m_SheetGroups[iGroup], m_pFontMgr); } } diff --git a/xfa/fde/css/cfde_cssstyleselector.h b/xfa/fde/css/cfde_cssstyleselector.h index 6a7ae99216..1ddb67243c 100644 --- a/xfa/fde/css/cfde_cssstyleselector.h +++ b/xfa/fde/css/cfde_cssstyleselector.h @@ -38,7 +38,7 @@ class CFDE_CSSStyleSelector { const CFX_ArrayTemplate* pArray); void SetStylePriority(FDE_CSSStyleSheetGroup eType, FDE_CSSStyleSheetPriority ePriority); - void UpdateStyleIndex(uint32_t dwMediaList); + void UpdateStyleIndex(); CFDE_CSSAccelerator* InitAccelerator(); CFDE_CSSComputedStyle* CreateComputedStyle( CFDE_CSSComputedStyle* pParentStyle); diff --git a/xfa/fde/css/cfde_cssstylesheet.cpp b/xfa/fde/css/cfde_cssstylesheet.cpp index 4ff1b97916..7dc122f1da 100644 --- a/xfa/fde/css/cfde_cssstylesheet.cpp +++ b/xfa/fde/css/cfde_cssstylesheet.cpp @@ -11,17 +11,11 @@ #include "third_party/base/ptr_util.h" #include "third_party/base/stl_util.h" #include "xfa/fde/css/cfde_cssdeclaration.h" -#include "xfa/fde/css/cfde_cssfontfacerule.h" -#include "xfa/fde/css/cfde_cssmediarule.h" -#include "xfa/fde/css/cfde_cssrule.h" #include "xfa/fde/css/cfde_cssstylerule.h" #include "xfa/fde/css/fde_cssdatatable.h" #include "xfa/fgas/crt/fgas_codepage.h" -CFDE_CSSStyleSheet::CFDE_CSSStyleSheet() - : m_wRefCount(1), m_dwMediaList(FDE_CSSMEDIATYPE_ALL) { - ASSERT(m_dwMediaList > 0); -} +CFDE_CSSStyleSheet::CFDE_CSSStyleSheet() : m_wRefCount(1) {} CFDE_CSSStyleSheet::~CFDE_CSSStyleSheet() { Reset(); @@ -43,45 +37,27 @@ uint32_t CFDE_CSSStyleSheet::Release() { return dwRefCount; } -uint32_t CFDE_CSSStyleSheet::GetMediaList() const { - return m_dwMediaList; -} - int32_t CFDE_CSSStyleSheet::CountRules() const { return pdfium::CollectionSize(m_RuleArray); } -CFDE_CSSRule* CFDE_CSSStyleSheet::GetRule(int32_t index) { +CFDE_CSSStyleRule* CFDE_CSSStyleSheet::GetRule(int32_t index) { return m_RuleArray[index].get(); } -bool CFDE_CSSStyleSheet::LoadFromBuffer(const FX_WCHAR* pBuffer, - int32_t iBufSize) { +bool CFDE_CSSStyleSheet::LoadBuffer(const FX_WCHAR* pBuffer, int32_t iBufSize) { ASSERT(pBuffer && iBufSize > 0); auto pSyntax = pdfium::MakeUnique(); - return pSyntax->Init(pBuffer, iBufSize) && LoadFromSyntax(pSyntax.get()); -} + if (!pSyntax->Init(pBuffer, iBufSize)) + return false; -bool CFDE_CSSStyleSheet::LoadFromSyntax(CFDE_CSSSyntaxParser* pSyntax) { Reset(); FDE_CSSSyntaxStatus eStatus; do { switch (eStatus = pSyntax->DoSyntaxParse()) { case FDE_CSSSyntaxStatus::StyleRule: - eStatus = LoadStyleRule(pSyntax, &m_RuleArray); - break; - case FDE_CSSSyntaxStatus::MediaRule: - eStatus = LoadMediaRule(pSyntax); - break; - case FDE_CSSSyntaxStatus::FontFaceRule: - eStatus = LoadFontFaceRule(pSyntax, &m_RuleArray); - break; - case FDE_CSSSyntaxStatus::ImportRule: - eStatus = LoadImportRule(pSyntax); - break; - case FDE_CSSSyntaxStatus::PageRule: - eStatus = LoadPageRule(pSyntax); + eStatus = LoadStyleRule(pSyntax.get(), &m_RuleArray); break; default: break; @@ -92,53 +68,9 @@ bool CFDE_CSSStyleSheet::LoadFromSyntax(CFDE_CSSSyntaxParser* pSyntax) { return eStatus != FDE_CSSSyntaxStatus::Error; } -FDE_CSSSyntaxStatus CFDE_CSSStyleSheet::LoadMediaRule( - CFDE_CSSSyntaxParser* pSyntax) { - uint32_t dwMediaList = 0; - CFDE_CSSMediaRule* pMediaRule = nullptr; - for (;;) { - switch (pSyntax->DoSyntaxParse()) { - case FDE_CSSSyntaxStatus::MediaType: { - int32_t iLen; - const FX_WCHAR* psz = pSyntax->GetCurrentString(iLen); - const FDE_CSSMEDIATYPETABLE* pMediaType = - FDE_GetCSSMediaTypeByName(CFX_WideStringC(psz, iLen)); - if (pMediaType) - dwMediaList |= pMediaType->wValue; - } break; - case FDE_CSSSyntaxStatus::StyleRule: - if (pMediaRule) { - FDE_CSSSyntaxStatus eStatus = - LoadStyleRule(pSyntax, &pMediaRule->GetArray()); - if (eStatus < FDE_CSSSyntaxStatus::None) { - return eStatus; - } - } else { - SkipRuleSet(pSyntax); - } - break; - case FDE_CSSSyntaxStatus::DeclOpen: - if ((dwMediaList & m_dwMediaList) > 0 && !pMediaRule) { - m_RuleArray.push_back( - pdfium::MakeUnique(dwMediaList)); - pMediaRule = - static_cast(m_RuleArray.back().get()); - } - break; - case FDE_CSSSyntaxStatus::DeclClose: - return FDE_CSSSyntaxStatus::None; - case FDE_CSSSyntaxStatus::EOS: - return FDE_CSSSyntaxStatus::EOS; - case FDE_CSSSyntaxStatus::Error: - default: - return FDE_CSSSyntaxStatus::Error; - } - } -} - FDE_CSSSyntaxStatus CFDE_CSSStyleSheet::LoadStyleRule( CFDE_CSSSyntaxParser* pSyntax, - std::vector>* ruleArray) { + std::vector>* ruleArray) { std::vector> selectors; CFDE_CSSStyleRule* pStyleRule = nullptr; @@ -148,7 +80,7 @@ FDE_CSSSyntaxStatus CFDE_CSSStyleSheet::LoadStyleRule( propertyArgs.pStringCache = &m_StringCache; propertyArgs.pProperty = nullptr; CFX_WideString wsName; - for (;;) { + while (1) { switch (pSyntax->DoSyntaxParse()) { case FDE_CSSSyntaxStatus::Selector: { pszValue = pSyntax->GetCurrentString(iValueLen); @@ -206,74 +138,8 @@ FDE_CSSSyntaxStatus CFDE_CSSStyleSheet::LoadStyleRule( } } -FDE_CSSSyntaxStatus CFDE_CSSStyleSheet::LoadFontFaceRule( - CFDE_CSSSyntaxParser* pSyntax, - std::vector>* ruleArray) { - CFDE_CSSFontFaceRule* pFontFaceRule = nullptr; - const FX_WCHAR* pszValue = nullptr; - int32_t iValueLen = 0; - FDE_CSSPropertyArgs propertyArgs; - propertyArgs.pStringCache = &m_StringCache; - propertyArgs.pProperty = nullptr; - for (;;) { - switch (pSyntax->DoSyntaxParse()) { - case FDE_CSSSyntaxStatus::PropertyName: - pszValue = pSyntax->GetCurrentString(iValueLen); - propertyArgs.pProperty = - FDE_GetCSSPropertyByName(CFX_WideStringC(pszValue, iValueLen)); - break; - case FDE_CSSSyntaxStatus::PropertyValue: - if (propertyArgs.pProperty) { - pszValue = pSyntax->GetCurrentString(iValueLen); - if (iValueLen > 0) { - pFontFaceRule->GetDeclaration()->AddProperty(&propertyArgs, - pszValue, iValueLen); - } - } - break; - case FDE_CSSSyntaxStatus::DeclOpen: - if (!pFontFaceRule) { - auto rule = pdfium::MakeUnique(); - pFontFaceRule = rule.get(); - ruleArray->push_back(std::move(rule)); - } - break; - case FDE_CSSSyntaxStatus::DeclClose: - return FDE_CSSSyntaxStatus::None; - case FDE_CSSSyntaxStatus::EOS: - return FDE_CSSSyntaxStatus::EOS; - case FDE_CSSSyntaxStatus::Error: - default: - return FDE_CSSSyntaxStatus::Error; - } - } -} - -FDE_CSSSyntaxStatus CFDE_CSSStyleSheet::LoadImportRule( - CFDE_CSSSyntaxParser* pSyntax) { - for (;;) { - switch (pSyntax->DoSyntaxParse()) { - case FDE_CSSSyntaxStatus::ImportClose: - return FDE_CSSSyntaxStatus::None; - case FDE_CSSSyntaxStatus::URI: - break; - case FDE_CSSSyntaxStatus::EOS: - return FDE_CSSSyntaxStatus::EOS; - case FDE_CSSSyntaxStatus::Error: - default: - return FDE_CSSSyntaxStatus::Error; - } - } -} - -FDE_CSSSyntaxStatus CFDE_CSSStyleSheet::LoadPageRule( - CFDE_CSSSyntaxParser* pSyntax) { - return SkipRuleSet(pSyntax); -} - -FDE_CSSSyntaxStatus CFDE_CSSStyleSheet::SkipRuleSet( - CFDE_CSSSyntaxParser* pSyntax) { - for (;;) { +void CFDE_CSSStyleSheet::SkipRuleSet(CFDE_CSSSyntaxParser* pSyntax) { + while (1) { switch (pSyntax->DoSyntaxParse()) { case FDE_CSSSyntaxStatus::Selector: case FDE_CSSSyntaxStatus::DeclOpen: @@ -281,12 +147,10 @@ FDE_CSSSyntaxStatus CFDE_CSSStyleSheet::SkipRuleSet( case FDE_CSSSyntaxStatus::PropertyValue: break; case FDE_CSSSyntaxStatus::DeclClose: - return FDE_CSSSyntaxStatus::None; case FDE_CSSSyntaxStatus::EOS: - return FDE_CSSSyntaxStatus::EOS; case FDE_CSSSyntaxStatus::Error: default: - return FDE_CSSSyntaxStatus::Error; + return; } } } diff --git a/xfa/fde/css/cfde_cssstylesheet.h b/xfa/fde/css/cfde_cssstylesheet.h index 2268efa2e4..8bbcc485bb 100644 --- a/xfa/fde/css/cfde_cssstylesheet.h +++ b/xfa/fde/css/cfde_cssstylesheet.h @@ -15,7 +15,7 @@ #include "core/fxcrt/fx_string.h" #include "xfa/fde/css/cfde_csssyntaxparser.h" -class CFDE_CSSRule; +class CFDE_CSSStyleRule; class CFDE_CSSStyleSheet : public IFX_Retainable { public: @@ -26,29 +26,20 @@ class CFDE_CSSStyleSheet : public IFX_Retainable { uint32_t Retain() override; uint32_t Release() override; - bool LoadFromBuffer(const FX_WCHAR* pBuffer, int32_t iBufSize); + bool LoadBuffer(const FX_WCHAR* pBuffer, int32_t iBufSize); - uint32_t GetMediaList() const; int32_t CountRules() const; - CFDE_CSSRule* GetRule(int32_t index); + CFDE_CSSStyleRule* GetRule(int32_t index); private: void Reset(); - bool LoadFromSyntax(CFDE_CSSSyntaxParser* pSyntax); FDE_CSSSyntaxStatus LoadStyleRule( CFDE_CSSSyntaxParser* pSyntax, - std::vector>* ruleArray); - FDE_CSSSyntaxStatus LoadImportRule(CFDE_CSSSyntaxParser* pSyntax); - FDE_CSSSyntaxStatus LoadPageRule(CFDE_CSSSyntaxParser* pSyntax); - FDE_CSSSyntaxStatus LoadMediaRule(CFDE_CSSSyntaxParser* pSyntax); - FDE_CSSSyntaxStatus LoadFontFaceRule( - CFDE_CSSSyntaxParser* pSyntax, - std::vector>* ruleArray); - FDE_CSSSyntaxStatus SkipRuleSet(CFDE_CSSSyntaxParser* pSyntax); + std::vector>* ruleArray); + void SkipRuleSet(CFDE_CSSSyntaxParser* pSyntax); uint16_t m_wRefCount; - uint32_t m_dwMediaList; - std::vector> m_RuleArray; + std::vector> m_RuleArray; std::unordered_map m_StringCache; }; diff --git a/xfa/fde/css/cfde_cssstylesheet_unittest.cpp b/xfa/fde/css/cfde_cssstylesheet_unittest.cpp index 080b45aa1b..1c50f65607 100644 --- a/xfa/fde/css/cfde_cssstylesheet_unittest.cpp +++ b/xfa/fde/css/cfde_cssstylesheet_unittest.cpp @@ -15,7 +15,6 @@ #include "xfa/fde/css/cfde_cssdeclaration.h" #include "xfa/fde/css/cfde_cssenumvalue.h" #include "xfa/fde/css/cfde_cssnumbervalue.h" -#include "xfa/fde/css/cfde_cssrule.h" #include "xfa/fde/css/cfde_cssstylerule.h" #include "xfa/fde/css/cfde_cssvaluelist.h" @@ -33,13 +32,10 @@ class CFDE_CSSStyleSheetTest : public testing::Test { size_t decl_count) { ASSERT(sheet_); - EXPECT_TRUE(sheet_->LoadFromBuffer(buf, FXSYS_wcslen(buf))); + EXPECT_TRUE(sheet_->LoadBuffer(buf, FXSYS_wcslen(buf))); EXPECT_EQ(sheet_->CountRules(), 1); - CFDE_CSSRule* rule = sheet_->GetRule(0); - EXPECT_EQ(rule->GetType(), FDE_CSSRuleType::Style); - - CFDE_CSSStyleRule* style = static_cast(rule); + CFDE_CSSStyleRule* style = sheet_->GetRule(0); EXPECT_EQ(selectors.size(), style->CountSelectorLists()); for (size_t i = 0; i < selectors.size(); i++) { @@ -93,13 +89,10 @@ class CFDE_CSSStyleSheetTest : public testing::Test { TEST_F(CFDE_CSSStyleSheetTest, ParseMultipleSelectors) { const FX_WCHAR* buf = L"a { border: 10px; }\nb { text-decoration: underline; }"; - EXPECT_TRUE(sheet_->LoadFromBuffer(buf, FXSYS_wcslen(buf))); + EXPECT_TRUE(sheet_->LoadBuffer(buf, FXSYS_wcslen(buf))); EXPECT_EQ(2, sheet_->CountRules()); - CFDE_CSSRule* rule = sheet_->GetRule(0); - EXPECT_EQ(FDE_CSSRuleType::Style, rule->GetType()); - - CFDE_CSSStyleRule* style = static_cast(rule); + CFDE_CSSStyleRule* style = sheet_->GetRule(0); EXPECT_EQ(1UL, style->CountSelectorLists()); bool found_selector = false; @@ -123,10 +116,7 @@ TEST_F(CFDE_CSSStyleSheetTest, ParseMultipleSelectors) { VerifyFloat(FDE_CSSProperty::BorderBottomWidth, 10.0, FDE_CSSNumberType::Pixels); - rule = sheet_->GetRule(1); - EXPECT_EQ(FDE_CSSRuleType::Style, rule->GetType()); - - style = static_cast(rule); + style = sheet_->GetRule(1); EXPECT_EQ(1UL, style->CountSelectorLists()); found_selector = false; diff --git a/xfa/fde/css/cfde_csssyntaxparser.cpp b/xfa/fde/css/cfde_csssyntaxparser.cpp index a24b4eee66..f562a374ac 100644 --- a/xfa/fde/css/cfde_csssyntaxparser.cpp +++ b/xfa/fde/css/cfde_csssyntaxparser.cpp @@ -19,20 +19,6 @@ bool IsSelectorStart(FX_WCHAR wch) { (wch >= 'A' && wch <= 'Z'); } -bool ParseCSSURI(const FX_WCHAR* pszValue, int32_t* iOffset, int32_t* iLength) { - ASSERT(pszValue && *iLength > 0); - if (*iLength < 6 || pszValue[*iLength - 1] != ')' || - FXSYS_wcsnicmp(L"url(", pszValue, 4)) { - return false; - } - if (CFDE_CSSDeclaration::ParseCSSString(pszValue + 4, *iLength - 5, iOffset, - iLength)) { - *iOffset += 4; - return true; - } - return false; -} - } // namespace CFDE_CSSSyntaxParser::CFDE_CSSSyntaxParser() @@ -85,10 +71,6 @@ FDE_CSSSyntaxStatus CFDE_CSSSyntaxParser::DoSyntaxParse() { switch (m_eMode) { case FDE_CSSSyntaxMode::RuleSet: switch (wch) { - case '@': - m_TextPlane.MoveNext(); - SwitchMode(FDE_CSSSyntaxMode::AtRule); - break; case '}': m_TextPlane.MoveNext(); if (RestoreMode()) @@ -194,128 +176,6 @@ FDE_CSSSyntaxStatus CFDE_CSSSyntaxParser::DoSyntaxParse() { } m_TextPlane.MoveNext(); break; - case FDE_CSSSyntaxMode::MediaType: - switch (wch) { - case ',': - m_TextPlane.MoveNext(); - SwitchMode(FDE_CSSSyntaxMode::MediaType); - if (m_iTextDatLen > 0) - return FDE_CSSSyntaxStatus::MediaType; - break; - case '{': { - if (m_ModeStack.empty() || - m_ModeStack.top() != FDE_CSSSyntaxMode::MediaRule) { - m_eStatus = FDE_CSSSyntaxStatus::Error; - return m_eStatus; - } - - if (m_TextData.GetLength() > 0) { - SaveTextData(); - return FDE_CSSSyntaxStatus::MediaType; - } - m_TextPlane.MoveNext(); - - // Replace the MediaRule with a RuleSet rule. - m_ModeStack.top() = FDE_CSSSyntaxMode::RuleSet; - - SwitchMode(FDE_CSSSyntaxMode::RuleSet); - return FDE_CSSSyntaxStatus::DeclOpen; - } - case ';': { - if (m_ModeStack.empty() || - m_ModeStack.top() != FDE_CSSSyntaxMode::Import) { - m_eStatus = FDE_CSSSyntaxStatus::Error; - return m_eStatus; - } - - if (m_TextData.GetLength() > 0) { - SaveTextData(); - if (IsImportEnabled()) - return FDE_CSSSyntaxStatus::MediaType; - } else { - bool bEnabled = IsImportEnabled(); - m_TextPlane.MoveNext(); - m_ModeStack.pop(); - SwitchMode(FDE_CSSSyntaxMode::RuleSet); - if (bEnabled) { - DisableImport(); - return FDE_CSSSyntaxStatus::ImportClose; - } - } - } break; - case '/': - if (m_TextPlane.GetNextChar() == '*') { - if (SwitchToComment() > 0) - return FDE_CSSSyntaxStatus::MediaType; - break; - } - default: - AppendChar(wch); - break; - } - break; - case FDE_CSSSyntaxMode::URI: { - if (m_ModeStack.empty() || - m_ModeStack.top() != FDE_CSSSyntaxMode::Import) { - m_eStatus = FDE_CSSSyntaxStatus::Error; - return m_eStatus; - } - - if (wch <= ' ' || wch == ';') { - int32_t iURIStart, iURILength = m_TextData.GetLength(); - if (iURILength > 0 && - ParseCSSURI(m_TextData.GetBuffer(), &iURIStart, &iURILength)) { - m_TextData.Subtract(iURIStart, iURILength); - SwitchMode(FDE_CSSSyntaxMode::MediaType); - if (IsImportEnabled()) - return FDE_CSSSyntaxStatus::URI; - break; - } - } - AppendChar(wch); - } break; - case FDE_CSSSyntaxMode::AtRule: - if (wch > ' ') { - AppendChar(wch); - } else { - int32_t iLen = m_TextData.GetLength(); - const FX_WCHAR* psz = m_TextData.GetBuffer(); - if (FXSYS_wcsncmp(L"charset", psz, iLen) == 0) { - SwitchMode(FDE_CSSSyntaxMode::Charset); - } else if (FXSYS_wcsncmp(L"import", psz, iLen) == 0) { - m_ModeStack.push(FDE_CSSSyntaxMode::Import); - SwitchMode(FDE_CSSSyntaxMode::URI); - if (IsImportEnabled()) - return FDE_CSSSyntaxStatus::ImportRule; - break; - } else if (FXSYS_wcsncmp(L"media", psz, iLen) == 0) { - m_ModeStack.push(FDE_CSSSyntaxMode::MediaRule); - SwitchMode(FDE_CSSSyntaxMode::MediaType); - return FDE_CSSSyntaxStatus::MediaRule; - } else if (FXSYS_wcsncmp(L"font-face", psz, iLen) == 0) { - SwitchMode(FDE_CSSSyntaxMode::Selector); - return FDE_CSSSyntaxStatus::FontFaceRule; - } else if (FXSYS_wcsncmp(L"page", psz, iLen) == 0) { - SwitchMode(FDE_CSSSyntaxMode::Selector); - return FDE_CSSSyntaxStatus::PageRule; - } else { - SwitchMode(FDE_CSSSyntaxMode::UnknownRule); - } - } - break; - case FDE_CSSSyntaxMode::Charset: - if (wch == ';') { - m_TextPlane.MoveNext(); - SwitchMode(FDE_CSSSyntaxMode::RuleSet); - if (IsCharsetEnabled()) { - DisableCharset(); - if (m_iTextDatLen > 0) - return FDE_CSSSyntaxStatus::Charset; - } - } else { - AppendChar(wch); - } - break; case FDE_CSSSyntaxMode::UnknownRule: if (wch == ';') SwitchMode(FDE_CSSSyntaxMode::RuleSet); diff --git a/xfa/fde/css/cfde_csssyntaxparser.h b/xfa/fde/css/cfde_csssyntaxparser.h index 131fe4bf21..19a48e2b61 100644 --- a/xfa/fde/css/cfde_csssyntaxparser.h +++ b/xfa/fde/css/cfde_csssyntaxparser.h @@ -17,13 +17,7 @@ enum class FDE_CSSSyntaxMode { RuleSet, Comment, - AtRule, UnknownRule, - Charset, - Import, - MediaRule, - URI, - MediaType, Selector, PropertyName, PropertyValue, @@ -33,15 +27,7 @@ enum class FDE_CSSSyntaxStatus : uint8_t { Error, EOS, None, - Charset, - ImportRule, - ImportClose, - PageRule, StyleRule, - FontFaceRule, - MediaRule, - MediaType, - URI, Selector, DeclOpen, DeclClose, diff --git a/xfa/fde/css/fde_css.h b/xfa/fde/css/fde_css.h index 2194657670..571f8a58d9 100644 --- a/xfa/fde/css/fde_css.h +++ b/xfa/fde/css/fde_css.h @@ -12,18 +12,6 @@ #include "xfa/fgas/crt/fgas_utils.h" #include "xfa/fgas/font/cfgas_fontmgr.h" -enum FDE_CSSMEDIATYPE { - FDE_CSSMEDIATYPE_Braille = 0x01, - FDE_CSSMEDIATYPE_Emboss = 0x02, - FDE_CSSMEDIATYPE_Handheld = 0x04, - FDE_CSSMEDIATYPE_Print = 0x08, - FDE_CSSMEDIATYPE_Projection = 0x10, - FDE_CSSMEDIATYPE_Screen = 0x20, - FDE_CSSMEDIATYPE_TTY = 0x40, - FDE_CSSMEDIATYPE_TV = 0x80, - FDE_CSSMEDIATYPE_ALL = 0xFF, -}; - enum FDE_CSSVALUETYPE { FDE_CSSVALUETYPE_Primitive = 1 << 0, FDE_CSSVALUETYPE_List = 1 << 1, @@ -147,8 +135,6 @@ enum class FDE_CSSSelectorType : uint8_t { ID, }; -enum class FDE_CSSRuleType : uint8_t { Style, Media, FontFace }; - enum class FDE_CSSLengthUnit : uint8_t { Auto, None, diff --git a/xfa/fde/css/fde_cssdatatable.cpp b/xfa/fde/css/fde_cssdatatable.cpp index fd4ef6bffb..a8a0920afa 100644 --- a/xfa/fde/css/fde_cssdatatable.cpp +++ b/xfa/fde/css/fde_cssdatatable.cpp @@ -173,14 +173,6 @@ static_assert(g_iCSSPropertyValueCount == static_cast(FDE_CSSPropertyValue::LAST_MARKER), "Property value table differs in size from property value enum"); -static const FDE_CSSMEDIATYPETABLE g_FDE_CSSMediaTypes[] = { - {0xF09, FDE_CSSMEDIATYPE_Emboss}, {FDE_CSSMEDIATYPE_Screen}, - {0x536A, FDE_CSSMEDIATYPE_TV}, {0x741D, FDE_CSSMEDIATYPE_Projection}, - {0x76ED, FDE_CSSMEDIATYPE_Print}, {0x7CFB, FDE_CSSMEDIATYPE_Braille}, - {0x9578, FDE_CSSMEDIATYPE_Handheld}, {0xC8E1, FDE_CSSMEDIATYPE_TTY}, - {0xD0F9, FDE_CSSMEDIATYPE_ALL}, -}; - static const FDE_CSSLengthUnitTable g_FDE_CSSLengthUnits[] = { {0x0672, FDE_CSSNumberType::EMS}, {0x067D, FDE_CSSNumberType::EXS}, @@ -259,28 +251,6 @@ const FDE_CSSPropertyValueTable* FDE_GetCSSPropertyValueByName( return nullptr; } -const FDE_CSSMEDIATYPETABLE* FDE_GetCSSMediaTypeByName( - const CFX_WideStringC& wsName) { - ASSERT(!wsName.IsEmpty()); - uint16_t wHash = FX_HashCode_GetW(wsName, true); - int32_t iEnd = - sizeof(g_FDE_CSSMediaTypes) / sizeof(FDE_CSSMEDIATYPETABLE) - 1; - int32_t iMid, iStart = 0; - uint16_t uMid; - do { - iMid = (iStart + iEnd) / 2; - uMid = g_FDE_CSSMediaTypes[iMid].wHash; - if (wHash == uMid) { - return g_FDE_CSSMediaTypes + iMid; - } else if (wHash > uMid) { - iStart = iMid + 1; - } else { - iEnd = iMid - 1; - } - } while (iStart <= iEnd); - return nullptr; -} - const FDE_CSSLengthUnitTable* FDE_GetCSSLengthUnitByName( const CFX_WideStringC& wsName) { ASSERT(!wsName.IsEmpty()); diff --git a/xfa/fde/css/fde_cssdatatable.h b/xfa/fde/css/fde_cssdatatable.h index 4769f16658..a9de83a088 100644 --- a/xfa/fde/css/fde_cssdatatable.h +++ b/xfa/fde/css/fde_cssdatatable.h @@ -31,11 +31,6 @@ struct FDE_CSSPropertyValueTable { uint32_t dwHash; }; -struct FDE_CSSMEDIATYPETABLE { - uint16_t wHash; - uint16_t wValue; -}; - struct FDE_CSSLengthUnitTable { uint16_t wHash; FDE_CSSNumberType wValue; @@ -59,9 +54,6 @@ const FDE_CSSPropertyTable* FDE_GetCSSPropertyByEnum(FDE_CSSProperty eName); const FDE_CSSPropertyValueTable* FDE_GetCSSPropertyValueByName( const CFX_WideStringC& wsName); -const FDE_CSSMEDIATYPETABLE* FDE_GetCSSMediaTypeByName( - const CFX_WideStringC& wsName); - const FDE_CSSLengthUnitTable* FDE_GetCSSLengthUnitByName( const CFX_WideStringC& wsName); -- cgit v1.2.3