[Libreoffice-commits] core.git: Branch 'libreoffice-5-0' - sw/qa writerfilter/source
Miklos Vajna
vmiklos at collabora.co.uk
Tue Feb 2 12:27:02 UTC 2016
sw/qa/extras/rtfimport/data/tdf96308-tabpos.rtf | 12 ++++++++++++
sw/qa/extras/rtfimport/rtfimport.cxx | 16 ++++++++++++++++
writerfilter/source/rtftok/rtfdocumentimpl.cxx | 2 ++
3 files changed, 30 insertions(+)
New commits:
commit cb64c29389939048666141eb4dddcfae4dd70ee5
Author: Miklos Vajna <vmiklos at collabora.co.uk>
Date: Fri Jan 8 11:23:48 2016 +0100
tdf#96308 RTF import: fix tab stop inheritance inside table cells
The tab stop list is a paragraph property, and RTF requires to repeat it
after \s as direct formatting, otherwise the parser should be assumed
that the tab stop list is cleared as a direct formatting.
Non-buffered text handles that in getDefaultSPRM(), handle it directly
in the RTF_PARD code for buffered text.
(cherry picked from commit 1ec88cdb82a28851c4b97d7f043d8bcec3c675e8)
Conflicts:
sw/qa/extras/rtfimport/rtfimport.cxx
Change-Id: I16b09bc4c177df5a74d16653b829b198aa1a800f
Reviewed-on: https://gerrit.libreoffice.org/21996
Tested-by: Jenkins <ci at libreoffice.org>
Reviewed-by: Caolán McNamara <caolanm at redhat.com>
Tested-by: Caolán McNamara <caolanm at redhat.com>
diff --git a/sw/qa/extras/rtfimport/data/tdf96308-tabpos.rtf b/sw/qa/extras/rtfimport/data/tdf96308-tabpos.rtf
new file mode 100644
index 0000000..59fdb8f
--- /dev/null
+++ b/sw/qa/extras/rtfimport/data/tdf96308-tabpos.rtf
@@ -0,0 +1,12 @@
+{\rtf1
+{\stylesheet
+{\s30\tx2552 Body Text 3;}
+}
+\deftab284
+\pard\plain\par
+\trowd\cellx2694\cellx4678 \pard\intbl\tx284 A1\cell
+\pard\intbl\tx2694 before\par
+\pard\plain\s30\intbl 7.\tab Champion\par
+\pard\plain\intbl after\cell\row
+\pard\par
+}
diff --git a/sw/qa/extras/rtfimport/rtfimport.cxx b/sw/qa/extras/rtfimport/rtfimport.cxx
index b718572..0544b1e 100644
--- a/sw/qa/extras/rtfimport/rtfimport.cxx
+++ b/sw/qa/extras/rtfimport/rtfimport.cxx
@@ -2350,6 +2350,22 @@ DECLARE_RTFIMPORT_TEST(testTdf59454, "tdf59454.rtf")
CPPUNIT_ASSERT_EQUAL(2, getPages());
}
+DECLARE_RTFIMPORT_TEST(testTdf96308Tabpos, "tdf96308-tabpos.rtf")
+{
+ // Get the tab stops of the second para in the B1 cell of the first table in the document.
+ uno::Reference<text::XTextTablesSupplier> xTextTablesSupplier(mxComponent, uno::UNO_QUERY);
+ uno::Reference<container::XIndexAccess> xTables(xTextTablesSupplier->getTextTables(), uno::UNO_QUERY);
+ uno::Reference<text::XTextTable> xTable(xTables->getByIndex(0), uno::UNO_QUERY);
+ uno::Reference<text::XTextRange> xCell(xTable->getCellByName("B1"), uno::UNO_QUERY);
+ uno::Reference<container::XEnumerationAccess> xParaEnumAccess(xCell->getText(), uno::UNO_QUERY);
+ uno::Reference<container::XEnumeration> xParaEnum = xParaEnumAccess->createEnumeration();
+ xParaEnum->nextElement();
+ uno::Reference<text::XTextRange> xPara(xParaEnum->nextElement(), uno::UNO_QUERY);
+ auto aTabStops = getProperty< uno::Sequence<style::TabStop> >(xPara, "ParaTabStops");
+ // This failed: tab stops were not deleted as direct formatting on the paragraph.
+ CPPUNIT_ASSERT(!aTabStops.hasElements());
+}
+
CPPUNIT_PLUGIN_IMPLEMENT();
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/writerfilter/source/rtftok/rtfdocumentimpl.cxx b/writerfilter/source/rtftok/rtfdocumentimpl.cxx
index 6dd2405..be5a966 100644
--- a/writerfilter/source/rtftok/rtfdocumentimpl.cxx
+++ b/writerfilter/source/rtftok/rtfdocumentimpl.cxx
@@ -2981,6 +2981,8 @@ RTFError RTFDocumentImpl::dispatchFlag(RTFKeyword nKeyword)
{
// We are still in a table.
m_aStates.top().aParagraphSprms.set(NS_ooxml::LN_inTbl, std::make_shared<RTFValue>(1));
+ // Ideally getDefaultSPRM() would take care of this, but it would not when we're buffering.
+ m_aStates.top().aParagraphSprms.set(NS_ooxml::LN_CT_PPrBase_tabs, std::make_shared<RTFValue>());
}
m_aStates.top().resetFrame();
More information about the Libreoffice-commits
mailing list