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

Side by Side Diff: xfa/fxfa/app/xfa_textlayout.cpp

Issue 2612923002: Remove CFX_MapPtrToPtr from xfa/fxfa. (Closed)
Patch Set: endless loop Created 3 years, 11 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/fxfa/app/xfa_textlayout.h ('k') | xfa/fxfa/parser/cxfa_document.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/fxfa/app/xfa_textlayout.h" 7 #include "xfa/fxfa/app/xfa_textlayout.h"
8 8
9 #include <algorithm> 9 #include <algorithm>
10 10
(...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after
59 FXSYS_memcpy(m_ppMatchedDecls, ppDeclArray, 59 FXSYS_memcpy(m_ppMatchedDecls, ppDeclArray,
60 iDeclCount * sizeof(CFDE_CSSDeclaration*)); 60 iDeclCount * sizeof(CFDE_CSSDeclaration*));
61 } 61 }
62 62
63 CXFA_TextParser::CXFA_TextParser() : m_pUASheet(nullptr) {} 63 CXFA_TextParser::CXFA_TextParser() : m_pUASheet(nullptr) {}
64 64
65 CXFA_TextParser::~CXFA_TextParser() { 65 CXFA_TextParser::~CXFA_TextParser() {
66 if (m_pUASheet) 66 if (m_pUASheet)
67 m_pUASheet->Release(); 67 m_pUASheet->Release();
68 68
69 FX_POSITION ps = m_mapXMLNodeToParseContext.GetStartPosition(); 69 for (auto& pair : m_mapXMLNodeToParseContext) {
70 while (ps) { 70 if (pair.second) {
71 CFDE_XMLNode* pXMLNode;
72 CXFA_TextParseContext* pParseContext;
73 m_mapXMLNodeToParseContext.GetNextAssoc(ps, pXMLNode, pParseContext);
74 if (pParseContext)
75 FXTARGET_DeleteWith(CXFA_TextParseContext, m_pAllocator.get(), 71 FXTARGET_DeleteWith(CXFA_TextParseContext, m_pAllocator.get(),
76 pParseContext); 72 pair.second);
73 }
77 } 74 }
78 m_mapXMLNodeToParseContext.RemoveAll();
79 } 75 }
76
80 void CXFA_TextParser::Reset() { 77 void CXFA_TextParser::Reset() {
81 FX_POSITION ps = m_mapXMLNodeToParseContext.GetStartPosition(); 78 for (auto& pair : m_mapXMLNodeToParseContext) {
82 while (ps) { 79 if (pair.second) {
83 CFDE_XMLNode* pXMLNode;
84 CXFA_TextParseContext* pParseContext;
85 m_mapXMLNodeToParseContext.GetNextAssoc(ps, pXMLNode, pParseContext);
86 if (pParseContext)
87 FXTARGET_DeleteWith(CXFA_TextParseContext, m_pAllocator.get(), 80 FXTARGET_DeleteWith(CXFA_TextParseContext, m_pAllocator.get(),
88 pParseContext); 81 pair.second);
82 }
89 } 83 }
90 m_mapXMLNodeToParseContext.RemoveAll(); 84 m_mapXMLNodeToParseContext.clear();
91 m_pAllocator.reset(); 85 m_pAllocator.reset();
92 } 86 }
93 void CXFA_TextParser::InitCSSData(CXFA_TextProvider* pTextProvider) { 87 void CXFA_TextParser::InitCSSData(CXFA_TextProvider* pTextProvider) {
94 if (!pTextProvider) 88 if (!pTextProvider)
95 return; 89 return;
96 90
97 if (!m_pSelector) { 91 if (!m_pSelector) {
98 CXFA_FFDoc* pDoc = pTextProvider->GetDocNode(); 92 CXFA_FFDoc* pDoc = pTextProvider->GetDocNode();
99 CFGAS_FontMgr* pFontMgr = pDoc->GetApp()->GetFDEFontMgr(); 93 CFGAS_FontMgr* pFontMgr = pDoc->GetApp()->GetFDEFontMgr();
100 ASSERT(pFontMgr); 94 ASSERT(pFontMgr);
(...skipping 119 matching lines...) Expand 10 before | Expand all | Expand 10 after
220 pParaStyle->SetNumberVerticalAlign(fBaseLine); 214 pParaStyle->SetNumberVerticalAlign(fBaseLine);
221 IFDE_CSSBoundaryStyle* pBoundarytyle = pParentStyle->GetBoundaryStyles(); 215 IFDE_CSSBoundaryStyle* pBoundarytyle = pParentStyle->GetBoundaryStyles();
222 const FDE_CSSRECT* pRect = pBoundarytyle->GetMarginWidth(); 216 const FDE_CSSRECT* pRect = pBoundarytyle->GetMarginWidth();
223 if (pRect) { 217 if (pRect) {
224 pBoundarytyle = pNewStyle->GetBoundaryStyles(); 218 pBoundarytyle = pNewStyle->GetBoundaryStyles();
225 pBoundarytyle->SetMarginWidth(*pRect); 219 pBoundarytyle->SetMarginWidth(*pRect);
226 } 220 }
227 } 221 }
228 return pNewStyle; 222 return pNewStyle;
229 } 223 }
224
230 IFDE_CSSComputedStyle* CXFA_TextParser::ComputeStyle( 225 IFDE_CSSComputedStyle* CXFA_TextParser::ComputeStyle(
231 CFDE_XMLNode* pXMLNode, 226 CFDE_XMLNode* pXMLNode,
232 IFDE_CSSComputedStyle* pParentStyle) { 227 IFDE_CSSComputedStyle* pParentStyle) {
233 CXFA_TextParseContext* pContext = static_cast<CXFA_TextParseContext*>( 228 auto it = m_mapXMLNodeToParseContext.find(pXMLNode);
234 m_mapXMLNodeToParseContext.GetValueAt(pXMLNode)); 229 if (it == m_mapXMLNodeToParseContext.end())
230 return nullptr;
231
232 CXFA_TextParseContext* pContext = it->second;
235 if (!pContext) 233 if (!pContext)
236 return nullptr; 234 return nullptr;
235
237 pContext->m_pParentStyle = pParentStyle; 236 pContext->m_pParentStyle = pParentStyle;
238 pParentStyle->Retain(); 237 pParentStyle->Retain();
238
239 CXFA_CSSTagProvider tagProvider; 239 CXFA_CSSTagProvider tagProvider;
240 ParseTagInfo(pXMLNode, tagProvider); 240 ParseTagInfo(pXMLNode, tagProvider);
241 if (tagProvider.m_bContent) 241 if (tagProvider.m_bContent)
242 return nullptr; 242 return nullptr;
243
243 IFDE_CSSComputedStyle* pStyle = CreateStyle(pParentStyle); 244 IFDE_CSSComputedStyle* pStyle = CreateStyle(pParentStyle);
244 CFDE_CSSAccelerator* pCSSAccel = m_pSelector->InitAccelerator(); 245 CFDE_CSSAccelerator* pCSSAccel = m_pSelector->InitAccelerator();
245 pCSSAccel->OnEnterTag(&tagProvider); 246 pCSSAccel->OnEnterTag(&tagProvider);
246 m_pSelector->ComputeStyle(&tagProvider, pContext->GetDecls(), 247 m_pSelector->ComputeStyle(&tagProvider, pContext->GetDecls(),
247 pContext->CountDecls(), pStyle); 248 pContext->CountDecls(), pStyle);
248 pCSSAccel->OnLeaveTag(&tagProvider); 249 pCSSAccel->OnLeaveTag(&tagProvider);
249 return pStyle; 250 return pStyle;
250 } 251 }
251 void CXFA_TextParser::DoParse(CFDE_XMLNode* pXMLContainer, 252 void CXFA_TextParser::DoParse(CFDE_XMLNode* pXMLContainer,
252 CXFA_TextProvider* pTextProvider) { 253 CXFA_TextProvider* pTextProvider) {
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after
287 const_cast<const CFDE_CSSDeclaration**>(DeclArray.GetData()); 288 const_cast<const CFDE_CSSDeclaration**>(DeclArray.GetData());
288 m_pSelector->ComputeStyle(&tagProvider, ppMatchDecls, iMatchedDecls, 289 m_pSelector->ComputeStyle(&tagProvider, ppMatchDecls, iMatchedDecls,
289 pNewStyle); 290 pNewStyle);
290 pCSSAccel->OnLeaveTag(&tagProvider); 291 pCSSAccel->OnLeaveTag(&tagProvider);
291 if (iMatchedDecls > 0) { 292 if (iMatchedDecls > 0) {
292 pTextContext->SetDecls(ppMatchDecls, iMatchedDecls); 293 pTextContext->SetDecls(ppMatchDecls, iMatchedDecls);
293 } 294 }
294 eDisplay = pNewStyle->GetPositionStyles()->GetDisplay(); 295 eDisplay = pNewStyle->GetPositionStyles()->GetDisplay();
295 } 296 }
296 pTextContext->SetDisplay(eDisplay); 297 pTextContext->SetDisplay(eDisplay);
297 m_mapXMLNodeToParseContext.SetAt(pXMLNode, pTextContext); 298 m_mapXMLNodeToParseContext[pXMLNode] = pTextContext;
298 } 299 }
299 for (CFDE_XMLNode* pXMLChild = 300 for (CFDE_XMLNode* pXMLChild =
300 pXMLNode->GetNodeItem(CFDE_XMLNode::FirstChild); 301 pXMLNode->GetNodeItem(CFDE_XMLNode::FirstChild);
301 pXMLChild; 302 pXMLChild;
302 pXMLChild = pXMLChild->GetNodeItem(CFDE_XMLNode::NextSibling)) { 303 pXMLChild = pXMLChild->GetNodeItem(CFDE_XMLNode::NextSibling)) {
303 ParseRichText(pXMLChild, pNewStyle); 304 ParseRichText(pXMLChild, pNewStyle);
304 } 305 }
305 if (pNewStyle) 306 if (pNewStyle)
306 pNewStyle->Release(); 307 pNewStyle->Release();
307 } 308 }
(...skipping 108 matching lines...) Expand 10 before | Expand all | Expand 10 after
416 if (font) { 417 if (font) {
417 return font.GetFontSize(); 418 return font.GetFontSize();
418 } 419 }
419 return 10; 420 return 10;
420 } 421 }
421 int32_t CXFA_TextParser::GetHorScale(CXFA_TextProvider* pTextProvider, 422 int32_t CXFA_TextParser::GetHorScale(CXFA_TextProvider* pTextProvider,
422 IFDE_CSSComputedStyle* pStyle, 423 IFDE_CSSComputedStyle* pStyle,
423 CFDE_XMLNode* pXMLNode) const { 424 CFDE_XMLNode* pXMLNode) const {
424 if (pStyle) { 425 if (pStyle) {
425 CFX_WideString wsValue; 426 CFX_WideString wsValue;
426 if (pStyle->GetCustomStyle(FX_WSTRC(L"xfa-font-horizontal-scale"), 427 if (pStyle->GetCustomStyle(L"xfa-font-horizontal-scale", wsValue)) {
427 wsValue)) {
428 return wsValue.GetInteger(); 428 return wsValue.GetInteger();
429 } 429 }
430 while (pXMLNode) { 430 while (pXMLNode) {
431 CXFA_TextParseContext* pContext = static_cast<CXFA_TextParseContext*>( 431 auto it = m_mapXMLNodeToParseContext.find(pXMLNode);
432 m_mapXMLNodeToParseContext.GetValueAt(pXMLNode)); 432 if (it != m_mapXMLNodeToParseContext.end()) {
433 if (pContext && pContext->m_pParentStyle && 433 CXFA_TextParseContext* pContext = it->second;
434 pContext->m_pParentStyle->GetCustomStyle( 434 if (pContext && pContext->m_pParentStyle &&
435 FX_WSTRC(L"xfa-font-horizontal-scale"), wsValue)) { 435 pContext->m_pParentStyle->GetCustomStyle(
436 return wsValue.GetInteger(); 436 L"xfa-font-horizontal-scale", wsValue)) {
437 return wsValue.GetInteger();
438 }
437 } 439 }
438 pXMLNode = pXMLNode->GetNodeItem(CFDE_XMLNode::Parent); 440 pXMLNode = pXMLNode->GetNodeItem(CFDE_XMLNode::Parent);
439 } 441 }
440 } 442 }
441 if (CXFA_Font font = pTextProvider->GetFontNode()) { 443 if (CXFA_Font font = pTextProvider->GetFontNode()) {
442 return static_cast<int32_t>(font.GetHorizontalScale()); 444 return static_cast<int32_t>(font.GetHorizontalScale());
443 } 445 }
444 return 100; 446 return 100;
445 } 447 }
446 int32_t CXFA_TextParser::GetVerScale(CXFA_TextProvider* pTextProvider, 448 int32_t CXFA_TextParser::GetVerScale(CXFA_TextProvider* pTextProvider,
(...skipping 133 matching lines...) Expand 10 before | Expand all | Expand 10 after
580 ws.MakeLower(); 582 ws.MakeLower();
581 } 583 }
582 bool bRaw = (ws == FX_WSTRC(L"raw")); 584 bool bRaw = (ws == FX_WSTRC(L"raw"));
583 if (!bRaw && ws != FX_WSTRC(L"formatted")) { 585 if (!bRaw && ws != FX_WSTRC(L"formatted")) {
584 return false; 586 return false;
585 } 587 }
586 bRet = pTextProvider->GetEmbbedObj(bURI, bRaw, wsAttr, wsValue); 588 bRet = pTextProvider->GetEmbbedObj(bURI, bRaw, wsAttr, wsValue);
587 } 589 }
588 return bRet; 590 return bRet;
589 } 591 }
592
590 CXFA_TextParseContext* CXFA_TextParser::GetParseContextFromMap( 593 CXFA_TextParseContext* CXFA_TextParser::GetParseContextFromMap(
591 CFDE_XMLNode* pXMLNode) { 594 CFDE_XMLNode* pXMLNode) {
592 return (CXFA_TextParseContext*)m_mapXMLNodeToParseContext.GetValueAt( 595 auto it = m_mapXMLNodeToParseContext.find(pXMLNode);
593 pXMLNode); 596 return it != m_mapXMLNodeToParseContext.end() ? it->second : nullptr;
594 } 597 }
598
595 enum XFA_TABSTOPSSTATUS { 599 enum XFA_TABSTOPSSTATUS {
596 XFA_TABSTOPSSTATUS_Error, 600 XFA_TABSTOPSSTATUS_Error,
597 XFA_TABSTOPSSTATUS_EOS, 601 XFA_TABSTOPSSTATUS_EOS,
598 XFA_TABSTOPSSTATUS_None, 602 XFA_TABSTOPSSTATUS_None,
599 XFA_TABSTOPSSTATUS_Alignment, 603 XFA_TABSTOPSSTATUS_Alignment,
600 XFA_TABSTOPSSTATUS_StartLeader, 604 XFA_TABSTOPSSTATUS_StartLeader,
601 XFA_TABSTOPSSTATUS_Leader, 605 XFA_TABSTOPSSTATUS_Leader,
602 XFA_TABSTOPSSTATUS_Location, 606 XFA_TABSTOPSSTATUS_Location,
603 }; 607 };
604 bool CXFA_TextParser::GetTabstops(IFDE_CSSComputedStyle* pStyle, 608 bool CXFA_TextParser::GetTabstops(IFDE_CSSComputedStyle* pStyle,
(...skipping 1491 matching lines...) Expand 10 before | Expand all | Expand 10 after
2096 m_tabstops.RemoveAll(); 2100 m_tabstops.RemoveAll();
2097 m_iTabCount = 0; 2101 m_iTabCount = 0;
2098 } 2102 }
2099 2103
2100 void CXFA_TextTabstopsContext::Reset() { 2104 void CXFA_TextTabstopsContext::Reset() {
2101 m_iTabIndex = -1; 2105 m_iTabIndex = -1;
2102 m_bTabstops = false; 2106 m_bTabstops = false;
2103 m_fTabWidth = 0; 2107 m_fTabWidth = 0;
2104 m_fLeft = 0; 2108 m_fLeft = 0;
2105 } 2109 }
OLDNEW
« no previous file with comments | « xfa/fxfa/app/xfa_textlayout.h ('k') | xfa/fxfa/parser/cxfa_document.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698