Nest CXFA_TextParseContext as CXFA_TextParser::Context
This avoids writing make_unique<CXFA_TextParseContext>, as eventually
make_unique<CXFA_*> should be a code smell with classes thusly named
being garbage collected.
-- encapsulate members while at it.
Change-Id: I3ac38f030a16ae3a2202cb6af28b931ebf98b87c
Reviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/73671
Commit-Queue: Tom Sepez <tsepez@chromium.org>
Reviewed-by: Lei Zhang <thestig@chromium.org>
diff --git a/xfa/fxfa/BUILD.gn b/xfa/fxfa/BUILD.gn
index bb96f3b..fdb604f 100644
--- a/xfa/fxfa/BUILD.gn
+++ b/xfa/fxfa/BUILD.gn
@@ -75,8 +75,6 @@
"cxfa_readynodeiterator.h",
"cxfa_textlayout.cpp",
"cxfa_textlayout.h",
- "cxfa_textparsecontext.cpp",
- "cxfa_textparsecontext.h",
"cxfa_textparser.cpp",
"cxfa_textparser.h",
"cxfa_textprovider.cpp",
diff --git a/xfa/fxfa/cxfa_textlayout.cpp b/xfa/fxfa/cxfa_textlayout.cpp
index ea97aa8..6299497 100644
--- a/xfa/fxfa/cxfa_textlayout.cpp
+++ b/xfa/fxfa/cxfa_textlayout.cpp
@@ -27,7 +27,6 @@
#include "xfa/fgas/layout/cfx_rtfbreak.h"
#include "xfa/fgas/layout/cfx_textuserdata.h"
#include "xfa/fxfa/cxfa_ffdoc.h"
-#include "xfa/fxfa/cxfa_textparsecontext.h"
#include "xfa/fxfa/cxfa_textparser.h"
#include "xfa/fxfa/cxfa_textprovider.h"
#include "xfa/fxfa/cxfa_texttabstopscontext.h"
@@ -737,7 +736,7 @@
if (!pXMLNode)
return false;
- CXFA_TextParseContext* pContext =
+ CXFA_TextParser::Context* pContext =
m_pTextParser->GetParseContextFromMap(pXMLNode);
CFX_CSSDisplay eDisplay = CFX_CSSDisplay::None;
bool bContentNode = false;
diff --git a/xfa/fxfa/cxfa_textparsecontext.cpp b/xfa/fxfa/cxfa_textparsecontext.cpp
deleted file mode 100644
index b21173a..0000000
--- a/xfa/fxfa/cxfa_textparsecontext.cpp
+++ /dev/null
@@ -1,15 +0,0 @@
-// Copyright 2017 PDFium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
-
-#include "xfa/fxfa/cxfa_textparsecontext.h"
-
-#include "core/fxcrt/css/cfx_csscomputedstyle.h"
-#include "core/fxcrt/css/cfx_cssdeclaration.h"
-#include "core/fxcrt/css/cfx_cssstyleselector.h"
-
-CXFA_TextParseContext::CXFA_TextParseContext() = default;
-
-CXFA_TextParseContext::~CXFA_TextParseContext() = default;
diff --git a/xfa/fxfa/cxfa_textparsecontext.h b/xfa/fxfa/cxfa_textparsecontext.h
deleted file mode 100644
index 985ba4e..0000000
--- a/xfa/fxfa/cxfa_textparsecontext.h
+++ /dev/null
@@ -1,38 +0,0 @@
-// Copyright 2017 PDFium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
-
-#ifndef XFA_FXFA_CXFA_TEXTPARSECONTEXT_H_
-#define XFA_FXFA_CXFA_TEXTPARSECONTEXT_H_
-
-#include <utility>
-#include <vector>
-
-#include "core/fxcrt/css/cfx_css.h"
-#include "core/fxcrt/css/cfx_cssdeclaration.h"
-
-class CFX_CSSComputedStyle;
-
-class CXFA_TextParseContext {
- public:
- CXFA_TextParseContext();
- ~CXFA_TextParseContext();
-
- void SetDisplay(CFX_CSSDisplay eDisplay) { m_eDisplay = eDisplay; }
- CFX_CSSDisplay GetDisplay() const { return m_eDisplay; }
-
- void SetDecls(std::vector<const CFX_CSSDeclaration*>&& decl) {
- decls_ = std::move(decl);
- }
- const std::vector<const CFX_CSSDeclaration*>& GetDecls() { return decls_; }
-
- RetainPtr<const CFX_CSSComputedStyle> m_pParentStyle;
-
- private:
- std::vector<const CFX_CSSDeclaration*> decls_;
- CFX_CSSDisplay m_eDisplay = CFX_CSSDisplay::None;
-};
-
-#endif // XFA_FXFA_CXFA_TEXTPARSECONTEXT_H_
diff --git a/xfa/fxfa/cxfa_textparser.cpp b/xfa/fxfa/cxfa_textparser.cpp
index d9198f1..0128b30 100644
--- a/xfa/fxfa/cxfa_textparser.cpp
+++ b/xfa/fxfa/cxfa_textparser.cpp
@@ -11,6 +11,7 @@
#include "core/fxcrt/css/cfx_css.h"
#include "core/fxcrt/css/cfx_csscomputedstyle.h"
+#include "core/fxcrt/css/cfx_cssdeclaration.h"
#include "core/fxcrt/css/cfx_cssstyleselector.h"
#include "core/fxcrt/css/cfx_cssstylesheet.h"
#include "core/fxcrt/fx_codepage.h"
@@ -22,7 +23,6 @@
#include "xfa/fxfa/cxfa_ffapp.h"
#include "xfa/fxfa/cxfa_ffdoc.h"
#include "xfa/fxfa/cxfa_fontmgr.h"
-#include "xfa/fxfa/cxfa_textparsecontext.h"
#include "xfa/fxfa/cxfa_textprovider.h"
#include "xfa/fxfa/cxfa_texttabstopscontext.h"
#include "xfa/fxfa/parser/cxfa_font.h"
@@ -199,11 +199,11 @@
if (it == m_mapXMLNodeToParseContext.end())
return nullptr;
- CXFA_TextParseContext* pContext = it->second.get();
+ Context* pContext = it->second.get();
if (!pContext)
return nullptr;
- pContext->m_pParentStyle.Reset(pParentStyle);
+ pContext->SetParentStyle(pParentStyle);
auto tagProvider = ParseTagInfo(pXMLNode);
if (tagProvider->m_bContent)
@@ -239,7 +239,7 @@
RetainPtr<CFX_CSSComputedStyle> pNewStyle;
if (!(tagProvider->GetTagName().EqualsASCII("body") &&
tagProvider->GetTagName().EqualsASCII("html"))) {
- auto pTextContext = std::make_unique<CXFA_TextParseContext>();
+ auto pTextContext = std::make_unique<Context>();
CFX_CSSDisplay eDisplay = CFX_CSSDisplay::Inline;
if (!tagProvider->m_bContent) {
auto declArray =
@@ -384,9 +384,9 @@
while (pXMLNode) {
auto it = m_mapXMLNodeToParseContext.find(pXMLNode);
if (it != m_mapXMLNodeToParseContext.end()) {
- CXFA_TextParseContext* pContext = it->second.get();
- if (pContext && pContext->m_pParentStyle &&
- pContext->m_pParentStyle->GetCustomStyle(
+ Context* pContext = it->second.get();
+ if (pContext && pContext->GetParentStyle() &&
+ pContext->GetParentStyle()->GetCustomStyle(
L"xfa-font-horizontal-scale", &wsValue)) {
return wsValue.GetInteger();
}
@@ -527,7 +527,7 @@
return pTextProvider->GetEmbeddedObj(wsAttr);
}
-CXFA_TextParseContext* CXFA_TextParser::GetParseContextFromMap(
+CXFA_TextParser::Context* CXFA_TextParser::GetParseContextFromMap(
const CFX_XMLNode* pXMLNode) {
auto it = m_mapXMLNodeToParseContext.find(pXMLNode);
return it != m_mapXMLNodeToParseContext.end() ? it->second.get() : nullptr;
@@ -625,3 +625,17 @@
CXFA_TextParser::TagProvider::TagProvider() = default;
CXFA_TextParser::TagProvider::~TagProvider() = default;
+
+CXFA_TextParser::Context::Context() = default;
+
+CXFA_TextParser::Context::~Context() = default;
+
+void CXFA_TextParser::Context::SetParentStyle(
+ const CFX_CSSComputedStyle* style) {
+ m_pParentStyle.Reset(style);
+}
+
+void CXFA_TextParser::Context::SetDecls(
+ std::vector<const CFX_CSSDeclaration*>&& decl) {
+ decls_ = std::move(decl);
+}
diff --git a/xfa/fxfa/cxfa_textparser.h b/xfa/fxfa/cxfa_textparser.h
index c81bf6d..1a2f9fc 100644
--- a/xfa/fxfa/cxfa_textparser.h
+++ b/xfa/fxfa/cxfa_textparser.h
@@ -9,7 +9,10 @@
#include <map>
#include <memory>
+#include <vector>
+#include "core/fxcrt/css/cfx_css.h"
+#include "core/fxcrt/css/cfx_cssdeclaration.h"
#include "core/fxcrt/fx_string.h"
#include "core/fxcrt/fx_system.h"
#include "core/fxcrt/retain_ptr.h"
@@ -25,12 +28,35 @@
class CFX_CSSStyleSheet;
class CFX_XMLNode;
class CXFA_FFDoc;
-class CXFA_TextParseContext;
class CXFA_TextProvider;
class CXFA_TextTabstopsContext;
class CXFA_TextParser : public cppgc::GarbageCollected<CXFA_TextParser> {
public:
+ class Context {
+ public:
+ Context();
+ ~Context();
+
+ void SetParentStyle(const CFX_CSSComputedStyle* style);
+ const CFX_CSSComputedStyle* GetParentStyle() const {
+ return m_pParentStyle.Get();
+ }
+
+ void SetDisplay(CFX_CSSDisplay eDisplay) { m_eDisplay = eDisplay; }
+ CFX_CSSDisplay GetDisplay() const { return m_eDisplay; }
+
+ void SetDecls(std::vector<const CFX_CSSDeclaration*>&& decl);
+ const std::vector<const CFX_CSSDeclaration*>& GetDecls() const {
+ return decls_;
+ }
+
+ private:
+ RetainPtr<const CFX_CSSComputedStyle> m_pParentStyle;
+ CFX_CSSDisplay m_eDisplay = CFX_CSSDisplay::None;
+ std::vector<const CFX_CSSDeclaration*> decls_;
+ };
+
CONSTRUCT_VIA_MAKE_GARBAGE_COLLECTED;
virtual ~CXFA_TextParser();
@@ -85,7 +111,7 @@
Optional<WideString> GetEmbeddedObj(const CXFA_TextProvider* pTextProvider,
const CFX_XMLNode* pXMLNode);
- CXFA_TextParseContext* GetParseContextFromMap(const CFX_XMLNode* pXMLNode);
+ Context* GetParseContextFromMap(const CFX_XMLNode* pXMLNode);
protected:
CXFA_TextParser();
@@ -130,7 +156,7 @@
bool m_bParsed = false;
bool m_cssInitialized = false;
std::unique_ptr<CFX_CSSStyleSelector> m_pSelector;
- std::map<const CFX_XMLNode*, std::unique_ptr<CXFA_TextParseContext>>
+ std::map<const CFX_XMLNode*, std::unique_ptr<Context>>
m_mapXMLNodeToParseContext;
};