summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMiklos Vajna <vmiklos@suse.cz>2012-12-24 15:06:15 +0100
committerMiklos Vajna <vmiklos@suse.cz>2012-12-24 15:22:55 +0100
commit4a507f732d82c188ad81b022cbe3037951e58ac3 (patch)
treef05afe92f305d3b44ab75888af0f39fa5f4abac8
parent9e0dbe9f8c1fa9d2c50895985fe2c374fa9364ac (diff)
fdo#57678 fix import of RTF_PARD between RTF_CELL and RTF_ROW
-rw-r--r--sw/qa/extras/rtfimport/data/fdo57678.rtf34
-rw-r--r--sw/qa/extras/rtfimport/rtfimport.cxx10
-rw-r--r--writerfilter/source/rtftok/rtfdocumentimpl.cxx12
3 files changed, 52 insertions, 4 deletions
diff --git a/sw/qa/extras/rtfimport/data/fdo57678.rtf b/sw/qa/extras/rtfimport/data/fdo57678.rtf
new file mode 100644
index 000000000000..e0a26cdfab8e
--- /dev/null
+++ b/sw/qa/extras/rtfimport/data/fdo57678.rtf
@@ -0,0 +1,34 @@
+{\rtf\ansi\deff0
+{\fonttbl{\f0 Times New Roman;}}
+{\colortbl;\red0\green0\blue0;}
+{\info
+}
+\paperw11907 \paperh16443 \deftab1298 \margl1701 \margr1701 \margt567 \margb1134 \pgnstart1\ftnnar \aftnnrlc \ftnstart1 \aftnstart1
+\trowd\trowd\cellx1701\cellx3402
+
+\intbl\itap1
+\qc{Cell 1:1}
+\cell\pard
+
+\intbl\itap1
+\qc{Cell 1:2}
+\cell\pard
+
+\row
+\pard\itap0
+\par \trowd\trowd \cellx1701\cellx3402\cellx5103\cellx6804
+
+\intbl\itap1
+{cell 1:1}
+\cell\pard
+
+{{\~}}\cell\pard
+
+{{\~}}\cell\pard
+
+{{\~}}\cell\pard
+
+\row
+\pard\itap0
+
+}
diff --git a/sw/qa/extras/rtfimport/rtfimport.cxx b/sw/qa/extras/rtfimport/rtfimport.cxx
index 0d0f3af054e5..8a904bac3c4f 100644
--- a/sw/qa/extras/rtfimport/rtfimport.cxx
+++ b/sw/qa/extras/rtfimport/rtfimport.cxx
@@ -131,6 +131,7 @@ public:
void testFdo49934();
void testFdo57886();
void testFdo58076();
+ void testFdo57678();
CPPUNIT_TEST_SUITE(Test);
#if !defined(MACOSX) && !defined(WNT)
@@ -212,6 +213,7 @@ void Test::run()
{"fdo49934.rtf", &Test::testFdo49934},
{"fdo57886.rtf", &Test::testFdo57886},
{"fdo58076.rtf", &Test::testFdo58076},
+ {"fdo57678.rtf", &Test::testFdo57678},
};
header();
for (unsigned int i = 0; i < SAL_N_ELEMENTS(aMethods); ++i)
@@ -980,6 +982,14 @@ void Test::testFdo58076()
CPPUNIT_ASSERT_EQUAL(sal_Int32(635), getProperty<sal_Int32>(xStyle, "BottomMargin"));
}
+void Test::testFdo57678()
+{
+ // Paragraphs of the two tables were not converted to tables.
+ uno::Reference<text::XTextTablesSupplier> xTextTablesSupplier(mxComponent, uno::UNO_QUERY);
+ uno::Reference<container::XIndexAccess> xIndexAccess(xTextTablesSupplier->getTextTables(), uno::UNO_QUERY);
+ CPPUNIT_ASSERT_EQUAL(sal_Int32(2), xIndexAccess->getCount());
+}
+
CPPUNIT_TEST_SUITE_REGISTRATION(Test);
CPPUNIT_PLUGIN_IMPLEMENT();
diff --git a/writerfilter/source/rtftok/rtfdocumentimpl.cxx b/writerfilter/source/rtftok/rtfdocumentimpl.cxx
index 4ad99cea78f2..e5f9c29764b5 100644
--- a/writerfilter/source/rtftok/rtfdocumentimpl.cxx
+++ b/writerfilter/source/rtftok/rtfdocumentimpl.cxx
@@ -2078,11 +2078,15 @@ int RTFDocumentImpl::dispatchFlag(RTFKeyword nKeyword)
case RTF_PARD:
if (m_bHadPicture)
dispatchSymbol(RTF_PAR);
- m_aStates.top().aParagraphSprms = m_aDefaultState.aParagraphSprms;
- m_aStates.top().aParagraphAttributes = m_aDefaultState.aParagraphAttributes;
+ // \pard is allowed between \cell and \row, but in that case it should not reset the fact that we're inside a table.
+ if (m_aStates.top().nCells == 0)
+ {
+ m_aStates.top().aParagraphSprms = m_aDefaultState.aParagraphSprms;
+ m_aStates.top().aParagraphAttributes = m_aDefaultState.aParagraphAttributes;
+ if (m_aStates.top().nDestinationState != DESTINATION_SHAPETEXT)
+ m_pCurrentBuffer = 0;
+ }
m_aStates.top().resetFrame();
- if (m_aStates.top().nDestinationState != DESTINATION_SHAPETEXT)
- m_pCurrentBuffer = 0;
break;
case RTF_SECTD:
m_aStates.top().aSectionSprms = m_aDefaultState.aSectionSprms;