writerfilter/source/dmapper/DomainMapper.cxx | 15 ++++++++- writerfilter/source/dmapper/NumberingManager.cxx | 35 ++++++++++++++++++++++- writerfilter/source/dmapper/NumberingManager.hxx | 6 +++ writerfilter/source/dmapper/PropertyMap.hxx | 5 +++ 4 files changed, 58 insertions(+), 3 deletions(-)
New commits: commit 0063e19b339b58d919a2348de492a3bd8de57280 Author: Jian Fang Zhang <zhan...@apache.org> Date: Thu Oct 25 12:57:56 2012 +0000 #i121134#, more fix for i119657, fallback to old logic to use current AbstractNum when the desired one can not find Found by: Li Lin Yi Patch by: Jinlong Wu,wujinl...@gmail.com Review by: zhangjf (cherry picked from commit aa53b457faaf0fc50a8b38d17bf219de427a1044) diff --git a/writerfilter/source/dmapper/NumberingManager.cxx b/writerfilter/source/dmapper/NumberingManager.cxx index de016d2..98dacdf 100644 --- a/writerfilter/source/dmapper/NumberingManager.cxx +++ b/writerfilter/source/dmapper/NumberingManager.cxx @@ -1157,6 +1157,8 @@ AbstractListDef::Pointer ListsManager::GetAbstractList( sal_Int32 nId ) ListDef::Pointer pList = GetList( pStyleSheetProperties->GetNumId() ); if ( pList!=NULL ) return pList->GetAbstractDefinition(); + else + pAbstractList = m_aAbstractLists[i]; } } commit 40a5d22fd4117f8e3ad6807264fb448f4d9959aa Author: Jian Fang Zhang <zhan...@apache.org> Date: Fri Sep 14 13:20:57 2012 +0000 Related: #i119657#, importing docx, add code to handle the problem... that an AbstracNum references to a style, which references to another Num Found by: xiao ting xiao Patch by: Jinlong Wu,wujinl...@gmail.com Review by: zhangjf (cherry picked from commit d6870e145cc7373a422b414c31380cc1399e64cc) Conflicts: writerfilter/source/dmapper/DomainMapper.cxx writerfilter/source/dmapper/NumberingManager.cxx Change-Id: I9be0b82d601bf43da31842edb02c4b0d4e50e84f diff --git a/writerfilter/source/dmapper/DomainMapper.cxx b/writerfilter/source/dmapper/DomainMapper.cxx index 896a675..9de2fa6 100644 --- a/writerfilter/source/dmapper/DomainMapper.cxx +++ b/writerfilter/source/dmapper/DomainMapper.cxx @@ -1585,8 +1585,19 @@ void DomainMapper::sprmWithProps( Sprm& rSprm, PropertyMapPtr rContext, SprmType rContext->erase( PropertyDefinition( PROP_NUMBERING_STYLE_NAME, true )); } } - else if ( !m_pImpl->IsStyleSheetImport( ) ) - rContext->Insert( PROP_NUMBERING_STYLE_NAME, true, uno::makeAny( OUString() ) ); + else + { + if( m_pImpl->IsStyleSheetImport() ) + { + // set the number id for AbstractNum references + StyleSheetPropertyMap* pStyleSheetPropertyMap = dynamic_cast< StyleSheetPropertyMap* >( rContext.get() ); + pStyleSheetPropertyMap->SetNumId( nIntValue ); + } + else + { + rContext->Insert( PROP_NUMBERING_STYLE_NAME, true, uno::makeAny( OUString() ) ); + } + } } break; case NS_sprm::LN_PFNoLineNumb: // sprmPFNoLineNumb diff --git a/writerfilter/source/dmapper/NumberingManager.cxx b/writerfilter/source/dmapper/NumberingManager.cxx index 2f89593..de016d2 100644 --- a/writerfilter/source/dmapper/NumberingManager.cxx +++ b/writerfilter/source/dmapper/NumberingManager.cxx @@ -1073,6 +1073,13 @@ void ListsManager::lcl_sprm( Sprm& rSprm ) pProperties->resolve(*this); } break; + case NS_ooxml::LN_CT_AbstractNum_numStyleLink: + { + OUString sStyleName = rSprm.getValue( )->getString( ); + AbstractListDef* pAbstractListDef = dynamic_cast< AbstractListDef* >( m_pCurrentDefinition.get( ) ); + pAbstractListDef->SetNumStyleLink(sStyleName); + } + break; case NS_ooxml::LN_EG_RPrBase_rFonts: //contains font properties case NS_ooxml::LN_EG_RPrBase_color: case NS_ooxml::LN_EG_RPrBase_u: @@ -1133,7 +1140,31 @@ AbstractListDef::Pointer ListsManager::GetAbstractList( sal_Int32 nId ) while ( !pAbstractList.get( ) && i < nLen ) { if ( m_aAbstractLists[i]->GetId( ) == nId ) - pAbstractList = m_aAbstractLists[i]; + { + if ( m_aAbstractLists[i]->GetNumStyleLink().getLength() > 0 ) + { + // If the abstract num has a style linked, check the linked style's number id. + StyleSheetTablePtr pStylesTable = m_rDMapper.GetStyleSheetTable( ); + + const StyleSheetEntryPtr pStyleSheetEntry = + pStylesTable->FindStyleSheetByISTD( m_aAbstractLists[i]->GetNumStyleLink() ); + + const StyleSheetPropertyMap* pStyleSheetProperties = + dynamic_cast<const StyleSheetPropertyMap*>(pStyleSheetEntry ? pStyleSheetEntry->pProperties.get() : 0); + + if( pStyleSheetProperties && pStyleSheetProperties->GetNumId() >= 0 ) + { + ListDef::Pointer pList = GetList( pStyleSheetProperties->GetNumId() ); + if ( pList!=NULL ) + return pList->GetAbstractDefinition(); + } + + } + else + { + pAbstractList = m_aAbstractLists[i]; + } + } i++; } diff --git a/writerfilter/source/dmapper/NumberingManager.hxx b/writerfilter/source/dmapper/NumberingManager.hxx index eb23f52..d04d0f9 100644 --- a/writerfilter/source/dmapper/NumberingManager.hxx +++ b/writerfilter/source/dmapper/NumberingManager.hxx @@ -149,6 +149,9 @@ private: // Only used during the numberings import ListLevel::Pointer m_pCurrentLevel; + // The style name linked to. + ::rtl::OUString m_sNumStyleLink; + public: typedef boost::shared_ptr< AbstractListDef > Pointer; @@ -172,6 +175,9 @@ public: virtual com::sun::star::uno::Sequence< com::sun::star::uno::Sequence< com::sun::star::beans::PropertyValue > > GetPropertyValues( ); + + void SetNumStyleLink(rtl::OUString sValue) { m_sNumStyleLink = sValue; }; + ::rtl::OUString GetNumStyleLink() { return m_sNumStyleLink; }; }; class ListDef : public AbstractListDef diff --git a/writerfilter/source/dmapper/PropertyMap.hxx b/writerfilter/source/dmapper/PropertyMap.hxx index 75d78c1..cc2821f 100644 --- a/writerfilter/source/dmapper/PropertyMap.hxx +++ b/writerfilter/source/dmapper/PropertyMap.hxx @@ -405,6 +405,8 @@ class StyleSheetPropertyMap : public PropertyMap, public ParagraphProperties sal_Int16 mnListLevel; sal_Int16 mnOutlineLevel; + + sal_Int32 mnNumId; public: explicit StyleSheetPropertyMap(); ~StyleSheetPropertyMap(); @@ -477,6 +479,9 @@ public: if ( nLevel < WW_OUTLINE_MAX ) mnOutlineLevel = nLevel; } + + sal_Int32 GetNumId() const { return mnNumId; } + void SetNumId(sal_Int32 nId) { mnNumId = nId; } }; _______________________________________________ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/libreoffice-commits