summaryrefslogtreecommitdiff
path: root/core/fxcrt/xml/cfx_xmlinstruction.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'core/fxcrt/xml/cfx_xmlinstruction.cpp')
-rw-r--r--core/fxcrt/xml/cfx_xmlinstruction.cpp35
1 files changed, 35 insertions, 0 deletions
diff --git a/core/fxcrt/xml/cfx_xmlinstruction.cpp b/core/fxcrt/xml/cfx_xmlinstruction.cpp
index 75a4a2eec6..dabd538b4b 100644
--- a/core/fxcrt/xml/cfx_xmlinstruction.cpp
+++ b/core/fxcrt/xml/cfx_xmlinstruction.cpp
@@ -8,6 +8,7 @@
#include <utility>
+#include "core/fxcrt/fx_codepage.h"
#include "core/fxcrt/fx_extension.h"
#include "third_party/base/ptr_util.h"
#include "third_party/base/stl_util.h"
@@ -36,3 +37,37 @@ void CFX_XMLInstruction::RemoveData(int32_t index) {
if (pdfium::IndexInBounds(m_TargetData, index))
m_TargetData.erase(m_TargetData.begin() + index);
}
+
+void CFX_XMLInstruction::Save(
+ const RetainPtr<CFX_SeekableStreamProxy>& pXMLStream) {
+ if (GetName().CompareNoCase(L"xml") == 0) {
+ WideString 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());
+ return;
+ }
+
+ pXMLStream->WriteString(
+ WideString::Format(L"<?%ls", GetName().c_str()).AsStringView());
+ for (auto it : GetAttributes()) {
+ pXMLStream->WriteString(
+ AttributeToString(it.first, it.second).AsStringView());
+ }
+
+ for (auto target : m_TargetData) {
+ WideString ws = L" \"";
+ ws += target;
+ ws += L"\"";
+ pXMLStream->WriteString(ws.AsStringView());
+ }
+
+ pXMLStream->WriteString(WideStringView(L"?>"));
+}