summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--writerperfect/source/writer/EPUBPackage.cxx21
-rw-r--r--writerperfect/source/writer/EPUBPackage.hxx6
2 files changed, 22 insertions, 5 deletions
diff --git a/writerperfect/source/writer/EPUBPackage.cxx b/writerperfect/source/writer/EPUBPackage.cxx
index bf9c03089708..7589dae19722 100644
--- a/writerperfect/source/writer/EPUBPackage.cxx
+++ b/writerperfect/source/writer/EPUBPackage.cxx
@@ -11,9 +11,11 @@
#include <com/sun/star/embed/ElementModes.hpp>
#include <com/sun/star/embed/XTransactedObject.hpp>
+#include <com/sun/star/xml/sax/Writer.hpp>
#include <comphelper/storagehelper.hxx>
#include <unotools/mediadescriptor.hxx>
+#include <xmloff/attrlist.hxx>
using namespace com::sun::star;
@@ -49,29 +51,42 @@ void EPUBPackage::openXMLFile(const char *pName)
{
assert(pName);
assert(!mxOutputStream.is());
+ assert(!mxOutputWriter.is());
mxOutputStream.set(mxStorage->openStreamElementByHierarchicalName(OUString::fromUtf8(pName), embed::ElementModes::READWRITE), uno::UNO_QUERY);
+ mxOutputWriter = xml::sax::Writer::create(mxContext);
+ mxOutputWriter->setOutputStream(mxOutputStream);
+ mxOutputWriter->startDocument();
}
void EPUBPackage::openElement(const char *pName, const librevenge::RVNGPropertyList &/*rAttributes*/)
{
- SAL_WARN("writerperfect", "EPUBPackage::openElement, " << pName << ": implement me");
+ assert(mxOutputWriter.is());
+
+ rtl::Reference<SvXMLAttributeList> pAttributeList(new SvXMLAttributeList());
+ mxOutputWriter->startElement(OUString::fromUtf8(pName), uno::Reference<xml::sax::XAttributeList>(pAttributeList.get()));
}
void EPUBPackage::closeElement(const char *pName)
{
- SAL_WARN("writerperfect", "EPUBPackage::closeElement, " << pName << ": implement me");
+ assert(mxOutputWriter.is());
+
+ mxOutputWriter->endElement(OUString::fromUtf8(pName));
}
void EPUBPackage::insertCharacters(const librevenge::RVNGString &rCharacters)
{
- SAL_WARN("writerperfect", "EPUBPackage::insertCharacters, " << rCharacters.cstr() << ": implement me");
+ mxOutputWriter->characters(OUString::fromUtf8(rCharacters.cstr()));
}
void EPUBPackage::closeXMLFile()
{
+ assert(mxOutputWriter.is());
assert(mxOutputStream.is());
+ mxOutputWriter->endDocument();
+ mxOutputWriter.clear();
+
uno::Reference<embed::XTransactedObject> xTransactedObject(mxOutputStream, uno::UNO_QUERY);
xTransactedObject->commit();
mxOutputStream.clear();
diff --git a/writerperfect/source/writer/EPUBPackage.hxx b/writerperfect/source/writer/EPUBPackage.hxx
index 9d8ff8eef543..5e093f540cc8 100644
--- a/writerperfect/source/writer/EPUBPackage.hxx
+++ b/writerperfect/source/writer/EPUBPackage.hxx
@@ -12,10 +12,11 @@
#include <libepubgen/EPUBPackage.h>
-#include <com/sun/star/uno/XComponentContext.hpp>
+#include <com/sun/star/beans/PropertyValue.hpp>
#include <com/sun/star/embed/XHierarchicalStorageAccess.hpp>
#include <com/sun/star/uno/Sequence.hxx>
-#include <com/sun/star/beans/PropertyValue.hpp>
+#include <com/sun/star/uno/XComponentContext.hpp>
+#include <com/sun/star/xml/sax/XWriter.hpp>
namespace writerperfect
{
@@ -26,6 +27,7 @@ class EPUBPackage : public libepubgen::EPUBPackage
css::uno::Reference<css::uno::XComponentContext> mxContext;
css::uno::Reference<css::embed::XHierarchicalStorageAccess> mxStorage;
css::uno::Reference<css::io::XOutputStream> mxOutputStream;
+ css::uno::Reference<css::xml::sax::XWriter> mxOutputWriter;
public:
explicit EPUBPackage(const css::uno::Reference<css::uno::XComponentContext> &xContext, const css::uno::Sequence<css::beans::PropertyValue> &rDescriptor);