| // 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 CORE_FXCRT_CSS_CFX_CSSSTYLESELECTOR_H_ | |
| #define CORE_FXCRT_CSS_CFX_CSSSTYLESELECTOR_H_ | |
| #include <memory> | |
| #include <vector> | |
| #include "core/fxcrt/css/cfx_css.h" | |
| #include "core/fxcrt/css/cfx_cssrulecollection.h" | |
| #include "core/fxcrt/fx_system.h" | |
| class CFX_CSSComputedStyle; | |
| class CFX_CSSCustomProperty; | |
| class CFX_CSSDeclaration; | |
| class CFX_CSSPropertyHolder; | |
| class CFX_CSSSelector; | |
| class CFX_CSSStyleSheet; | |
| class CFX_CSSValue; | |
| class CFX_CSSValueList; | |
| class CFX_CSSStyleSelector { | |
| public: | |
| CFX_CSSStyleSelector(); | |
| ~CFX_CSSStyleSelector(); | |
| void SetDefFontSize(float fFontSize); | |
| void SetUAStyleSheet(std::unique_ptr<CFX_CSSStyleSheet> pSheet); | |
| void UpdateStyleIndex(); | |
| RetainPtr<CFX_CSSComputedStyle> CreateComputedStyle( | |
| CFX_CSSComputedStyle* pParentStyle); | |
| // Note, the dest style has to be an out param because the CXFA_TextParser | |
| // adds non-inherited data from the parent style. Attempting to copy | |
| // internally will fail as you'll lose the non-inherited data. | |
| void ComputeStyle(const std::vector<const CFX_CSSDeclaration*>& declArray, | |
| const WideString& styleString, | |
| const WideString& alignString, | |
| CFX_CSSComputedStyle* pDestStyle); | |
| std::vector<const CFX_CSSDeclaration*> MatchDeclarations( | |
| const WideString& tagname); | |
| private: | |
| bool MatchSelector(const WideString& tagname, CFX_CSSSelector* pSel); | |
| void AppendInlineStyle(CFX_CSSDeclaration* pDecl, const WideString& style); | |
| void ApplyDeclarations( | |
| const std::vector<const CFX_CSSDeclaration*>& declArray, | |
| const CFX_CSSDeclaration* extraDecl, | |
| CFX_CSSComputedStyle* pDestStyle); | |
| void ApplyProperty(CFX_CSSProperty eProperty, | |
| const RetainPtr<CFX_CSSValue>& pValue, | |
| CFX_CSSComputedStyle* pComputedStyle); | |
| void ExtractValues(const CFX_CSSDeclaration* decl, | |
| std::vector<const CFX_CSSPropertyHolder*>* importants, | |
| std::vector<const CFX_CSSPropertyHolder*>* normals, | |
| std::vector<const CFX_CSSCustomProperty*>* custom); | |
| bool SetLengthWithPercent(CFX_CSSLength& width, | |
| CFX_CSSPrimitiveType eType, | |
| const RetainPtr<CFX_CSSValue>& pValue, | |
| float fFontSize); | |
| float ToFontSize(CFX_CSSPropertyValue eValue, float fCurFontSize); | |
| CFX_CSSDisplay ToDisplay(CFX_CSSPropertyValue eValue); | |
| CFX_CSSTextAlign ToTextAlign(CFX_CSSPropertyValue eValue); | |
| uint16_t ToFontWeight(CFX_CSSPropertyValue eValue); | |
| CFX_CSSFontStyle ToFontStyle(CFX_CSSPropertyValue eValue); | |
| CFX_CSSVerticalAlign ToVerticalAlign(CFX_CSSPropertyValue eValue); | |
| uint32_t ToTextDecoration(const RetainPtr<CFX_CSSValueList>& pList); | |
| CFX_CSSFontVariant ToFontVariant(CFX_CSSPropertyValue eValue); | |
| float m_fDefFontSize; | |
| std::unique_ptr<CFX_CSSStyleSheet> m_UAStyles; | |
| CFX_CSSRuleCollection m_UARules; | |
| }; | |
| #endif // CORE_FXCRT_CSS_CFX_CSSSTYLESELECTOR_H_ |