summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMiklos Vajna <vmiklos@suse.cz>2013-07-27 00:06:51 +0200
committerFridrich Strba <fridrich@documentfoundation.org>2013-07-28 13:05:16 +0000
commit336efde38d46fcf57ae7937c2ce4ffd35f052a10 (patch)
treeff8894d8010074c1f18b10af00435a4f9465e26d
parent9f2d5c46e372c4337ba04f627c32bac007431eb5 (diff)
fdo#67365 fix RTF import of inherited row props wrt unusual group stack
Inheriting row properties (in particular, the number of cells) should be independent from the RTF parser stack, but they were not. Also fix two more problems once the lost rows reappeared: - unequal cell widths were equal - some cells were aligned to center instead of to left (cherry picked from commits 494937776956370eda868f91922c4cff34656050, 986ebb668d45a42bc1e8b744980619857e891ef5, 165cd8332a0844314e698cf59936799676257ea1 and 83e0489217fd4b0fcf3ab62d002257b47e7a6459) Conflicts: sw/qa/extras/rtfimport/rtfimport.cxx Change-Id: I273d89a0708601a38dd8bda734a72b4c92da2cc4 Reviewed-on: https://gerrit.libreoffice.org/5137 Reviewed-by: Fridrich Strba <fridrich@documentfoundation.org> Tested-by: Fridrich Strba <fridrich@documentfoundation.org>
-rwxr-xr-xsw/qa/extras/rtfimport/data/fdo67365.rtf35
-rw-r--r--sw/qa/extras/rtfimport/rtfimport.cxx17
-rw-r--r--writerfilter/source/rtftok/rtfdocumentimpl.cxx8
3 files changed, 58 insertions, 2 deletions
diff --git a/sw/qa/extras/rtfimport/data/fdo67365.rtf b/sw/qa/extras/rtfimport/data/fdo67365.rtf
new file mode 100755
index 000000000000..07755cc4bb1d
--- /dev/null
+++ b/sw/qa/extras/rtfimport/data/fdo67365.rtf
@@ -0,0 +1,35 @@
+{\rtf1
+\paperw11906\paperh16838\margl1134\margr567\margt851\margb567 \widowctrl\ftnbj\aenddoc\hyphcaps0\formshade\viewkind1\viewscale100\pgbrdrhead\pgbrdrfoot \fet0
+\sectd \linex0\headery397\footery397\colsx709\endnhere\sectdefaultcl
+\trowd \trgaph28\trleft-28\trbrdrt\brdrs\brdrw10 \trbrdrl\brdrs\brdrw10 \trbrdrb\brdrs\brdrw10 \trbrdrr\brdrs\brdrw10 \trbrdrh\brdrs\brdrw10 \trbrdrv\brdrs\brdrw10 \clvertalt\clbrdrt\brdrs\brdrw10 \clbrdrl\brdrs\brdrw10 \clbrdrb\brdrs\brdrw10 \clbrdrr \brdrs\brdrw10 \cltxlrtb \cellx5387\clvertalt\clbrdrt\brdrs\brdrw10 \clbrdrl\brdrs\brdrw10 \clbrdrb\brdrs\brdrw10 \clbrdrr\brdrs\brdrw10 \cltxlrtb \cellx10206
+\pard \li57\widctlpar\intbl\adjustright
+{\fs22 A1\cell }
+\pard \qc\widctlpar\intbl\adjustright
+{\fs22
+\cell }
+\pard \widctlpar\intbl\adjustright
+{\fs22 \row }
+\trowd \trgaph28\trleft-28\trbrdrt\brdrs\brdrw10 \trbrdrl\brdrs\brdrw10 \trbrdrb\brdrs\brdrw10 \trbrdrr\brdrs\brdrw10 \trbrdrh\brdrs\brdrw10 \trbrdrv\brdrs\brdrw10 \clvertalt\clbrdrt\brdrs\brdrw10 \clbrdrl\brdrs\brdrw10 \clbrdrb\brdrs\brdrw10 \clbrdrr\brdrs\brdrw10 \cltxlrtb \cellx5387\clvertalt\clbrdrt\brdrs\brdrw10 \clbrdrl\brdrs\brdrw10 \clbrdrb\brdrs\brdrw10 \clbrdrr\brdrs\brdrw10 \cltxlrtb \cellx10206
+\pard \li57\widctlpar\intbl\adjustright
+{
+\fs22 A2\cell }
+\pard \qc\widctlpar\intbl\adjustright
+{\fs22 \cell }
+\pard \widctlpar\intbl\adjustright
+{\fs22 \row }
+\pard \li57\widctlpar\intbl\adjustright
+{\fs22 A3\cell }
+\pard
+\qc\widctlpar\intbl\adjustright
+{\fs22 \cell }
+\pard \widctlpar\intbl\adjustright
+{\fs22 \row }
+\trowd \trgaph28\trleft-28\trbrdrt\brdrs\brdrw10 \trbrdrl\brdrs\brdrw10 \trbrdrb\brdrs\brdrw10 \trbrdrr\brdrs\brdrw10 \trbrdrh\brdrs\brdrw10 \trbrdrv \brdrs\brdrw10 \clvertalt\clbrdrt\brdrs\brdrw10 \clbrdrl\brdrs\brdrw10 \clbrdrb\brdrs\brdrw10 \clbrdrr\brdrs\brdrw10 \cltxlrtb \cellx5387\clvertalt\clbrdrt\brdrs\brdrw10 \clbrdrl\brdrs\brdrw10 \clbrdrb\brdrs\brdrw10 \clbrdrr\brdrs\brdrw10 \cltxlrtb \cellx10206
+\pard \li57\widctlpar\intbl\adjustright
+{\fs22 A4\cell \cell }
+\pard \widctlpar\intbl\adjustright
+{\fs22 \row }
+\pard \qj\sb120\widctlpar\adjustright
+foo
+\par
+}
diff --git a/sw/qa/extras/rtfimport/rtfimport.cxx b/sw/qa/extras/rtfimport/rtfimport.cxx
index 9a6974f15767..455c3a28532b 100644
--- a/sw/qa/extras/rtfimport/rtfimport.cxx
+++ b/sw/qa/extras/rtfimport/rtfimport.cxx
@@ -147,6 +147,7 @@ public:
void testFdo66565();
void testFdo54900();
void testFdo64637();
+ void testFdo67365();
CPPUNIT_TEST_SUITE(Test);
#if !defined(MACOSX) && !defined(WNT)
@@ -281,6 +282,7 @@ void Test::run()
{"fdo66565.rtf", &Test::testFdo66565},
{"fdo54900.rtf", &Test::testFdo54900},
{"fdo64637.rtf", &Test::testFdo64637},
+ {"fdo67365.rtf", &Test::testFdo67365},
};
header();
for (unsigned int i = 0; i < SAL_N_ELEMENTS(aMethods); ++i)
@@ -1353,6 +1355,21 @@ void Test::testFdo64637()
CPPUNIT_ASSERT_EQUAL(OUString("bbb"), getProperty<OUString>(xPropertySet, "Company"));
}
+void Test::testFdo67365()
+{
+ 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<table::XTableRows> xRows = xTable->getRows();
+ // The table only had 3 rows.
+ CPPUNIT_ASSERT_EQUAL(sal_Int32(4), xRows->getCount());
+ // This was 4999, i.e. the two cells of the row had equal widths instead of a larger and a smaller cell.
+ CPPUNIT_ASSERT_EQUAL(sal_Int16(5290), getProperty< uno::Sequence<text::TableColumnSeparator> >(xRows->getByIndex(2), "TableColumnSeparators")[0].Position);
+ uno::Reference<text::XTextRange> xCell(xTable->getCellByName("A2"), uno::UNO_QUERY);
+ // Paragraph was aligned to center, should be left.
+ CPPUNIT_ASSERT_EQUAL(style::ParagraphAdjust_LEFT, static_cast<style::ParagraphAdjust>(getProperty<sal_Int16>(getParagraphOfText(1, xCell->getText()), "ParaAdjust")));
+}
+
CPPUNIT_TEST_SUITE_REGISTRATION(Test);
CPPUNIT_PLUGIN_IMPLEMENT();
diff --git a/writerfilter/source/rtftok/rtfdocumentimpl.cxx b/writerfilter/source/rtftok/rtfdocumentimpl.cxx
index 769191b45241..5ff313230ace 100644
--- a/writerfilter/source/rtftok/rtfdocumentimpl.cxx
+++ b/writerfilter/source/rtftok/rtfdocumentimpl.cxx
@@ -1838,8 +1838,6 @@ int RTFDocumentImpl::dispatchSymbol(RTFKeyword nKeyword)
m_aStates.top().aTableCellsSprms = m_aStates.top().aTableInheritingCellsSprms;
m_aStates.top().aTableCellsAttributes = m_aStates.top().aTableInheritingCellsAttributes;
m_aStates.top().nCells = m_aStates.top().nInheritingCells;
- // This can't be the first row, and we need cell width only there
- while(m_aStates.top().aTableRowSprms.erase(NS_ooxml::LN_CT_TblGridBase_gridCol)) ;
}
for (int i = 0; i < m_aStates.top().nCells; ++i)
{
@@ -2260,6 +2258,7 @@ int RTFDocumentImpl::dispatchFlag(RTFKeyword nKeyword)
lcl_eraseNestedAttribute(m_aStates.top().aParagraphSprms, NS_ooxml::LN_CT_PPrBase_spacing, NS_ooxml::LN_CT_Spacing_after);
m_aStates.top().aParagraphSprms.erase(NS_sprm::LN_PDxaLeft);
m_aStates.top().aParagraphSprms.erase(NS_sprm::LN_PDxaRight);
+ m_aStates.top().aParagraphSprms.erase(NS_sprm::LN_PJc);
}
m_aStates.top().resetFrame();
break;
@@ -4633,6 +4632,11 @@ int RTFDocumentImpl::popState()
m_aStates.top().nCells = aState.nCells;
m_aStates.top().aTableCellsSprms = aState.aTableCellsSprms;
m_aStates.top().aTableCellsAttributes = aState.aTableCellsAttributes;
+
+ // Also the inherited properties should be kept accross groups.
+ m_aStates.top().aTableInheritingCellsSprms = aState.aTableInheritingCellsSprms;
+ m_aStates.top().aTableInheritingCellsAttributes = aState.aTableInheritingCellsAttributes;
+ m_aStates.top().nInheritingCells = aState.nInheritingCells;
}
return 0;