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

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

Issue 2031873003: Get rid of NULLs in xfa/ (Closed) Base URL: https://pdfium.googlesource.com/pdfium@nullptr_fpdfsdk
Patch Set: Created 4 years, 6 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.cpp » ('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 <memory> 9 #include <memory>
10 10
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after
48 } 48 }
49 49
50 IFDE_CSSStyleSheet* IFDE_CSSStyleSheet::LoadFromStream( 50 IFDE_CSSStyleSheet* IFDE_CSSStyleSheet::LoadFromStream(
51 const CFX_WideString& szUrl, 51 const CFX_WideString& szUrl,
52 IFX_Stream* pStream, 52 IFX_Stream* pStream,
53 uint16_t wCodePage, 53 uint16_t wCodePage,
54 uint32_t dwMediaList) { 54 uint32_t dwMediaList) {
55 CFDE_CSSStyleSheet* pStyleSheet = new CFDE_CSSStyleSheet(dwMediaList); 55 CFDE_CSSStyleSheet* pStyleSheet = new CFDE_CSSStyleSheet(dwMediaList);
56 if (!pStyleSheet->LoadFromStream(szUrl, pStream, wCodePage)) { 56 if (!pStyleSheet->LoadFromStream(szUrl, pStream, wCodePage)) {
57 pStyleSheet->Release(); 57 pStyleSheet->Release();
58 pStyleSheet = NULL; 58 pStyleSheet = nullptr;
59 } 59 }
60 return pStyleSheet; 60 return pStyleSheet;
61 } 61 }
62 IFDE_CSSStyleSheet* IFDE_CSSStyleSheet::LoadFromBuffer( 62 IFDE_CSSStyleSheet* IFDE_CSSStyleSheet::LoadFromBuffer(
63 const CFX_WideString& szUrl, 63 const CFX_WideString& szUrl,
64 const FX_WCHAR* pBuffer, 64 const FX_WCHAR* pBuffer,
65 int32_t iBufSize, 65 int32_t iBufSize,
66 uint16_t wCodePage, 66 uint16_t wCodePage,
67 uint32_t dwMediaList) { 67 uint32_t dwMediaList) {
68 CFDE_CSSStyleSheet* pStyleSheet = new CFDE_CSSStyleSheet(dwMediaList); 68 CFDE_CSSStyleSheet* pStyleSheet = new CFDE_CSSStyleSheet(dwMediaList);
69 if (!pStyleSheet->LoadFromBuffer(szUrl, pBuffer, iBufSize, wCodePage)) { 69 if (!pStyleSheet->LoadFromBuffer(szUrl, pBuffer, iBufSize, wCodePage)) {
70 pStyleSheet->Release(); 70 pStyleSheet->Release();
71 pStyleSheet = NULL; 71 pStyleSheet = nullptr;
72 } 72 }
73 return pStyleSheet; 73 return pStyleSheet;
74 } 74 }
75 CFDE_CSSStyleSheet::CFDE_CSSStyleSheet(uint32_t dwMediaList) 75 CFDE_CSSStyleSheet::CFDE_CSSStyleSheet(uint32_t dwMediaList)
76 : m_wCodePage(FX_CODEPAGE_UTF8), 76 : m_wCodePage(FX_CODEPAGE_UTF8),
77 m_wRefCount(1), 77 m_wRefCount(1),
78 m_dwMediaList(dwMediaList), 78 m_dwMediaList(dwMediaList),
79 m_pAllocator(NULL) { 79 m_pAllocator(nullptr) {
80 ASSERT(m_dwMediaList > 0); 80 ASSERT(m_dwMediaList > 0);
81 } 81 }
82 CFDE_CSSStyleSheet::~CFDE_CSSStyleSheet() { 82 CFDE_CSSStyleSheet::~CFDE_CSSStyleSheet() {
83 Reset(); 83 Reset();
84 } 84 }
85 void CFDE_CSSStyleSheet::Reset() { 85 void CFDE_CSSStyleSheet::Reset() {
86 for (int32_t i = m_RuleArray.GetSize() - 1; i >= 0; --i) { 86 for (int32_t i = m_RuleArray.GetSize() - 1; i >= 0; --i) {
87 IFDE_CSSRule* pRule = m_RuleArray.GetAt(i); 87 IFDE_CSSRule* pRule = m_RuleArray.GetAt(i);
88 switch (pRule->GetType()) { 88 switch (pRule->GetType()) {
89 case FDE_CSSRULETYPE_Style: 89 case FDE_CSSRULETYPE_Style:
(...skipping 84 matching lines...) Expand 10 before | Expand all | Expand 10 after
174 break; 174 break;
175 } 175 }
176 } while (eStatus >= FDE_CSSSYNTAXSTATUS_None); 176 } while (eStatus >= FDE_CSSSYNTAXSTATUS_None);
177 m_Selectors.RemoveAll(); 177 m_Selectors.RemoveAll();
178 m_StringCache.clear(); 178 m_StringCache.clear();
179 return eStatus != FDE_CSSSYNTAXSTATUS_Error; 179 return eStatus != FDE_CSSSYNTAXSTATUS_Error;
180 } 180 }
181 FDE_CSSSYNTAXSTATUS CFDE_CSSStyleSheet::LoadMediaRule( 181 FDE_CSSSYNTAXSTATUS CFDE_CSSStyleSheet::LoadMediaRule(
182 CFDE_CSSSyntaxParser* pSyntax) { 182 CFDE_CSSSyntaxParser* pSyntax) {
183 uint32_t dwMediaList = 0; 183 uint32_t dwMediaList = 0;
184 CFDE_CSSMediaRule* pMediaRule = NULL; 184 CFDE_CSSMediaRule* pMediaRule = nullptr;
185 for (;;) { 185 for (;;) {
186 switch (pSyntax->DoSyntaxParse()) { 186 switch (pSyntax->DoSyntaxParse()) {
187 case FDE_CSSSYNTAXSTATUS_MediaType: { 187 case FDE_CSSSYNTAXSTATUS_MediaType: {
188 int32_t iLen; 188 int32_t iLen;
189 const FX_WCHAR* psz = pSyntax->GetCurrentString(iLen); 189 const FX_WCHAR* psz = pSyntax->GetCurrentString(iLen);
190 FDE_LPCCSSMEDIATYPETABLE pMediaType = 190 FDE_LPCCSSMEDIATYPETABLE pMediaType =
191 FDE_GetCSSMediaTypeByName(CFX_WideStringC(psz, iLen)); 191 FDE_GetCSSMediaTypeByName(CFX_WideStringC(psz, iLen));
192 if (pMediaType != NULL) { 192 if (pMediaType)
193 dwMediaList |= pMediaType->wValue; 193 dwMediaList |= pMediaType->wValue;
194 }
195 } break; 194 } break;
196 case FDE_CSSSYNTAXSTATUS_StyleRule: 195 case FDE_CSSSYNTAXSTATUS_StyleRule:
197 if (pMediaRule == NULL) { 196 if (pMediaRule) {
198 SkipRuleSet(pSyntax);
199 } else {
200 FDE_CSSSYNTAXSTATUS eStatus = 197 FDE_CSSSYNTAXSTATUS eStatus =
201 LoadStyleRule(pSyntax, pMediaRule->GetArray()); 198 LoadStyleRule(pSyntax, pMediaRule->GetArray());
202 if (eStatus < FDE_CSSSYNTAXSTATUS_None) { 199 if (eStatus < FDE_CSSSYNTAXSTATUS_None) {
203 return eStatus; 200 return eStatus;
204 } 201 }
202 } else {
203 SkipRuleSet(pSyntax);
205 } 204 }
206 break; 205 break;
207 case FDE_CSSSYNTAXSTATUS_DeclOpen: 206 case FDE_CSSSYNTAXSTATUS_DeclOpen:
208 if ((dwMediaList & m_dwMediaList) > 0 && pMediaRule == NULL) { 207 if ((dwMediaList & m_dwMediaList) > 0 && !pMediaRule) {
209 pMediaRule = 208 pMediaRule =
210 FXTARGET_NewWith(m_pAllocator) CFDE_CSSMediaRule(dwMediaList); 209 FXTARGET_NewWith(m_pAllocator) CFDE_CSSMediaRule(dwMediaList);
211 m_RuleArray.Add(pMediaRule); 210 m_RuleArray.Add(pMediaRule);
212 } 211 }
213 break; 212 break;
214 case FDE_CSSSYNTAXSTATUS_DeclClose: 213 case FDE_CSSSYNTAXSTATUS_DeclClose:
215 return FDE_CSSSYNTAXSTATUS_None; 214 return FDE_CSSSYNTAXSTATUS_None;
216 FDE_CSSSWITCHDEFAULTS(); 215 FDE_CSSSWITCHDEFAULTS();
217 } 216 }
218 } 217 }
219 } 218 }
220 FDE_CSSSYNTAXSTATUS CFDE_CSSStyleSheet::LoadStyleRule( 219 FDE_CSSSYNTAXSTATUS CFDE_CSSStyleSheet::LoadStyleRule(
221 CFDE_CSSSyntaxParser* pSyntax, 220 CFDE_CSSSyntaxParser* pSyntax,
222 CFDE_CSSRuleArray& ruleArray) { 221 CFDE_CSSRuleArray& ruleArray) {
223 m_Selectors.RemoveAt(0, m_Selectors.GetSize()); 222 m_Selectors.RemoveAt(0, m_Selectors.GetSize());
224 CFDE_CSSStyleRule* pStyleRule = NULL; 223 CFDE_CSSStyleRule* pStyleRule = nullptr;
225 const FX_WCHAR* pszValue = NULL; 224 const FX_WCHAR* pszValue = nullptr;
226 int32_t iValueLen = 0; 225 int32_t iValueLen = 0;
227 FDE_CSSPROPERTYARGS propertyArgs; 226 FDE_CSSPROPERTYARGS propertyArgs;
228 propertyArgs.pStaticStore = m_pAllocator; 227 propertyArgs.pStaticStore = m_pAllocator;
229 propertyArgs.pStringCache = &m_StringCache; 228 propertyArgs.pStringCache = &m_StringCache;
230 propertyArgs.pProperty = NULL; 229 propertyArgs.pProperty = nullptr;
231 CFX_WideString wsName; 230 CFX_WideString wsName;
232 for (;;) { 231 for (;;) {
233 switch (pSyntax->DoSyntaxParse()) { 232 switch (pSyntax->DoSyntaxParse()) {
234 case FDE_CSSSYNTAXSTATUS_Selector: { 233 case FDE_CSSSYNTAXSTATUS_Selector: {
235 pszValue = pSyntax->GetCurrentString(iValueLen); 234 pszValue = pSyntax->GetCurrentString(iValueLen);
236 CFDE_CSSSelector* pSelector = 235 CFDE_CSSSelector* pSelector =
237 CFDE_CSSSelector::FromString(m_pAllocator, pszValue, iValueLen); 236 CFDE_CSSSelector::FromString(m_pAllocator, pszValue, iValueLen);
238 if (pSelector != NULL) { 237 if (pSelector)
239 m_Selectors.Add(pSelector); 238 m_Selectors.Add(pSelector);
240 }
241 } break; 239 } break;
242 case FDE_CSSSYNTAXSTATUS_PropertyName: 240 case FDE_CSSSYNTAXSTATUS_PropertyName:
243 pszValue = pSyntax->GetCurrentString(iValueLen); 241 pszValue = pSyntax->GetCurrentString(iValueLen);
244 propertyArgs.pProperty = 242 propertyArgs.pProperty =
245 FDE_GetCSSPropertyByName(CFX_WideStringC(pszValue, iValueLen)); 243 FDE_GetCSSPropertyByName(CFX_WideStringC(pszValue, iValueLen));
246 if (propertyArgs.pProperty == NULL) { 244 if (!propertyArgs.pProperty)
247 wsName = CFX_WideStringC(pszValue, iValueLen); 245 wsName = CFX_WideStringC(pszValue, iValueLen);
248 }
249 break; 246 break;
250 case FDE_CSSSYNTAXSTATUS_PropertyValue: 247 case FDE_CSSSYNTAXSTATUS_PropertyValue:
251 if (propertyArgs.pProperty != NULL) { 248 if (propertyArgs.pProperty) {
252 pszValue = pSyntax->GetCurrentString(iValueLen); 249 pszValue = pSyntax->GetCurrentString(iValueLen);
253 if (iValueLen > 0) { 250 if (iValueLen > 0) {
254 pStyleRule->GetDeclImp().AddProperty(&propertyArgs, pszValue, 251 pStyleRule->GetDeclImp().AddProperty(&propertyArgs, pszValue,
255 iValueLen); 252 iValueLen);
256 } 253 }
257 } else if (iValueLen > 0) { 254 } else if (iValueLen > 0) {
258 pszValue = pSyntax->GetCurrentString(iValueLen); 255 pszValue = pSyntax->GetCurrentString(iValueLen);
259 if (iValueLen > 0) { 256 if (iValueLen > 0) {
260 pStyleRule->GetDeclImp().AddProperty(&propertyArgs, wsName.c_str(), 257 pStyleRule->GetDeclImp().AddProperty(&propertyArgs, wsName.c_str(),
261 wsName.GetLength(), pszValue, 258 wsName.GetLength(), pszValue,
262 iValueLen); 259 iValueLen);
263 } 260 }
264 } 261 }
265 break; 262 break;
266 case FDE_CSSSYNTAXSTATUS_DeclOpen: 263 case FDE_CSSSYNTAXSTATUS_DeclOpen:
267 if (pStyleRule == NULL && m_Selectors.GetSize() > 0) { 264 if (!pStyleRule && m_Selectors.GetSize() > 0) {
268 pStyleRule = FXTARGET_NewWith(m_pAllocator) CFDE_CSSStyleRule; 265 pStyleRule = FXTARGET_NewWith(m_pAllocator) CFDE_CSSStyleRule;
269 pStyleRule->SetSelector(m_pAllocator, m_Selectors); 266 pStyleRule->SetSelector(m_pAllocator, m_Selectors);
270 ruleArray.Add(pStyleRule); 267 ruleArray.Add(pStyleRule);
271 } else { 268 } else {
272 SkipRuleSet(pSyntax); 269 SkipRuleSet(pSyntax);
273 return FDE_CSSSYNTAXSTATUS_None; 270 return FDE_CSSSYNTAXSTATUS_None;
274 } 271 }
275 break; 272 break;
276 case FDE_CSSSYNTAXSTATUS_DeclClose: 273 case FDE_CSSSYNTAXSTATUS_DeclClose:
277 if (pStyleRule != NULL && 274 if (pStyleRule && !pStyleRule->GetDeclImp().GetStartPosition()) {
278 pStyleRule->GetDeclImp().GetStartPosition() == NULL) {
279 pStyleRule->~CFDE_CSSStyleRule(); 275 pStyleRule->~CFDE_CSSStyleRule();
280 ruleArray.RemoveLast(1); 276 ruleArray.RemoveLast(1);
281 } 277 }
282 return FDE_CSSSYNTAXSTATUS_None; 278 return FDE_CSSSYNTAXSTATUS_None;
283 FDE_CSSSWITCHDEFAULTS(); 279 FDE_CSSSWITCHDEFAULTS();
284 } 280 }
285 } 281 }
286 } 282 }
287 FDE_CSSSYNTAXSTATUS CFDE_CSSStyleSheet::LoadFontFaceRule( 283 FDE_CSSSYNTAXSTATUS CFDE_CSSStyleSheet::LoadFontFaceRule(
288 CFDE_CSSSyntaxParser* pSyntax, 284 CFDE_CSSSyntaxParser* pSyntax,
289 CFDE_CSSRuleArray& ruleArray) { 285 CFDE_CSSRuleArray& ruleArray) {
290 CFDE_CSSFontFaceRule* pFontFaceRule = NULL; 286 CFDE_CSSFontFaceRule* pFontFaceRule = nullptr;
291 const FX_WCHAR* pszValue = NULL; 287 const FX_WCHAR* pszValue = nullptr;
292 int32_t iValueLen = 0; 288 int32_t iValueLen = 0;
293 FDE_CSSPROPERTYARGS propertyArgs; 289 FDE_CSSPROPERTYARGS propertyArgs;
294 propertyArgs.pStaticStore = m_pAllocator; 290 propertyArgs.pStaticStore = m_pAllocator;
295 propertyArgs.pStringCache = &m_StringCache; 291 propertyArgs.pStringCache = &m_StringCache;
296 propertyArgs.pProperty = NULL; 292 propertyArgs.pProperty = nullptr;
297 for (;;) { 293 for (;;) {
298 switch (pSyntax->DoSyntaxParse()) { 294 switch (pSyntax->DoSyntaxParse()) {
299 case FDE_CSSSYNTAXSTATUS_PropertyName: 295 case FDE_CSSSYNTAXSTATUS_PropertyName:
300 pszValue = pSyntax->GetCurrentString(iValueLen); 296 pszValue = pSyntax->GetCurrentString(iValueLen);
301 propertyArgs.pProperty = 297 propertyArgs.pProperty =
302 FDE_GetCSSPropertyByName(CFX_WideStringC(pszValue, iValueLen)); 298 FDE_GetCSSPropertyByName(CFX_WideStringC(pszValue, iValueLen));
303 break; 299 break;
304 case FDE_CSSSYNTAXSTATUS_PropertyValue: 300 case FDE_CSSSYNTAXSTATUS_PropertyValue:
305 if (propertyArgs.pProperty != NULL) { 301 if (propertyArgs.pProperty) {
306 pszValue = pSyntax->GetCurrentString(iValueLen); 302 pszValue = pSyntax->GetCurrentString(iValueLen);
307 if (iValueLen > 0) { 303 if (iValueLen > 0) {
308 pFontFaceRule->GetDeclImp().AddProperty(&propertyArgs, pszValue, 304 pFontFaceRule->GetDeclImp().AddProperty(&propertyArgs, pszValue,
309 iValueLen); 305 iValueLen);
310 } 306 }
311 } 307 }
312 break; 308 break;
313 case FDE_CSSSYNTAXSTATUS_DeclOpen: 309 case FDE_CSSSYNTAXSTATUS_DeclOpen:
314 if (pFontFaceRule == NULL) { 310 if (!pFontFaceRule) {
315 pFontFaceRule = FXTARGET_NewWith(m_pAllocator) CFDE_CSSFontFaceRule; 311 pFontFaceRule = FXTARGET_NewWith(m_pAllocator) CFDE_CSSFontFaceRule;
316 ruleArray.Add(pFontFaceRule); 312 ruleArray.Add(pFontFaceRule);
317 } 313 }
318 break; 314 break;
319 case FDE_CSSSYNTAXSTATUS_DeclClose: 315 case FDE_CSSSYNTAXSTATUS_DeclClose:
320 return FDE_CSSSYNTAXSTATUS_None; 316 return FDE_CSSSYNTAXSTATUS_None;
321 FDE_CSSSWITCHDEFAULTS(); 317 FDE_CSSSWITCHDEFAULTS();
322 } 318 }
323 } 319 }
324 } 320 }
(...skipping 23 matching lines...) Expand all
348 case FDE_CSSSYNTAXSTATUS_PropertyValue: 344 case FDE_CSSSYNTAXSTATUS_PropertyValue:
349 break; 345 break;
350 case FDE_CSSSYNTAXSTATUS_DeclClose: 346 case FDE_CSSSYNTAXSTATUS_DeclClose:
351 return FDE_CSSSYNTAXSTATUS_None; 347 return FDE_CSSSYNTAXSTATUS_None;
352 FDE_CSSSWITCHDEFAULTS(); 348 FDE_CSSSWITCHDEFAULTS();
353 } 349 }
354 } 350 }
355 } 351 }
356 void CFDE_CSSStyleRule::SetSelector(IFX_MemoryAllocator* pStaticStore, 352 void CFDE_CSSStyleRule::SetSelector(IFX_MemoryAllocator* pStaticStore,
357 const CFDE_CSSSelectorArray& list) { 353 const CFDE_CSSSelectorArray& list) {
358 ASSERT(m_ppSelector == NULL); 354 ASSERT(!m_ppSelector);
359 m_iSelectors = list.GetSize(); 355 m_iSelectors = list.GetSize();
360 m_ppSelector = static_cast<CFDE_CSSSelector**>( 356 m_ppSelector = static_cast<CFDE_CSSSelector**>(
361 pStaticStore->Alloc(m_iSelectors * sizeof(CFDE_CSSSelector*))); 357 pStaticStore->Alloc(m_iSelectors * sizeof(CFDE_CSSSelector*)));
362 for (int32_t i = 0; i < m_iSelectors; ++i) { 358 for (int32_t i = 0; i < m_iSelectors; ++i) {
363 m_ppSelector[i] = list.GetAt(i); 359 m_ppSelector[i] = list.GetAt(i);
364 } 360 }
365 } 361 }
366 CFDE_CSSMediaRule::~CFDE_CSSMediaRule() { 362 CFDE_CSSMediaRule::~CFDE_CSSMediaRule() {
367 for (int32_t i = m_RuleArray.GetSize() - 1; i >= 0; --i) { 363 for (int32_t i = m_RuleArray.GetSize() - 1; i >= 0; --i) {
368 IFDE_CSSRule* pRule = m_RuleArray.GetAt(i); 364 IFDE_CSSRule* pRule = m_RuleArray.GetAt(i);
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after
402 } else { 398 } else {
403 break; 399 break;
404 } 400 }
405 } 401 }
406 return psz - pStart; 402 return psz - pStart;
407 } 403 }
408 CFDE_CSSSelector* CFDE_CSSSelector::FromString( 404 CFDE_CSSSelector* CFDE_CSSSelector::FromString(
409 IFX_MemoryAllocator* pStaticStore, 405 IFX_MemoryAllocator* pStaticStore,
410 const FX_WCHAR* psz, 406 const FX_WCHAR* psz,
411 int32_t iLen) { 407 int32_t iLen) {
412 ASSERT(pStaticStore != NULL && psz != NULL && iLen > 0); 408 ASSERT(pStaticStore && psz && iLen > 0);
413 const FX_WCHAR* pStart = psz; 409 const FX_WCHAR* pStart = psz;
414 const FX_WCHAR* pEnd = psz + iLen; 410 const FX_WCHAR* pEnd = psz + iLen;
415 for (; psz < pEnd; ++psz) { 411 for (; psz < pEnd; ++psz) {
416 switch (*psz) { 412 switch (*psz) {
417 case '>': 413 case '>':
418 case '[': 414 case '[':
419 case '+': 415 case '+':
420 return NULL; 416 return nullptr;
421 } 417 }
422 } 418 }
423 CFDE_CSSSelector *pFirst = NULL, *pLast = NULL; 419 CFDE_CSSSelector *pFirst = nullptr, *pLast = nullptr;
424 CFDE_CSSSelector *pPersudoFirst = NULL, *pPersudoLast = NULL; 420 CFDE_CSSSelector *pPersudoFirst = nullptr, *pPersudoLast = nullptr;
425 for (psz = pStart; psz < pEnd;) { 421 for (psz = pStart; psz < pEnd;) {
426 FX_WCHAR wch = *psz; 422 FX_WCHAR wch = *psz;
427 if (wch == '.' || wch == '#') { 423 if (wch == '.' || wch == '#') {
428 if (psz == pStart || psz[-1] == ' ') { 424 if (psz == pStart || psz[-1] == ' ') {
429 CFDE_CSSSelector* p = FXTARGET_NewWith(pStaticStore) 425 CFDE_CSSSelector* p = FXTARGET_NewWith(pStaticStore)
430 CFDE_CSSSelector(FDE_CSSSELECTORTYPE_Element, L"*", 1, true); 426 CFDE_CSSSelector(FDE_CSSSELECTORTYPE_Element, L"*", 1, true);
431 if (p == NULL) { 427 if (!p)
432 return NULL; 428 return nullptr;
433 } 429
434 if (pFirst != NULL) { 430 if (pFirst) {
435 pFirst->SetType(FDE_CSSSELECTORTYPE_Descendant); 431 pFirst->SetType(FDE_CSSSELECTORTYPE_Descendant);
436 p->SetNext(pFirst); 432 p->SetNext(pFirst);
437 } 433 }
438 pFirst = pLast = p; 434 pFirst = pLast = p;
439 } 435 }
440 ASSERT(pLast != NULL); 436 ASSERT(pLast);
441 int32_t iNameLen = FDE_GetCSSNameLen(++psz, pEnd); 437 int32_t iNameLen = FDE_GetCSSNameLen(++psz, pEnd);
442 if (iNameLen == 0) { 438 if (iNameLen == 0) {
443 return NULL; 439 return nullptr;
444 } 440 }
445 FDE_CSSSELECTORTYPE eType = 441 FDE_CSSSELECTORTYPE eType =
446 wch == '.' ? FDE_CSSSELECTORTYPE_Class : FDE_CSSSELECTORTYPE_ID; 442 wch == '.' ? FDE_CSSSELECTORTYPE_Class : FDE_CSSSELECTORTYPE_ID;
447 CFDE_CSSSelector* p = FXTARGET_NewWith(pStaticStore) 443 CFDE_CSSSelector* p = FXTARGET_NewWith(pStaticStore)
448 CFDE_CSSSelector(eType, psz, iNameLen, false); 444 CFDE_CSSSelector(eType, psz, iNameLen, false);
449 if (p == NULL) { 445 if (!p)
450 return NULL; 446 return nullptr;
451 } 447
452 p->SetNext(pLast->GetNextSelector()); 448 p->SetNext(pLast->GetNextSelector());
453 pLast->SetNext(p); 449 pLast->SetNext(p);
454 pLast = p; 450 pLast = p;
455 psz += iNameLen; 451 psz += iNameLen;
456 } else if (FDE_IsCSSChar(wch) || wch == '*') { 452 } else if (FDE_IsCSSChar(wch) || wch == '*') {
457 int32_t iNameLen = wch == '*' ? 1 : FDE_GetCSSNameLen(psz, pEnd); 453 int32_t iNameLen = wch == '*' ? 1 : FDE_GetCSSNameLen(psz, pEnd);
458 if (iNameLen == 0) { 454 if (iNameLen == 0) {
459 return NULL; 455 return nullptr;
460 } 456 }
461 CFDE_CSSSelector* p = FXTARGET_NewWith(pStaticStore) 457 CFDE_CSSSelector* p = FXTARGET_NewWith(pStaticStore)
462 CFDE_CSSSelector(FDE_CSSSELECTORTYPE_Element, psz, iNameLen, true); 458 CFDE_CSSSelector(FDE_CSSSELECTORTYPE_Element, psz, iNameLen, true);
463 if (p == NULL) { 459 if (!p)
464 return NULL; 460 return nullptr;
465 } 461
466 if (pFirst == NULL) { 462 if (pFirst) {
467 pFirst = pLast = p;
468 } else {
469 pFirst->SetType(FDE_CSSSELECTORTYPE_Descendant); 463 pFirst->SetType(FDE_CSSSELECTORTYPE_Descendant);
470 p->SetNext(pFirst); 464 p->SetNext(pFirst);
471 pFirst = pLast = p;
472 } 465 }
466 pFirst = p;
467 pLast = p;
473 psz += iNameLen; 468 psz += iNameLen;
474 } else if (wch == ':') { 469 } else if (wch == ':') {
475 int32_t iNameLen = FDE_GetCSSPersudoLen(psz, pEnd); 470 int32_t iNameLen = FDE_GetCSSPersudoLen(psz, pEnd);
476 if (iNameLen == 0) { 471 if (iNameLen == 0) {
477 return NULL; 472 return nullptr;
478 } 473 }
479 CFDE_CSSSelector* p = FXTARGET_NewWith(pStaticStore) 474 CFDE_CSSSelector* p = FXTARGET_NewWith(pStaticStore)
480 CFDE_CSSSelector(FDE_CSSSELECTORTYPE_Persudo, psz, iNameLen, true); 475 CFDE_CSSSelector(FDE_CSSSELECTORTYPE_Persudo, psz, iNameLen, true);
481 if (p == NULL) { 476 if (!p)
482 return NULL; 477 return nullptr;
483 } 478
484 if (pPersudoFirst == NULL) { 479 if (pPersudoFirst)
485 pPersudoFirst = pPersudoLast = p;
486 } else {
487 pPersudoLast->SetNext(p); 480 pPersudoLast->SetNext(p);
488 pPersudoLast = p; 481 else
489 } 482 pPersudoFirst = p;
483 pPersudoLast = p;
490 psz += iNameLen; 484 psz += iNameLen;
491 } else if (wch == ' ') { 485 } else if (wch == ' ') {
492 psz++; 486 psz++;
493 } else { 487 } else {
494 return NULL; 488 return nullptr;
495 } 489 }
496 } 490 }
497 if (pPersudoFirst == NULL) { 491 if (!pPersudoFirst)
498 return pFirst; 492 return pFirst;
499 } else { 493
500 pPersudoLast->SetNext(pFirst); 494 pPersudoLast->SetNext(pFirst);
501 return pPersudoFirst; 495 return pPersudoFirst;
502 }
503 } 496 }
OLDNEW
« no previous file with comments | « xfa/fde/css/fde_cssstylesheet.h ('k') | xfa/fde/css/fde_csssyntax.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698