| 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_cssstyleselector.h" | 7 #include "xfa/fde/css/fde_cssstyleselector.h" |
| 8 | 8 |
| 9 #include <algorithm> | 9 #include <algorithm> |
| 10 | 10 |
| 11 #include "xfa/fde/css/fde_csscache.h" | 11 #include "xfa/fde/css/fde_csscache.h" |
| 12 #include "xfa/fde/css/fde_cssdeclaration.h" | 12 #include "xfa/fde/css/fde_cssdeclaration.h" |
| 13 #include "xfa/fde/css/fde_cssstylesheet.h" |
| 14 #include "xfa/fde/css/fde_csssyntax.h" |
| 13 #include "xfa/fxfa/app/xfa_textlayout.h" | 15 #include "xfa/fxfa/app/xfa_textlayout.h" |
| 14 | 16 |
| 15 #define FDE_CSSUNIVERSALHASH ('*') | 17 #define FDE_CSSUNIVERSALHASH ('*') |
| 16 | 18 |
| 17 int32_t CFDE_CSSCounterStyle::FindIndex(const FX_WCHAR* pszIdentifier) { | 19 int32_t CFDE_CSSCounterStyle::FindIndex(const FX_WCHAR* pszIdentifier) { |
| 18 int32_t iCount = m_arrCounterData.GetSize(); | 20 int32_t iCount = m_arrCounterData.GetSize(); |
| 19 for (int32_t i = 0; i < iCount; i++) { | 21 for (int32_t i = 0; i < iCount; i++) { |
| 20 if (FXSYS_wcscmp(pszIdentifier, m_arrCounterData.ElementAt(i).m_pszIdent) == | 22 if (FXSYS_wcscmp(pszIdentifier, m_arrCounterData.ElementAt(i).m_pszIdent) == |
| 21 0) { | 23 0) { |
| 22 return i; | 24 return i; |
| (...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 71 void CFDE_CSSCounterStyle::UpdateIndex() { | 73 void CFDE_CSSCounterStyle::UpdateIndex() { |
| 72 if (!m_bIndexDirty) { | 74 if (!m_bIndexDirty) { |
| 73 return; | 75 return; |
| 74 } | 76 } |
| 75 m_arrCounterData.RemoveAll(); | 77 m_arrCounterData.RemoveAll(); |
| 76 DoUpdateIndex(m_pCounterInc); | 78 DoUpdateIndex(m_pCounterInc); |
| 77 DoUpdateIndex(m_pCounterReset); | 79 DoUpdateIndex(m_pCounterReset); |
| 78 m_bIndexDirty = FALSE; | 80 m_bIndexDirty = FALSE; |
| 79 } | 81 } |
| 80 | 82 |
| 81 FDE_CSSRuleData::FDE_CSSRuleData(IFDE_CSSSelector* pSel, | 83 FDE_CSSRuleData::FDE_CSSRuleData(CFDE_CSSSelector* pSel, |
| 82 IFDE_CSSDeclaration* pDecl, | 84 CFDE_CSSDeclaration* pDecl, |
| 83 uint32_t dwPos) | 85 uint32_t dwPos) |
| 84 : pSelector(pSel), pDeclaration(pDecl), dwPriority(dwPos), pNext(NULL) { | 86 : pSelector(pSel), pDeclaration(pDecl), dwPriority(dwPos), pNext(NULL) { |
| 85 static const uint32_t s_Specific[5] = {0x00010000, 0x00010000, 0x00100000, | 87 static const uint32_t s_Specific[5] = {0x00010000, 0x00010000, 0x00100000, |
| 86 0x00100000, 0x01000000}; | 88 0x00100000, 0x01000000}; |
| 87 for (; pSel != NULL; pSel = pSel->GetNextSelector()) { | 89 for (; pSel != NULL; pSel = pSel->GetNextSelector()) { |
| 88 FDE_CSSSELECTORTYPE eType = pSel->GetType(); | 90 FDE_CSSSELECTORTYPE eType = pSel->GetType(); |
| 89 if (eType > FDE_CSSSELECTORTYPE_Descendant || | 91 if (eType > FDE_CSSSELECTORTYPE_Descendant || |
| 90 pSel->GetNameHash() != FDE_CSSUNIVERSALHASH) { | 92 pSel->GetNameHash() != FDE_CSSUNIVERSALHASH) { |
| 91 dwPriority += s_Specific[eType]; | 93 dwPriority += s_Specific[eType]; |
| 92 } | 94 } |
| (...skipping 21 matching lines...) Expand all Loading... |
| 114 } | 116 } |
| 115 } | 117 } |
| 116 } | 118 } |
| 117 void CFDE_CSSRuleCollection::AddRulesFrom(IFDE_CSSStyleSheet* pStyleSheet, | 119 void CFDE_CSSRuleCollection::AddRulesFrom(IFDE_CSSStyleSheet* pStyleSheet, |
| 118 IFDE_CSSRule* pRule, | 120 IFDE_CSSRule* pRule, |
| 119 uint32_t dwMediaList, | 121 uint32_t dwMediaList, |
| 120 IFX_FontMgr* pFontMgr) { | 122 IFX_FontMgr* pFontMgr) { |
| 121 switch (pRule->GetType()) { | 123 switch (pRule->GetType()) { |
| 122 case FDE_CSSRULETYPE_Style: { | 124 case FDE_CSSRULETYPE_Style: { |
| 123 IFDE_CSSStyleRule* pStyleRule = (IFDE_CSSStyleRule*)pRule; | 125 IFDE_CSSStyleRule* pStyleRule = (IFDE_CSSStyleRule*)pRule; |
| 124 IFDE_CSSDeclaration* pDeclaration = pStyleRule->GetDeclaration(); | 126 CFDE_CSSDeclaration* pDeclaration = pStyleRule->GetDeclaration(); |
| 125 int32_t iSelectors = pStyleRule->CountSelectorLists(); | 127 int32_t iSelectors = pStyleRule->CountSelectorLists(); |
| 126 for (int32_t i = 0; i < iSelectors; ++i) { | 128 for (int32_t i = 0; i < iSelectors; ++i) { |
| 127 IFDE_CSSSelector* pSelector = pStyleRule->GetSelectorList(i); | 129 CFDE_CSSSelector* pSelector = pStyleRule->GetSelectorList(i); |
| 128 if (pSelector->GetType() == FDE_CSSSELECTORTYPE_Persudo) { | 130 if (pSelector->GetType() == FDE_CSSSELECTORTYPE_Persudo) { |
| 129 FDE_CSSRuleData* pData = NewRuleData(pSelector, pDeclaration); | 131 FDE_CSSRuleData* pData = NewRuleData(pSelector, pDeclaration); |
| 130 AddRuleTo(m_pPersudoRules, pData); | 132 AddRuleTo(m_pPersudoRules, pData); |
| 131 continue; | 133 continue; |
| 132 } | 134 } |
| 133 if (pSelector->GetNameHash() != FDE_CSSUNIVERSALHASH) { | 135 if (pSelector->GetNameHash() != FDE_CSSUNIVERSALHASH) { |
| 134 AddRuleTo(m_TagRules, pSelector->GetNameHash(), pSelector, | 136 AddRuleTo(m_TagRules, pSelector->GetNameHash(), pSelector, |
| 135 pDeclaration); | 137 pDeclaration); |
| 136 continue; | 138 continue; |
| 137 } | 139 } |
| 138 IFDE_CSSSelector* pNext = pSelector->GetNextSelector(); | 140 CFDE_CSSSelector* pNext = pSelector->GetNextSelector(); |
| 139 if (pNext == NULL) { | 141 if (!pNext) { |
| 140 FDE_CSSRuleData* pData = NewRuleData(pSelector, pDeclaration); | 142 FDE_CSSRuleData* pData = NewRuleData(pSelector, pDeclaration); |
| 141 AddRuleTo(m_pUniversalRules, pData); | 143 AddRuleTo(m_pUniversalRules, pData); |
| 142 continue; | 144 continue; |
| 143 } | 145 } |
| 144 switch (pNext->GetType()) { | 146 switch (pNext->GetType()) { |
| 145 case FDE_CSSSELECTORTYPE_ID: | 147 case FDE_CSSSELECTORTYPE_ID: |
| 146 AddRuleTo(m_IDRules, pNext->GetNameHash(), pSelector, pDeclaration); | 148 AddRuleTo(m_IDRules, pNext->GetNameHash(), pSelector, pDeclaration); |
| 147 break; | 149 break; |
| 148 case FDE_CSSSELECTORTYPE_Class: | 150 case FDE_CSSSELECTORTYPE_Class: |
| 149 AddRuleTo(m_ClassRules, pNext->GetNameHash(), pSelector, | 151 AddRuleTo(m_ClassRules, pNext->GetNameHash(), pSelector, |
| (...skipping 18 matching lines...) Expand all Loading... |
| 168 pFontMgr); | 170 pFontMgr); |
| 169 } | 171 } |
| 170 } | 172 } |
| 171 } break; | 173 } break; |
| 172 default: | 174 default: |
| 173 break; | 175 break; |
| 174 } | 176 } |
| 175 } | 177 } |
| 176 void CFDE_CSSRuleCollection::AddRuleTo(CFX_MapPtrToPtr& map, | 178 void CFDE_CSSRuleCollection::AddRuleTo(CFX_MapPtrToPtr& map, |
| 177 uint32_t dwKey, | 179 uint32_t dwKey, |
| 178 IFDE_CSSSelector* pSel, | 180 CFDE_CSSSelector* pSel, |
| 179 IFDE_CSSDeclaration* pDecl) { | 181 CFDE_CSSDeclaration* pDecl) { |
| 180 void* pKey = (void*)(uintptr_t)dwKey; | 182 void* pKey = (void*)(uintptr_t)dwKey; |
| 181 FDE_CSSRuleData* pData = NewRuleData(pSel, pDecl); | 183 FDE_CSSRuleData* pData = NewRuleData(pSel, pDecl); |
| 182 FDE_CSSRuleData* pList = NULL; | 184 FDE_CSSRuleData* pList = NULL; |
| 183 if (!map.Lookup(pKey, (void*&)pList)) { | 185 if (!map.Lookup(pKey, (void*&)pList)) { |
| 184 map.SetAt(pKey, pData); | 186 map.SetAt(pKey, pData); |
| 185 } else if (AddRuleTo(pList, pData)) { | 187 } else if (AddRuleTo(pList, pData)) { |
| 186 map.SetAt(pKey, pList); | 188 map.SetAt(pKey, pList); |
| 187 } | 189 } |
| 188 } | 190 } |
| 189 | 191 |
| 190 FX_BOOL CFDE_CSSRuleCollection::AddRuleTo(FDE_CSSRuleData*& pList, | 192 FX_BOOL CFDE_CSSRuleCollection::AddRuleTo(FDE_CSSRuleData*& pList, |
| 191 FDE_CSSRuleData* pData) { | 193 FDE_CSSRuleData* pData) { |
| 192 if (pList) { | 194 if (pList) { |
| 193 pData->pNext = pList->pNext; | 195 pData->pNext = pList->pNext; |
| 194 pList->pNext = pData; | 196 pList->pNext = pData; |
| 195 return FALSE; | 197 return FALSE; |
| 196 } | 198 } |
| 197 | 199 |
| 198 pList = pData; | 200 pList = pData; |
| 199 return TRUE; | 201 return TRUE; |
| 200 } | 202 } |
| 201 | 203 |
| 202 FDE_CSSRuleData* CFDE_CSSRuleCollection::NewRuleData( | 204 FDE_CSSRuleData* CFDE_CSSRuleCollection::NewRuleData( |
| 203 IFDE_CSSSelector* pSel, | 205 CFDE_CSSSelector* pSel, |
| 204 IFDE_CSSDeclaration* pDecl) { | 206 CFDE_CSSDeclaration* pDecl) { |
| 205 return FXTARGET_NewWith(m_pStaticStore) | 207 return FXTARGET_NewWith(m_pStaticStore) |
| 206 FDE_CSSRuleData(pSel, pDecl, ++m_iSelectors); | 208 FDE_CSSRuleData(pSel, pDecl, ++m_iSelectors); |
| 207 } | 209 } |
| 208 | 210 |
| 209 IFDE_CSSStyleSelector* IFDE_CSSStyleSelector::Create() { | |
| 210 return new CFDE_CSSStyleSelector; | |
| 211 } | |
| 212 CFDE_CSSStyleSelector::CFDE_CSSStyleSelector() | 211 CFDE_CSSStyleSelector::CFDE_CSSStyleSelector() |
| 213 : m_pFontMgr(NULL), | 212 : m_pFontMgr(NULL), |
| 214 m_fDefFontSize(12.0f), | 213 m_fDefFontSize(12.0f), |
| 215 m_pRuleDataStore(NULL), | 214 m_pRuleDataStore(NULL), |
| 216 m_pInlineStyleStore(NULL), | 215 m_pInlineStyleStore(NULL), |
| 217 m_pFixedStyleStore(NULL), | 216 m_pFixedStyleStore(NULL), |
| 218 m_pAccelerator(NULL) { | 217 m_pAccelerator(NULL) { |
| 219 m_ePriorities[FDE_CSSSTYLESHEETPRIORITY_High] = FDE_CSSSTYLESHEETGROUP_Author; | 218 m_ePriorities[FDE_CSSSTYLESHEETPRIORITY_High] = FDE_CSSSTYLESHEETGROUP_Author; |
| 220 m_ePriorities[FDE_CSSSTYLESHEETPRIORITY_Mid] = FDE_CSSSTYLESHEETGROUP_User; | 219 m_ePriorities[FDE_CSSSTYLESHEETPRIORITY_Mid] = FDE_CSSSTYLESHEETGROUP_User; |
| 221 m_ePriorities[FDE_CSSSTYLESHEETPRIORITY_Low] = | 220 m_ePriorities[FDE_CSSSTYLESHEETPRIORITY_Low] = |
| (...skipping 138 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 360 FDE_CSSRuleData* pList, | 359 FDE_CSSRuleData* pList, |
| 361 FDE_CSSPERSUDO ePersudoType) { | 360 FDE_CSSPERSUDO ePersudoType) { |
| 362 while (pList) { | 361 while (pList) { |
| 363 if (MatchSelector(pCache, pList->pSelector, ePersudoType)) | 362 if (MatchSelector(pCache, pList->pSelector, ePersudoType)) |
| 364 m_MatchedRules.push_back(pList); | 363 m_MatchedRules.push_back(pList); |
| 365 pList = pList->pNext; | 364 pList = pList->pNext; |
| 366 } | 365 } |
| 367 } | 366 } |
| 368 | 367 |
| 369 FX_BOOL CFDE_CSSStyleSelector::MatchSelector(FDE_CSSTagCache* pCache, | 368 FX_BOOL CFDE_CSSStyleSelector::MatchSelector(FDE_CSSTagCache* pCache, |
| 370 IFDE_CSSSelector* pSel, | 369 CFDE_CSSSelector* pSel, |
| 371 FDE_CSSPERSUDO ePersudoType) { | 370 FDE_CSSPERSUDO ePersudoType) { |
| 372 uint32_t dwHash; | 371 uint32_t dwHash; |
| 373 while (pSel != NULL && pCache != NULL) { | 372 while (pSel != NULL && pCache != NULL) { |
| 374 switch (pSel->GetType()) { | 373 switch (pSel->GetType()) { |
| 375 case FDE_CSSSELECTORTYPE_Descendant: | 374 case FDE_CSSSELECTORTYPE_Descendant: |
| 376 dwHash = pSel->GetNameHash(); | 375 dwHash = pSel->GetNameHash(); |
| 377 while ((pCache = pCache->GetParent()) != NULL) { | 376 while ((pCache = pCache->GetParent()) != NULL) { |
| 378 if (dwHash != FDE_CSSUNIVERSALHASH && dwHash != pCache->HashTag()) { | 377 if (dwHash != FDE_CSSUNIVERSALHASH && dwHash != pCache->HashTag()) { |
| 379 continue; | 378 continue; |
| 380 } | 379 } |
| (...skipping 30 matching lines...) Expand all Loading... |
| 411 ASSERT(FALSE); | 410 ASSERT(FALSE); |
| 412 break; | 411 break; |
| 413 } | 412 } |
| 414 pSel = pSel->GetNextSelector(); | 413 pSel = pSel->GetNextSelector(); |
| 415 } | 414 } |
| 416 return pSel == NULL && pCache != NULL; | 415 return pSel == NULL && pCache != NULL; |
| 417 } | 416 } |
| 418 | 417 |
| 419 void CFDE_CSSStyleSelector::ComputeStyle( | 418 void CFDE_CSSStyleSelector::ComputeStyle( |
| 420 CXFA_CSSTagProvider* pTag, | 419 CXFA_CSSTagProvider* pTag, |
| 421 const IFDE_CSSDeclaration** ppDeclArray, | 420 const CFDE_CSSDeclaration** ppDeclArray, |
| 422 int32_t iDeclCount, | 421 int32_t iDeclCount, |
| 423 IFDE_CSSComputedStyle* pDestStyle) { | 422 IFDE_CSSComputedStyle* pDestStyle) { |
| 424 ASSERT(iDeclCount >= 0); | 423 ASSERT(iDeclCount >= 0); |
| 425 ASSERT(pDestStyle); | 424 ASSERT(pDestStyle); |
| 426 | 425 |
| 427 static const uint32_t s_dwStyleHash = FX_HashCode_GetW(L"style", true); | 426 static const uint32_t s_dwStyleHash = FX_HashCode_GetW(L"style", true); |
| 428 static const uint32_t s_dwAlignHash = FX_HashCode_GetW(L"align", true); | 427 static const uint32_t s_dwAlignHash = FX_HashCode_GetW(L"align", true); |
| 429 | 428 |
| 430 if (!pTag->empty()) { | 429 if (!pTag->empty()) { |
| 431 if (!m_pInlineStyleStore) | 430 if (!m_pInlineStyleStore) |
| (...skipping 17 matching lines...) Expand all Loading... |
| 449 args.pStringCache = nullptr; | 448 args.pStringCache = nullptr; |
| 450 args.pStaticStore = m_pInlineStyleStore; | 449 args.pStaticStore = m_pInlineStyleStore; |
| 451 args.pProperty = FDE_GetCSSPropertyByEnum(FDE_CSSPROPERTY_TextAlign); | 450 args.pProperty = FDE_GetCSSPropertyByEnum(FDE_CSSPROPERTY_TextAlign); |
| 452 pDecl->AddProperty(&args, wsValue.c_str(), wsValue.GetLength()); | 451 pDecl->AddProperty(&args, wsValue.c_str(), wsValue.GetLength()); |
| 453 } | 452 } |
| 454 } | 453 } |
| 455 | 454 |
| 456 if (pDecl) { | 455 if (pDecl) { |
| 457 CFDE_CSSDeclarationArray decls; | 456 CFDE_CSSDeclarationArray decls; |
| 458 decls.SetSize(iDeclCount + 1); | 457 decls.SetSize(iDeclCount + 1); |
| 459 IFDE_CSSDeclaration** ppInline = decls.GetData(); | 458 CFDE_CSSDeclaration** ppInline = decls.GetData(); |
| 460 FXSYS_memcpy(ppInline, ppDeclArray, | 459 FXSYS_memcpy(ppInline, ppDeclArray, |
| 461 iDeclCount * sizeof(IFDE_CSSDeclaration*)); | 460 iDeclCount * sizeof(CFDE_CSSDeclaration*)); |
| 462 ppInline[iDeclCount++] = pDecl; | 461 ppInline[iDeclCount++] = pDecl; |
| 463 ApplyDeclarations(TRUE, (const IFDE_CSSDeclaration**)ppInline, iDeclCount, | 462 ApplyDeclarations(TRUE, const_cast<const CFDE_CSSDeclaration**>(ppInline), |
| 464 pDestStyle); | 463 iDeclCount, pDestStyle); |
| 465 ApplyDeclarations(FALSE, (const IFDE_CSSDeclaration**)ppInline, | 464 ApplyDeclarations(FALSE, |
| 465 const_cast<const CFDE_CSSDeclaration**>(ppInline), |
| 466 iDeclCount, pDestStyle); | 466 iDeclCount, pDestStyle); |
| 467 return; | 467 return; |
| 468 } | 468 } |
| 469 } | 469 } |
| 470 | 470 |
| 471 if (iDeclCount > 0) { | 471 if (iDeclCount > 0) { |
| 472 ASSERT(ppDeclArray); | 472 ASSERT(ppDeclArray); |
| 473 | 473 |
| 474 ApplyDeclarations(TRUE, ppDeclArray, iDeclCount, pDestStyle); | 474 ApplyDeclarations(TRUE, ppDeclArray, iDeclCount, pDestStyle); |
| 475 ApplyDeclarations(FALSE, ppDeclArray, iDeclCount, pDestStyle); | 475 ApplyDeclarations(FALSE, ppDeclArray, iDeclCount, pDestStyle); |
| 476 } | 476 } |
| 477 } | 477 } |
| 478 | 478 |
| 479 void CFDE_CSSStyleSelector::ApplyDeclarations( | 479 void CFDE_CSSStyleSelector::ApplyDeclarations( |
| 480 FX_BOOL bPriority, | 480 FX_BOOL bPriority, |
| 481 const IFDE_CSSDeclaration** ppDeclArray, | 481 const CFDE_CSSDeclaration** ppDeclArray, |
| 482 int32_t iDeclCount, | 482 int32_t iDeclCount, |
| 483 IFDE_CSSComputedStyle* pDestStyle) { | 483 IFDE_CSSComputedStyle* pDestStyle) { |
| 484 CFDE_CSSComputedStyle* pComputedStyle = (CFDE_CSSComputedStyle*)pDestStyle; | 484 CFDE_CSSComputedStyle* pComputedStyle = (CFDE_CSSComputedStyle*)pDestStyle; |
| 485 IFDE_CSSValue* pVal; | 485 IFDE_CSSValue* pVal; |
| 486 FX_BOOL bImportant; | 486 FX_BOOL bImportant; |
| 487 int32_t i; | 487 int32_t i; |
| 488 if (bPriority) { | 488 if (bPriority) { |
| 489 IFDE_CSSValue *pLastest = NULL, *pImportant = NULL; | 489 IFDE_CSSValue *pLastest = NULL, *pImportant = NULL; |
| 490 for (i = 0; i < iDeclCount; ++i) { | 490 for (i = 0; i < iDeclCount; ++i) { |
| 491 pVal = ppDeclArray[i]->GetProperty(FDE_CSSPROPERTY_FontSize, bImportant); | 491 pVal = ppDeclArray[i]->GetProperty(FDE_CSSPROPERTY_FontSize, bImportant); |
| 492 if (pVal == NULL) { | 492 if (pVal == NULL) { |
| 493 continue; | 493 continue; |
| 494 } else if (bImportant) { | 494 } else if (bImportant) { |
| 495 pImportant = pVal; | 495 pImportant = pVal; |
| 496 } else { | 496 } else { |
| 497 pLastest = pVal; | 497 pLastest = pVal; |
| 498 } | 498 } |
| 499 } | 499 } |
| 500 if (pImportant) { | 500 if (pImportant) { |
| 501 ApplyProperty(FDE_CSSPROPERTY_FontSize, pImportant, pComputedStyle); | 501 ApplyProperty(FDE_CSSPROPERTY_FontSize, pImportant, pComputedStyle); |
| 502 } else if (pLastest) { | 502 } else if (pLastest) { |
| 503 ApplyProperty(FDE_CSSPROPERTY_FontSize, pLastest, pComputedStyle); | 503 ApplyProperty(FDE_CSSPROPERTY_FontSize, pLastest, pComputedStyle); |
| 504 } | 504 } |
| 505 } else { | 505 } else { |
| 506 CFDE_CSSDeclarationArray importants; | 506 CFDE_CSSDeclarationArray importants; |
| 507 const IFDE_CSSDeclaration* pDecl = NULL; | 507 const CFDE_CSSDeclaration* pDecl = nullptr; |
| 508 FDE_CSSPROPERTY eProp; | 508 FDE_CSSPROPERTY eProp; |
| 509 FX_POSITION pos; | 509 FX_POSITION pos; |
| 510 for (i = 0; i < iDeclCount; ++i) { | 510 for (i = 0; i < iDeclCount; ++i) { |
| 511 pDecl = ppDeclArray[i]; | 511 pDecl = ppDeclArray[i]; |
| 512 pos = pDecl->GetStartPosition(); | 512 pos = pDecl->GetStartPosition(); |
| 513 while (pos != NULL) { | 513 while (pos != NULL) { |
| 514 pDecl->GetNextProperty(pos, eProp, pVal, bImportant); | 514 pDecl->GetNextProperty(pos, eProp, pVal, bImportant); |
| 515 if (eProp == FDE_CSSPROPERTY_FontSize) { | 515 if (eProp == FDE_CSSPROPERTY_FontSize) { |
| 516 continue; | 516 continue; |
| 517 } else if (!bImportant) { | 517 } else if (!bImportant) { |
| 518 ApplyProperty(eProp, pVal, pComputedStyle); | 518 ApplyProperty(eProp, pVal, pComputedStyle); |
| 519 } else if (importants.GetSize() == 0 || | 519 } else if (importants.GetSize() == 0 || |
| 520 importants[importants.GetUpperBound()] != pDecl) { | 520 importants[importants.GetUpperBound()] != pDecl) { |
| 521 importants.Add((IFDE_CSSDeclaration*)pDecl); | 521 importants.Add(const_cast<CFDE_CSSDeclaration*>(pDecl)); |
| 522 } | 522 } |
| 523 } | 523 } |
| 524 } | 524 } |
| 525 iDeclCount = importants.GetSize(); | 525 iDeclCount = importants.GetSize(); |
| 526 for (i = 0; i < iDeclCount; ++i) { | 526 for (i = 0; i < iDeclCount; ++i) { |
| 527 pDecl = importants[i]; | 527 pDecl = importants[i]; |
| 528 pos = pDecl->GetStartPosition(); | 528 pos = pDecl->GetStartPosition(); |
| 529 while (pos != NULL) { | 529 while (pos != NULL) { |
| 530 pDecl->GetNextProperty(pos, eProp, pVal, bImportant); | 530 pDecl->GetNextProperty(pos, eProp, pVal, bImportant); |
| 531 if (bImportant && eProp != FDE_CSSPROPERTY_FontSize) { | 531 if (bImportant && eProp != FDE_CSSPROPERTY_FontSize) { |
| 532 ApplyProperty(eProp, pVal, pComputedStyle); | 532 ApplyProperty(eProp, pVal, pComputedStyle); |
| 533 } | 533 } |
| 534 } | 534 } |
| 535 } | 535 } |
| 536 CFX_WideString wsName, wsValue; | 536 CFX_WideString wsName, wsValue; |
| 537 pos = pDecl->GetStartCustom(); | 537 pos = pDecl->GetStartCustom(); |
| 538 while (pos) { | 538 while (pos) { |
| 539 pDecl->GetNextCustom(pos, wsName, wsValue); | 539 pDecl->GetNextCustom(pos, wsName, wsValue); |
| 540 pComputedStyle->AddCustomStyle(wsName, wsValue); | 540 pComputedStyle->AddCustomStyle(wsName, wsValue); |
| 541 } | 541 } |
| 542 } | 542 } |
| 543 } | 543 } |
| 544 void CFDE_CSSStyleSelector::AppendInlineStyle(CFDE_CSSDeclaration* pDecl, | 544 void CFDE_CSSStyleSelector::AppendInlineStyle(CFDE_CSSDeclaration* pDecl, |
| 545 const FX_WCHAR* psz, | 545 const FX_WCHAR* psz, |
| 546 int32_t iLen) { | 546 int32_t iLen) { |
| 547 ASSERT(pDecl != NULL && psz != NULL && iLen > 0); | 547 ASSERT(pDecl && psz && iLen > 0); |
| 548 IFDE_CSSSyntaxParser* pSyntax = IFDE_CSSSyntaxParser::Create(); | 548 |
| 549 if (pSyntax == NULL) { | 549 CFDE_CSSSyntaxParser* pSyntax = new CFDE_CSSSyntaxParser; |
| 550 return; | |
| 551 } | |
| 552 if (pSyntax->Init(psz, iLen, 32, TRUE)) { | 550 if (pSyntax->Init(psz, iLen, 32, TRUE)) { |
| 553 int32_t iLen; | 551 int32_t iLen; |
| 554 const FX_WCHAR* psz; | 552 const FX_WCHAR* psz; |
| 555 FDE_CSSPROPERTYARGS args; | 553 FDE_CSSPROPERTYARGS args; |
| 556 args.pStringCache = NULL; | 554 args.pStringCache = NULL; |
| 557 args.pStaticStore = m_pInlineStyleStore; | 555 args.pStaticStore = m_pInlineStyleStore; |
| 558 args.pProperty = NULL; | 556 args.pProperty = NULL; |
| 559 CFX_WideString wsName; | 557 CFX_WideString wsName; |
| 560 for (;;) { | 558 for (;;) { |
| 561 FDE_CSSSYNTAXSTATUS eStatus = pSyntax->DoSyntaxParse(); | 559 FDE_CSSSYNTAXSTATUS eStatus = pSyntax->DoSyntaxParse(); |
| (...skipping 1222 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1784 return FDE_CSSTEXTTRANSFORM_LowerCase; | 1782 return FDE_CSSTEXTTRANSFORM_LowerCase; |
| 1785 default: | 1783 default: |
| 1786 return FDE_CSSTEXTTRANSFORM_None; | 1784 return FDE_CSSTEXTTRANSFORM_None; |
| 1787 } | 1785 } |
| 1788 } | 1786 } |
| 1789 FDE_CSSFONTVARIANT CFDE_CSSStyleSelector::ToFontVariant( | 1787 FDE_CSSFONTVARIANT CFDE_CSSStyleSelector::ToFontVariant( |
| 1790 FDE_CSSPROPERTYVALUE eValue) { | 1788 FDE_CSSPROPERTYVALUE eValue) { |
| 1791 return eValue == FDE_CSSPROPERTYVALUE_SmallCaps ? FDE_CSSFONTVARIANT_SmallCaps | 1789 return eValue == FDE_CSSPROPERTYVALUE_SmallCaps ? FDE_CSSFONTVARIANT_SmallCaps |
| 1792 : FDE_CSSFONTVARIANT_Normal; | 1790 : FDE_CSSFONTVARIANT_Normal; |
| 1793 } | 1791 } |
| OLD | NEW |