From 5107bc515fba130bf4a488324f97971789a92f37 Mon Sep 17 00:00:00 2001 From: Justin Luth Date: Fri, 28 May 2021 16:03:52 +0200 Subject: tdf#138302 partial revert tdf#108496: DOCX: redesign of override in lists LO 6.4.5 commit cf13fe3e6f6a40f6db064d65d4514d13a23a31f0 was only concerned about DOCX, but just elinated shared code. So restore the shared code and just don't execute it for DOCX. It doesn't look like RTF was working before this, but this does fix DOC format. I looked for existing unit tests in rtf and doc, but none were found that hit this code. Change-Id: Id624f73181384f38e1ef9f27575e0fb82eea19c7 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/116349 Tested-by: Jenkins Reviewed-by: Vasily Melenchuk (cherry picked from commit f49e5902a3737c02fabf5bec23243ccb126426c4) Reviewed-on: https://gerrit.libreoffice.org/c/core/+/116170 Reviewed-by: Justin Luth --- .../ww8export/data/tdf138302_restartNumbering.odt | Bin 0 -> 14081 bytes sw/qa/extras/ww8export/ww8export3.cxx | 6 ++++++ sw/source/filter/ww8/wrtw8num.cxx | 11 +++++++++++ sw/source/filter/ww8/wrtww8.hxx | 1 + sw/source/filter/ww8/ww8atr.cxx | 7 +++++++ 5 files changed, 25 insertions(+) create mode 100644 sw/qa/extras/ww8export/data/tdf138302_restartNumbering.odt diff --git a/sw/qa/extras/ww8export/data/tdf138302_restartNumbering.odt b/sw/qa/extras/ww8export/data/tdf138302_restartNumbering.odt new file mode 100644 index 000000000000..8c99963616a7 Binary files /dev/null and b/sw/qa/extras/ww8export/data/tdf138302_restartNumbering.odt differ diff --git a/sw/qa/extras/ww8export/ww8export3.cxx b/sw/qa/extras/ww8export/ww8export3.cxx index c16272c2707d..08f7cf5b1614 100644 --- a/sw/qa/extras/ww8export/ww8export3.cxx +++ b/sw/qa/extras/ww8export/ww8export3.cxx @@ -185,6 +185,12 @@ DECLARE_WW8EXPORT_TEST(testdf79553_lineNumbers, "tdf79553_lineNumbers.doc") CPPUNIT_ASSERT_MESSAGE("automatic distance", nValue > 0); } +DECLARE_WW8EXPORT_TEST(tesTdf138302_restartNumbering, "tdf138302_restartNumbering.odt") +{ + uno::Reference xPara(getParagraph(8), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(OUString("1."), getProperty(xPara, "ListLabelString")); +} + DECLARE_WW8EXPORT_TEST(testTdf122429_header, "tdf122429_header.doc") { uno::Reference pageStyles = getStyles("PageStyles"); diff --git a/sw/source/filter/ww8/wrtw8num.cxx b/sw/source/filter/ww8/wrtw8num.cxx index c3f8eabe9fd9..7c1866f74718 100644 --- a/sw/source/filter/ww8/wrtw8num.cxx +++ b/sw/source/filter/ww8/wrtw8num.cxx @@ -56,6 +56,17 @@ SwNumRule* MSWordExportBase::DuplicateNumRuleImpl(const SwNumRule *pRule) return pMyNumRule; } +sal_uInt16 MSWordExportBase::DuplicateNumRule(const SwNumRule* pRule, sal_uInt8 nLevel, sal_uInt16 nVal) +{ + SwNumRule* const pMyNumRule = DuplicateNumRuleImpl(pRule); + + SwNumFormat aNumFormat(pMyNumRule->Get(nLevel)); + aNumFormat.SetStart(nVal); + pMyNumRule->Set(nLevel, aNumFormat); + + return GetNumberingId(*pMyNumRule); +} + // multiple SwList can be based on the same SwNumRule; ensure one w:abstractNum // per SwList sal_uInt16 MSWordExportBase::DuplicateAbsNum(OUString const& rListId, diff --git a/sw/source/filter/ww8/wrtww8.hxx b/sw/source/filter/ww8/wrtww8.hxx index 1baa627ece71..69f9f2b1a2ed 100644 --- a/sw/source/filter/ww8/wrtww8.hxx +++ b/sw/source/filter/ww8/wrtww8.hxx @@ -651,6 +651,7 @@ public: /// List is set to restart at a particular value so for export make a /// completely new list based on this one and export that instead, /// which duplicates words behaviour in this respect. + sal_uInt16 DuplicateNumRule(const SwNumRule* pRule, sal_uInt8 nLevel, sal_uInt16 nVal); SwNumRule * DuplicateNumRuleImpl(const SwNumRule *pRule); /// check if a new abstractNum is needed for this list diff --git a/sw/source/filter/ww8/ww8atr.cxx b/sw/source/filter/ww8/ww8atr.cxx index c1959186979c..14afa9919405 100644 --- a/sw/source/filter/ww8/ww8atr.cxx +++ b/sw/source/filter/ww8/ww8atr.cxx @@ -3627,6 +3627,13 @@ void AttributeOutputBase::ParaNumRule( const SwNumRuleItem& rNumRule ) } } } + else if (pTextNd->IsListRestart()) + { + sal_uInt16 nStartWith = static_cast(pTextNd->GetActualListStartValue()); + nNumId = GetExport().DuplicateNumRule(pRule, nLvl, nStartWith); + if (USHRT_MAX != nNumId) + ++nNumId; + } } else { -- cgit