summaryrefslogtreecommitdiff
path: root/xfa/fxfa/app
diff options
context:
space:
mode:
Diffstat (limited to 'xfa/fxfa/app')
-rw-r--r--xfa/fxfa/app/xfa_textlayout.cpp62
-rw-r--r--xfa/fxfa/app/xfa_textlayout.h3
2 files changed, 34 insertions, 31 deletions
diff --git a/xfa/fxfa/app/xfa_textlayout.cpp b/xfa/fxfa/app/xfa_textlayout.cpp
index 69b53eedb4..ea4ae4b2da 100644
--- a/xfa/fxfa/app/xfa_textlayout.cpp
+++ b/xfa/fxfa/app/xfa_textlayout.cpp
@@ -66,28 +66,22 @@ CXFA_TextParser::~CXFA_TextParser() {
if (m_pUASheet)
m_pUASheet->Release();
- FX_POSITION ps = m_mapXMLNodeToParseContext.GetStartPosition();
- while (ps) {
- CFDE_XMLNode* pXMLNode;
- CXFA_TextParseContext* pParseContext;
- m_mapXMLNodeToParseContext.GetNextAssoc(ps, pXMLNode, pParseContext);
- if (pParseContext)
+ for (auto& pair : m_mapXMLNodeToParseContext) {
+ if (pair.second) {
FXTARGET_DeleteWith(CXFA_TextParseContext, m_pAllocator.get(),
- pParseContext);
+ pair.second);
+ }
}
- m_mapXMLNodeToParseContext.RemoveAll();
}
+
void CXFA_TextParser::Reset() {
- FX_POSITION ps = m_mapXMLNodeToParseContext.GetStartPosition();
- while (ps) {
- CFDE_XMLNode* pXMLNode;
- CXFA_TextParseContext* pParseContext;
- m_mapXMLNodeToParseContext.GetNextAssoc(ps, pXMLNode, pParseContext);
- if (pParseContext)
+ for (auto& pair : m_mapXMLNodeToParseContext) {
+ if (pair.second) {
FXTARGET_DeleteWith(CXFA_TextParseContext, m_pAllocator.get(),
- pParseContext);
+ pair.second);
+ }
}
- m_mapXMLNodeToParseContext.RemoveAll();
+ m_mapXMLNodeToParseContext.clear();
m_pAllocator.reset();
}
void CXFA_TextParser::InitCSSData(CXFA_TextProvider* pTextProvider) {
@@ -227,19 +221,26 @@ IFDE_CSSComputedStyle* CXFA_TextParser::CreateStyle(
}
return pNewStyle;
}
+
IFDE_CSSComputedStyle* CXFA_TextParser::ComputeStyle(
CFDE_XMLNode* pXMLNode,
IFDE_CSSComputedStyle* pParentStyle) {
- CXFA_TextParseContext* pContext = static_cast<CXFA_TextParseContext*>(
- m_mapXMLNodeToParseContext.GetValueAt(pXMLNode));
+ auto it = m_mapXMLNodeToParseContext.find(pXMLNode);
+ if (it == m_mapXMLNodeToParseContext.end())
+ return nullptr;
+
+ CXFA_TextParseContext* pContext = it->second;
if (!pContext)
return nullptr;
+
pContext->m_pParentStyle = pParentStyle;
pParentStyle->Retain();
+
CXFA_CSSTagProvider tagProvider;
ParseTagInfo(pXMLNode, tagProvider);
if (tagProvider.m_bContent)
return nullptr;
+
IFDE_CSSComputedStyle* pStyle = CreateStyle(pParentStyle);
CFDE_CSSAccelerator* pCSSAccel = m_pSelector->InitAccelerator();
pCSSAccel->OnEnterTag(&tagProvider);
@@ -294,7 +295,7 @@ void CXFA_TextParser::ParseRichText(CFDE_XMLNode* pXMLNode,
eDisplay = pNewStyle->GetPositionStyles()->GetDisplay();
}
pTextContext->SetDisplay(eDisplay);
- m_mapXMLNodeToParseContext.SetAt(pXMLNode, pTextContext);
+ m_mapXMLNodeToParseContext[pXMLNode] = pTextContext;
}
for (CFDE_XMLNode* pXMLChild =
pXMLNode->GetNodeItem(CFDE_XMLNode::FirstChild);
@@ -423,17 +424,18 @@ int32_t CXFA_TextParser::GetHorScale(CXFA_TextProvider* pTextProvider,
CFDE_XMLNode* pXMLNode) const {
if (pStyle) {
CFX_WideString wsValue;
- if (pStyle->GetCustomStyle(FX_WSTRC(L"xfa-font-horizontal-scale"),
- wsValue)) {
+ if (pStyle->GetCustomStyle(L"xfa-font-horizontal-scale", wsValue)) {
return wsValue.GetInteger();
}
while (pXMLNode) {
- CXFA_TextParseContext* pContext = static_cast<CXFA_TextParseContext*>(
- m_mapXMLNodeToParseContext.GetValueAt(pXMLNode));
- if (pContext && pContext->m_pParentStyle &&
- pContext->m_pParentStyle->GetCustomStyle(
- FX_WSTRC(L"xfa-font-horizontal-scale"), wsValue)) {
- return wsValue.GetInteger();
+ auto it = m_mapXMLNodeToParseContext.find(pXMLNode);
+ if (it != m_mapXMLNodeToParseContext.end()) {
+ CXFA_TextParseContext* pContext = it->second;
+ if (pContext && pContext->m_pParentStyle &&
+ pContext->m_pParentStyle->GetCustomStyle(
+ L"xfa-font-horizontal-scale", wsValue)) {
+ return wsValue.GetInteger();
+ }
}
pXMLNode = pXMLNode->GetNodeItem(CFDE_XMLNode::Parent);
}
@@ -587,11 +589,13 @@ bool CXFA_TextParser::GetEmbbedObj(CXFA_TextProvider* pTextProvider,
}
return bRet;
}
+
CXFA_TextParseContext* CXFA_TextParser::GetParseContextFromMap(
CFDE_XMLNode* pXMLNode) {
- return (CXFA_TextParseContext*)m_mapXMLNodeToParseContext.GetValueAt(
- pXMLNode);
+ auto it = m_mapXMLNodeToParseContext.find(pXMLNode);
+ return it != m_mapXMLNodeToParseContext.end() ? it->second : nullptr;
}
+
enum XFA_TABSTOPSSTATUS {
XFA_TABSTOPSSTATUS_Error,
XFA_TABSTOPSSTATUS_EOS,
diff --git a/xfa/fxfa/app/xfa_textlayout.h b/xfa/fxfa/app/xfa_textlayout.h
index 26bd1634ee..f923c743ed 100644
--- a/xfa/fxfa/app/xfa_textlayout.h
+++ b/xfa/fxfa/app/xfa_textlayout.h
@@ -134,8 +134,7 @@ class CXFA_TextParser {
std::unique_ptr<IFX_MemoryAllocator> m_pAllocator;
std::unique_ptr<CFDE_CSSStyleSelector> m_pSelector;
IFDE_CSSStyleSheet* m_pUASheet;
- CFX_MapPtrTemplate<CFDE_XMLNode*, CXFA_TextParseContext*>
- m_mapXMLNodeToParseContext;
+ std::map<CFDE_XMLNode*, CXFA_TextParseContext*> m_mapXMLNodeToParseContext;
};
class CXFA_LoaderContext {