// 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 #include #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 pSheet); void UpdateStyleIndex(); RetainPtr 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& declArray, const WideString& styleString, const WideString& alignString, CFX_CSSComputedStyle* pDestStyle); std::vector 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& declArray, const CFX_CSSDeclaration* extraDecl, CFX_CSSComputedStyle* pDestStyle); void ApplyProperty(CFX_CSSProperty eProperty, const RetainPtr& pValue, CFX_CSSComputedStyle* pComputedStyle); void ExtractValues(const CFX_CSSDeclaration* decl, std::vector* importants, std::vector* normals, std::vector* custom); bool SetLengthWithPercent(CFX_CSSLength& width, CFX_CSSPrimitiveType eType, const RetainPtr& 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& pList); CFX_CSSFontVariant ToFontVariant(CFX_CSSPropertyValue eValue); float m_fDefFontSize; std::unique_ptr m_UAStyles; CFX_CSSRuleCollection m_UARules; }; #endif // CORE_FXCRT_CSS_CFX_CSSSTYLESELECTOR_H_