diff options
author | Miklos Vajna <vmiklos@collabora.co.uk> | 2017-12-18 22:29:04 +0100 |
---|---|---|
committer | Miklos Vajna <vmiklos@collabora.co.uk> | 2017-12-19 09:10:18 +0100 |
commit | a0bf35f7c0eedbe04783285a4a7071e68baeb7fe (patch) | |
tree | 1a9fdadbf3fa48b22cf477c004d70ea2a72073e3 | |
parent | fadd9d449719a97dc8d99d96b0ee663ae92759f8 (diff) |
tdf#113547 DOCX import: fix handling of stub numbering overrides
Regression from commit c72a1a74b5b1064fc9cdf9994b11fce26d866e26
(Related: tdf#112211 DOCX import: fix handling of missing first ind in
<w:lvl>, 2017-09-19), now that a numbering level can have default
properties, we need to differentiate between the case when the level has
real properties or it has only default properties.
Merging of properties is not necessary when the abstract numbering has
properties, but the "override" has default properties only.
Change-Id: Idbcbd0f66932514612e11fe82377f2b68ac9e403
Reviewed-on: https://gerrit.libreoffice.org/46751
Reviewed-by: Miklos Vajna <vmiklos@collabora.co.uk>
Tested-by: Jenkins <ci@libreoffice.org>
-rw-r--r-- | sw/qa/extras/ooxmlexport/data/tdf113547.docx | bin | 0 -> 14424 bytes | |||
-rw-r--r-- | sw/qa/extras/ooxmlexport/ooxmlexport11.cxx | 11 | ||||
-rw-r--r-- | writerfilter/source/dmapper/NumberingManager.cxx | 10 | ||||
-rw-r--r-- | writerfilter/source/dmapper/NumberingManager.hxx | 3 |
4 files changed, 22 insertions, 2 deletions
diff --git a/sw/qa/extras/ooxmlexport/data/tdf113547.docx b/sw/qa/extras/ooxmlexport/data/tdf113547.docx Binary files differnew file mode 100644 index 000000000000..7b35ad72ba44 --- /dev/null +++ b/sw/qa/extras/ooxmlexport/data/tdf113547.docx diff --git a/sw/qa/extras/ooxmlexport/ooxmlexport11.cxx b/sw/qa/extras/ooxmlexport/ooxmlexport11.cxx index c750e5b74e50..8a711978fb63 100644 --- a/sw/qa/extras/ooxmlexport/ooxmlexport11.cxx +++ b/sw/qa/extras/ooxmlexport/ooxmlexport11.cxx @@ -170,6 +170,17 @@ DECLARE_OOXMLEXPORT_TEST(testTdf113183, "tdf113183.docx") "HoriOrientPosition")); } +DECLARE_OOXMLEXPORT_TEST(testTdf113547, "tdf113547.docx") +{ + uno::Reference<beans::XPropertySet> xPropertySet( + getStyles("NumberingStyles")->getByName("WWNum1"), uno::UNO_QUERY); + uno::Reference<container::XIndexAccess> xLevels( + xPropertySet->getPropertyValue("NumberingRules"), uno::UNO_QUERY); + comphelper::SequenceAsHashMap aProps(xLevels->getByIndex(0)); // 1st level + // This was 0, first-line left margin of the numbering was lost. + CPPUNIT_ASSERT_EQUAL(static_cast<sal_Int32>(-635), aProps["FirstLineIndent"].get<sal_Int32>()); +} + CPPUNIT_PLUGIN_IMPLEMENT(); /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/writerfilter/source/dmapper/NumberingManager.cxx b/writerfilter/source/dmapper/NumberingManager.cxx index 8754b489a9ec..809717e62659 100644 --- a/writerfilter/source/dmapper/NumberingManager.cxx +++ b/writerfilter/source/dmapper/NumberingManager.cxx @@ -119,6 +119,12 @@ void ListLevel::SetValue( Id nId, sal_Int32 nValue ) default: OSL_FAIL( "this line should never be reached"); } + m_bHasValues = true; +} + +bool ListLevel::HasValues() const +{ + return m_bHasValues; } void ListLevel::SetParaStyle( const std::shared_ptr< StyleSheetEntry >& pStyle ) @@ -467,9 +473,9 @@ uno::Sequence< uno::Sequence< beans::PropertyValue > > ListDef::GetPropertyValue for ( sal_Int32 i = 0; i < nThisCount && i < nAbstractCount; i++ ) { uno::Sequence< beans::PropertyValue > level = aThis[i]; - if ( level.hasElements() ) + if (level.hasElements() && GetLevel(i)->HasValues()) { - // If the element contains something, merge it + // If the element contains something, merge it, but ignore stub overrides. lcl_mergeProperties( level, aAbstract[i] ); } } diff --git a/writerfilter/source/dmapper/NumberingManager.hxx b/writerfilter/source/dmapper/NumberingManager.hxx index 026164122e85..eabf4a0276c6 100644 --- a/writerfilter/source/dmapper/NumberingManager.hxx +++ b/writerfilter/source/dmapper/NumberingManager.hxx @@ -52,6 +52,7 @@ class ListLevel : public PropertyMap sal_Int32 m_nTabstop; std::shared_ptr< StyleSheetEntry > m_pParaStyle; bool m_outline; + bool m_bHasValues = false; public: @@ -80,6 +81,8 @@ public: const OUString& GetBulletChar( ) { return m_sBulletChar; }; const std::shared_ptr< StyleSheetEntry >& GetParaStyle( ) { return m_pParaStyle; }; bool isOutlineNumbering() const { return m_outline; } + /// Determines if SetValue() was called at least once. + bool HasValues() const; // UNO mapping functions |