summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authordan sinclair <dsinclair@chromium.org>2018-04-13 00:22:55 +0000
committerChromium commit bot <commit-bot@chromium.org>2018-04-13 00:22:55 +0000
commit7afdad5ab7a1bd54ddf6f2a823be30d4b8e39567 (patch)
treea594f1a42c742187d2312e0143f96548186ca33a
parentc9f8d5af69e3b0bb6c8e58e74b61c016b2d099a1 (diff)
downloadpdfium-7afdad5ab7a1bd54ddf6f2a823be30d4b8e39567.tar.xz
Make CFX_XMLInstruction a subclass of CFX_XMLNode
The CFX_XMLInstruction handles the <?blah?> 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 <dsinclair@chromium.org> Reviewed-by: Henrique Nakashima <hnakashima@chromium.org>
-rw-r--r--core/fxcrt/xml/cfx_xmlinstruction.cpp31
-rw-r--r--core/fxcrt/xml/cfx_xmlinstruction.h7
-rw-r--r--xfa/fxfa/parser/cxfa_document_parser.cpp8
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_XMLNode> CFX_XMLInstruction::Clone() {
- auto pClone = pdfium::MakeUnique<CFX_XMLInstruction>(GetName());
- pClone->SetAttributes(GetAttributes());
+ auto pClone = pdfium::MakeUnique<CFX_XMLInstruction>(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<CFX_SeekableStreamProxy>& pXMLStream) {
- if (GetName().CompareNoCase(L"xml") == 0) {
+ if (name_.CompareNoCase(L"xml") == 0) {
WideString ws = L"<?xml version=\"1.0\" encoding=\"";
uint16_t wCodePage = pXMLStream->GetCodePage();
if (wCodePage == FX_CODEPAGE_UTF16LE)
@@ -56,17 +58,12 @@ void CFX_XMLInstruction::Save(
}
pXMLStream->WriteString(
- WideString::Format(L"<?%ls", GetName().c_str()).AsStringView());
- for (auto it : GetAttributes()) {
- pXMLStream->WriteString(
- AttributeToString(it.first, it.second).AsStringView());
- }
+ WideString::Format(L"<?%ls", name_.c_str()).AsStringView());
for (const WideString& target : m_TargetData) {
- WideString ws = L" \"";
- ws += target;
- ws += L"\"";
- pXMLStream->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<CFX_XMLNode> Clone() override;
void Save(const RetainPtr<CFX_SeekableStreamProxy>& pXMLStream) override;
+ bool IsOriginalXFAVersion() const;
+ bool IsAcrobat() const;
+
const std::vector<WideString>& GetTargetData() const { return m_TargetData; }
void AppendData(const WideString& wsData);
- void RemoveData(int32_t index);
private:
+ WideString name_;
std::vector<WideString> 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<WideString>& 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);