summaryrefslogtreecommitdiff
path: root/core
diff options
context:
space:
mode:
Diffstat (limited to 'core')
-rw-r--r--core/fxcrt/xml/cfx_xmlchardata.h1
-rw-r--r--core/fxcrt/xml/cfx_xmldoc.cpp2
-rw-r--r--core/fxcrt/xml/cfx_xmlelement.cpp2
-rw-r--r--core/fxcrt/xml/cfx_xmlnode.cpp247
-rw-r--r--core/fxcrt/xml/cfx_xmlnode.h21
-rw-r--r--core/fxcrt/xml/cfx_xmlparser.cpp8
6 files changed, 25 insertions, 256 deletions
diff --git a/core/fxcrt/xml/cfx_xmlchardata.h b/core/fxcrt/xml/cfx_xmlchardata.h
index 9a4710fa51..b7e691495f 100644
--- a/core/fxcrt/xml/cfx_xmlchardata.h
+++ b/core/fxcrt/xml/cfx_xmlchardata.h
@@ -17,6 +17,7 @@ class CFX_XMLCharData : public CFX_XMLText {
explicit CFX_XMLCharData(const WideString& wsCData);
~CFX_XMLCharData() override;
+ // CFX_XMLNode
FX_XMLNODETYPE GetType() const override;
std::unique_ptr<CFX_XMLNode> Clone() override;
};
diff --git a/core/fxcrt/xml/cfx_xmldoc.cpp b/core/fxcrt/xml/cfx_xmldoc.cpp
index 36c3606017..1c3785d313 100644
--- a/core/fxcrt/xml/cfx_xmldoc.cpp
+++ b/core/fxcrt/xml/cfx_xmldoc.cpp
@@ -20,7 +20,7 @@
CFX_XMLDoc::CFX_XMLDoc()
: m_iStatus(0), m_pRoot(pdfium::MakeUnique<CFX_XMLNode>()) {
- m_pRoot->InsertChildNode(new CFX_XMLInstruction(L"xml"));
+ m_pRoot->AppendChild(new CFX_XMLInstruction(L"xml"));
}
CFX_XMLDoc::~CFX_XMLDoc() {}
diff --git a/core/fxcrt/xml/cfx_xmlelement.cpp b/core/fxcrt/xml/cfx_xmlelement.cpp
index 1317e9a72b..bba6fe6187 100644
--- a/core/fxcrt/xml/cfx_xmlelement.cpp
+++ b/core/fxcrt/xml/cfx_xmlelement.cpp
@@ -99,5 +99,5 @@ WideString CFX_XMLElement::GetTextData() const {
void CFX_XMLElement::SetTextData(const WideString& wsText) {
if (wsText.GetLength() < 1)
return;
- InsertChildNode(new CFX_XMLText(wsText));
+ AppendChild(new CFX_XMLText(wsText));
}
diff --git a/core/fxcrt/xml/cfx_xmlnode.cpp b/core/fxcrt/xml/cfx_xmlnode.cpp
index 41889e2d1c..19f397deb2 100644
--- a/core/fxcrt/xml/cfx_xmlnode.cpp
+++ b/core/fxcrt/xml/cfx_xmlnode.cpp
@@ -39,134 +39,51 @@ void CFX_XMLNode::DeleteChildren() {
m_pChild = nullptr;
}
-int32_t CFX_XMLNode::CountChildNodes() const {
- int32_t iCount = 0;
- CFX_XMLNode* pChild = m_pChild;
- while (pChild) {
- iCount++;
- pChild = pChild->m_pNext;
- }
- return iCount;
-}
-
-CFX_XMLNode* CFX_XMLNode::GetChildNode(int32_t index) const {
- CFX_XMLNode* pChild = m_pChild;
- while (pChild) {
- if (index == 0) {
- return pChild;
- }
- index--;
- pChild = pChild->m_pNext;
- }
- return nullptr;
-}
-
-int32_t CFX_XMLNode::GetChildNodeIndex(CFX_XMLNode* pNode) const {
- int32_t index = 0;
- CFX_XMLNode* pChild = m_pChild;
- while (pChild) {
- if (pChild == pNode) {
- return index;
- }
- index++;
- pChild = pChild->m_pNext;
- }
- return -1;
+void CFX_XMLNode::AppendChild(CFX_XMLNode* pNode) {
+ InsertChildNode(pNode, -1);
}
-CFX_XMLNode* CFX_XMLNode::GetPath(const wchar_t* pPath,
- int32_t iLength,
- bool bQualifiedName) const {
- ASSERT(pPath);
- if (iLength < 0) {
- iLength = wcslen(pPath);
- }
- if (iLength == 0) {
- return nullptr;
- }
- WideString csPath;
- const wchar_t* pStart = pPath;
- const wchar_t* pEnd = pPath + iLength;
- wchar_t ch;
- while (pStart < pEnd) {
- ch = *pStart++;
- if (ch == L'/')
- break;
- csPath += ch;
- }
- iLength -= pStart - pPath;
- CFX_XMLNode* pFind = nullptr;
- if (csPath.GetLength() < 1) {
- pFind = GetNodeItem(CFX_XMLNode::Root);
- } else if (csPath.Compare(L"..") == 0) {
- pFind = m_pParent;
- } else if (csPath.Compare(L".") == 0) {
- pFind = (CFX_XMLNode*)this;
- } else {
- WideString wsTag;
- CFX_XMLNode* pNode = m_pChild;
- while (pNode) {
- if (pNode->GetType() == FX_XMLNODE_Element) {
- if (bQualifiedName)
- wsTag = static_cast<CFX_XMLElement*>(pNode)->GetName();
- else
- wsTag = static_cast<CFX_XMLElement*>(pNode)->GetLocalTagName();
-
- if (wsTag.Compare(csPath) == 0) {
- if (iLength < 1)
- pFind = pNode;
- else
- pFind = pNode->GetPath(pStart, iLength, bQualifiedName);
-
- if (pFind)
- return pFind;
- }
- }
- pNode = pNode->m_pNext;
- }
- }
- if (!pFind || iLength < 1)
- return pFind;
- return pFind->GetPath(pStart, iLength, bQualifiedName);
-}
+void CFX_XMLNode::InsertChildNode(CFX_XMLNode* pNode, int32_t index) {
+ ASSERT(!pNode->m_pParent);
-int32_t CFX_XMLNode::InsertChildNode(CFX_XMLNode* pNode, int32_t index) {
pNode->m_pParent = this;
if (!m_pChild) {
m_pChild = pNode;
pNode->m_pPrior = nullptr;
pNode->m_pNext = nullptr;
- return 0;
+ return;
}
if (index == 0) {
pNode->m_pNext = m_pChild;
pNode->m_pPrior = nullptr;
m_pChild->m_pPrior = pNode;
m_pChild = pNode;
- return 0;
+ return;
}
+
int32_t iCount = 0;
CFX_XMLNode* pFind = m_pChild;
- while (++iCount != index && pFind->m_pNext) {
+ while (++iCount != index && pFind->m_pNext)
pFind = pFind->m_pNext;
- }
+
pNode->m_pPrior = pFind;
pNode->m_pNext = pFind->m_pNext;
if (pFind->m_pNext)
pFind->m_pNext->m_pPrior = pNode;
pFind->m_pNext = pNode;
- return iCount;
}
void CFX_XMLNode::RemoveChildNode(CFX_XMLNode* pNode) {
ASSERT(m_pChild && pNode);
- if (m_pChild == pNode) {
+
+ if (m_pChild == pNode)
m_pChild = pNode->m_pNext;
- } else {
+ else
pNode->m_pPrior->m_pNext = pNode->m_pNext;
- }
+
if (pNode->m_pNext)
pNode->m_pNext->m_pPrior = pNode->m_pPrior;
+
pNode->m_pParent = nullptr;
pNode->m_pNext = nullptr;
pNode->m_pPrior = nullptr;
@@ -176,153 +93,21 @@ CFX_XMLNode* CFX_XMLNode::GetNodeItem(CFX_XMLNode::NodeItem eItem) const {
switch (eItem) {
case CFX_XMLNode::Root: {
CFX_XMLNode* pParent = (CFX_XMLNode*)this;
- while (pParent->m_pParent) {
+ while (pParent->m_pParent)
pParent = pParent->m_pParent;
- }
+
return pParent;
}
case CFX_XMLNode::Parent:
return m_pParent;
- case CFX_XMLNode::FirstSibling: {
- CFX_XMLNode* pItem = (CFX_XMLNode*)this;
- while (pItem->m_pPrior) {
- pItem = pItem->m_pPrior;
- }
- return pItem == (CFX_XMLNode*)this ? nullptr : pItem;
- }
- case CFX_XMLNode::PriorSibling:
- return m_pPrior;
case CFX_XMLNode::NextSibling:
return m_pNext;
- case CFX_XMLNode::LastSibling: {
- CFX_XMLNode* pItem = (CFX_XMLNode*)this;
- while (pItem->m_pNext)
- pItem = pItem->m_pNext;
- return pItem == (CFX_XMLNode*)this ? nullptr : pItem;
- }
- case CFX_XMLNode::FirstNeighbor: {
- CFX_XMLNode* pParent = (CFX_XMLNode*)this;
- while (pParent->m_pParent)
- pParent = pParent->m_pParent;
- return pParent == (CFX_XMLNode*)this ? nullptr : pParent;
- }
- case CFX_XMLNode::PriorNeighbor: {
- if (!m_pPrior)
- return m_pParent;
-
- CFX_XMLNode* pItem = m_pPrior;
- while (pItem->m_pChild) {
- pItem = pItem->m_pChild;
- while (pItem->m_pNext)
- pItem = pItem->m_pNext;
- }
- return pItem;
- }
- case CFX_XMLNode::NextNeighbor: {
- if (m_pChild)
- return m_pChild;
- if (m_pNext)
- return m_pNext;
- CFX_XMLNode* pItem = m_pParent;
- while (pItem) {
- if (pItem->m_pNext)
- return pItem->m_pNext;
- pItem = pItem->m_pParent;
- }
- return nullptr;
- }
- case CFX_XMLNode::LastNeighbor: {
- CFX_XMLNode* pItem = (CFX_XMLNode*)this;
- while (pItem->m_pParent) {
- pItem = pItem->m_pParent;
- }
- while (true) {
- while (pItem->m_pNext)
- pItem = pItem->m_pNext;
- if (!pItem->m_pChild)
- break;
- pItem = pItem->m_pChild;
- }
- return pItem == (CFX_XMLNode*)this ? nullptr : pItem;
- }
case CFX_XMLNode::FirstChild:
return m_pChild;
- case CFX_XMLNode::LastChild: {
- if (!m_pChild)
- return nullptr;
-
- CFX_XMLNode* pChild = m_pChild;
- while (pChild->m_pNext)
- pChild = pChild->m_pNext;
- return pChild;
- }
- default:
- break;
}
return nullptr;
}
-int32_t CFX_XMLNode::GetNodeLevel() const {
- int32_t iLevel = 0;
- const CFX_XMLNode* pItem = m_pParent;
- while (pItem) {
- iLevel++;
- pItem = pItem->m_pParent;
- }
- return iLevel;
-}
-
-bool CFX_XMLNode::InsertNodeItem(CFX_XMLNode::NodeItem eItem,
- CFX_XMLNode* pNode) {
- switch (eItem) {
- case CFX_XMLNode::NextSibling: {
- pNode->m_pParent = m_pParent;
- pNode->m_pNext = m_pNext;
- pNode->m_pPrior = this;
- if (m_pNext) {
- m_pNext->m_pPrior = pNode;
- }
- m_pNext = pNode;
- return true;
- }
- case CFX_XMLNode::PriorSibling: {
- pNode->m_pParent = m_pParent;
- pNode->m_pNext = this;
- pNode->m_pPrior = m_pPrior;
- if (m_pPrior) {
- m_pPrior->m_pNext = pNode;
- } else if (m_pParent) {
- m_pParent->m_pChild = pNode;
- }
- m_pPrior = pNode;
- return true;
- }
- default:
- return false;
- }
-}
-
-CFX_XMLNode* CFX_XMLNode::RemoveNodeItem(CFX_XMLNode::NodeItem eItem) {
- CFX_XMLNode* pNode = nullptr;
- switch (eItem) {
- case CFX_XMLNode::NextSibling:
- if (m_pNext) {
- pNode = m_pNext;
- m_pNext = pNode->m_pNext;
- if (m_pNext) {
- m_pNext->m_pPrior = this;
- }
- pNode->m_pParent = nullptr;
- pNode->m_pNext = nullptr;
- pNode->m_pPrior = nullptr;
- }
- break;
- default:
- break;
- }
- return pNode;
-}
-
std::unique_ptr<CFX_XMLNode> CFX_XMLNode::Clone() {
return nullptr;
}
diff --git a/core/fxcrt/xml/cfx_xmlnode.h b/core/fxcrt/xml/cfx_xmlnode.h
index 278b3bf15a..dc3152f19a 100644
--- a/core/fxcrt/xml/cfx_xmlnode.h
+++ b/core/fxcrt/xml/cfx_xmlnode.h
@@ -30,16 +30,8 @@ class CFX_XMLNode {
enum NodeItem {
Root = 0,
Parent,
- FirstSibling,
- PriorSibling,
NextSibling,
- LastSibling,
- FirstNeighbor,
- PriorNeighbor,
- NextNeighbor,
- LastNeighbor,
FirstChild,
- LastChild
};
CFX_XMLNode();
@@ -48,21 +40,12 @@ class CFX_XMLNode {
virtual FX_XMLNODETYPE GetType() const;
virtual std::unique_ptr<CFX_XMLNode> Clone();
- int32_t CountChildNodes() const;
- CFX_XMLNode* GetChildNode(int32_t index) const;
- int32_t GetChildNodeIndex(CFX_XMLNode* pNode) const;
- int32_t InsertChildNode(CFX_XMLNode* pNode, int32_t index = -1);
+ void AppendChild(CFX_XMLNode* pNode);
+ void InsertChildNode(CFX_XMLNode* pNode, int32_t index);
void RemoveChildNode(CFX_XMLNode* pNode);
void DeleteChildren();
- CFX_XMLNode* GetPath(const wchar_t* pPath,
- int32_t iLength = -1,
- bool bQualifiedName = true) const;
-
- int32_t GetNodeLevel() const;
CFX_XMLNode* GetNodeItem(CFX_XMLNode::NodeItem eItem) const;
- bool InsertNodeItem(CFX_XMLNode::NodeItem eItem, CFX_XMLNode* pNode);
- CFX_XMLNode* RemoveNodeItem(CFX_XMLNode::NodeItem eItem);
void SaveXMLNode(const RetainPtr<CFX_SeekableStreamProxy>& pXMLStream);
diff --git a/core/fxcrt/xml/cfx_xmlparser.cpp b/core/fxcrt/xml/cfx_xmlparser.cpp
index 0f08b06255..c81c4082eb 100644
--- a/core/fxcrt/xml/cfx_xmlparser.cpp
+++ b/core/fxcrt/xml/cfx_xmlparser.cpp
@@ -87,7 +87,7 @@ int32_t CFX_XMLParser::DoParser() {
m_ws1 = m_pParser->GetTargetName();
if (m_ws1 == L"originalXFAVersion" || m_ws1 == L"acrobat") {
m_pChild = new CFX_XMLInstruction(m_ws1);
- m_pParent->InsertChildNode(m_pChild);
+ m_pParent->AppendChild(m_pChild);
} else {
m_pChild = nullptr;
}
@@ -96,7 +96,7 @@ int32_t CFX_XMLParser::DoParser() {
case FX_XmlSyntaxResult::TagName:
m_ws1 = m_pParser->GetTagName();
m_pChild = new CFX_XMLElement(m_ws1);
- m_pParent->InsertChildNode(m_pChild);
+ m_pParent->AppendChild(m_pChild);
m_NodeStack.push(m_pChild);
m_pParent = m_pChild;
@@ -130,13 +130,13 @@ int32_t CFX_XMLParser::DoParser() {
case FX_XmlSyntaxResult::Text:
m_ws1 = m_pParser->GetTextData();
m_pChild = new CFX_XMLText(m_ws1);
- m_pParent->InsertChildNode(m_pChild);
+ m_pParent->AppendChild(m_pChild);
m_pChild = m_pParent;
break;
case FX_XmlSyntaxResult::CData:
m_ws1 = m_pParser->GetTextData();
m_pChild = new CFX_XMLCharData(m_ws1);
- m_pParent->InsertChildNode(m_pChild);
+ m_pParent->AppendChild(m_pChild);
m_pChild = m_pParent;
break;
case FX_XmlSyntaxResult::TargetData: