Kaydet (Commit) 28102e47 authored tarafından Miklos Vajna's avatar Miklos Vajna

EPUB export: handle inline images

Just the bare minimum, so that the binary file-related member functions
of the package interface are triggered, so I can implement them.

Change-Id: I996659126667423fded1f89f8097ac726418fa00
Reviewed-on: https://gerrit.libreoffice.org/41261Tested-by: 's avatarJenkins <ci@libreoffice.org>
Reviewed-by: 's avatarMiklos Vajna <vmiklos@collabora.co.uk>
üst dc9d435f
......@@ -75,6 +75,8 @@ $(eval $(call gb_Library_add_exception_objects,wpftwriter,\
writerperfect/source/writer/PagesImportFilter \
writerperfect/source/writer/StarOfficeWriterImportFilter \
writerperfect/source/writer/WordPerfectImportFilter \
writerperfect/source/writer/exp/XMLBase64ImportContext \
writerperfect/source/writer/exp/XMLTextFrameContext \
writerperfect/source/writer/exp/txtparai \
writerperfect/source/writer/exp/xmlictxt \
writerperfect/source/writer/exp/xmlimp \
......
......@@ -140,17 +140,30 @@ void EPUBPackage::closeCSSFile()
void EPUBPackage::openBinaryFile(const char *pName)
{
SAL_WARN("writerperfect", "EPUBPackage::openBinaryFile, " << pName << ": implement me");
assert(pName);
assert(!mxOutputStream.is());
mxOutputStream.set(mxStorage->openStreamElementByHierarchicalName(OUString::fromUtf8(pName), embed::ElementModes::READWRITE), uno::UNO_QUERY);
}
void EPUBPackage::insertBinaryData(const librevenge::RVNGBinaryData &/*rData*/)
void EPUBPackage::insertBinaryData(const librevenge::RVNGBinaryData &rData)
{
SAL_WARN("writerperfect", "EPUBPackage::insertBinaryData: implement me");
assert(mxOutputStream.is());
if (rData.empty())
return;
uno::Sequence<sal_Int8> aData(reinterpret_cast<const sal_Int8 *>(rData.getDataBuffer()), rData.size());
mxOutputStream->writeBytes(aData);
}
void EPUBPackage::closeBinaryFile()
{
SAL_WARN("writerperfect", "EPUBPackage::closeBinaryFile: implement me");
assert(mxOutputStream.is());
uno::Reference<embed::XTransactedObject> xTransactedObject(mxOutputStream, uno::UNO_QUERY);
xTransactedObject->commit();
mxOutputStream.clear();
}
void EPUBPackage::openTextFile(const char *pName)
......
/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
/*
* This file is part of the LibreOffice project.
*
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
*/
#include "XMLBase64ImportContext.hxx"
using namespace com::sun::star;
namespace writerperfect
{
namespace exp
{
XMLBase64ImportContext::XMLBase64ImportContext(XMLImport &rImport)
: XMLImportContext(rImport)
{
}
void XMLBase64ImportContext::startElement(const OUString &/*rName*/, const css::uno::Reference<css::xml::sax::XAttributeList> &/*xAttribs*/)
{
}
void XMLBase64ImportContext::endElement(const OUString &/*rName*/)
{
}
void XMLBase64ImportContext::characters(const OUString &rChars)
{
OString sCharU8 = OUStringToOString(rChars, RTL_TEXTENCODING_UTF8);
m_aBinaryData.appendBase64Data(librevenge::RVNGString(sCharU8.getStr()));
}
const librevenge::RVNGBinaryData &XMLBase64ImportContext::getBinaryData() const
{
return m_aBinaryData;
}
} // namespace exp
} // namespace writerperfect
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
/*
* This file is part of the LibreOffice project.
*
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
*/
#ifndef INCLUDED_WRITERPERFECT_SOURCE_WRITER_EXP_XMLBASE64IMPORTCONTEXT_HXX
#define INCLUDED_WRITERPERFECT_SOURCE_WRITER_EXP_XMLBASE64IMPORTCONTEXT_HXX
#include <librevenge/RVNGBinaryData.h>
#include "xmlictxt.hxx"
namespace writerperfect
{
namespace exp
{
/// Handler for <office:binary-data>.
class XMLBase64ImportContext : public XMLImportContext
{
public:
XMLBase64ImportContext(XMLImport &rImport);
void SAL_CALL startElement(const OUString &rName, const css::uno::Reference<css::xml::sax::XAttributeList> &xAttribs) override;
void SAL_CALL endElement(const OUString &rName) override;
void SAL_CALL characters(const OUString &rChars) override;
const librevenge::RVNGBinaryData &getBinaryData() const;
private:
librevenge::RVNGBinaryData m_aBinaryData;
};
} // namespace exp
} // namespace writerperfect
#endif
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
/*
* This file is part of the LibreOffice project.
*
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
*/
#include "XMLTextFrameContext.hxx"
#include "XMLBase64ImportContext.hxx"
#include "xmlimp.hxx"
using namespace com::sun::star;
namespace writerperfect
{
namespace exp
{
/// Handler for <draw:image>.
class XMLTextImageContext : public XMLImportContext
{
public:
XMLTextImageContext(XMLImport &rImport);
XMLImportContext *CreateChildContext(const OUString &rName, const css::uno::Reference<css::xml::sax::XAttributeList> &xAttribs) override;
void SAL_CALL startElement(const OUString &rName, const css::uno::Reference<css::xml::sax::XAttributeList> &xAttribs) override;
void SAL_CALL endElement(const OUString &rName) override;
private:
OString m_aMimeType;
rtl::Reference<XMLBase64ImportContext> m_xBinaryData;
};
XMLTextImageContext::XMLTextImageContext(XMLImport &rImport)
: XMLImportContext(rImport)
{
}
XMLImportContext *XMLTextImageContext::CreateChildContext(const OUString &rName, const css::uno::Reference<css::xml::sax::XAttributeList> &/*xAttribs*/)
{
if (rName == "office:binary-data")
{
m_xBinaryData = new XMLBase64ImportContext(mrImport);
return m_xBinaryData.get();
}
return nullptr;
}
void XMLTextImageContext::startElement(const OUString &/*rName*/, const css::uno::Reference<css::xml::sax::XAttributeList> &xAttribs)
{
for (sal_Int16 i = 0; i < xAttribs->getLength(); ++i)
{
const OUString &rAttributeName = xAttribs->getNameByIndex(i);
if (rAttributeName == "loext:mime-type")
m_aMimeType = OUStringToOString(xAttribs->getValueByIndex(i), RTL_TEXTENCODING_UTF8);
}
}
void XMLTextImageContext::endElement(const OUString &/*rName*/)
{
librevenge::RVNGPropertyList aPropertyList;
aPropertyList.insert("librevenge:mime-type", m_aMimeType.getStr());
if (m_xBinaryData.is())
aPropertyList.insert("office:binary-data", m_xBinaryData->getBinaryData());
mrImport.GetGenerator().insertBinaryObject(aPropertyList);
}
XMLTextFrameContext::XMLTextFrameContext(XMLImport &rImport)
: XMLImportContext(rImport)
{
}
XMLImportContext *XMLTextFrameContext::CreateChildContext(const OUString &rName, const css::uno::Reference<css::xml::sax::XAttributeList> &/*xAttribs*/)
{
if (rName == "draw:image")
return new XMLTextImageContext(mrImport);
return nullptr;
}
void XMLTextFrameContext::startElement(const OUString &/*rName*/, const css::uno::Reference<css::xml::sax::XAttributeList> &/*xAttribs*/)
{
mrImport.GetGenerator().openFrame(librevenge::RVNGPropertyList());
}
void XMLTextFrameContext::endElement(const OUString &/*rName*/)
{
mrImport.GetGenerator().closeFrame();
}
} // namespace exp
} // namespace writerperfect
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
/*
* This file is part of the LibreOffice project.
*
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
*/
#ifndef INCLUDED_WRITERPERFECT_SOURCE_WRITER_EXP_XMLTEXTFRAMECONTEXT_HXX
#define INCLUDED_WRITERPERFECT_SOURCE_WRITER_EXP_XMLTEXTFRAMECONTEXT_HXX
#include <rtl/ref.hxx>
#include "xmlictxt.hxx"
namespace writerperfect
{
namespace exp
{
class XMLBase64ImportContext;
/// Handler for <draw:frame>.
class XMLTextFrameContext : public XMLImportContext
{
public:
XMLTextFrameContext(XMLImport &rImport);
XMLImportContext *CreateChildContext(const OUString &rName, const css::uno::Reference<css::xml::sax::XAttributeList> &xAttribs) override;
void SAL_CALL startElement(const OUString &rName, const css::uno::Reference<css::xml::sax::XAttributeList> &xAttribs) override;
void SAL_CALL endElement(const OUString &rName) override;
};
} // namespace exp
} // namespace writerperfect
#endif
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
......@@ -9,6 +9,7 @@
#include "txtparai.hxx"
#include "XMLTextFrameContext.hxx"
#include "xmlimp.hxx"
using namespace com::sun::star;
......@@ -24,6 +25,8 @@ class XMLSpanContext : public XMLImportContext
public:
XMLSpanContext(XMLImport &rImport);
XMLImportContext *CreateChildContext(const OUString &rName, const css::uno::Reference<css::xml::sax::XAttributeList> &xAttribs) override;
void SAL_CALL startElement(const OUString &rName, const css::uno::Reference<css::xml::sax::XAttributeList> &xAttribs) override;
void SAL_CALL endElement(const OUString &rName) override;
void SAL_CALL characters(const OUString &rChars) override;
......@@ -34,6 +37,13 @@ XMLSpanContext::XMLSpanContext(XMLImport &rImport)
{
}
XMLImportContext *XMLSpanContext::CreateChildContext(const OUString &rName, const css::uno::Reference<css::xml::sax::XAttributeList> &/*xAttribs*/)
{
if (rName == "draw:frame")
return new XMLTextFrameContext(mrImport);
return nullptr;
}
void XMLSpanContext::startElement(const OUString &/*rName*/, const css::uno::Reference<css::xml::sax::XAttributeList> &/*xAttribs*/)
{
mrImport.GetGenerator().openSpan(librevenge::RVNGPropertyList());
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment