summaryrefslogtreecommitdiff
path: root/xfa/fxfa
diff options
context:
space:
mode:
Diffstat (limited to 'xfa/fxfa')
-rw-r--r--xfa/fxfa/app/cxfa_csstagprovider.h17
-rw-r--r--xfa/fxfa/app/cxfa_textparser.cpp79
-rw-r--r--xfa/fxfa/app/cxfa_textparser.h2
3 files changed, 46 insertions, 52 deletions
diff --git a/xfa/fxfa/app/cxfa_csstagprovider.h b/xfa/fxfa/app/cxfa_csstagprovider.h
index 3c23784403..f5db867390 100644
--- a/xfa/fxfa/app/cxfa_csstagprovider.h
+++ b/xfa/fxfa/app/cxfa_csstagprovider.h
@@ -13,30 +13,27 @@
class CXFA_CSSTagProvider {
public:
- using AttributeMap = std::map<CFX_WideString, CFX_WideString>;
-
CXFA_CSSTagProvider();
~CXFA_CSSTagProvider();
CFX_WideString GetTagName() { return m_wsTagName; }
- AttributeMap::iterator begin() { return m_Attributes.begin(); }
- AttributeMap::iterator end() { return m_Attributes.end(); }
-
- bool empty() const { return m_Attributes.empty(); }
-
- void SetTagNameObj(const CFX_WideString& wsName) { m_wsTagName = wsName; }
+ void SetTagName(const CFX_WideString& wsName) { m_wsTagName = wsName; }
void SetAttribute(const CFX_WideString& wsAttr,
const CFX_WideString& wsValue) {
m_Attributes.insert({wsAttr, wsValue});
}
+ CFX_WideString GetAttribute(const CFX_WideString& wsAttr) {
+ return m_Attributes[wsAttr];
+ }
+
bool m_bTagAvailable;
bool m_bContent;
- protected:
+ private:
CFX_WideString m_wsTagName;
- AttributeMap m_Attributes;
+ std::map<CFX_WideString, CFX_WideString> m_Attributes;
};
#endif // XFA_FXFA_APP_CXFA_CSSTAGPROVIDER_H_
diff --git a/xfa/fxfa/app/cxfa_textparser.cpp b/xfa/fxfa/app/cxfa_textparser.cpp
index 2a724cc243..9759cb219d 100644
--- a/xfa/fxfa/app/cxfa_textparser.cpp
+++ b/xfa/fxfa/app/cxfa_textparser.cpp
@@ -11,7 +11,6 @@
#include <vector>
#include "third_party/base/ptr_util.h"
-#include "xfa/fde/css/cfde_cssaccelerator.h"
#include "xfa/fde/css/cfde_csscomputedstyle.h"
#include "xfa/fde/css/cfde_cssstyleselector.h"
#include "xfa/fde/css/cfde_cssstylesheet.h"
@@ -198,17 +197,14 @@ CFX_RetainPtr<CFDE_CSSComputedStyle> CXFA_TextParser::ComputeStyle(
pContext->m_pParentStyle.Reset(pParentStyle);
- CXFA_CSSTagProvider tagProvider;
- ParseTagInfo(pXMLNode, tagProvider);
- if (tagProvider.m_bContent)
+ auto tagProvider = ParseTagInfo(pXMLNode);
+ if (tagProvider->m_bContent)
return nullptr;
auto pStyle = CreateStyle(pParentStyle);
- CFDE_CSSAccelerator* pCSSAccel = m_pSelector->InitAccelerator();
- pCSSAccel->OnEnterTag(&tagProvider);
-
- m_pSelector->ComputeStyle(&tagProvider, pContext->GetDecls(), pStyle.Get());
- pCSSAccel->OnLeaveTag(&tagProvider);
+ m_pSelector->ComputeStyle(pContext->GetDecls(),
+ tagProvider->GetAttribute(L"style"),
+ tagProvider->GetAttribute(L"align"), pStyle.Get());
return pStyle;
}
@@ -228,25 +224,23 @@ void CXFA_TextParser::ParseRichText(CFDE_XMLNode* pXMLNode,
if (!pXMLNode)
return;
- CXFA_CSSTagProvider tagProvider;
- ParseTagInfo(pXMLNode, tagProvider);
- if (!tagProvider.m_bTagAvailable)
+ auto tagProvider = ParseTagInfo(pXMLNode);
+ if (!tagProvider->m_bTagAvailable)
return;
CFX_RetainPtr<CFDE_CSSComputedStyle> pNewStyle;
- if ((tagProvider.GetTagName() != FX_WSTRC(L"body")) ||
- (tagProvider.GetTagName() != FX_WSTRC(L"html"))) {
+ if ((tagProvider->GetTagName() != L"body") ||
+ (tagProvider->GetTagName() != L"html")) {
CXFA_TextParseContext* pTextContext = new CXFA_TextParseContext;
FDE_CSSDisplay eDisplay = FDE_CSSDisplay::Inline;
- if (!tagProvider.m_bContent) {
+ if (!tagProvider->m_bContent) {
+ auto declArray =
+ m_pSelector->MatchDeclarations(tagProvider->GetTagName());
pNewStyle = CreateStyle(pParentStyle);
- CFDE_CSSAccelerator* pCSSAccel = m_pSelector->InitAccelerator();
- pCSSAccel->OnEnterTag(&tagProvider);
-
- auto declArray = m_pSelector->MatchDeclarations(&tagProvider);
- m_pSelector->ComputeStyle(&tagProvider, declArray, pNewStyle.Get());
+ m_pSelector->ComputeStyle(declArray, tagProvider->GetAttribute(L"style"),
+ tagProvider->GetAttribute(L"align"),
+ pNewStyle.Get());
- pCSSAccel->OnLeaveTag(&tagProvider);
if (!declArray.empty())
pTextContext->SetDecls(std::move(declArray));
@@ -286,23 +280,26 @@ bool CXFA_TextParser::TagValidate(const CFX_WideString& wsName) const {
FX_HashCode_GetW(wsName.AsStringC(), true));
}
-void CXFA_TextParser::ParseTagInfo(CFDE_XMLNode* pXMLNode,
- CXFA_CSSTagProvider& tagProvider) {
+std::unique_ptr<CXFA_CSSTagProvider> CXFA_TextParser::ParseTagInfo(
+ CFDE_XMLNode* pXMLNode) {
+ auto tagProvider = pdfium::MakeUnique<CXFA_CSSTagProvider>();
+
CFX_WideString wsName;
if (pXMLNode->GetType() == FDE_XMLNODE_Element) {
CFDE_XMLElement* pXMLElement = static_cast<CFDE_XMLElement*>(pXMLNode);
pXMLElement->GetLocalTagName(wsName);
- tagProvider.SetTagNameObj(wsName);
- tagProvider.m_bTagAvailable = TagValidate(wsName);
+ tagProvider->SetTagName(wsName);
+ tagProvider->m_bTagAvailable = TagValidate(wsName);
CFX_WideString wsValue;
pXMLElement->GetString(L"style", wsValue);
if (!wsValue.IsEmpty())
- tagProvider.SetAttribute(L"style", wsValue);
+ tagProvider->SetAttribute(L"style", wsValue);
} else if (pXMLNode->GetType() == FDE_XMLNODE_Text) {
- tagProvider.m_bTagAvailable = true;
- tagProvider.m_bContent = true;
+ tagProvider->m_bTagAvailable = true;
+ tagProvider->m_bContent = true;
}
+ return tagProvider;
}
int32_t CXFA_TextParser::GetVAlign(CXFA_TextProvider* pTextProvider) const {
@@ -312,23 +309,23 @@ int32_t CXFA_TextParser::GetVAlign(CXFA_TextProvider* pTextProvider) const {
FX_FLOAT CXFA_TextParser::GetTabInterval(CFDE_CSSComputedStyle* pStyle) const {
CFX_WideString wsValue;
- if (pStyle && pStyle->GetCustomStyle(FX_WSTRC(L"tab-interval"), wsValue))
+ if (pStyle && pStyle->GetCustomStyle(L"tab-interval", wsValue))
return CXFA_Measurement(wsValue.AsStringC()).ToUnit(XFA_UNIT_Pt);
return 36;
}
int32_t CXFA_TextParser::CountTabs(CFDE_CSSComputedStyle* pStyle) const {
CFX_WideString wsValue;
- if (pStyle && pStyle->GetCustomStyle(FX_WSTRC(L"xfa-tab-count"), wsValue))
+ if (pStyle && pStyle->GetCustomStyle(L"xfa-tab-count", wsValue))
return wsValue.GetInteger();
return 0;
}
bool CXFA_TextParser::IsSpaceRun(CFDE_CSSComputedStyle* pStyle) const {
CFX_WideString wsValue;
- if (pStyle && pStyle->GetCustomStyle(FX_WSTRC(L"xfa-spacerun"), wsValue)) {
+ if (pStyle && pStyle->GetCustomStyle(L"xfa-spacerun", wsValue)) {
wsValue.MakeLower();
- return wsValue == FX_WSTRC(L"yes");
+ return wsValue == L"yes";
}
return false;
}
@@ -406,7 +403,7 @@ int32_t CXFA_TextParser::GetVerScale(CXFA_TextProvider* pTextProvider,
CFDE_CSSComputedStyle* pStyle) const {
if (pStyle) {
CFX_WideString wsValue;
- if (pStyle->GetCustomStyle(FX_WSTRC(L"xfa-font-vertical-scale"), wsValue))
+ if (pStyle->GetCustomStyle(L"xfa-font-vertical-scale", wsValue))
return wsValue.GetInteger();
}
@@ -437,8 +434,8 @@ void CXFA_TextParser::GetUnderline(CXFA_TextProvider* pTextProvider,
iUnderline = 1;
CFX_WideString wsValue;
- if (pStyle->GetCustomStyle(FX_WSTRC(L"underlinePeriod"), wsValue)) {
- if (wsValue == FX_WSTRC(L"word"))
+ if (pStyle->GetCustomStyle(L"underlinePeriod", wsValue)) {
+ if (wsValue == L"word")
iPeriod = XFA_ATTRIBUTEENUM_Word;
} else if (CXFA_Font font = pTextProvider->GetFontNode()) {
iPeriod = font.GetUnderlinePeriod();
@@ -527,8 +524,8 @@ bool CXFA_TextParser::GetEmbbedObj(CXFA_TextProvider* pTextProvider,
else
ws.MakeLower();
- bool bURI = (ws == FX_WSTRC(L"uri"));
- if (!bURI && ws != FX_WSTRC(L"som"))
+ bool bURI = (ws == L"uri");
+ if (!bURI && ws != L"som")
return false;
ws.clear();
@@ -538,8 +535,8 @@ bool CXFA_TextParser::GetEmbbedObj(CXFA_TextProvider* pTextProvider,
else
ws.MakeLower();
- bool bRaw = (ws == FX_WSTRC(L"raw"));
- if (!bRaw && ws != FX_WSTRC(L"formatted"))
+ bool bRaw = (ws == L"raw");
+ if (!bRaw && ws != L"formatted")
return false;
bRet = pTextProvider->GetEmbbedObj(bURI, bRaw, wsAttr, wsValue);
@@ -559,8 +556,8 @@ bool CXFA_TextParser::GetTabstops(CFDE_CSSComputedStyle* pStyle,
return false;
CFX_WideString wsValue;
- if (!pStyle->GetCustomStyle(FX_WSTRC(L"xfa-tab-stops"), wsValue) &&
- !pStyle->GetCustomStyle(FX_WSTRC(L"tab-stops"), wsValue)) {
+ if (!pStyle->GetCustomStyle(L"xfa-tab-stops", wsValue) &&
+ !pStyle->GetCustomStyle(L"tab-stops", wsValue)) {
return false;
}
diff --git a/xfa/fxfa/app/cxfa_textparser.h b/xfa/fxfa/app/cxfa_textparser.h
index 9332dfc9e1..86da502dbf 100644
--- a/xfa/fxfa/app/cxfa_textparser.h
+++ b/xfa/fxfa/app/cxfa_textparser.h
@@ -89,7 +89,7 @@ class CXFA_TextParser {
void InitCSSData(CXFA_TextProvider* pTextProvider);
void ParseRichText(CFDE_XMLNode* pXMLNode,
CFDE_CSSComputedStyle* pParentStyle);
- void ParseTagInfo(CFDE_XMLNode* pXMLNode, CXFA_CSSTagProvider& tagProvider);
+ std::unique_ptr<CXFA_CSSTagProvider> ParseTagInfo(CFDE_XMLNode* pXMLNode);
std::unique_ptr<CFDE_CSSStyleSheet> LoadDefaultSheetStyle();
CFX_RetainPtr<CFDE_CSSComputedStyle> CreateStyle(
CFDE_CSSComputedStyle* pParentStyle);