Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(89)

Side by Side Diff: xfa/fde/css/fde_cssstylesheet.cpp

Issue 1928763002: Cleanup IFDE_CSS interfaces. (Closed) Base URL: https://pdfium.googlesource.com/pdfium.git@master
Patch Set: Created 4 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « xfa/fde/css/fde_cssstylesheet.h ('k') | xfa/fde/css/fde_csssyntax.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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 "xfa/fde/css/fde_cssdatatable.h" 9 #include "xfa/fde/css/fde_cssdatatable.h"
10 #include "xfa/fde/css/fde_csssyntax.h" 10 #include "xfa/fde/css/fde_csssyntax.h"
(...skipping 107 matching lines...) Expand 10 before | Expand all | Expand 10 after
118 } 118 }
119 int32_t CFDE_CSSStyleSheet::CountRules() const { 119 int32_t CFDE_CSSStyleSheet::CountRules() const {
120 return m_RuleArray.GetSize(); 120 return m_RuleArray.GetSize();
121 } 121 }
122 IFDE_CSSRule* CFDE_CSSStyleSheet::GetRule(int32_t index) { 122 IFDE_CSSRule* CFDE_CSSStyleSheet::GetRule(int32_t index) {
123 return m_RuleArray.GetAt(index); 123 return m_RuleArray.GetAt(index);
124 } 124 }
125 FX_BOOL CFDE_CSSStyleSheet::LoadFromStream(const CFX_WideString& szUrl, 125 FX_BOOL CFDE_CSSStyleSheet::LoadFromStream(const CFX_WideString& szUrl,
126 IFX_Stream* pStream, 126 IFX_Stream* pStream,
127 uint16_t wCodePage) { 127 uint16_t wCodePage) {
128 ASSERT(pStream != NULL); 128 CFDE_CSSSyntaxParser* pSyntax = new CFDE_CSSSyntaxParser;
129 IFDE_CSSSyntaxParser* pSyntax = IFDE_CSSSyntaxParser::Create();
130 if (pSyntax == NULL) {
131 return FALSE;
132 }
133 if (pStream->GetCodePage() != wCodePage) { 129 if (pStream->GetCodePage() != wCodePage) {
134 pStream->SetCodePage(wCodePage); 130 pStream->SetCodePage(wCodePage);
135 } 131 }
136 FX_BOOL bRet = pSyntax->Init(pStream, 4096) && LoadFromSyntax(pSyntax); 132 FX_BOOL bRet = pSyntax->Init(pStream, 4096) && LoadFromSyntax(pSyntax);
137 pSyntax->Release(); 133 pSyntax->Release();
138 m_wCodePage = wCodePage; 134 m_wCodePage = wCodePage;
139 m_szUrl = szUrl; 135 m_szUrl = szUrl;
140 return bRet; 136 return bRet;
141 } 137 }
142 FX_BOOL CFDE_CSSStyleSheet::LoadFromBuffer(const CFX_WideString& szUrl, 138 FX_BOOL CFDE_CSSStyleSheet::LoadFromBuffer(const CFX_WideString& szUrl,
143 const FX_WCHAR* pBuffer, 139 const FX_WCHAR* pBuffer,
144 int32_t iBufSize, 140 int32_t iBufSize,
145 uint16_t wCodePage) { 141 uint16_t wCodePage) {
146 ASSERT(pBuffer != NULL && iBufSize > 0); 142 ASSERT(pBuffer && iBufSize > 0);
147 IFDE_CSSSyntaxParser* pSyntax = IFDE_CSSSyntaxParser::Create(); 143
148 if (pSyntax == NULL) { 144 CFDE_CSSSyntaxParser* pSyntax = new CFDE_CSSSyntaxParser;
149 return FALSE;
150 }
151 FX_BOOL bRet = pSyntax->Init(pBuffer, iBufSize) && LoadFromSyntax(pSyntax); 145 FX_BOOL bRet = pSyntax->Init(pBuffer, iBufSize) && LoadFromSyntax(pSyntax);
152 pSyntax->Release(); 146 pSyntax->Release();
153 m_wCodePage = wCodePage; 147 m_wCodePage = wCodePage;
154 m_szUrl = szUrl; 148 m_szUrl = szUrl;
155 return bRet; 149 return bRet;
156 } 150 }
157 FX_BOOL CFDE_CSSStyleSheet::LoadFromSyntax(IFDE_CSSSyntaxParser* pSyntax) { 151 FX_BOOL CFDE_CSSStyleSheet::LoadFromSyntax(CFDE_CSSSyntaxParser* pSyntax) {
158 Reset(); 152 Reset();
159 m_pAllocator = FX_CreateAllocator(FX_ALLOCTYPE_Static, 1024, 0); 153 m_pAllocator = FX_CreateAllocator(FX_ALLOCTYPE_Static, 1024, 0);
160 if (m_pAllocator == NULL) { 154 if (m_pAllocator == NULL) {
161 return FALSE; 155 return FALSE;
162 } 156 }
163 FDE_CSSSYNTAXSTATUS eStatus; 157 FDE_CSSSYNTAXSTATUS eStatus;
164 do { 158 do {
165 switch (eStatus = pSyntax->DoSyntaxParse()) { 159 switch (eStatus = pSyntax->DoSyntaxParse()) {
166 case FDE_CSSSYNTAXSTATUS_StyleRule: 160 case FDE_CSSSYNTAXSTATUS_StyleRule:
167 eStatus = LoadStyleRule(pSyntax, m_RuleArray); 161 eStatus = LoadStyleRule(pSyntax, m_RuleArray);
(...skipping 12 matching lines...) Expand all
180 break; 174 break;
181 default: 175 default:
182 break; 176 break;
183 } 177 }
184 } while (eStatus >= FDE_CSSSYNTAXSTATUS_None); 178 } while (eStatus >= FDE_CSSSYNTAXSTATUS_None);
185 m_Selectors.RemoveAll(); 179 m_Selectors.RemoveAll();
186 m_StringCache.RemoveAll(); 180 m_StringCache.RemoveAll();
187 return eStatus != FDE_CSSSYNTAXSTATUS_Error; 181 return eStatus != FDE_CSSSYNTAXSTATUS_Error;
188 } 182 }
189 FDE_CSSSYNTAXSTATUS CFDE_CSSStyleSheet::LoadMediaRule( 183 FDE_CSSSYNTAXSTATUS CFDE_CSSStyleSheet::LoadMediaRule(
190 IFDE_CSSSyntaxParser* pSyntax) { 184 CFDE_CSSSyntaxParser* pSyntax) {
191 uint32_t dwMediaList = 0; 185 uint32_t dwMediaList = 0;
192 CFDE_CSSMediaRule* pMediaRule = NULL; 186 CFDE_CSSMediaRule* pMediaRule = NULL;
193 for (;;) { 187 for (;;) {
194 switch (pSyntax->DoSyntaxParse()) { 188 switch (pSyntax->DoSyntaxParse()) {
195 case FDE_CSSSYNTAXSTATUS_MediaType: { 189 case FDE_CSSSYNTAXSTATUS_MediaType: {
196 int32_t iLen; 190 int32_t iLen;
197 const FX_WCHAR* psz = pSyntax->GetCurrentString(iLen); 191 const FX_WCHAR* psz = pSyntax->GetCurrentString(iLen);
198 FDE_LPCCSSMEDIATYPETABLE pMediaType = 192 FDE_LPCCSSMEDIATYPETABLE pMediaType =
199 FDE_GetCSSMediaTypeByName(CFX_WideStringC(psz, iLen)); 193 FDE_GetCSSMediaTypeByName(CFX_WideStringC(psz, iLen));
200 if (pMediaType != NULL) { 194 if (pMediaType != NULL) {
(...skipping 18 matching lines...) Expand all
219 m_RuleArray.Add(pMediaRule); 213 m_RuleArray.Add(pMediaRule);
220 } 214 }
221 break; 215 break;
222 case FDE_CSSSYNTAXSTATUS_DeclClose: 216 case FDE_CSSSYNTAXSTATUS_DeclClose:
223 return FDE_CSSSYNTAXSTATUS_None; 217 return FDE_CSSSYNTAXSTATUS_None;
224 FDE_CSSSWITCHDEFAULTS(); 218 FDE_CSSSWITCHDEFAULTS();
225 } 219 }
226 } 220 }
227 } 221 }
228 FDE_CSSSYNTAXSTATUS CFDE_CSSStyleSheet::LoadStyleRule( 222 FDE_CSSSYNTAXSTATUS CFDE_CSSStyleSheet::LoadStyleRule(
229 IFDE_CSSSyntaxParser* pSyntax, 223 CFDE_CSSSyntaxParser* pSyntax,
230 CFDE_CSSRuleArray& ruleArray) { 224 CFDE_CSSRuleArray& ruleArray) {
231 m_Selectors.RemoveAt(0, m_Selectors.GetSize()); 225 m_Selectors.RemoveAt(0, m_Selectors.GetSize());
232 CFDE_CSSStyleRule* pStyleRule = NULL; 226 CFDE_CSSStyleRule* pStyleRule = NULL;
233 const FX_WCHAR* pszValue = NULL; 227 const FX_WCHAR* pszValue = NULL;
234 int32_t iValueLen = 0; 228 int32_t iValueLen = 0;
235 FDE_CSSPROPERTYARGS propertyArgs; 229 FDE_CSSPROPERTYARGS propertyArgs;
236 propertyArgs.pStaticStore = m_pAllocator; 230 propertyArgs.pStaticStore = m_pAllocator;
237 propertyArgs.pStringCache = &m_StringCache; 231 propertyArgs.pStringCache = &m_StringCache;
238 propertyArgs.pProperty = NULL; 232 propertyArgs.pProperty = NULL;
239 CFX_WideString wsName; 233 CFX_WideString wsName;
240 for (;;) { 234 for (;;) {
241 switch (pSyntax->DoSyntaxParse()) { 235 switch (pSyntax->DoSyntaxParse()) {
242 case FDE_CSSSYNTAXSTATUS_Selector: { 236 case FDE_CSSSYNTAXSTATUS_Selector: {
243 pszValue = pSyntax->GetCurrentString(iValueLen); 237 pszValue = pSyntax->GetCurrentString(iValueLen);
244 IFDE_CSSSelector* pSelector = 238 CFDE_CSSSelector* pSelector =
245 CFDE_CSSSelector::FromString(m_pAllocator, pszValue, iValueLen); 239 CFDE_CSSSelector::FromString(m_pAllocator, pszValue, iValueLen);
246 if (pSelector != NULL) { 240 if (pSelector != NULL) {
247 m_Selectors.Add(pSelector); 241 m_Selectors.Add(pSelector);
248 } 242 }
249 } break; 243 } break;
250 case FDE_CSSSYNTAXSTATUS_PropertyName: 244 case FDE_CSSSYNTAXSTATUS_PropertyName:
251 pszValue = pSyntax->GetCurrentString(iValueLen); 245 pszValue = pSyntax->GetCurrentString(iValueLen);
252 propertyArgs.pProperty = 246 propertyArgs.pProperty =
253 FDE_GetCSSPropertyByName(CFX_WideStringC(pszValue, iValueLen)); 247 FDE_GetCSSPropertyByName(CFX_WideStringC(pszValue, iValueLen));
254 if (propertyArgs.pProperty == NULL) { 248 if (propertyArgs.pProperty == NULL) {
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after
286 pStyleRule->GetDeclImp().GetStartPosition() == NULL) { 280 pStyleRule->GetDeclImp().GetStartPosition() == NULL) {
287 pStyleRule->~CFDE_CSSStyleRule(); 281 pStyleRule->~CFDE_CSSStyleRule();
288 ruleArray.RemoveLast(1); 282 ruleArray.RemoveLast(1);
289 } 283 }
290 return FDE_CSSSYNTAXSTATUS_None; 284 return FDE_CSSSYNTAXSTATUS_None;
291 FDE_CSSSWITCHDEFAULTS(); 285 FDE_CSSSWITCHDEFAULTS();
292 } 286 }
293 } 287 }
294 } 288 }
295 FDE_CSSSYNTAXSTATUS CFDE_CSSStyleSheet::LoadFontFaceRule( 289 FDE_CSSSYNTAXSTATUS CFDE_CSSStyleSheet::LoadFontFaceRule(
296 IFDE_CSSSyntaxParser* pSyntax, 290 CFDE_CSSSyntaxParser* pSyntax,
297 CFDE_CSSRuleArray& ruleArray) { 291 CFDE_CSSRuleArray& ruleArray) {
298 CFDE_CSSFontFaceRule* pFontFaceRule = NULL; 292 CFDE_CSSFontFaceRule* pFontFaceRule = NULL;
299 const FX_WCHAR* pszValue = NULL; 293 const FX_WCHAR* pszValue = NULL;
300 int32_t iValueLen = 0; 294 int32_t iValueLen = 0;
301 FDE_CSSPROPERTYARGS propertyArgs; 295 FDE_CSSPROPERTYARGS propertyArgs;
302 propertyArgs.pStaticStore = m_pAllocator; 296 propertyArgs.pStaticStore = m_pAllocator;
303 propertyArgs.pStringCache = &m_StringCache; 297 propertyArgs.pStringCache = &m_StringCache;
304 propertyArgs.pProperty = NULL; 298 propertyArgs.pProperty = NULL;
305 for (;;) { 299 for (;;) {
306 switch (pSyntax->DoSyntaxParse()) { 300 switch (pSyntax->DoSyntaxParse()) {
(...skipping 18 matching lines...) Expand all
325 } 319 }
326 break; 320 break;
327 case FDE_CSSSYNTAXSTATUS_DeclClose: 321 case FDE_CSSSYNTAXSTATUS_DeclClose:
328 return FDE_CSSSYNTAXSTATUS_None; 322 return FDE_CSSSYNTAXSTATUS_None;
329 FDE_CSSSWITCHDEFAULTS(); 323 FDE_CSSSWITCHDEFAULTS();
330 } 324 }
331 } 325 }
332 return FDE_CSSSYNTAXSTATUS_None; 326 return FDE_CSSSYNTAXSTATUS_None;
333 } 327 }
334 FDE_CSSSYNTAXSTATUS CFDE_CSSStyleSheet::LoadImportRule( 328 FDE_CSSSYNTAXSTATUS CFDE_CSSStyleSheet::LoadImportRule(
335 IFDE_CSSSyntaxParser* pSyntax) { 329 CFDE_CSSSyntaxParser* pSyntax) {
336 for (;;) { 330 for (;;) {
337 switch (pSyntax->DoSyntaxParse()) { 331 switch (pSyntax->DoSyntaxParse()) {
338 case FDE_CSSSYNTAXSTATUS_ImportClose: 332 case FDE_CSSSYNTAXSTATUS_ImportClose:
339 return FDE_CSSSYNTAXSTATUS_None; 333 return FDE_CSSSYNTAXSTATUS_None;
340 case FDE_CSSSYNTAXSTATUS_URI: 334 case FDE_CSSSYNTAXSTATUS_URI:
341 break; 335 break;
342 FDE_CSSSWITCHDEFAULTS(); 336 FDE_CSSSWITCHDEFAULTS();
343 } 337 }
344 } 338 }
345 } 339 }
346 FDE_CSSSYNTAXSTATUS CFDE_CSSStyleSheet::LoadPageRule( 340 FDE_CSSSYNTAXSTATUS CFDE_CSSStyleSheet::LoadPageRule(
347 IFDE_CSSSyntaxParser* pSyntax) { 341 CFDE_CSSSyntaxParser* pSyntax) {
348 return SkipRuleSet(pSyntax); 342 return SkipRuleSet(pSyntax);
349 } 343 }
350 FDE_CSSSYNTAXSTATUS CFDE_CSSStyleSheet::SkipRuleSet( 344 FDE_CSSSYNTAXSTATUS CFDE_CSSStyleSheet::SkipRuleSet(
351 IFDE_CSSSyntaxParser* pSyntax) { 345 CFDE_CSSSyntaxParser* pSyntax) {
352 for (;;) { 346 for (;;) {
353 switch (pSyntax->DoSyntaxParse()) { 347 switch (pSyntax->DoSyntaxParse()) {
354 case FDE_CSSSYNTAXSTATUS_Selector: 348 case FDE_CSSSYNTAXSTATUS_Selector:
355 case FDE_CSSSYNTAXSTATUS_DeclOpen: 349 case FDE_CSSSYNTAXSTATUS_DeclOpen:
356 case FDE_CSSSYNTAXSTATUS_PropertyName: 350 case FDE_CSSSYNTAXSTATUS_PropertyName:
357 case FDE_CSSSYNTAXSTATUS_PropertyValue: 351 case FDE_CSSSYNTAXSTATUS_PropertyValue:
358 break; 352 break;
359 case FDE_CSSSYNTAXSTATUS_DeclClose: 353 case FDE_CSSSYNTAXSTATUS_DeclClose:
360 return FDE_CSSSYNTAXSTATUS_None; 354 return FDE_CSSSYNTAXSTATUS_None;
361 FDE_CSSSWITCHDEFAULTS(); 355 FDE_CSSSWITCHDEFAULTS();
362 } 356 }
363 } 357 }
364 return FDE_CSSSYNTAXSTATUS_None; 358 return FDE_CSSSYNTAXSTATUS_None;
365 } 359 }
366 void CFDE_CSSStyleRule::SetSelector(IFX_MEMAllocator* pStaticStore, 360 void CFDE_CSSStyleRule::SetSelector(IFX_MEMAllocator* pStaticStore,
367 const CFDE_CSSSelectorArray& list) { 361 const CFDE_CSSSelectorArray& list) {
368 ASSERT(m_ppSelector == NULL); 362 ASSERT(m_ppSelector == NULL);
369 m_iSelectors = list.GetSize(); 363 m_iSelectors = list.GetSize();
370 m_ppSelector = (IFDE_CSSSelector**)pStaticStore->Alloc( 364 m_ppSelector = static_cast<CFDE_CSSSelector**>(
371 m_iSelectors * sizeof(IFDE_CSSSelector*)); 365 pStaticStore->Alloc(m_iSelectors * sizeof(CFDE_CSSSelector*)));
372 for (int32_t i = 0; i < m_iSelectors; ++i) { 366 for (int32_t i = 0; i < m_iSelectors; ++i) {
373 m_ppSelector[i] = list.GetAt(i); 367 m_ppSelector[i] = list.GetAt(i);
374 } 368 }
375 } 369 }
376 CFDE_CSSMediaRule::~CFDE_CSSMediaRule() { 370 CFDE_CSSMediaRule::~CFDE_CSSMediaRule() {
377 for (int32_t i = m_RuleArray.GetSize() - 1; i >= 0; --i) { 371 for (int32_t i = m_RuleArray.GetSize() - 1; i >= 0; --i) {
378 IFDE_CSSRule* pRule = m_RuleArray.GetAt(i); 372 IFDE_CSSRule* pRule = m_RuleArray.GetAt(i);
379 switch (pRule->GetType()) { 373 switch (pRule->GetType()) {
380 case FDE_CSSRULETYPE_Style: 374 case FDE_CSSRULETYPE_Style:
381 ((CFDE_CSSStyleRule*)pRule)->~CFDE_CSSStyleRule(); 375 ((CFDE_CSSStyleRule*)pRule)->~CFDE_CSSStyleRule();
(...skipping 26 matching lines...) Expand all
408 FX_WCHAR wch = *psz; 402 FX_WCHAR wch = *psz;
409 if (FDE_IsCSSChar(wch) || (wch >= '0' && wch <= '9') || wch == '_' || 403 if (FDE_IsCSSChar(wch) || (wch >= '0' && wch <= '9') || wch == '_' ||
410 wch == '-') { 404 wch == '-') {
411 ++psz; 405 ++psz;
412 } else { 406 } else {
413 break; 407 break;
414 } 408 }
415 } 409 }
416 return psz - pStart; 410 return psz - pStart;
417 } 411 }
418 IFDE_CSSSelector* CFDE_CSSSelector::FromString(IFX_MEMAllocator* pStaticStore, 412 CFDE_CSSSelector* CFDE_CSSSelector::FromString(IFX_MEMAllocator* pStaticStore,
419 const FX_WCHAR* psz, 413 const FX_WCHAR* psz,
420 int32_t iLen) { 414 int32_t iLen) {
421 ASSERT(pStaticStore != NULL && psz != NULL && iLen > 0); 415 ASSERT(pStaticStore != NULL && psz != NULL && iLen > 0);
422 const FX_WCHAR* pStart = psz; 416 const FX_WCHAR* pStart = psz;
423 const FX_WCHAR* pEnd = psz + iLen; 417 const FX_WCHAR* pEnd = psz + iLen;
424 for (; psz < pEnd; ++psz) { 418 for (; psz < pEnd; ++psz) {
425 switch (*psz) { 419 switch (*psz) {
426 case '>': 420 case '>':
427 case '[': 421 case '[':
428 case '+': 422 case '+':
(...skipping 74 matching lines...) Expand 10 before | Expand all | Expand 10 after
503 return NULL; 497 return NULL;
504 } 498 }
505 } 499 }
506 if (pPersudoFirst == NULL) { 500 if (pPersudoFirst == NULL) {
507 return pFirst; 501 return pFirst;
508 } else { 502 } else {
509 pPersudoLast->SetNext(pFirst); 503 pPersudoLast->SetNext(pFirst);
510 return pPersudoFirst; 504 return pPersudoFirst;
511 } 505 }
512 } 506 }
OLDNEW
« no previous file with comments | « xfa/fde/css/fde_cssstylesheet.h ('k') | xfa/fde/css/fde_csssyntax.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698