diff options
-rw-r--r-- | sw/qa/extras/rtfexport/data/tdf112211.rtf | 31 | ||||
-rw-r--r-- | sw/qa/extras/rtfexport/rtfexport.cxx | 8 | ||||
-rw-r--r-- | sw/qa/extras/rtfexport/rtfexport2.cxx | 16 | ||||
-rw-r--r-- | writerfilter/source/rtftok/rtfdispatchvalue.cxx | 10 | ||||
-rw-r--r-- | writerfilter/source/rtftok/rtfdocumentimpl.cxx | 6 | ||||
-rw-r--r-- | writerfilter/source/rtftok/rtfsprm.cxx | 1 |
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: |