summaryrefslogtreecommitdiff
path: root/xfa/fxfa/app/cxfa_textparser.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'xfa/fxfa/app/cxfa_textparser.cpp')
-rw-r--r--xfa/fxfa/app/cxfa_textparser.cpp138
1 files changed, 67 insertions, 71 deletions
diff --git a/xfa/fxfa/app/cxfa_textparser.cpp b/xfa/fxfa/app/cxfa_textparser.cpp
index 8fe923b058..77f22515be 100644
--- a/xfa/fxfa/app/cxfa_textparser.cpp
+++ b/xfa/fxfa/app/cxfa_textparser.cpp
@@ -11,6 +11,7 @@
#include "third_party/base/ptr_util.h"
#include "xfa/fde/css/fde_css.h"
#include "xfa/fde/css/fde_cssstyleselector.h"
+#include "xfa/fde/css/fde_cssstylesheet.h"
#include "xfa/fgas/crt/fgas_codepage.h"
#include "xfa/fgas/font/cfgas_fontmgr.h"
#include "xfa/fxfa/app/cxfa_csstagprovider.h"
@@ -80,7 +81,7 @@ void CXFA_TextParser::InitCSSData(CXFA_TextProvider* pTextProvider) {
}
}
-IFDE_CSSStyleSheet* CXFA_TextParser::LoadDefaultSheetStyle() {
+CFDE_CSSStyleSheet* CXFA_TextParser::LoadDefaultSheetStyle() {
static const FX_WCHAR s_pStyle[] =
L"html,body,ol,p,ul{display:block}"
L"li{display:list-item}"
@@ -90,17 +91,20 @@ IFDE_CSSStyleSheet* CXFA_TextParser::LoadDefaultSheetStyle() {
L"style:italic}"
L"sup{vertical-align:+15em;font-size:.66em}sub{vertical-align:-15em;font-"
L"size:.66em}";
- return IFDE_CSSStyleSheet::LoadFromBuffer(
- CFX_WideString(), s_pStyle, FXSYS_wcslen(s_pStyle), FX_CODEPAGE_UTF8);
+
+ CFDE_CSSStyleSheet* pStyleSheet = new CFDE_CSSStyleSheet();
+ if (!pStyleSheet->LoadFromBuffer(s_pStyle, FXSYS_wcslen(s_pStyle))) {
+ pStyleSheet->Release();
+ pStyleSheet = nullptr;
+ }
+ return pStyleSheet;
}
-IFDE_CSSComputedStyle* CXFA_TextParser::CreateRootStyle(
+CFDE_CSSComputedStyle* CXFA_TextParser::CreateRootStyle(
CXFA_TextProvider* pTextProvider) {
CXFA_Font font = pTextProvider->GetFontNode();
CXFA_Para para = pTextProvider->GetParaNode();
- IFDE_CSSComputedStyle* pStyle = m_pSelector->CreateComputedStyle(nullptr);
- IFDE_CSSFontStyle* pFontStyle = pStyle->GetFontStyles();
- IFDE_CSSParagraphStyle* pParaStyle = pStyle->GetParagraphStyles();
+ CFDE_CSSComputedStyle* pStyle = m_pSelector->CreateComputedStyle(nullptr);
FX_FLOAT fLineHeight = 0;
FX_FLOAT fFontSize = 10;
@@ -108,7 +112,7 @@ IFDE_CSSComputedStyle* CXFA_TextParser::CreateRootStyle(
fLineHeight = para.GetLineHeight();
FDE_CSSLENGTH indent;
indent.Set(FDE_CSSLengthUnit::Point, para.GetTextIndent());
- pParaStyle->SetTextIndent(indent);
+ pStyle->SetTextIndent(indent);
FDE_CSSTextAlign hAlign = FDE_CSSTextAlign::Left;
switch (para.GetHorizontalAlign()) {
case XFA_ATTRIBUTEENUM_Center:
@@ -124,26 +128,25 @@ IFDE_CSSComputedStyle* CXFA_TextParser::CreateRootStyle(
hAlign = FDE_CSSTextAlign::JustifyAll;
break;
}
- pParaStyle->SetTextAlign(hAlign);
+ pStyle->SetTextAlign(hAlign);
FDE_CSSRECT rtMarginWidth;
rtMarginWidth.left.Set(FDE_CSSLengthUnit::Point, para.GetMarginLeft());
rtMarginWidth.top.Set(FDE_CSSLengthUnit::Point, para.GetSpaceAbove());
rtMarginWidth.right.Set(FDE_CSSLengthUnit::Point, para.GetMarginRight());
rtMarginWidth.bottom.Set(FDE_CSSLengthUnit::Point, para.GetSpaceBelow());
- pStyle->GetBoundaryStyles()->SetMarginWidth(rtMarginWidth);
+ pStyle->SetMarginWidth(rtMarginWidth);
}
if (font) {
- pFontStyle->SetColor(font.GetColor());
- pFontStyle->SetFontStyle(font.IsItalic() ? FDE_CSSFontStyle::Italic
- : FDE_CSSFontStyle::Normal);
- pFontStyle->SetFontWeight(font.IsBold() ? FXFONT_FW_BOLD
- : FXFONT_FW_NORMAL);
- pParaStyle->SetNumberVerticalAlign(-font.GetBaselineShift());
+ pStyle->SetColor(font.GetColor());
+ pStyle->SetFontStyle(font.IsItalic() ? FDE_CSSFontStyle::Italic
+ : FDE_CSSFontStyle::Normal);
+ pStyle->SetFontWeight(font.IsBold() ? FXFONT_FW_BOLD : FXFONT_FW_NORMAL);
+ pStyle->SetNumberVerticalAlign(-font.GetBaselineShift());
fFontSize = font.GetFontSize();
FDE_CSSLENGTH letterSpacing;
letterSpacing.Set(FDE_CSSLengthUnit::Point, font.GetLetterSpacing());
- pParaStyle->SetLetterSpacing(letterSpacing);
+ pStyle->SetLetterSpacing(letterSpacing);
uint32_t dwDecoration = 0;
if (font.GetLineThrough() > 0)
dwDecoration |= FDE_CSSTEXTDECORATION_LineThrough;
@@ -152,43 +155,38 @@ IFDE_CSSComputedStyle* CXFA_TextParser::CreateRootStyle(
else if (font.GetUnderline() > 0)
dwDecoration |= FDE_CSSTEXTDECORATION_Underline;
- pParaStyle->SetTextDecoration(dwDecoration);
+ pStyle->SetTextDecoration(dwDecoration);
}
- pParaStyle->SetLineHeight(fLineHeight);
- pFontStyle->SetFontSize(fFontSize);
+ pStyle->SetLineHeight(fLineHeight);
+ pStyle->SetFontSize(fFontSize);
return pStyle;
}
-IFDE_CSSComputedStyle* CXFA_TextParser::CreateStyle(
- IFDE_CSSComputedStyle* pParentStyle) {
- IFDE_CSSComputedStyle* pNewStyle =
+CFDE_CSSComputedStyle* CXFA_TextParser::CreateStyle(
+ CFDE_CSSComputedStyle* pParentStyle) {
+ CFDE_CSSComputedStyle* pNewStyle =
m_pSelector->CreateComputedStyle(pParentStyle);
ASSERT(pNewStyle);
if (!pParentStyle)
return pNewStyle;
- IFDE_CSSParagraphStyle* pParaStyle = pParentStyle->GetParagraphStyles();
- uint32_t dwDecoration = pParaStyle->GetTextDecoration();
+ uint32_t dwDecoration = pParentStyle->GetTextDecoration();
FX_FLOAT fBaseLine = 0;
- if (pParaStyle->GetVerticalAlign() == FDE_CSSVerticalAlign::Number)
- fBaseLine = pParaStyle->GetNumberVerticalAlign();
-
- pParaStyle = pNewStyle->GetParagraphStyles();
- pParaStyle->SetTextDecoration(dwDecoration);
- pParaStyle->SetNumberVerticalAlign(fBaseLine);
-
- IFDE_CSSBoundaryStyle* pBoundarytyle = pParentStyle->GetBoundaryStyles();
- const FDE_CSSRECT* pRect = pBoundarytyle->GetMarginWidth();
- if (pRect) {
- pBoundarytyle = pNewStyle->GetBoundaryStyles();
- pBoundarytyle->SetMarginWidth(*pRect);
- }
+ if (pParentStyle->GetVerticalAlign() == FDE_CSSVerticalAlign::Number)
+ fBaseLine = pParentStyle->GetNumberVerticalAlign();
+
+ pNewStyle->SetTextDecoration(dwDecoration);
+ pNewStyle->SetNumberVerticalAlign(fBaseLine);
+
+ const FDE_CSSRECT* pRect = pParentStyle->GetMarginWidth();
+ if (pRect)
+ pNewStyle->SetMarginWidth(*pRect);
return pNewStyle;
}
-IFDE_CSSComputedStyle* CXFA_TextParser::ComputeStyle(
+CFDE_CSSComputedStyle* CXFA_TextParser::ComputeStyle(
CFDE_XMLNode* pXMLNode,
- IFDE_CSSComputedStyle* pParentStyle) {
+ CFDE_CSSComputedStyle* pParentStyle) {
auto it = m_mapXMLNodeToParseContext.find(pXMLNode);
if (it == m_mapXMLNodeToParseContext.end())
return nullptr;
@@ -205,7 +203,7 @@ IFDE_CSSComputedStyle* CXFA_TextParser::ComputeStyle(
if (tagProvider.m_bContent)
return nullptr;
- IFDE_CSSComputedStyle* pStyle = CreateStyle(pParentStyle);
+ CFDE_CSSComputedStyle* pStyle = CreateStyle(pParentStyle);
CFDE_CSSAccelerator* pCSSAccel = m_pSelector->InitAccelerator();
pCSSAccel->OnEnterTag(&tagProvider);
m_pSelector->ComputeStyle(&tagProvider, pContext->GetDecls(),
@@ -221,13 +219,13 @@ void CXFA_TextParser::DoParse(CFDE_XMLNode* pXMLContainer,
m_bParsed = true;
InitCSSData(pTextProvider);
- IFDE_CSSComputedStyle* pRootStyle = CreateRootStyle(pTextProvider);
+ CFDE_CSSComputedStyle* pRootStyle = CreateRootStyle(pTextProvider);
ParseRichText(pXMLContainer, pRootStyle);
pRootStyle->Release();
}
void CXFA_TextParser::ParseRichText(CFDE_XMLNode* pXMLNode,
- IFDE_CSSComputedStyle* pParentStyle) {
+ CFDE_CSSComputedStyle* pParentStyle) {
if (!pXMLNode)
return;
@@ -236,7 +234,7 @@ void CXFA_TextParser::ParseRichText(CFDE_XMLNode* pXMLNode,
if (!tagProvider.m_bTagAvailable)
return;
- IFDE_CSSComputedStyle* pNewStyle = nullptr;
+ CFDE_CSSComputedStyle* pNewStyle = nullptr;
if ((tagProvider.GetTagName() != FX_WSTRC(L"body")) ||
(tagProvider.GetTagName() != FX_WSTRC(L"html"))) {
CXFA_TextParseContext* pTextContext = new CXFA_TextParseContext;
@@ -256,7 +254,7 @@ void CXFA_TextParser::ParseRichText(CFDE_XMLNode* pXMLNode,
if (iMatchedDecls > 0)
pTextContext->SetDecls(ppMatchDecls, iMatchedDecls);
- eDisplay = pNewStyle->GetPositionStyles()->GetDisplay();
+ eDisplay = pNewStyle->GetDisplay();
}
pTextContext->SetDisplay(eDisplay);
m_mapXMLNodeToParseContext[pXMLNode] = pTextContext;
@@ -318,21 +316,21 @@ int32_t CXFA_TextParser::GetVAlign(CXFA_TextProvider* pTextProvider) const {
return para ? para.GetVerticalAlign() : XFA_ATTRIBUTEENUM_Top;
}
-FX_FLOAT CXFA_TextParser::GetTabInterval(IFDE_CSSComputedStyle* pStyle) const {
+FX_FLOAT CXFA_TextParser::GetTabInterval(CFDE_CSSComputedStyle* pStyle) const {
CFX_WideString wsValue;
if (pStyle && pStyle->GetCustomStyle(FX_WSTRC(L"tab-interval"), wsValue))
return CXFA_Measurement(wsValue.AsStringC()).ToUnit(XFA_UNIT_Pt);
return 36;
}
-int32_t CXFA_TextParser::CountTabs(IFDE_CSSComputedStyle* pStyle) const {
+int32_t CXFA_TextParser::CountTabs(CFDE_CSSComputedStyle* pStyle) const {
CFX_WideString wsValue;
if (pStyle && pStyle->GetCustomStyle(FX_WSTRC(L"xfa-tab-count"), wsValue))
return wsValue.GetInteger();
return 0;
}
-bool CXFA_TextParser::IsSpaceRun(IFDE_CSSComputedStyle* pStyle) const {
+bool CXFA_TextParser::IsSpaceRun(CFDE_CSSComputedStyle* pStyle) const {
CFX_WideString wsValue;
if (pStyle && pStyle->GetCustomStyle(FX_WSTRC(L"xfa-spacerun"), wsValue)) {
wsValue.MakeLower();
@@ -343,7 +341,7 @@ bool CXFA_TextParser::IsSpaceRun(IFDE_CSSComputedStyle* pStyle) const {
CFX_RetainPtr<CFGAS_GEFont> CXFA_TextParser::GetFont(
CXFA_TextProvider* pTextProvider,
- IFDE_CSSComputedStyle* pStyle) const {
+ CFDE_CSSComputedStyle* pStyle) const {
CFX_WideStringC wsFamily = FX_WSTRC(L"Courier");
uint32_t dwStyle = 0;
CXFA_Font font = pTextProvider->GetFontNode();
@@ -356,15 +354,14 @@ CFX_RetainPtr<CFGAS_GEFont> CXFA_TextParser::GetFont(
}
if (pStyle) {
- IFDE_CSSFontStyle* pFontStyle = pStyle->GetFontStyles();
- int32_t iCount = pFontStyle->CountFontFamilies();
+ int32_t iCount = pStyle->CountFontFamilies();
if (iCount > 0)
- wsFamily = pFontStyle->GetFontFamily(iCount - 1);
+ wsFamily = pStyle->GetFontFamily(iCount - 1);
dwStyle = 0;
- if (pFontStyle->GetFontWeight() > FXFONT_FW_NORMAL)
+ if (pStyle->GetFontWeight() > FXFONT_FW_NORMAL)
dwStyle |= FX_FONTSTYLE_Bold;
- if (pFontStyle->GetFontStyle() == FDE_CSSFontStyle::Italic)
+ if (pStyle->GetFontStyle() == FDE_CSSFontStyle::Italic)
dwStyle |= FX_FONTSTYLE_Italic;
}
@@ -374,9 +371,9 @@ CFX_RetainPtr<CFGAS_GEFont> CXFA_TextParser::GetFont(
}
FX_FLOAT CXFA_TextParser::GetFontSize(CXFA_TextProvider* pTextProvider,
- IFDE_CSSComputedStyle* pStyle) const {
+ CFDE_CSSComputedStyle* pStyle) const {
if (pStyle)
- return pStyle->GetFontStyles()->GetFontSize();
+ return pStyle->GetFontSize();
CXFA_Font font = pTextProvider->GetFontNode();
if (font)
@@ -385,7 +382,7 @@ FX_FLOAT CXFA_TextParser::GetFontSize(CXFA_TextProvider* pTextProvider,
}
int32_t CXFA_TextParser::GetHorScale(CXFA_TextProvider* pTextProvider,
- IFDE_CSSComputedStyle* pStyle,
+ CFDE_CSSComputedStyle* pStyle,
CFDE_XMLNode* pXMLNode) const {
if (pStyle) {
CFX_WideString wsValue;
@@ -412,7 +409,7 @@ int32_t CXFA_TextParser::GetHorScale(CXFA_TextProvider* pTextProvider,
}
int32_t CXFA_TextParser::GetVerScale(CXFA_TextProvider* pTextProvider,
- IFDE_CSSComputedStyle* pStyle) const {
+ CFDE_CSSComputedStyle* pStyle) const {
if (pStyle) {
CFX_WideString wsValue;
if (pStyle->GetCustomStyle(FX_WSTRC(L"xfa-font-vertical-scale"), wsValue))
@@ -425,7 +422,7 @@ int32_t CXFA_TextParser::GetVerScale(CXFA_TextProvider* pTextProvider,
}
void CXFA_TextParser::GetUnderline(CXFA_TextProvider* pTextProvider,
- IFDE_CSSComputedStyle* pStyle,
+ CFDE_CSSComputedStyle* pStyle,
int32_t& iUnderline,
int32_t& iPeriod) const {
iUnderline = 0;
@@ -439,7 +436,7 @@ void CXFA_TextParser::GetUnderline(CXFA_TextProvider* pTextProvider,
return;
}
- uint32_t dwDecoration = pStyle->GetParagraphStyles()->GetTextDecoration();
+ uint32_t dwDecoration = pStyle->GetTextDecoration();
if (dwDecoration & FDE_CSSTEXTDECORATION_Double)
iUnderline = 2;
else if (dwDecoration & FDE_CSSTEXTDECORATION_Underline)
@@ -455,10 +452,10 @@ void CXFA_TextParser::GetUnderline(CXFA_TextProvider* pTextProvider,
}
void CXFA_TextParser::GetLinethrough(CXFA_TextProvider* pTextProvider,
- IFDE_CSSComputedStyle* pStyle,
+ CFDE_CSSComputedStyle* pStyle,
int32_t& iLinethrough) const {
if (pStyle) {
- uint32_t dwDecoration = pStyle->GetParagraphStyles()->GetTextDecoration();
+ uint32_t dwDecoration = pStyle->GetTextDecoration();
iLinethrough = (dwDecoration & FDE_CSSTEXTDECORATION_LineThrough) ? 1 : 0;
return;
}
@@ -469,9 +466,9 @@ void CXFA_TextParser::GetLinethrough(CXFA_TextProvider* pTextProvider,
}
FX_ARGB CXFA_TextParser::GetColor(CXFA_TextProvider* pTextProvider,
- IFDE_CSSComputedStyle* pStyle) const {
+ CFDE_CSSComputedStyle* pStyle) const {
if (pStyle)
- return pStyle->GetFontStyles()->GetColor();
+ return pStyle->GetColor();
if (CXFA_Font font = pTextProvider->GetFontNode())
return font.GetColor();
@@ -479,11 +476,10 @@ FX_ARGB CXFA_TextParser::GetColor(CXFA_TextProvider* pTextProvider,
}
FX_FLOAT CXFA_TextParser::GetBaseline(CXFA_TextProvider* pTextProvider,
- IFDE_CSSComputedStyle* pStyle) const {
+ CFDE_CSSComputedStyle* pStyle) const {
if (pStyle) {
- IFDE_CSSParagraphStyle* pParaStyle = pStyle->GetParagraphStyles();
- if (pParaStyle->GetVerticalAlign() == FDE_CSSVerticalAlign::Number)
- return pParaStyle->GetNumberVerticalAlign();
+ if (pStyle->GetVerticalAlign() == FDE_CSSVerticalAlign::Number)
+ return pStyle->GetNumberVerticalAlign();
} else if (CXFA_Font font = pTextProvider->GetFontNode()) {
return font.GetBaselineShift();
}
@@ -491,12 +487,12 @@ FX_FLOAT CXFA_TextParser::GetBaseline(CXFA_TextProvider* pTextProvider,
}
FX_FLOAT CXFA_TextParser::GetLineHeight(CXFA_TextProvider* pTextProvider,
- IFDE_CSSComputedStyle* pStyle,
+ CFDE_CSSComputedStyle* pStyle,
bool bFirst,
FX_FLOAT fVerScale) const {
FX_FLOAT fLineHeight = 0;
if (pStyle)
- fLineHeight = pStyle->GetParagraphStyles()->GetLineHeight();
+ fLineHeight = pStyle->GetLineHeight();
else if (CXFA_Para para = pTextProvider->GetParaNode())
fLineHeight = para.GetLineHeight();
@@ -563,7 +559,7 @@ CXFA_TextParseContext* CXFA_TextParser::GetParseContextFromMap(
return it != m_mapXMLNodeToParseContext.end() ? it->second : nullptr;
}
-bool CXFA_TextParser::GetTabstops(IFDE_CSSComputedStyle* pStyle,
+bool CXFA_TextParser::GetTabstops(CFDE_CSSComputedStyle* pStyle,
CXFA_TextTabstopsContext* pTabstopContext) {
if (!pStyle || !pTabstopContext)
return false;