summaryrefslogtreecommitdiff
path: root/writerfilter
diff options
context:
space:
mode:
authorLászló Németh <nemeth@numbertext.org>2020-06-12 13:14:51 +0200
committerXisco Fauli <xiscofauli@libreoffice.org>2020-06-16 13:42:37 +0200
commiteb90d729178b3acec3f0045b96e1011d57d57bb6 (patch)
tree85e17f5c2b07cfb72f6dcc4c7da4da50bc62a038 /writerfilter
parent7ed62ccc2bc436001bbf033db22ec2f19c70fdf2 (diff)
tdf#76817: DOCX import: fix custom chapter numbering
When one of the parents of the default Heading style has got custom paragraph style instead of the default Heading 1 – Heading 10, apply direct numbering again to avoid bad or missing numbering. Change-Id: I7e94600b5ac2cbf593a95eda6c0d6cd9d731dd75 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/96199 Tested-by: Jenkins Reviewed-by: László Németh <nemeth@numbertext.org> (cherry picked from commit de1b634a151c198584dc152676183f519c50a2da) Reviewed-on: https://gerrit.libreoffice.org/c/core/+/96212 Reviewed-by: Xisco Fauli <xiscofauli@libreoffice.org>
Diffstat (limited to 'writerfilter')
-rw-r--r--writerfilter/source/dmapper/DomainMapper_Impl.cxx2
-rw-r--r--writerfilter/source/dmapper/NumberingManager.cxx5
-rw-r--r--writerfilter/source/dmapper/NumberingManager.hxx5
3 files changed, 11 insertions, 1 deletions
diff --git a/writerfilter/source/dmapper/DomainMapper_Impl.cxx b/writerfilter/source/dmapper/DomainMapper_Impl.cxx
index 0fee7eb801aa..a059c623b4c9 100644
--- a/writerfilter/source/dmapper/DomainMapper_Impl.cxx
+++ b/writerfilter/source/dmapper/DomainMapper_Impl.cxx
@@ -1404,7 +1404,7 @@ void DomainMapper_Impl::finishParagraph( const PropertyMapPtr& pPropertyMap, con
// Since LO7.0/tdf#131321 fixed the loss of numbering in styles, this OUGHT to be obsolete,
// but now other new/critical LO7.0 code expects it, and perhaps some corner cases still need it as well.
// So we skip it only for default outline styles, which are recognized by NumberingManager.
- if (!GetCurrentParaStyleName().startsWith("Heading "))
+ if (!GetCurrentParaStyleName().startsWith("Heading ") || nListLevel >= pList->GetDefaultParentLevels())
pParaContext->Insert( PROP_NUMBERING_STYLE_NAME, uno::makeAny(pList->GetStyleName()), true );
}
else if ( !pList->isOutlineNumbering(nListLevel) )
diff --git a/writerfilter/source/dmapper/NumberingManager.cxx b/writerfilter/source/dmapper/NumberingManager.cxx
index 916583eec02f..309ca8f46d80 100644
--- a/writerfilter/source/dmapper/NumberingManager.cxx
+++ b/writerfilter/source/dmapper/NumberingManager.cxx
@@ -400,6 +400,7 @@ const OUString& AbstractListDef::MapListId(OUString const& rId)
ListDef::ListDef( ) : AbstractListDef( )
{
+ m_nDefaultParentLevels = WW_OUTLINE_MAX + 1;
}
ListDef::~ListDef( )
@@ -572,6 +573,10 @@ void ListDef::CreateNumberingRules( DomainMapper& rDMapper,
xOutlineRules->replaceByIndex(nLevel, uno::makeAny(comphelper::containerToSequence(aLvlProps)));
}
+ // first level with custom pStyle
+ if ( WW_OUTLINE_MAX + 1 == m_nDefaultParentLevels && pAbsLevel->GetParaStyle( ) )
+ m_nDefaultParentLevels = nLevel;
+
nLevel++;
}
diff --git a/writerfilter/source/dmapper/NumberingManager.hxx b/writerfilter/source/dmapper/NumberingManager.hxx
index 070086daa52b..6173f1431f0e 100644
--- a/writerfilter/source/dmapper/NumberingManager.hxx
+++ b/writerfilter/source/dmapper/NumberingManager.hxx
@@ -180,6 +180,9 @@ private:
/// mapped list style name
OUString m_StyleName;
+ /// not custom outline parent levels
+ sal_Int16 m_nDefaultParentLevels;
+
public:
typedef tools::SvRef< ListDef > Pointer;
@@ -194,6 +197,8 @@ public:
OUString GetStyleName() const { return m_StyleName; };
OUString GetStyleName(sal_Int32 nId, css::uno::Reference<css::container::XNameContainer> const& xStyles);
+ sal_Int16 GetDefaultParentLevels() const { return m_nDefaultParentLevels; };
+
css::uno::Sequence< css::uno::Sequence<css::beans::PropertyValue> > GetMergedPropertyValues();
void CreateNumberingRules(DomainMapper& rDMapper, css::uno::Reference<css::lang::XMultiServiceFactory> const& xFactory);