summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSerge Krot <Serge.Krot@cib.de>2019-01-18 12:51:33 +0100
committerMichael Stahl <Michael.Stahl@cib.de>2019-01-28 13:26:43 +0100
commita3ee3432dc7f9db2cec62daccc76f5e89dfe9459 (patch)
tree9d26b24f6132c756d835d83e35ab54ba1f105e0e
parentd801075217375a79ca037df96b3adff5eee5ebd2 (diff)
tdf#121561 sw DOCX: output toc-end inside last toc paragraph
During export of the TOC into DOCX all TOC field parts should be placed inside one STD frame: field start-begin, field-separate and field-end mark. Updated unit test. Change-Id: I10e37a48160e1dc4f0074c4e2e7621a59f79c2ee Reviewed-on: https://gerrit.libreoffice.org/66587 Tested-by: Jenkins Reviewed-by: Thorsten Behrens <Thorsten.Behrens@CIB.de> (cherry picked from commit fd5599b9d23a2d9b13af6dd88bd2d38f438f7e00) Reviewed-on: https://gerrit.libreoffice.org/66810 (cherry picked from commit 05a5037f489971676737808c37ad1cfb9dcd53d9) Reviewed-on: https://gerrit.libreoffice.org/66868 Reviewed-by: Adolfo Jayme Barrientos <fitojb@ubuntu.com> Reviewed-by: Michael Stahl <Michael.Stahl@cib.de> Tested-by: Michael Stahl <Michael.Stahl@cib.de>
-rw-r--r--sw/qa/extras/ooxmlexport/ooxmlexport11.cxx5
-rw-r--r--sw/source/filter/ww8/docxattributeoutput.cxx15
2 files changed, 20 insertions, 0 deletions
diff --git a/sw/qa/extras/ooxmlexport/ooxmlexport11.cxx b/sw/qa/extras/ooxmlexport/ooxmlexport11.cxx
index 41194b02db98..bcc136d31ef2 100644
--- a/sw/qa/extras/ooxmlexport/ooxmlexport11.cxx
+++ b/sw/qa/extras/ooxmlexport/ooxmlexport11.cxx
@@ -99,11 +99,16 @@ DECLARE_OOXMLEXPORT_TEST(testTdf121561_tocTitleDocx, "tdf121456_tabsOffset.odt")
if (!pXmlDoc)
return;
+ // get TOC node
uno::Reference<text::XDocumentIndexesSupplier> xIndexSupplier(mxComponent, uno::UNO_QUERY);
uno::Reference<container::XIndexAccess> xIndexes(xIndexSupplier->getDocumentIndexes( ), uno::UNO_QUERY);
uno::Reference<text::XDocumentIndex> xTOCIndex(xIndexes->getByIndex(0), uno::UNO_QUERY);
+ // ensure TOC title was set in TOC properties
CPPUNIT_ASSERT_EQUAL(OUString("Inhaltsverzeichnis"), getProperty<OUString>(xTOCIndex, "Title"));
+
+ // ensure TOC end-field mark is placed inside TOC section
+ assertXPath(pXmlDoc, "/w:document/w:body/w:sdt/w:sdtContent/w:p[16]/w:r/w:fldChar", "fldCharType", "end");
}
DECLARE_OOXMLEXPORT_TEST(testTdf82065_Ind_start_strict, "tdf82065_Ind_start_strict.docx")
diff --git a/sw/source/filter/ww8/docxattributeoutput.cxx b/sw/source/filter/ww8/docxattributeoutput.cxx
index a73f90de5153..e332bee8d747 100644
--- a/sw/source/filter/ww8/docxattributeoutput.cxx
+++ b/sw/source/filter/ww8/docxattributeoutput.cxx
@@ -1411,6 +1411,21 @@ void DocxAttributeOutput::EndRun(const SwTextNode* pNode, sal_Int32 nPos, bool /
m_nFieldsInHyperlink = 0;
}
+ // end ToX fields
+ for (auto it = m_Fields.rbegin(); it != m_Fields.rend(); )
+ {
+ if (it->bClose && !it->pField)
+ {
+ EndField_Impl( pNode, nPos, *it );
+ it = decltype(m_Fields)::reverse_iterator(m_Fields.erase(it.base() - 1));
+ }
+ else
+ {
+ ++it;
+ }
+ }
+
+
DoWriteBookmarksStart(m_rFinalBookmarksStart);
DoWriteBookmarksEnd(m_rFinalBookmarksEnd);
DoWriteBookmarkEndIfExist(nPos);