From 7afdad5ab7a1bd54ddf6f2a823be30d4b8e39567 Mon Sep 17 00:00:00 2001 From: dan sinclair Date: Fri, 13 Apr 2018 00:22:55 +0000 Subject: Make CFX_XMLInstruction a subclass of CFX_XMLNode The CFX_XMLInstruction handles the blocks at the top of an XML file. It was inheriting from CFX_XMLAttributeNode in order to store the tag name. This CL moves the tag name into CFX_XMLInstruction and subclasses from CFX_XMLNode. Change-Id: I8f7ff0dde19ed43b46d095b0d45df4bf06875af5 Reviewed-on: https://pdfium-review.googlesource.com/30490 Commit-Queue: dsinclair Reviewed-by: Henrique Nakashima --- core/fxcrt/xml/cfx_xmlinstruction.cpp | 31 ++++++++++++++----------------- core/fxcrt/xml/cfx_xmlinstruction.h | 7 +++++-- xfa/fxfa/parser/cxfa_document_parser.cpp | 8 +++++--- 3 files changed, 24 insertions(+), 22 deletions(-) diff --git a/core/fxcrt/xml/cfx_xmlinstruction.cpp b/core/fxcrt/xml/cfx_xmlinstruction.cpp index 35b68e4d7d..f3185fbf5b 100644 --- a/core/fxcrt/xml/cfx_xmlinstruction.cpp +++ b/core/fxcrt/xml/cfx_xmlinstruction.cpp @@ -14,17 +14,16 @@ #include "third_party/base/stl_util.h" CFX_XMLInstruction::CFX_XMLInstruction(const WideString& wsTarget) - : CFX_XMLAttributeNode(wsTarget) {} + : CFX_XMLNode(), name_(wsTarget) {} -CFX_XMLInstruction::~CFX_XMLInstruction() {} +CFX_XMLInstruction::~CFX_XMLInstruction() = default; FX_XMLNODETYPE CFX_XMLInstruction::GetType() const { return FX_XMLNODE_Instruction; } std::unique_ptr CFX_XMLInstruction::Clone() { - auto pClone = pdfium::MakeUnique(GetName()); - pClone->SetAttributes(GetAttributes()); + auto pClone = pdfium::MakeUnique(name_); pClone->m_TargetData = m_TargetData; return std::move(pClone); } @@ -33,14 +32,17 @@ void CFX_XMLInstruction::AppendData(const WideString& wsData) { m_TargetData.push_back(wsData); } -void CFX_XMLInstruction::RemoveData(int32_t index) { - if (pdfium::IndexInBounds(m_TargetData, index)) - m_TargetData.erase(m_TargetData.begin() + index); +bool CFX_XMLInstruction::IsOriginalXFAVersion() const { + return name_ == L"originalXFAVersion"; +} + +bool CFX_XMLInstruction::IsAcrobat() const { + return name_ == L"acrobat"; } void CFX_XMLInstruction::Save( const RetainPtr& pXMLStream) { - if (GetName().CompareNoCase(L"xml") == 0) { + if (name_.CompareNoCase(L"xml") == 0) { WideString ws = L"GetCodePage(); if (wCodePage == FX_CODEPAGE_UTF16LE) @@ -56,17 +58,12 @@ void CFX_XMLInstruction::Save( } pXMLStream->WriteString( - WideString::Format(L"WriteString( - AttributeToString(it.first, it.second).AsStringView()); - } + WideString::Format(L"WriteString(ws.AsStringView()); + pXMLStream->WriteString(L"\""); + pXMLStream->WriteString(target.AsStringView()); + pXMLStream->WriteString(L"\""); } pXMLStream->WriteString(WideStringView(L"?>")); diff --git a/core/fxcrt/xml/cfx_xmlinstruction.h b/core/fxcrt/xml/cfx_xmlinstruction.h index 415a86a379..cbdf9e2538 100644 --- a/core/fxcrt/xml/cfx_xmlinstruction.h +++ b/core/fxcrt/xml/cfx_xmlinstruction.h @@ -13,7 +13,7 @@ #include "core/fxcrt/fx_string.h" #include "core/fxcrt/xml/cfx_xmlattributenode.h" -class CFX_XMLInstruction : public CFX_XMLAttributeNode { +class CFX_XMLInstruction : public CFX_XMLNode { public: explicit CFX_XMLInstruction(const WideString& wsTarget); ~CFX_XMLInstruction() override; @@ -23,11 +23,14 @@ class CFX_XMLInstruction : public CFX_XMLAttributeNode { std::unique_ptr Clone() override; void Save(const RetainPtr& pXMLStream) override; + bool IsOriginalXFAVersion() const; + bool IsAcrobat() const; + const std::vector& GetTargetData() const { return m_TargetData; } void AppendData(const WideString& wsData); - void RemoveData(int32_t index); private: + WideString name_; std::vector m_TargetData; }; diff --git a/xfa/fxfa/parser/cxfa_document_parser.cpp b/xfa/fxfa/parser/cxfa_document_parser.cpp index 97f34b6472..98ac38065d 100644 --- a/xfa/fxfa/parser/cxfa_document_parser.cpp +++ b/xfa/fxfa/parser/cxfa_document_parser.cpp @@ -1141,16 +1141,18 @@ void CXFA_DocumentParser::ParseDataValue(CXFA_Node* pXFANode, void CXFA_DocumentParser::ParseInstruction(CXFA_Node* pXFANode, CFX_XMLInstruction* pXMLInstruction, XFA_PacketType ePacketID) { - WideString wsTargetName = pXMLInstruction->GetName(); const std::vector& target_data = pXMLInstruction->GetTargetData(); - if (wsTargetName == L"originalXFAVersion") { + if (pXMLInstruction->IsOriginalXFAVersion()) { if (target_data.size() > 1 && (pXFANode->GetDocument()->RecognizeXFAVersionNumber(target_data[0]) != XFA_VERSION_UNKNOWN) && target_data[1] == L"v2.7-scripting:1") { pXFANode->GetDocument()->SetFlag(XFA_DOCFLAG_Scripting, true); } - } else if (wsTargetName == L"acrobat") { + return; + } + + if (pXMLInstruction->IsAcrobat()) { if (target_data.size() > 1 && target_data[0] == L"JavaScript" && target_data[1] == L"strictScoping") { pXFANode->GetDocument()->SetFlag(XFA_DOCFLAG_StrictScoping, true); -- cgit v1.2.3