OLD | NEW |
1 // Copyright 2014 PDFium Authors. All rights reserved. | 1 // Copyright 2014 PDFium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com | 5 // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com |
6 | 6 |
7 #include "xfa/fde/css/fde_cssstylesheet.h" | 7 #include "xfa/fde/css/fde_cssstylesheet.h" |
8 | 8 |
9 #include <memory> | 9 #include <memory> |
10 | 10 |
(...skipping 60 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
71 pStyleSheet->Release(); | 71 pStyleSheet->Release(); |
72 pStyleSheet = nullptr; | 72 pStyleSheet = nullptr; |
73 } | 73 } |
74 return pStyleSheet; | 74 return pStyleSheet; |
75 } | 75 } |
76 | 76 |
77 CFDE_CSSStyleSheet::CFDE_CSSStyleSheet(uint32_t dwMediaList) | 77 CFDE_CSSStyleSheet::CFDE_CSSStyleSheet(uint32_t dwMediaList) |
78 : m_wCodePage(FX_CODEPAGE_UTF8), | 78 : m_wCodePage(FX_CODEPAGE_UTF8), |
79 m_wRefCount(1), | 79 m_wRefCount(1), |
80 m_dwMediaList(dwMediaList), | 80 m_dwMediaList(dwMediaList), |
81 m_pAllocator(nullptr) { | 81 m_pAllocator(nullptr), |
| 82 m_RuleArray(100) { |
82 ASSERT(m_dwMediaList > 0); | 83 ASSERT(m_dwMediaList > 0); |
83 } | 84 } |
84 | 85 |
85 CFDE_CSSStyleSheet::~CFDE_CSSStyleSheet() { | 86 CFDE_CSSStyleSheet::~CFDE_CSSStyleSheet() { |
86 Reset(); | 87 Reset(); |
87 } | 88 } |
88 | 89 |
89 void CFDE_CSSStyleSheet::Reset() { | 90 void CFDE_CSSStyleSheet::Reset() { |
90 for (int32_t i = m_RuleArray.GetSize() - 1; i >= 0; --i) { | 91 for (int32_t i = m_RuleArray.GetSize() - 1; i >= 0; --i) { |
91 IFDE_CSSRule* pRule = m_RuleArray.GetAt(i); | 92 IFDE_CSSRule* pRule = m_RuleArray.GetAt(i); |
92 switch (pRule->GetType()) { | 93 switch (pRule->GetType()) { |
93 case FDE_CSSRULETYPE_Style: | 94 case FDE_CSSRULETYPE_Style: |
94 static_cast<CFDE_CSSStyleRule*>(pRule)->~CFDE_CSSStyleRule(); | 95 static_cast<CFDE_CSSStyleRule*>(pRule)->~CFDE_CSSStyleRule(); |
95 break; | 96 break; |
96 case FDE_CSSRULETYPE_Media: | 97 case FDE_CSSRULETYPE_Media: |
97 static_cast<CFDE_CSSMediaRule*>(pRule)->~CFDE_CSSMediaRule(); | 98 static_cast<CFDE_CSSMediaRule*>(pRule)->~CFDE_CSSMediaRule(); |
98 break; | 99 break; |
99 case FDE_CSSRULETYPE_FontFace: | 100 case FDE_CSSRULETYPE_FontFace: |
100 static_cast<CFDE_CSSFontFaceRule*>(pRule)->~CFDE_CSSFontFaceRule(); | 101 static_cast<CFDE_CSSFontFaceRule*>(pRule)->~CFDE_CSSFontFaceRule(); |
101 break; | 102 break; |
102 default: | 103 default: |
103 ASSERT(FALSE); | 104 ASSERT(FALSE); |
104 break; | 105 break; |
105 } | 106 } |
106 } | 107 } |
107 m_RuleArray.RemoveAll(); | 108 m_RuleArray.RemoveAll(FALSE); |
108 m_Selectors.RemoveAll(); | 109 m_Selectors.RemoveAll(); |
109 m_StringCache.clear(); | 110 m_StringCache.clear(); |
110 delete m_pAllocator; | 111 delete m_pAllocator; |
111 m_pAllocator = nullptr; | 112 m_pAllocator = nullptr; |
112 } | 113 } |
113 | 114 |
114 uint32_t CFDE_CSSStyleSheet::Retain() { | 115 uint32_t CFDE_CSSStyleSheet::Retain() { |
115 return ++m_wRefCount; | 116 return ++m_wRefCount; |
116 } | 117 } |
117 | 118 |
(...skipping 116 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
234 break; | 235 break; |
235 case FDE_CSSSYNTAXSTATUS_DeclClose: | 236 case FDE_CSSSYNTAXSTATUS_DeclClose: |
236 return FDE_CSSSYNTAXSTATUS_None; | 237 return FDE_CSSSYNTAXSTATUS_None; |
237 FDE_CSSSWITCHDEFAULTS(); | 238 FDE_CSSSWITCHDEFAULTS(); |
238 } | 239 } |
239 } | 240 } |
240 } | 241 } |
241 | 242 |
242 FDE_CSSSYNTAXSTATUS CFDE_CSSStyleSheet::LoadStyleRule( | 243 FDE_CSSSYNTAXSTATUS CFDE_CSSStyleSheet::LoadStyleRule( |
243 CFDE_CSSSyntaxParser* pSyntax, | 244 CFDE_CSSSyntaxParser* pSyntax, |
244 CFDE_CSSRuleArray& ruleArray) { | 245 CFX_MassArrayTemplate<IFDE_CSSRule*>& ruleArray) { |
245 m_Selectors.RemoveAt(0, m_Selectors.GetSize()); | 246 m_Selectors.RemoveAt(0, m_Selectors.GetSize()); |
246 CFDE_CSSStyleRule* pStyleRule = nullptr; | 247 CFDE_CSSStyleRule* pStyleRule = nullptr; |
247 const FX_WCHAR* pszValue = nullptr; | 248 const FX_WCHAR* pszValue = nullptr; |
248 int32_t iValueLen = 0; | 249 int32_t iValueLen = 0; |
249 FDE_CSSPROPERTYARGS propertyArgs; | 250 FDE_CSSPROPERTYARGS propertyArgs; |
250 propertyArgs.pStaticStore = m_pAllocator; | 251 propertyArgs.pStaticStore = m_pAllocator; |
251 propertyArgs.pStringCache = &m_StringCache; | 252 propertyArgs.pStringCache = &m_StringCache; |
252 propertyArgs.pProperty = nullptr; | 253 propertyArgs.pProperty = nullptr; |
253 CFX_WideString wsName; | 254 CFX_WideString wsName; |
254 for (;;) { | 255 for (;;) { |
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
299 ruleArray.RemoveLast(1); | 300 ruleArray.RemoveLast(1); |
300 } | 301 } |
301 return FDE_CSSSYNTAXSTATUS_None; | 302 return FDE_CSSSYNTAXSTATUS_None; |
302 FDE_CSSSWITCHDEFAULTS(); | 303 FDE_CSSSWITCHDEFAULTS(); |
303 } | 304 } |
304 } | 305 } |
305 } | 306 } |
306 | 307 |
307 FDE_CSSSYNTAXSTATUS CFDE_CSSStyleSheet::LoadFontFaceRule( | 308 FDE_CSSSYNTAXSTATUS CFDE_CSSStyleSheet::LoadFontFaceRule( |
308 CFDE_CSSSyntaxParser* pSyntax, | 309 CFDE_CSSSyntaxParser* pSyntax, |
309 CFDE_CSSRuleArray& ruleArray) { | 310 CFX_MassArrayTemplate<IFDE_CSSRule*>& ruleArray) { |
310 CFDE_CSSFontFaceRule* pFontFaceRule = nullptr; | 311 CFDE_CSSFontFaceRule* pFontFaceRule = nullptr; |
311 const FX_WCHAR* pszValue = nullptr; | 312 const FX_WCHAR* pszValue = nullptr; |
312 int32_t iValueLen = 0; | 313 int32_t iValueLen = 0; |
313 FDE_CSSPROPERTYARGS propertyArgs; | 314 FDE_CSSPROPERTYARGS propertyArgs; |
314 propertyArgs.pStaticStore = m_pAllocator; | 315 propertyArgs.pStaticStore = m_pAllocator; |
315 propertyArgs.pStringCache = &m_StringCache; | 316 propertyArgs.pStringCache = &m_StringCache; |
316 propertyArgs.pProperty = nullptr; | 317 propertyArgs.pProperty = nullptr; |
317 for (;;) { | 318 for (;;) { |
318 switch (pSyntax->DoSyntaxParse()) { | 319 switch (pSyntax->DoSyntaxParse()) { |
319 case FDE_CSSSYNTAXSTATUS_PropertyName: | 320 case FDE_CSSSYNTAXSTATUS_PropertyName: |
(...skipping 65 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
385 } | 386 } |
386 | 387 |
387 CFDE_CSSSelector* CFDE_CSSStyleRule::GetSelectorList(int32_t index) const { | 388 CFDE_CSSSelector* CFDE_CSSStyleRule::GetSelectorList(int32_t index) const { |
388 return m_ppSelector[index]; | 389 return m_ppSelector[index]; |
389 } | 390 } |
390 | 391 |
391 CFDE_CSSDeclaration* CFDE_CSSStyleRule::GetDeclaration() { | 392 CFDE_CSSDeclaration* CFDE_CSSStyleRule::GetDeclaration() { |
392 return &m_Declaration; | 393 return &m_Declaration; |
393 } | 394 } |
394 | 395 |
395 void CFDE_CSSStyleRule::SetSelector(IFX_MemoryAllocator* pStaticStore, | 396 void CFDE_CSSStyleRule::SetSelector( |
396 const CFDE_CSSSelectorArray& list) { | 397 IFX_MemoryAllocator* pStaticStore, |
| 398 const CFX_ArrayTemplate<CFDE_CSSSelector*>& list) { |
397 ASSERT(!m_ppSelector); | 399 ASSERT(!m_ppSelector); |
398 m_iSelectors = list.GetSize(); | 400 m_iSelectors = list.GetSize(); |
399 m_ppSelector = static_cast<CFDE_CSSSelector**>( | 401 m_ppSelector = static_cast<CFDE_CSSSelector**>( |
400 pStaticStore->Alloc(m_iSelectors * sizeof(CFDE_CSSSelector*))); | 402 pStaticStore->Alloc(m_iSelectors * sizeof(CFDE_CSSSelector*))); |
401 for (int32_t i = 0; i < m_iSelectors; ++i) { | 403 for (int32_t i = 0; i < m_iSelectors; ++i) { |
402 m_ppSelector[i] = list.GetAt(i); | 404 m_ppSelector[i] = list.GetAt(i); |
403 } | 405 } |
404 } | 406 } |
405 | 407 |
406 CFDE_CSSMediaRule::CFDE_CSSMediaRule(uint32_t dwMediaList) | 408 CFDE_CSSMediaRule::CFDE_CSSMediaRule(uint32_t dwMediaList) |
407 : m_dwMediaList(dwMediaList) {} | 409 : m_dwMediaList(dwMediaList), m_RuleArray(100) {} |
408 | 410 |
409 CFDE_CSSMediaRule::~CFDE_CSSMediaRule() { | 411 CFDE_CSSMediaRule::~CFDE_CSSMediaRule() { |
410 for (int32_t i = m_RuleArray.GetSize() - 1; i >= 0; --i) { | 412 for (int32_t i = m_RuleArray.GetSize() - 1; i >= 0; --i) { |
411 IFDE_CSSRule* pRule = m_RuleArray.GetAt(i); | 413 IFDE_CSSRule* pRule = m_RuleArray.GetAt(i); |
412 switch (pRule->GetType()) { | 414 switch (pRule->GetType()) { |
413 case FDE_CSSRULETYPE_Style: | 415 case FDE_CSSRULETYPE_Style: |
414 ((CFDE_CSSStyleRule*)pRule)->~CFDE_CSSStyleRule(); | 416 ((CFDE_CSSStyleRule*)pRule)->~CFDE_CSSStyleRule(); |
415 break; | 417 break; |
416 default: | 418 default: |
417 ASSERT(FALSE); | 419 ASSERT(FALSE); |
(...skipping 159 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
577 if (!pPersudoFirst) | 579 if (!pPersudoFirst) |
578 return pFirst; | 580 return pFirst; |
579 | 581 |
580 pPersudoLast->SetNext(pFirst); | 582 pPersudoLast->SetNext(pFirst); |
581 return pPersudoFirst; | 583 return pPersudoFirst; |
582 } | 584 } |
583 | 585 |
584 CFDE_CSSDeclaration* CFDE_CSSFontFaceRule::GetDeclaration() { | 586 CFDE_CSSDeclaration* CFDE_CSSFontFaceRule::GetDeclaration() { |
585 return &m_Declaration; | 587 return &m_Declaration; |
586 } | 588 } |
OLD | NEW |