1 // Copyright 2014 PDFium Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style license that can be 3 // found in the LICENSE file. 4 5 // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com 6 7 #ifndef CORE_FXCRT_CSS_CFX_CSSDECLARATION_H_ 8 #define CORE_FXCRT_CSS_CFX_CSSDECLARATION_H_ 9 10 #include <memory> 11 #include <vector> 12 13 #include "core/fxcrt/css/cfx_cssdata.h" 14 15 class CFX_CSSPropertyHolder; 16 class CFX_CSSCustomProperty; 17 18 class CFX_CSSDeclaration { 19 public: 20 using const_prop_iterator = 21 std::vector<std::unique_ptr<CFX_CSSPropertyHolder>>::const_iterator; 22 using const_custom_iterator = 23 std::vector<std::unique_ptr<CFX_CSSCustomProperty>>::const_iterator; 24 25 static bool ParseCSSString(const wchar_t* pszValue, 26 int32_t iValueLen, 27 int32_t* iOffset, 28 int32_t* iLength); 29 static bool ParseCSSColor(const wchar_t* pszValue, 30 int32_t iValueLen, 31 FX_ARGB* dwColor); 32 33 CFX_CSSDeclaration(); 34 ~CFX_CSSDeclaration(); 35 36 RetainPtr<CFX_CSSValue> GetProperty(CFX_CSSProperty eProperty, 37 bool* bImportant) const; 38 begin()39 const_prop_iterator begin() const { return properties_.begin(); } end()40 const_prop_iterator end() const { return properties_.end(); } 41 custom_begin()42 const_custom_iterator custom_begin() const { 43 return custom_properties_.begin(); 44 } custom_end()45 const_custom_iterator custom_end() const { return custom_properties_.end(); } 46 empty()47 bool empty() const { return properties_.empty(); } 48 49 void AddProperty(const CFX_CSSData::Property* property, WideStringView value); 50 void AddProperty(const WideString& prop, const WideString& value); 51 52 size_t PropertyCountForTesting() const; 53 54 FX_ARGB ParseColorForTest(const wchar_t* pszValue, 55 int32_t iValueLen, 56 FX_ARGB* dwColor) const; 57 58 private: 59 void ParseFontProperty(const wchar_t* pszValue, 60 int32_t iValueLen, 61 bool bImportant); 62 bool ParseBorderProperty(const wchar_t* pszValue, 63 int32_t iValueLen, 64 RetainPtr<CFX_CSSValue>& pWidth) const; 65 void ParseValueListProperty(const CFX_CSSData::Property* pProperty, 66 const wchar_t* pszValue, 67 int32_t iValueLen, 68 bool bImportant); 69 void Add4ValuesProperty(const std::vector<RetainPtr<CFX_CSSValue>>& list, 70 bool bImportant, 71 CFX_CSSProperty eLeft, 72 CFX_CSSProperty eTop, 73 CFX_CSSProperty eRight, 74 CFX_CSSProperty eBottom); 75 RetainPtr<CFX_CSSValue> ParseNumber(const wchar_t* pszValue, 76 int32_t iValueLen); 77 RetainPtr<CFX_CSSValue> ParseEnum(const wchar_t* pszValue, int32_t iValueLen); 78 RetainPtr<CFX_CSSValue> ParseColor(const wchar_t* pszValue, 79 int32_t iValueLen); 80 RetainPtr<CFX_CSSValue> ParseString(const wchar_t* pszValue, 81 int32_t iValueLen); 82 void AddPropertyHolder(CFX_CSSProperty eProperty, 83 RetainPtr<CFX_CSSValue> pValue, 84 bool bImportant); 85 86 std::vector<std::unique_ptr<CFX_CSSPropertyHolder>> properties_; 87 std::vector<std::unique_ptr<CFX_CSSCustomProperty>> custom_properties_; 88 }; 89 90 #endif // CORE_FXCRT_CSS_CFX_CSSDECLARATION_H_ 91