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

EPUB export: handle list content

Minimal effort to not loose content, no actual list formatting yet.

Change-Id: Ic49ed2f1877c608fc4af5d4aa7ebb3b49908fd86
Reviewed-on: https://gerrit.libreoffice.org/42214Reviewed-by: 's avatarMiklos Vajna <vmiklos@collabora.co.uk>
Tested-by: 's avatarJenkins <ci@libreoffice.org>
üst e6746a00
......@@ -79,6 +79,8 @@ $(eval $(call gb_Library_add_exception_objects,wpftwriter,\
writerperfect/source/writer/exp/XMLBase64ImportContext \
writerperfect/source/writer/exp/XMLSectionContext \
writerperfect/source/writer/exp/XMLTextFrameContext \
writerperfect/source/writer/exp/XMLTextListContext \
writerperfect/source/writer/exp/XMLTextListItemContext \
writerperfect/source/writer/exp/txtparai \
writerperfect/source/writer/exp/txtstyli \
writerperfect/source/writer/exp/xmlfmt \
......
......@@ -66,6 +66,7 @@ public:
void testEscape();
void testParaCharProps();
void testSection();
void testList();
CPPUNIT_TEST_SUITE(EPUBExportTest);
CPPUNIT_TEST(testOutlineLevel);
......@@ -83,6 +84,7 @@ public:
CPPUNIT_TEST(testEscape);
CPPUNIT_TEST(testParaCharProps);
CPPUNIT_TEST(testSection);
CPPUNIT_TEST(testList);
CPPUNIT_TEST_SUITE_END();
};
......@@ -373,6 +375,15 @@ void EPUBExportTest::testSection()
assertXPathContent(mpXmlDoc, "//xhtml:p[2]/xhtml:span", "In section.");
}
void EPUBExportTest::testList()
{
createDoc("list.fodt", {});
mpXmlDoc = parseExport("OEBPS/sections/section0001.xhtml");
// This was "C", i.e. in-list content was ignored.
assertXPathContent(mpXmlDoc, "//xhtml:p[2]/xhtml:span", "B");
}
CPPUNIT_TEST_SUITE_REGISTRATION(EPUBExportTest);
}
......
<?xml version="1.0" encoding="UTF-8"?>
<office:document xmlns:office="urn:oasis:names:tc:opendocument:xmlns:office:1.0" xmlns:style="urn:oasis:names:tc:opendocument:xmlns:style:1.0" xmlns:text="urn:oasis:names:tc:opendocument:xmlns:text:1.0" xmlns:fo="urn:oasis:names:tc:opendocument:xmlns:xsl-fo-compatible:1.0" office:version="1.2" office:mimetype="application/vnd.oasis.opendocument.text">
<office:automatic-styles>
<style:style style:name="P1" style:family="paragraph" style:list-style-name="L1"/>
<text:list-style style:name="L1">
<text:list-level-style-bullet text:level="1" text:bullet-char="•">
<style:list-level-properties text:list-level-position-and-space-mode="label-alignment">
<style:list-level-label-alignment text:label-followed-by="listtab" text:list-tab-stop-position="1.27cm" fo:text-indent="-0.635cm" fo:margin-left="1.27cm"/>
</style:list-level-properties>
</text:list-level-style-bullet>
</text:list-style>
</office:automatic-styles>
<office:body>
<office:text>
<text:p>A</text:p>
<text:list xml:id="list1647378619" text:style-name="L1">
<text:list-item>
<text:p text:style-name="P1">B</text:p>
</text:list-item>
</text:list>
<text:p>C</text:p>
</office:text>
</office:body>
</office:document>
/* -*- 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 "XMLTextListContext.hxx"
#include "XMLTextListItemContext.hxx"
using namespace com::sun::star;
namespace writerperfect
{
namespace exp
{
XMLTextListContext::XMLTextListContext(XMLImport &rImport)
: XMLImportContext(rImport)
{
}
XMLImportContext *XMLTextListContext::CreateChildContext(const OUString &rName, const css::uno::Reference<css::xml::sax::XAttributeList> &/*xAttribs*/)
{
if (rName == "text:list-item")
return new XMLTextListItemContext(mrImport);
return nullptr;
}
} // 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_XMLTEXTLISTCONTEXT_HXX
#define INCLUDED_WRITERPERFECT_SOURCE_WRITER_EXP_XMLTEXTLISTCONTEXT_HXX
#include "xmlictxt.hxx"
namespace writerperfect
{
namespace exp
{
/// Handler for <text:list>.
class XMLTextListContext : public XMLImportContext
{
public:
XMLTextListContext(XMLImport &rImport);
XMLImportContext *CreateChildContext(const OUString &rName, const css::uno::Reference<css::xml::sax::XAttributeList> &xAttribs) override;
};
} // 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 "XMLTextListItemContext.hxx"
#include "XMLTextListContext.hxx"
#include "txtparai.hxx"
#include "xmlimp.hxx"
using namespace com::sun::star;
namespace writerperfect
{
namespace exp
{
XMLTextListItemContext::XMLTextListItemContext(XMLImport &rImport)
: XMLImportContext(rImport)
{
}
XMLImportContext *XMLTextListItemContext::CreateChildContext(const OUString &rName, const css::uno::Reference<css::xml::sax::XAttributeList> &/*xAttribs*/)
{
if (rName == "text:p" || rName == "text:h")
return new XMLParaContext(mrImport);
if (rName == "text:list")
return new XMLTextListContext(mrImport);
return nullptr;
}
} // 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_XMLTEXTLISTITEMCONTEXT_HXX
#define INCLUDED_WRITERPERFECT_SOURCE_WRITER_EXP_XMLTEXTLISTITEMCONTEXT_HXX
#include "xmlictxt.hxx"
namespace writerperfect
{
namespace exp
{
/// Handler for <text:list-item>.
class XMLTextListItemContext : public XMLImportContext
{
public:
XMLTextListItemContext(XMLImport &rImport);
XMLImportContext *CreateChildContext(const OUString &rName, const css::uno::Reference<css::xml::sax::XAttributeList> &xAttribs) override;
};
} // namespace exp
} // namespace writerperfect
#endif
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
......@@ -12,6 +12,7 @@
#include "txtparai.hxx"
#include "xmltbli.hxx"
#include "XMLSectionContext.hxx"
#include "XMLTextListContext.hxx"
using namespace com::sun::star;
......@@ -38,6 +39,8 @@ XMLImportContext *CreateTextChildContext(XMLImport &rImport, const OUString &rNa
return new XMLSectionContext(rImport);
if (rName == "table:table")
return new XMLTableContext(rImport);
if (rName == "text:list")
return new XMLTextListContext(rImport);
return nullptr;
}
......
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