diff options
author | Dan Sinclair <dsinclair@chromium.org> | 2018-02-13 21:50:44 +0000 |
---|---|---|
committer | Chromium commit bot <commit-bot@chromium.org> | 2018-02-13 21:50:44 +0000 |
commit | 6515cf256ca6dc30b43b34eaf88908aaf4784fd3 (patch) | |
tree | 0f3ea937ce2809ed46bb9d6da49c334bed6147e1 /core/fxcrt/xml/cfx_xmlnode.cpp | |
parent | fa3765cce4da4c3923e525f0462afd794360d221 (diff) | |
download | pdfium-6515cf256ca6dc30b43b34eaf88908aaf4784fd3.tar.xz |
Split CFX_XMLNode::SaveXMLNode apart
This CL removes the switch from SaveXMLNode and moves the required code
into override methods in the child classes. The method is renamed from
SaveXMLNode to just Save.
Change-Id: I2011b80525e99635c573b4e0cf977e94f6b7cea6
Reviewed-on: https://pdfium-review.googlesource.com/26590
Reviewed-by: Tom Sepez <tsepez@chromium.org>
Commit-Queue: dsinclair <dsinclair@chromium.org>
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; } |