summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--sw/qa/extras/rtfexport/data/tdf112211.rtf31
-rw-r--r--sw/qa/extras/rtfexport/rtfexport.cxx8
-rw-r--r--sw/qa/extras/rtfexport/rtfexport2.cxx16
-rw-r--r--writerfilter/source/rtftok/rtfdispatchvalue.cxx10
-rw-r--r--writerfilter/source/rtftok/rtfdocumentimpl.cxx6
-rw-r--r--writerfilter/source/rtftok/rtfsprm.cxx1
6 files changed, 59 insertions, 13 deletions
diff --git a/sw/qa/extras/rtfexport/data/tdf112211.rtf b/sw/qa/extras/rtfexport/data/tdf112211.rtf
new file mode 100644
index 000000000000..d5b8010e953b
--- /dev/null
+++ b/sw/qa/extras/rtfexport/data/tdf112211.rtf
@@ -0,0 +1,31 @@
+{\rtf1\adeflang1037\ansi\ansicpg1252\uc1\adeff1\deff0\stshfdbch0\stshfloch0\stshfhich0\stshfbi0\deflang1033
+{\fonttbl
+{\f0\fbidi \froman\fcharset238\fprq2 Times New Roman;}
+{\f1\fbidi \fswiss\fcharset238\fprq2 Arial;}
+{\f2\fbidi \fmodern\fcharset238\fprq1 Courier New;}
+{\f3\fbidi \froman\fcharset2\fprq2 Symbol;}
+}
+\noqfpromote
+{\stylesheet
+{\s66 \li720 List Paragraph;}
+}
+{\*\listtable
+{\list\listtemplateid1644085804\listhybrid
+{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0
+\levelstartat1\levelspace0\levelindent0
+{\leveltext\leveltemplateid67698689\'01\u-3913 ?;}
+{\levelnumbers;}
+\f3\fbias0 \fi-360\li720 }
+{\listname ;}
+\listid2028170298}
+}
+{\*\listoverridetable
+{\listoverride\listid2028170298\listoverridecount0\ls1}
+}
+\paperw12240\paperh15840\margl1440\margr1440\margt1800\margb1440\gutter0\ltrsect
+\pard\plain \li0
+{Instance Size\par}
+\pard\plain \s66 \fi-360\li720
+\ls1
+{P\par}
+}
diff --git a/sw/qa/extras/rtfexport/rtfexport.cxx b/sw/qa/extras/rtfexport/rtfexport.cxx
index 7b9107819005..6e0960f39116 100644
--- a/sw/qa/extras/rtfexport/rtfexport.cxx
+++ b/sw/qa/extras/rtfexport/rtfexport.cxx
@@ -1271,6 +1271,14 @@ DECLARE_RTFEXPORT_TEST(testTdf109790, "tdf109790.rtf")
CPPUNIT_ASSERT_EQUAL(10.f, getProperty<float>(getRun(getParagraphOfText(1, xCell->getText()), 1), "CharHeight"));
}
+DECLARE_RTFEXPORT_TEST(testTdf112211, "tdf112211.rtf")
+{
+ // This was 0, \fi in a list level definition was not imported.
+ auto xRules = getProperty< uno::Reference<container::XIndexAccess> >(getStyles("NumberingStyles")->getByName("WWNum1"), "NumberingRules");
+ comphelper::SequenceAsHashMap aRule(xRules->getByIndex(0));
+ CPPUNIT_ASSERT_EQUAL(static_cast<sal_Int32>(-635), aRule["FirstLineIndent"].get<sal_Int32>());
+}
+
CPPUNIT_PLUGIN_IMPLEMENT();
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sw/qa/extras/rtfexport/rtfexport2.cxx b/sw/qa/extras/rtfexport/rtfexport2.cxx
index fba38e6c72cb..85e101087444 100644
--- a/sw/qa/extras/rtfexport/rtfexport2.cxx
+++ b/sw/qa/extras/rtfexport/rtfexport2.cxx
@@ -973,11 +973,10 @@ DECLARE_RTFEXPORT_TEST(testN825305, "n825305.rtf")
DECLARE_RTFEXPORT_TEST(testTdf106953, "tdf106953.rtf")
{
- CPPUNIT_ASSERT_EQUAL(static_cast<sal_Int32>(1270), getProperty<sal_Int32>(getParagraph(1), "ParaLeftMargin"));
- uno::Reference<beans::XPropertyState> xPropertyState(getParagraph(1), uno::UNO_QUERY);
- beans::PropertyState ePropertyState = xPropertyState->getPropertyState("ParaLeftMargin");
- // Was beans::PropertyState_DEFAULT_VALUE.
- CPPUNIT_ASSERT_EQUAL(beans::PropertyState_DIRECT_VALUE, ePropertyState);
+ auto xRules = getProperty< uno::Reference<container::XIndexAccess> >(getStyles("NumberingStyles")->getByName("WWNum1"), "NumberingRules");
+ comphelper::SequenceAsHashMap aRule(xRules->getByIndex(0));
+ CPPUNIT_ASSERT_EQUAL(static_cast<sal_Int32>(1270), aRule["IndentAt"].get<sal_Int32>());
+ CPPUNIT_ASSERT_EQUAL(static_cast<sal_Int32>(0), aRule["FirstLineIndent"].get<sal_Int32>());
}
DECLARE_RTFEXPORT_TEST(testTdf112208, "tdf112208_hangingIndent.rtf")
@@ -1788,9 +1787,10 @@ DECLARE_RTFEXPORT_TEST(testTdf104317, "tdf104317.rtf")
DECLARE_RTFEXPORT_TEST(testTdf104744, "tdf104744.rtf")
{
- // This was 0, as an unexpected "left margin is 0" token was created during
- // import.
- CPPUNIT_ASSERT_EQUAL(static_cast<sal_Int32>(1270), getProperty<sal_Int32>(getParagraph(1), "ParaLeftMargin"));
+ auto xRules = getProperty< uno::Reference<container::XIndexAccess> >(getStyles("NumberingStyles")->getByName("WWNum1"), "NumberingRules");
+ comphelper::SequenceAsHashMap aRule(xRules->getByIndex(0));
+ // This was 0.
+ CPPUNIT_ASSERT_EQUAL(static_cast<sal_Int32>(1270), aRule["IndentAt"].get<sal_Int32>());
}
DECLARE_RTFEXPORT_TEST(testTdf105852, "tdf105852.rtf")
diff --git a/writerfilter/source/rtftok/rtfdispatchvalue.cxx b/writerfilter/source/rtftok/rtfdispatchvalue.cxx
index bebaee85107e..70d6cbf46f2f 100644
--- a/writerfilter/source/rtftok/rtfdispatchvalue.cxx
+++ b/writerfilter/source/rtftok/rtfdispatchvalue.cxx
@@ -1373,8 +1373,16 @@ RTFError RTFDocumentImpl::dispatchValue(RTFKeyword nKeyword, int nParam)
}
break;
case RTF_FI:
- putNestedAttribute(m_aStates.top().aParagraphSprms, NS_ooxml::LN_CT_PPrBase_ind, NS_ooxml::LN_CT_Ind_firstLine, pIntValue);
+ {
+ if (m_aStates.top().eDestination == Destination::LISTLEVEL)
+ {
+ if (m_aStates.top().bLevelNumbersValid)
+ putNestedAttribute(m_aStates.top().aTableSprms, NS_ooxml::LN_CT_PPrBase_ind, NS_ooxml::LN_CT_Ind_firstLine, pIntValue);
+ }
+ else
+ putNestedAttribute(m_aStates.top().aParagraphSprms, NS_ooxml::LN_CT_PPrBase_ind, NS_ooxml::LN_CT_Ind_firstLine, pIntValue);
break;
+ }
case RTF_LI:
{
putNestedAttribute(m_aStates.top().aParagraphSprms, NS_ooxml::LN_CT_PPrBase_ind, NS_ooxml::LN_CT_Ind_left, pIntValue);
diff --git a/writerfilter/source/rtftok/rtfdocumentimpl.cxx b/writerfilter/source/rtftok/rtfdocumentimpl.cxx
index 575562fb2eca..4c6f03ad06c8 100644
--- a/writerfilter/source/rtftok/rtfdocumentimpl.cxx
+++ b/writerfilter/source/rtftok/rtfdocumentimpl.cxx
@@ -2976,9 +2976,9 @@ RTFError RTFDocumentImpl::popState()
if (!m_aStates.empty())
{
m_aStates.top().aTableSprms = aState.aTableSprms;
- if (aState.eDestination == Destination::LEVELNUMBERS)
- // Both current and parent state is levelnumbers: mark parent
- // as invalid as well if necessary.
+ if (m_aStates.top().eDestination == Destination::LEVELNUMBERS || m_aStates.top().eDestination == Destination::LISTLEVEL)
+ // Parent state is level number or list level, current state is
+ // level numbers: mark parent as invalid as well if necessary.
m_aStates.top().bLevelNumbersValid = aState.bLevelNumbersValid;
}
break;
diff --git a/writerfilter/source/rtftok/rtfsprm.cxx b/writerfilter/source/rtftok/rtfsprm.cxx
index 34293344240b..d3faf3a145fd 100644
--- a/writerfilter/source/rtftok/rtfsprm.cxx
+++ b/writerfilter/source/rtftok/rtfsprm.cxx
@@ -164,7 +164,6 @@ static bool isSPRMDeduplicateBlacklist(Id nId)
// Erasing these just because they equal to the style one is
// problematic, as then the used value won't be from the style, but
// possibly from the numbering.
- case NS_ooxml::LN_CT_Ind_left:
case NS_ooxml::LN_CT_Ind_right:
case NS_ooxml::LN_CT_Ind_firstLine:
case NS_ooxml::LN_CT_Ind_hanging: