summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMiklos Vajna <vmiklos@collabora.co.uk>2017-10-17 09:04:33 +0200
committerMiklos Vajna <vmiklos@collabora.co.uk>2017-10-17 11:33:49 +0200
commit6ee33d0772f991f04e97b5b61d7b11810a1b8ac0 (patch)
tree2c919e716dec28d0a9e54ca61047861241deb086
parent899a656870f916e97944f2d74977177cb1032f33 (diff)
tdf#104079 RTF import: fix handling fields inside TOC fields
The marker trick is not needed for these, but the paragraph margins are lost when using it, so avoid it. Change-Id: I3fc9644cb85138b5473cb1478196ae8538041fb1 Reviewed-on: https://gerrit.libreoffice.org/43446 Reviewed-by: Miklos Vajna <vmiklos@collabora.co.uk> Tested-by: Jenkins <ci@libreoffice.org>
-rw-r--r--sw/qa/extras/rtfexport/data/tdf104079.rtf48
-rw-r--r--sw/qa/extras/rtfexport/rtfexport.cxx16
-rw-r--r--writerfilter/source/dmapper/DomainMapper_Impl.cxx3
3 files changed, 66 insertions, 1 deletions
diff --git a/sw/qa/extras/rtfexport/data/tdf104079.rtf b/sw/qa/extras/rtfexport/data/tdf104079.rtf
new file mode 100644
index 000000000000..f173ce2ddf91
--- /dev/null
+++ b/sw/qa/extras/rtfexport/data/tdf104079.rtf
@@ -0,0 +1,48 @@
+{\rtf1\mac\ansicpg10000\uc1 \deff0\deflang1033\deflangfe1033
+{\colortbl;\red0\green0\blue0;\red0\green0\blue255;\red0\green255\blue255;\red0\green255\blue0;\red255\green0\blue255;\red255\green0\blue0;\red255\green255\blue0;\red255\green255\blue255;\red0\green0\blue128;\red0\green128\blue128;\red0\green128\blue0;
+\red128\green0\blue128;\red128\green0\blue0;\red128\green128\blue0;\red128\green128\blue128;\red192\green192\blue192;}
+{\stylesheet
+{\sa120\nowidctlpar\adjustright \cgrid \snext0 Normal;}
+{\s24\sa120\nowidctlpar\tqr\tx9360\adjustright \b\caps\cgrid \sbasedon0 \snext0 \sautoupd toc 1;}
+}
+\margl1440\margr1440\margt1296\margb1296 \widowctrl\ftnbj\aenddoc\hyphcaps0\viewkind1\viewscale100 \fet0\sectd \linex0\sectdefaultcl
+\pard\plain \s24\sa120\nowidctlpar\tqr\tx9360\adjustright \b\caps\cgrid
+{\field\fldedit
+{\*\fldinst TOC \\o "1-3" }
+{\fldrslt
+{\lang1024 toc1\tab }
+{\field\flddirty
+{\*\fldinst GOTOBUTTON _Toc434317063
+{\field
+{\*\fldinst PAGEREF _Toc434317063 }
+{\fldrslt 3 }
+}
+}
+}
+{\lang1024
+\par }
+\pard\plain \s24\sa120\nowidctlpar\tqr\tx9360\adjustright \b\caps\cgrid
+{\lang1024 toc2\tab }
+{\field\flddirty
+{\*\fldinst GOTOBUTTON _Toc434317068
+{\field
+{\*\fldinst PAGEREF _Toc434317068 }
+{\fldrslt 8 }
+}
+}
+}
+{\lang1024
+\par toc3\tab }
+{\field\flddirty
+{\*\fldinst GOTOBUTTON _Toc434317069
+{\field
+{\*\fldinst PAGEREF _Toc434317069 }
+{\fldrslt 8 }
+}
+}
+}
+\par
+\pard\plain \s24\sa120\nowidctlpar\tqr\tx9360\adjustright \b\caps\cgrid }
+}
+\prad\par
+}
diff --git a/sw/qa/extras/rtfexport/rtfexport.cxx b/sw/qa/extras/rtfexport/rtfexport.cxx
index ff05e4e7cfea..5664cc8872f6 100644
--- a/sw/qa/extras/rtfexport/rtfexport.cxx
+++ b/sw/qa/extras/rtfexport/rtfexport.cxx
@@ -1001,6 +1001,22 @@ DECLARE_RTFEXPORT_TEST(testTdf94377, "tdf94377.rtf")
CPPUNIT_ASSERT_EQUAL(12.f, getProperty<float>(getRun(getParagraphOfText(2, xText, "asdf12"), 1), "CharHeight"));
}
+DECLARE_RTFEXPORT_TEST(testTdf104079, "tdf104079.rtf")
+{
+ bool bFound = false;
+ int nIndex = 0;
+ while (!bFound)
+ {
+ uno::Reference<text::XTextRange> xParagraph = getParagraph(++nIndex);
+ if (!xParagraph->getString().startsWith("toc3"))
+ continue;
+
+ bFound = true;
+ // This was 0, 3rd paragraph of ToC lost its bottom paragraph margin.
+ CPPUNIT_ASSERT_EQUAL(static_cast<sal_Int32>(212), getProperty<sal_Int32>(xParagraph, "ParaBottomMargin"));
+ }
+}
+
DECLARE_RTFEXPORT_TEST(testPageBackground, "page-background.rtf")
{
// The problem was that \background was ignored.
diff --git a/writerfilter/source/dmapper/DomainMapper_Impl.cxx b/writerfilter/source/dmapper/DomainMapper_Impl.cxx
index 3ae08a1f56cf..545a003bb3e3 100644
--- a/writerfilter/source/dmapper/DomainMapper_Impl.cxx
+++ b/writerfilter/source/dmapper/DomainMapper_Impl.cxx
@@ -1182,10 +1182,11 @@ void DomainMapper_Impl::finishParagraph( const PropertyMapPtr& pPropertyMap )
else
{
uno::Reference<text::XTextCursor> xCursor;
- if (m_bParaHadField && !m_bIsInComments)
+ if (m_bParaHadField && !m_bIsInComments && !xTOCMarkerCursor.is())
{
// Workaround to make sure char props of the field are not lost.
// Not relevant for editeng-based comments.
+ // Nor revelent for fields inside a TOC field.
OUString const sMarker("X");
xCursor = xTextAppend->getText()->createTextCursor();
if (xCursor.is())