diff options
author | Miklos Vajna <vmiklos@collabora.co.uk> | 2017-02-28 09:16:48 +0100 |
---|---|---|
committer | Christian Lohmaier <lohmaier+LibreOffice@googlemail.com> | 2017-03-17 10:08:55 +0000 |
commit | 1e88c10327642e6867db5708e3fd0fb7065bc74c (patch) | |
tree | 525c1aca8149846b8831d94959a5c806bb9791a9 | |
parent | 68b546b17afa0082862f2a20b8f089ae9124a16a (diff) |
tdf#103931 DOCX import: fix lost section break
When there are multiple sections in a document, every <w:p> element
triggers a handleLastParagraphInSection() call, and that's how the
previous section is ended and the next one is started if necessary. In
case the section contains no paragraphs at all, the section was lost on
import. Fix this by also calling handleLastParagraphInSection() on
<w:sectPr> as well.
It's not a problem if there are both <w:p> and <w:sectPr> in a section
(which is the usual situation) as only the first call closes the
previous section / starts the next one.
(cherry picked from commit 6603947329a7b372a173a3c60e013e532d0bc5cf)
Change-Id: I64f2c403dcb2ceca76d444ab06df3052235d2795
Reviewed-on: https://gerrit.libreoffice.org/34718
Tested-by: Jenkins <ci@libreoffice.org>
Reviewed-by: Christian Lohmaier <lohmaier+LibreOffice@googlemail.com>
-rw-r--r-- | sw/qa/extras/ooxmlexport/data/tdf103931.docx | bin | 0 -> 3542 bytes | |||
-rw-r--r-- | sw/qa/extras/ooxmlexport/ooxmlexport9.cxx | 8 | ||||
-rw-r--r-- | writerfilter/source/ooxml/model.xml | 1 |
3 files changed, 9 insertions, 0 deletions
diff --git a/sw/qa/extras/ooxmlexport/data/tdf103931.docx b/sw/qa/extras/ooxmlexport/data/tdf103931.docx Binary files differnew file mode 100644 index 000000000000..094fe1ba91cf --- /dev/null +++ b/sw/qa/extras/ooxmlexport/data/tdf103931.docx diff --git a/sw/qa/extras/ooxmlexport/ooxmlexport9.cxx b/sw/qa/extras/ooxmlexport/ooxmlexport9.cxx index ef278f245757..001f5b026251 100644 --- a/sw/qa/extras/ooxmlexport/ooxmlexport9.cxx +++ b/sw/qa/extras/ooxmlexport/ooxmlexport9.cxx @@ -207,6 +207,14 @@ DECLARE_OOXMLEXPORT_TEST(testTdf106001, "tdf106001.docx") CPPUNIT_ASSERT_EQUAL( static_cast<sal_Int16>( 100 ), getProperty<sal_Int16>(getRun(getParagraph(1), 1), "CharScaleWidth" )); } +DECLARE_OOXMLEXPORT_TEST(testTdf103931, "tdf103931.docx") +{ + uno::Reference<text::XTextSectionsSupplier> xTextSectionsSupplier(mxComponent, uno::UNO_QUERY); + uno::Reference<container::XIndexAccess> xTextSections(xTextSectionsSupplier->getTextSections(), uno::UNO_QUERY); + // This was 2, the last (empty) section of the document was lost on import. + CPPUNIT_ASSERT_EQUAL(static_cast<sal_Int32>(3), xTextSections->getCount()); +} + CPPUNIT_PLUGIN_IMPLEMENT(); /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/writerfilter/source/ooxml/model.xml b/writerfilter/source/ooxml/model.xml index 24a020b1bc58..19339d3ee040 100644 --- a/writerfilter/source/ooxml/model.xml +++ b/writerfilter/source/ooxml/model.xml @@ -17822,6 +17822,7 @@ </resource> <resource name="CT_SectPrBase" resource="Properties"/> <resource name="CT_SectPr" resource="Properties"> + <action name="start" action="handleLastParagraphInSection"/> <element name="sectPrChange" tokenid="ooxml:CT_SectPr_sectPrChange"/> <action name="start" action="setLastParagraphInSection"/> </resource> |