diff options
Diffstat (limited to 'core/fxcrt/xml/cfx_xmlnode.cpp')
-rw-r--r-- | core/fxcrt/xml/cfx_xmlnode.cpp | 128 |
1 files changed, 18 insertions, 110 deletions
diff --git a/core/fxcrt/xml/cfx_xmlnode.cpp b/core/fxcrt/xml/cfx_xmlnode.cpp index 7cc506af9f..6135907557 100644 --- a/core/fxcrt/xml/cfx_xmlnode.cpp +++ b/core/fxcrt/xml/cfx_xmlnode.cpp @@ -8,7 +8,6 @@ #include <vector> -#include "core/fxcrt/fx_codepage.h" #include "core/fxcrt/xml/cfx_xmlchardata.h" #include "core/fxcrt/xml/cfx_xmlelement.h" #include "core/fxcrt/xml/cfx_xmlinstruction.h" @@ -98,113 +97,22 @@ std::unique_ptr<CFX_XMLNode> CFX_XMLNode::Clone() { return nullptr; } -void CFX_XMLNode::SaveXMLNode( - const RetainPtr<CFX_SeekableStreamProxy>& pXMLStream) { - CFX_XMLNode* pNode = (CFX_XMLNode*)this; - switch (pNode->GetType()) { - case FX_XMLNODE_Instruction: { - WideString ws; - CFX_XMLInstruction* pInstruction = (CFX_XMLInstruction*)pNode; - if (pInstruction->GetName().CompareNoCase(L"xml") == 0) { - ws = L"<?xml version=\"1.0\" encoding=\""; - uint16_t wCodePage = pXMLStream->GetCodePage(); - if (wCodePage == FX_CODEPAGE_UTF16LE) { - ws += L"UTF-16"; - } else if (wCodePage == FX_CODEPAGE_UTF16BE) { - ws += L"UTF-16be"; - } else { - ws += L"UTF-8"; - } - ws += L"\"?>"; - pXMLStream->WriteString(ws.AsStringView()); - } else { - ws = WideString::Format(L"<?%ls", pInstruction->GetName().c_str()); - pXMLStream->WriteString(ws.AsStringView()); - - for (auto it : pInstruction->GetAttributes()) { - WideString wsValue = it.second; - wsValue.Replace(L"&", L"&"); - wsValue.Replace(L"<", L"<"); - wsValue.Replace(L">", L">"); - wsValue.Replace(L"\'", L"'"); - wsValue.Replace(L"\"", L"""); - - ws = L" "; - ws += it.first; - ws += L"=\""; - ws += wsValue; - ws += L"\""; - pXMLStream->WriteString(ws.AsStringView()); - } - - for (auto target : pInstruction->GetTargetData()) { - ws = L" \""; - ws += target; - ws += L"\""; - pXMLStream->WriteString(ws.AsStringView()); - } - ws = L"?>"; - pXMLStream->WriteString(ws.AsStringView()); - } - break; - } - case FX_XMLNODE_Element: { - WideString ws; - ws = L"<"; - ws += static_cast<CFX_XMLElement*>(pNode)->GetName(); - pXMLStream->WriteString(ws.AsStringView()); - - for (auto it : static_cast<CFX_XMLElement*>(pNode)->GetAttributes()) { - WideString wsValue = it.second; - wsValue.Replace(L"&", L"&"); - wsValue.Replace(L"<", L"<"); - wsValue.Replace(L">", L">"); - wsValue.Replace(L"\'", L"'"); - wsValue.Replace(L"\"", L"""); - - ws = L" "; - ws += it.first; - ws += L"=\""; - ws += wsValue; - ws += L"\""; - pXMLStream->WriteString(ws.AsStringView()); - } - if (pNode->first_child_) { - ws = L"\n>"; - pXMLStream->WriteString(ws.AsStringView()); - CFX_XMLNode* pChild = pNode->first_child_; - while (pChild) { - pChild->SaveXMLNode(pXMLStream); - pChild = pChild->next_sibling_; - } - ws = L"</"; - ws += static_cast<CFX_XMLElement*>(pNode)->GetName(); - ws += L"\n>"; - } else { - ws = L"\n/>"; - } - pXMLStream->WriteString(ws.AsStringView()); - break; - } - case FX_XMLNODE_Text: { - WideString ws = static_cast<CFX_XMLText*>(pNode)->GetText(); - ws.Replace(L"&", L"&"); - ws.Replace(L"<", L"<"); - ws.Replace(L">", L">"); - ws.Replace(L"\'", L"'"); - ws.Replace(L"\"", L"""); - pXMLStream->WriteString(ws.AsStringView()); - break; - } - case FX_XMLNODE_CharData: { - WideString ws = L"<![CDATA["; - ws += static_cast<CFX_XMLCharData*>(pNode)->GetText(); - ws += L"]]>"; - pXMLStream->WriteString(ws.AsStringView()); - break; - } - case FX_XMLNODE_Unknown: - default: - break; - } +void CFX_XMLNode::Save(const RetainPtr<CFX_SeekableStreamProxy>& pXMLStream) {} + +WideString CFX_XMLNode::EncodeEntities(WideString value) { + value.Replace(L"&", L"&"); + value.Replace(L"<", L"<"); + value.Replace(L">", L">"); + value.Replace(L"\'", L"'"); + value.Replace(L"\"", L"""); + return value; +} + +WideString CFX_XMLNode::AttributeToString(WideString name, WideString value) { + WideString ret = L" "; + ret += name; + ret += L"=\""; + ret += EncodeEntities(value); + ret += L"\""; + return ret; } |