23 #include <rtl/ustrbuf.hxx>
24 #include <osl/diagnose.h>
25 #include <com/sun/star/io/XOutputStream.hpp>
36 class OdfEmitter :
public XmlEmitter
44 explicit OdfEmitter(
const uno::Reference<io::XOutputStream>& xOutput );
46 virtual void beginTag(
const char* pTag,
const PropertyMap& rProperties )
override;
47 virtual void write(
const OUString& rString )
override;
48 virtual void endTag(
const char* pTag )
override;
53 OdfEmitter::OdfEmitter(
const uno::Reference<io::XOutputStream>& xOutput ) :
58 OSL_PRECOND(
m_xOutput.is(),
"OdfEmitter(): invalid output stream");
61 write(
"<?xml version=\"1.0\" encoding=\"UTF-8\"?>");
64 void OdfEmitter::beginTag(
const char* pTag,
const PropertyMap& rProperties )
66 OSL_PRECOND(pTag,
"Invalid tag string");
68 OUStringBuffer aElement;
70 aElement.appendAscii(pTag);
73 std::vector<OUString> aAttributes;
74 for(
const auto& rCurr : rProperties )
81 aAttributes.push_back(aAttribute);
87 std::sort(aAttributes.begin(), aAttributes.end());
88 std::copy(aAttributes.begin(), aAttributes.end(),
92 write(aElement.makeStringAndClear());
95 void OdfEmitter::write(
const OUString& rText )
98 const sal_Int32 nLen( aStr.getLength() );
100 const char* pStr = aStr.getStr();
101 std::copy(pStr,pStr+nLen,
m_aBuf.getArray());
107 void OdfEmitter::endTag(
const char* pTag )
109 OUStringBuffer aElement;
110 aElement.append(
"</");
111 aElement.appendAscii(pTag);
112 aElement.append(
">");
113 write(aElement.makeStringAndClear());
118 return std::make_shared<OdfEmitter>(xOut);
uno::Reference< io::XOutputStream > m_xOutput
uno::Sequence< sal_Int8 > m_aBuf
OString OUStringToOString(std::u16string_view str, ConnectionSettings const *settings)
std::map< sal_Int32, STLPropertyMapEntry > PropertyMap
std::shared_ptr< XmlEmitter > XmlEmitterSharedPtr
XmlEmitterSharedPtr createOdfEmitter(const uno::Reference< io::XOutputStream > &xOut)
uno::Sequence< sal_Int8 > m_aLineFeed