summaryrefslogtreecommitdiff
path: root/core
diff options
context:
space:
mode:
Diffstat (limited to 'core')
-rw-r--r--core/fpdfdoc/cpdf_metadata.cpp8
-rw-r--r--core/fxcrt/xml/cfx_xmlattributenode.cpp34
-rw-r--r--core/fxcrt/xml/cfx_xmlattributenode.h44
-rw-r--r--core/fxcrt/xml/cfx_xmlelement.cpp85
-rw-r--r--core/fxcrt/xml/cfx_xmlelement.h22
-rw-r--r--core/fxcrt/xml/cfx_xmlinstruction.h2
-rw-r--r--core/fxcrt/xml/cfx_xmlnode.cpp10
-rw-r--r--core/fxcrt/xml/cfx_xmlnode.h1
-rw-r--r--core/fxcrt/xml/cfx_xmlparser.cpp4
9 files changed, 81 insertions, 129 deletions
diff --git a/core/fpdfdoc/cpdf_metadata.cpp b/core/fpdfdoc/cpdf_metadata.cpp
index 972569a25d..56f8c64c0e 100644
--- a/core/fpdfdoc/cpdf_metadata.cpp
+++ b/core/fpdfdoc/cpdf_metadata.cpp
@@ -16,12 +16,8 @@ namespace {
void CheckForSharedFormInternal(CFX_XMLElement* element,
std::vector<UnsupportedFeature>* unsupported) {
- for (const auto& pair : element->GetAttributes()) {
- if (pair.first != L"xmlns:adhocwf" ||
- pair.second != L"http://ns.adobe.com/AcrobatAdhocWorkflow/1.0/") {
- continue;
- }
-
+ WideString attr = element->GetAttribute(L"xmlns:adhocwf");
+ if (attr == L"http://ns.adobe.com/AcrobatAdhocWorkflow/1.0/") {
for (const auto* child = element->GetFirstChild(); child;
child = child->GetNextSibling()) {
if (child->GetType() != FX_XMLNODE_Element)
diff --git a/core/fxcrt/xml/cfx_xmlattributenode.cpp b/core/fxcrt/xml/cfx_xmlattributenode.cpp
deleted file mode 100644
index 6104747793..0000000000
--- a/core/fxcrt/xml/cfx_xmlattributenode.cpp
+++ /dev/null
@@ -1,34 +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 "core/fxcrt/xml/cfx_xmlattributenode.h"
-
-#include "core/fxcrt/fx_extension.h"
-
-CFX_XMLAttributeNode::CFX_XMLAttributeNode(const WideString& name)
- : CFX_XMLNode(), name_(name) {
- ASSERT(name_.GetLength() > 0);
-}
-
-CFX_XMLAttributeNode::~CFX_XMLAttributeNode() {}
-
-bool CFX_XMLAttributeNode::HasAttribute(const WideString& name) const {
- return attrs_.find(name) != attrs_.end();
-}
-
-WideString CFX_XMLAttributeNode::GetString(const WideString& name) const {
- auto it = attrs_.find(name);
- return it != attrs_.end() ? it->second : WideString();
-}
-
-void CFX_XMLAttributeNode::SetString(const WideString& name,
- const WideString& value) {
- attrs_[name] = value;
-}
-
-void CFX_XMLAttributeNode::RemoveAttribute(const WideString& name) {
- attrs_.erase(name);
-}
diff --git a/core/fxcrt/xml/cfx_xmlattributenode.h b/core/fxcrt/xml/cfx_xmlattributenode.h
deleted file mode 100644
index 1ac9b84db2..0000000000
--- a/core/fxcrt/xml/cfx_xmlattributenode.h
+++ /dev/null
@@ -1,44 +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 CORE_FXCRT_XML_CFX_XMLATTRIBUTENODE_H_
-#define CORE_FXCRT_XML_CFX_XMLATTRIBUTENODE_H_
-
-#include <map>
-#include <memory>
-
-#include "core/fxcrt/fx_string.h"
-#include "core/fxcrt/xml/cfx_xmlnode.h"
-
-class CFX_XMLAttributeNode : public CFX_XMLNode {
- public:
- explicit CFX_XMLAttributeNode(const WideString& name);
- ~CFX_XMLAttributeNode() override;
-
- // CFX_XMLNode
- FX_XMLNODETYPE GetType() const override = 0;
- std::unique_ptr<CFX_XMLNode> Clone() override = 0;
-
- WideString GetName() const { return name_; }
- const std::map<WideString, WideString>& GetAttributes() const {
- return attrs_;
- }
- void SetAttributes(const std::map<WideString, WideString>& attrs) {
- attrs_ = attrs;
- }
- bool HasAttribute(const WideString& name) const;
-
- void SetString(const WideString& name, const WideString& value);
- WideString GetString(const WideString& name) const;
-
- void RemoveAttribute(const WideString& name);
-
- private:
- WideString name_;
- std::map<WideString, WideString> attrs_;
-};
-
-#endif // CORE_FXCRT_XML_CFX_XMLATTRIBUTENODE_H_
diff --git a/core/fxcrt/xml/cfx_xmlelement.cpp b/core/fxcrt/xml/cfx_xmlelement.cpp
index 27d136305b..42588c6393 100644
--- a/core/fxcrt/xml/cfx_xmlelement.cpp
+++ b/core/fxcrt/xml/cfx_xmlelement.cpp
@@ -16,17 +16,19 @@
#include "third_party/base/stl_util.h"
CFX_XMLElement::CFX_XMLElement(const WideString& wsTag)
- : CFX_XMLAttributeNode(wsTag) {}
+ : CFX_XMLNode(), name_(wsTag) {
+ ASSERT(!name_.IsEmpty());
+}
-CFX_XMLElement::~CFX_XMLElement() {}
+CFX_XMLElement::~CFX_XMLElement() = default;
FX_XMLNODETYPE CFX_XMLElement::GetType() const {
return FX_XMLNODE_Element;
}
std::unique_ptr<CFX_XMLNode> CFX_XMLElement::Clone() {
- auto pClone = pdfium::MakeUnique<CFX_XMLElement>(GetName());
- pClone->SetAttributes(GetAttributes());
+ auto pClone = pdfium::MakeUnique<CFX_XMLElement>(name_);
+ pClone->attrs_ = attrs_;
WideString wsText;
for (CFX_XMLNode* pChild = GetFirstChild(); pChild;
@@ -39,15 +41,14 @@ std::unique_ptr<CFX_XMLNode> CFX_XMLElement::Clone() {
}
WideString CFX_XMLElement::GetLocalTagName() const {
- auto pos = GetName().Find(L':');
- return pos.has_value()
- ? GetName().Right(GetName().GetLength() - pos.value() - 1)
- : GetName();
+ auto pos = name_.Find(L':');
+ return pos.has_value() ? name_.Right(name_.GetLength() - pos.value() - 1)
+ : name_;
}
WideString CFX_XMLElement::GetNamespacePrefix() const {
- auto pos = GetName().Find(L':');
- return pos.has_value() ? GetName().Left(pos.value()) : WideString();
+ auto pos = name_.Find(L':');
+ return pos.has_value() ? name_.Left(pos.value()) : WideString();
}
WideString CFX_XMLElement::GetNamespaceURI() const {
@@ -68,7 +69,7 @@ WideString CFX_XMLElement::GetNamespaceURI() const {
pNode = pNode->GetParent();
continue;
}
- return pElement->GetString(wsAttri);
+ return pElement->GetAttribute(wsAttri);
}
return WideString();
}
@@ -94,30 +95,28 @@ void CFX_XMLElement::SetTextData(const WideString& wsText) {
void CFX_XMLElement::Save(
const RetainPtr<CFX_SeekableStreamProxy>& pXMLStream) {
- WideString ws(L"<");
- ws += GetName();
- pXMLStream->WriteString(ws.AsStringView());
+ pXMLStream->WriteString(L"<");
+ pXMLStream->WriteString(name_.AsStringView());
- for (auto it : GetAttributes()) {
+ for (auto it : attrs_) {
pXMLStream->WriteString(
AttributeToString(it.first, it.second).AsStringView());
}
- if (GetFirstChild()) {
- ws = L"\n>";
- pXMLStream->WriteString(ws.AsStringView());
+ if (!GetFirstChild()) {
+ pXMLStream->WriteString(L" />");
+ return;
+ }
- for (CFX_XMLNode* pChild = GetFirstChild(); pChild;
- pChild = pChild->GetNextSibling()) {
- pChild->Save(pXMLStream);
- }
- ws = L"</";
- ws += GetName();
- ws += L"\n>";
- } else {
- ws = L"\n/>";
+ pXMLStream->WriteString(L">");
+
+ for (CFX_XMLNode* pChild = GetFirstChild(); pChild;
+ pChild = pChild->GetNextSibling()) {
+ pChild->Save(pXMLStream);
}
- pXMLStream->WriteString(ws.AsStringView());
+ pXMLStream->WriteString(L"</");
+ pXMLStream->WriteString(name_.AsStringView());
+ pXMLStream->WriteString(L"\n>");
}
CFX_XMLElement* CFX_XMLElement::GetFirstChildNamed(
@@ -132,7 +131,7 @@ CFX_XMLElement* CFX_XMLElement::GetNthChildNamed(const WideStringView& name,
continue;
CFX_XMLElement* elem = static_cast<CFX_XMLElement*>(child);
- if (elem->GetName() != name)
+ if (elem->name_ != name)
continue;
if (idx == 0)
return elem;
@@ -141,3 +140,31 @@ CFX_XMLElement* CFX_XMLElement::GetNthChildNamed(const WideStringView& name,
}
return nullptr;
}
+
+bool CFX_XMLElement::HasAttribute(const WideString& name) const {
+ return attrs_.find(name) != attrs_.end();
+}
+
+WideString CFX_XMLElement::GetAttribute(const WideString& name) const {
+ auto it = attrs_.find(name);
+ return it != attrs_.end() ? it->second : L"";
+}
+
+void CFX_XMLElement::SetAttribute(const WideString& name,
+ const WideString& value) {
+ attrs_[name] = value;
+}
+
+void CFX_XMLElement::RemoveAttribute(const WideString& name) {
+ attrs_.erase(name);
+}
+
+WideString CFX_XMLElement::AttributeToString(const WideString& name,
+ const WideString& value) {
+ WideString ret = L" ";
+ ret += name;
+ ret += L"=\"";
+ ret += EncodeEntities(value);
+ ret += L"\"";
+ return ret;
+}
diff --git a/core/fxcrt/xml/cfx_xmlelement.h b/core/fxcrt/xml/cfx_xmlelement.h
index f713114eb7..f8533a1445 100644
--- a/core/fxcrt/xml/cfx_xmlelement.h
+++ b/core/fxcrt/xml/cfx_xmlelement.h
@@ -7,13 +7,14 @@
#ifndef CORE_FXCRT_XML_CFX_XMLELEMENT_H_
#define CORE_FXCRT_XML_CFX_XMLELEMENT_H_
+#include <map>
#include <memory>
#include <vector>
#include "core/fxcrt/fx_string.h"
-#include "core/fxcrt/xml/cfx_xmlattributenode.h"
+#include "core/fxcrt/xml/cfx_xmlnode.h"
-class CFX_XMLElement : public CFX_XMLAttributeNode {
+class CFX_XMLElement : public CFX_XMLNode {
public:
explicit CFX_XMLElement(const WideString& wsTag);
~CFX_XMLElement() override;
@@ -23,6 +24,17 @@ class CFX_XMLElement : public CFX_XMLAttributeNode {
std::unique_ptr<CFX_XMLNode> Clone() override;
void Save(const RetainPtr<CFX_SeekableStreamProxy>& pXMLStream) override;
+ WideString GetName() const { return name_; }
+
+ const std::map<WideString, WideString>& GetAttributes() const {
+ return attrs_;
+ }
+ bool HasAttribute(const WideString& name) const;
+ void SetAttribute(const WideString& name, const WideString& value);
+ WideString GetAttribute(const WideString& name) const;
+
+ void RemoveAttribute(const WideString& name);
+
CFX_XMLElement* GetFirstChildNamed(const WideStringView& name) const;
CFX_XMLElement* GetNthChildNamed(const WideStringView& name,
size_t idx) const;
@@ -33,6 +45,12 @@ class CFX_XMLElement : public CFX_XMLAttributeNode {
WideString GetTextData() const;
void SetTextData(const WideString& wsText);
+
+ private:
+ WideString AttributeToString(const WideString& name, const WideString& value);
+
+ WideString name_;
+ std::map<WideString, WideString> attrs_;
};
#endif // CORE_FXCRT_XML_CFX_XMLELEMENT_H_
diff --git a/core/fxcrt/xml/cfx_xmlinstruction.h b/core/fxcrt/xml/cfx_xmlinstruction.h
index cbdf9e2538..7cee1d4fc0 100644
--- a/core/fxcrt/xml/cfx_xmlinstruction.h
+++ b/core/fxcrt/xml/cfx_xmlinstruction.h
@@ -11,7 +11,7 @@
#include <vector>
#include "core/fxcrt/fx_string.h"
-#include "core/fxcrt/xml/cfx_xmlattributenode.h"
+#include "core/fxcrt/xml/cfx_xmlnode.h"
class CFX_XMLInstruction : public CFX_XMLNode {
public:
diff --git a/core/fxcrt/xml/cfx_xmlnode.cpp b/core/fxcrt/xml/cfx_xmlnode.cpp
index 5e787ed2b9..540b20e721 100644
--- a/core/fxcrt/xml/cfx_xmlnode.cpp
+++ b/core/fxcrt/xml/cfx_xmlnode.cpp
@@ -119,13 +119,3 @@ WideString CFX_XMLNode::EncodeEntities(const WideString& value) {
ret.Replace(L"\"", L"&quot;");
return ret;
}
-
-WideString CFX_XMLNode::AttributeToString(const WideString& name,
- const WideString& value) {
- WideString ret = L" ";
- ret += name;
- ret += L"=\"";
- ret += EncodeEntities(value);
- ret += L"\"";
- return ret;
-}
diff --git a/core/fxcrt/xml/cfx_xmlnode.h b/core/fxcrt/xml/cfx_xmlnode.h
index 76625e3ca2..7278d2b4ca 100644
--- a/core/fxcrt/xml/cfx_xmlnode.h
+++ b/core/fxcrt/xml/cfx_xmlnode.h
@@ -45,7 +45,6 @@ class CFX_XMLNode {
void DeleteChildren();
protected:
- WideString AttributeToString(const WideString& name, const WideString& value);
WideString EncodeEntities(const WideString& value);
private:
diff --git a/core/fxcrt/xml/cfx_xmlparser.cpp b/core/fxcrt/xml/cfx_xmlparser.cpp
index da287cf9cc..8292b33206 100644
--- a/core/fxcrt/xml/cfx_xmlparser.cpp
+++ b/core/fxcrt/xml/cfx_xmlparser.cpp
@@ -189,8 +189,8 @@ bool CFX_XMLParser::Parse() {
break;
case FX_XmlSyntaxResult::AttriValue:
if (m_pChild && m_pChild->GetType() == FX_XMLNODE_Element) {
- static_cast<CFX_XMLElement*>(m_pChild)->SetString(m_ws1,
- GetAttributeName());
+ static_cast<CFX_XMLElement*>(m_pChild)->SetAttribute(
+ m_ws1, GetAttributeName());
}
m_ws1.clear();
break;