diff options
author | Devtools Arcadia <arcadia-devtools@yandex-team.ru> | 2022-02-07 18:08:42 +0300 |
---|---|---|
committer | Devtools Arcadia <arcadia-devtools@mous.vla.yp-c.yandex.net> | 2022-02-07 18:08:42 +0300 |
commit | 1110808a9d39d4b808aef724c861a2e1a38d2a69 (patch) | |
tree | e26c9fed0de5d9873cce7e00bc214573dc2195b7 /contrib/libs/poco/XML/src/DOMWriter.cpp | |
download | ydb-1110808a9d39d4b808aef724c861a2e1a38d2a69.tar.gz |
intermediate changes
ref:cde9a383711a11544ce7e107a78147fb96cc4029
Diffstat (limited to 'contrib/libs/poco/XML/src/DOMWriter.cpp')
-rw-r--r-- | contrib/libs/poco/XML/src/DOMWriter.cpp | 102 |
1 files changed, 102 insertions, 0 deletions
diff --git a/contrib/libs/poco/XML/src/DOMWriter.cpp b/contrib/libs/poco/XML/src/DOMWriter.cpp new file mode 100644 index 0000000000..8a087643e8 --- /dev/null +++ b/contrib/libs/poco/XML/src/DOMWriter.cpp @@ -0,0 +1,102 @@ +// +// DOMWriter.cpp +// +// Library: XML +// Package: DOM +// Module: DOMWriter +// +// Copyright (c) 2004-2006, Applied Informatics Software Engineering GmbH. +// and Contributors. +// +// SPDX-License-Identifier: BSL-1.0 +// + + + +#include "Poco/DOM/DOMWriter.h" +#include "Poco/XML/XMLWriter.h" +#include "Poco/DOM/Document.h" +#include "Poco/DOM/DocumentFragment.h" +#include "Poco/DOM/DocumentType.h" +#include "Poco/DOM/DOMException.h" +#include "Poco/DOM/DOMSerializer.h" +#include "Poco/SAX/LexicalHandler.h" +#include "Poco/XML/XMLException.h" +#include "Poco/Path.h" +#include "Poco/FileStream.h" + + +namespace Poco { +namespace XML { + + +DOMWriter::DOMWriter(): + _pTextEncoding(0), + _options(0), + _indent("\t") +{ +} + + +DOMWriter::~DOMWriter() +{ +} + + +void DOMWriter::setEncoding(const std::string& encodingName, Poco::TextEncoding& textEncoding) +{ + _encodingName = encodingName; + _pTextEncoding = &textEncoding; +} + + +void DOMWriter::setOptions(int options) +{ + _options = options; +} + + +void DOMWriter::setNewLine(const std::string& newLine) +{ + _newLine = newLine; +} + + +void DOMWriter::setIndent(const std::string& indent) +{ + _indent = indent; +} + + +void DOMWriter::writeNode(XMLByteOutputStream& ostr, const Node* pNode) +{ + poco_check_ptr (pNode); + + bool isFragment = pNode->nodeType() != Node::DOCUMENT_NODE; + + XMLWriter writer(ostr, _options, _encodingName, _pTextEncoding); + writer.setNewLine(_newLine); + writer.setIndent(_indent); + + DOMSerializer serializer; + serializer.setContentHandler(&writer); + serializer.setDTDHandler(&writer); + serializer.setProperty(XMLReader::PROPERTY_LEXICAL_HANDLER, static_cast<LexicalHandler*>(&writer)); + if (isFragment) writer.startFragment(); + serializer.serialize(pNode); + if (isFragment) writer.endFragment(); +} + + +void DOMWriter::writeNode(const std::string& systemId, const Node* pNode) +{ + Poco::FileOutputStream ostr(systemId); + if (ostr.good()) + writeNode(ostr, pNode); + else + throw Poco::CreateFileException(systemId); +} + + +} } // namespace Poco::XML + |