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; };