diff options
author | Miklos Vajna <vmiklos@collabora.co.uk> | 2016-01-07 08:19:17 +0100 |
---|---|---|
committer | Miklos Vajna <vmiklos@collabora.co.uk> | 2016-01-07 08:13:23 +0000 |
commit | f9c8d97d82a85b897520a2fe897352ee5ad879d9 (patch) | |
tree | 668a8cc96e2dda54a0ea93e375b116db5870f6a5 /writerfilter/source/dmapper | |
parent | f84d09cdda19e51373ec0ac4afb969483be24425 (diff) |
tdf#95213 DOCX import: don't reuse list label styles
We used to optimize the creation of these styles, so in case two list
label had the same character properties, then we could avoid creating
two styles for those.
This isn't correct though: it means if the style is changed later by the
user, then unexpected other places in the document will change as well.
Do what the binary DOC filter does: create one character style for each
level of a numbering separately.
Change-Id: I967b30fc078b1be30f7ef81b2706df2962fc3fb0
Reviewed-on: https://gerrit.libreoffice.org/21191
Reviewed-by: Miklos Vajna <vmiklos@collabora.co.uk>
Tested-by: Jenkins <ci@libreoffice.org>
Diffstat (limited to 'writerfilter/source/dmapper')
-rw-r--r-- | writerfilter/source/dmapper/DomainMapper.cxx | 6 | ||||
-rw-r--r-- | writerfilter/source/dmapper/DomainMapper.hxx | 2 | ||||
-rw-r--r-- | writerfilter/source/dmapper/DomainMapper_Impl.cxx | 2 | ||||
-rw-r--r-- | writerfilter/source/dmapper/NumberingManager.cxx | 2 | ||||
-rw-r--r-- | writerfilter/source/dmapper/StyleSheetTable.cxx | 5 | ||||
-rw-r--r-- | writerfilter/source/dmapper/StyleSheetTable.hxx | 2 |
6 files changed, 10 insertions, 9 deletions
diff --git a/writerfilter/source/dmapper/DomainMapper.cxx b/writerfilter/source/dmapper/DomainMapper.cxx index d61818cc3898..d54127b4d3a4 100644 --- a/writerfilter/source/dmapper/DomainMapper.cxx +++ b/writerfilter/source/dmapper/DomainMapper.cxx @@ -3081,7 +3081,7 @@ void DomainMapper::lcl_utext(const sal_uInt8 * data_, size_t len) { PropertyMapPtr pContext = m_pImpl->GetTopContext(); PropertyValueVector_t aProps = comphelper::sequenceToContainer< PropertyValueVector_t >(pContext->GetPropertyValues()); - OUString sStyle = getOrCreateCharStyle(aProps); + OUString sStyle = getOrCreateCharStyle(aProps, /*bAlwaysCreate=*/false); m_pImpl->SetRubyText(sText,sStyle); return; } @@ -3542,10 +3542,10 @@ uno::Reference< text::XTextRange > DomainMapper::GetCurrentTextRange() return m_pImpl->GetTopTextAppend()->getEnd(); } -OUString DomainMapper::getOrCreateCharStyle( PropertyValueVector_t& rCharProperties ) +OUString DomainMapper::getOrCreateCharStyle( PropertyValueVector_t& rCharProperties, bool bAlwaysCreate ) { StyleSheetTablePtr pStyleSheets = m_pImpl->GetStyleSheetTable(); - return pStyleSheets->getOrCreateCharStyle( rCharProperties ); + return pStyleSheets->getOrCreateCharStyle( rCharProperties, bAlwaysCreate ); } StyleSheetTablePtr DomainMapper::GetStyleSheetTable( ) diff --git a/writerfilter/source/dmapper/DomainMapper.hxx b/writerfilter/source/dmapper/DomainMapper.hxx index c5a229984a4f..ddf1ac304509 100644 --- a/writerfilter/source/dmapper/DomainMapper.hxx +++ b/writerfilter/source/dmapper/DomainMapper.hxx @@ -104,7 +104,7 @@ public: css::uno::Reference<css::lang::XMultiServiceFactory> GetTextFactory() const; css::uno::Reference<css::text::XTextRange> GetCurrentTextRange(); - OUString getOrCreateCharStyle( PropertyValueVector_t& rCharProperties ); + OUString getOrCreateCharStyle( PropertyValueVector_t& rCharProperties, bool bAlwaysCreate ); std::shared_ptr< StyleSheetTable > GetStyleSheetTable( ); GraphicZOrderHelper* graphicZOrderHelper(); diff --git a/writerfilter/source/dmapper/DomainMapper_Impl.cxx b/writerfilter/source/dmapper/DomainMapper_Impl.cxx index ec4304b54f70..605a758894cc 100644 --- a/writerfilter/source/dmapper/DomainMapper_Impl.cxx +++ b/writerfilter/source/dmapper/DomainMapper_Impl.cxx @@ -2994,7 +2994,7 @@ void DomainMapper_Impl::handleRubyEQField( FieldContextPtr pContext) pRubyContext->Insert(PROP_CHAR_HEIGHT_ASIAN, aVal); } PropertyValueVector_t aProps = comphelper::sequenceToContainer< PropertyValueVector_t >(pRubyContext->GetPropertyValues()); - aInfo.sRubyStyle = m_rDMapper.getOrCreateCharStyle(aProps); + aInfo.sRubyStyle = m_rDMapper.getOrCreateCharStyle(aProps, /*bAlwaysCreate=*/false); PropertyMapPtr pCharContext(new PropertyMap()); if (m_pLastCharacterContext.get()) pCharContext->InsertProps(m_pLastCharacterContext); diff --git a/writerfilter/source/dmapper/NumberingManager.cxx b/writerfilter/source/dmapper/NumberingManager.cxx index 36f979bec396..c9275755f41e 100644 --- a/writerfilter/source/dmapper/NumberingManager.cxx +++ b/writerfilter/source/dmapper/NumberingManager.cxx @@ -567,7 +567,7 @@ void ListDef::CreateNumberingRules( DomainMapper& rDMapper, //create (or find) a character style containing the character // attributes of the symbol and apply it to the numbering level - OUString sStyle = rDMapper.getOrCreateCharStyle( aStyleProps ); + OUString sStyle = rDMapper.getOrCreateCharStyle( aStyleProps, /*bAlwaysCreate=*/true ); aLvlProps.push_back(comphelper::makePropertyValue(getPropertyName(PROP_CHAR_STYLE_NAME), sStyle)); } diff --git a/writerfilter/source/dmapper/StyleSheetTable.cxx b/writerfilter/source/dmapper/StyleSheetTable.cxx index e9b22182d04c..b02cefaa0625 100644 --- a/writerfilter/source/dmapper/StyleSheetTable.cxx +++ b/writerfilter/source/dmapper/StyleSheetTable.cxx @@ -1519,11 +1519,12 @@ void StyleSheetTable::applyDefaults(bool bParaProperties) } -OUString StyleSheetTable::getOrCreateCharStyle( PropertyValueVector_t& rCharProperties ) +OUString StyleSheetTable::getOrCreateCharStyle( PropertyValueVector_t& rCharProperties, bool bAlwaysCreate ) { //find out if any of the styles already has the required properties then return its name OUString sListLabel = m_pImpl->HasListCharStyle(rCharProperties); - if( !sListLabel.isEmpty() ) + // Don't try to reuse an existing character style if requested. + if( !sListLabel.isEmpty() && !bAlwaysCreate) return sListLabel; const char cListLabel[] = "ListLabel "; uno::Reference< style::XStyleFamiliesSupplier > xStylesSupplier( m_pImpl->m_xTextDocument, uno::UNO_QUERY_THROW ); diff --git a/writerfilter/source/dmapper/StyleSheetTable.hxx b/writerfilter/source/dmapper/StyleSheetTable.hxx index 87faa6912416..0693f3c56800 100644 --- a/writerfilter/source/dmapper/StyleSheetTable.hxx +++ b/writerfilter/source/dmapper/StyleSheetTable.hxx @@ -102,7 +102,7 @@ public: OUString ConvertStyleName( const OUString& rWWName, bool bExtendedSearch = false ); - OUString getOrCreateCharStyle( PropertyValueVector_t& rCharProperties ); + OUString getOrCreateCharStyle( PropertyValueVector_t& rCharProperties, bool bAlwaysCreate ); /// Returns the default character properties. PropertyMapPtr GetDefaultCharProps(); |