/************************************************************** * * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. * *************************************************************/ // MARKER(update_precomp.py): autogen include statement, do not remove #include "precompiled_xmloff.hxx" #include #include #include #include #include #include #include #include #include #include #include #ifndef _XMLOFF_PAGEMASTERPROPMAPPER_HXX #include "PageMasterPropMapper.hxx" #endif #include #include #include #include #include #include "xmloff/xmlnmspe.hxx" #include #ifndef _XMLOFF_FAMILIES_HXX #include #endif #include #include #include #include #ifndef _XMLOFF_TXTSTYLI_HXX #include #endif #ifndef _XMLOFF_TXTPRMAP_HXX #include #endif #include #include "XMLChartStyleContext.hxx" #include "XMLChartPropertySetMapper.hxx" #include #include "FillStyleContext.hxx" #include "XMLFootnoteConfigurationImportContext.hxx" #include "XMLIndexBibliographyConfigurationContext.hxx" #include "XMLLineNumberingImportContext.hxx" #include "PageMasterImportContext.hxx" #include "PageMasterImportPropMapper.hxx" using ::rtl::OUString; using ::rtl::OUStringBuffer; using namespace ::com::sun::star; using namespace ::com::sun::star::uno; using namespace ::com::sun::star::container; using namespace ::com::sun::star::style; using namespace ::xmloff::token; // --------------------------------------------------------------------- static __FAR_DATA SvXMLTokenMapEntry aStyleStylesElemTokenMap[] = { { XML_NAMESPACE_STYLE, XML_STYLE, XML_TOK_STYLE_STYLE }, { XML_NAMESPACE_STYLE, XML_PAGE_LAYOUT, XML_TOK_STYLE_PAGE_MASTER }, { XML_NAMESPACE_TEXT, XML_LIST_STYLE, XML_TOK_TEXT_LIST_STYLE }, { XML_NAMESPACE_TEXT, XML_OUTLINE_STYLE, XML_TOK_TEXT_OUTLINE }, { XML_NAMESPACE_STYLE, XML_DEFAULT_STYLE, XML_TOK_STYLE_DEFAULT_STYLE }, { XML_NAMESPACE_DRAW, XML_GRADIENT, XML_TOK_STYLES_GRADIENTSTYLES }, { XML_NAMESPACE_DRAW, XML_HATCH, XML_TOK_STYLES_HATCHSTYLES }, { XML_NAMESPACE_DRAW, XML_FILL_IMAGE, XML_TOK_STYLES_BITMAPSTYLES }, { XML_NAMESPACE_DRAW, XML_OPACITY, XML_TOK_STYLES_TRANSGRADIENTSTYLES }, { XML_NAMESPACE_DRAW, XML_MARKER, XML_TOK_STYLES_MARKERSTYLES }, { XML_NAMESPACE_DRAW, XML_STROKE_DASH, XML_TOK_STYLES_DASHSTYLES }, { XML_NAMESPACE_TEXT, XML_NOTES_CONFIGURATION, XML_TOK_TEXT_NOTE_CONFIG }, { XML_NAMESPACE_TEXT, XML_BIBLIOGRAPHY_CONFIGURATION, XML_TOK_TEXT_BIBLIOGRAPHY_CONFIG }, { XML_NAMESPACE_TEXT, XML_LINENUMBERING_CONFIGURATION,XML_TOK_TEXT_LINENUMBERING_CONFIG }, { XML_NAMESPACE_STYLE, XML_DEFAULT_PAGE_LAYOUT, XML_TOK_STYLE_DEFAULT_PAGE_LAYOUT }, XML_TOKEN_MAP_END }; const SvXMLTokenMap& SvXMLStylesContext::GetStyleStylesElemTokenMap() { if( !mpStyleStylesElemTokenMap ) mpStyleStylesElemTokenMap = new SvXMLTokenMap( aStyleStylesElemTokenMap ); return *mpStyleStylesElemTokenMap; } // --------------------------------------------------------------------- void SvXMLStyleContext::SetAttribute( sal_uInt16 nPrefixKey, const OUString& rLocalName, const OUString& rValue ) { // TODO: use a map here if( XML_NAMESPACE_STYLE == nPrefixKey ) { if( IsXMLToken( rLocalName, XML_FAMILY ) ) { if( IsXMLToken( rValue, XML_PARAGRAPH ) ) mnFamily = (sal_uInt16)SFX_STYLE_FAMILY_PARA; else if( IsXMLToken( rValue, XML_TEXT ) ) mnFamily = (sal_uInt16)SFX_STYLE_FAMILY_CHAR; } else if( IsXMLToken( rLocalName, XML_NAME ) ) { maName = rValue; } else if( IsXMLToken( rLocalName, XML_DISPLAY_NAME ) ) { maDisplayName = rValue; } else if( IsXMLToken( rLocalName, XML_PARENT_STYLE_NAME ) ) { maParentName = rValue; } else if( IsXMLToken( rLocalName, XML_NEXT_STYLE_NAME ) ) { maFollow = rValue; } else if( IsXMLToken( rLocalName, XML_HELP_FILE_NAME ) ) { maHelpFile = rValue; } else if( IsXMLToken( rLocalName, XML_HELP_ID ) ) { sal_Int32 nTmp = rValue.toInt32(); mnHelpId = (nTmp < 0L) ? 0U : ( (nTmp > USHRT_MAX) ? USHRT_MAX : (sal_uInt16)nTmp ); } } } TYPEINIT1( SvXMLStyleContext, SvXMLImportContext ); SvXMLStyleContext::SvXMLStyleContext( SvXMLImport& rImp, sal_uInt16 nPrfx, const OUString& rLName, const uno::Reference< xml::sax::XAttributeList >&, sal_uInt16 nFam, sal_Bool bDefault ) : SvXMLImportContext( rImp, nPrfx, rLName ), mnHelpId( UCHAR_MAX ), mnFamily( nFam ), mbValid( sal_True ), mbNew( sal_True ), mbDefaultStyle( bDefault ) { } SvXMLStyleContext::~SvXMLStyleContext() { } SvXMLImportContext *SvXMLStyleContext::CreateChildContext( sal_uInt16 nPrefix, const OUString& rLocalName, const uno::Reference< xml::sax::XAttributeList > & ) { return new SvXMLImportContext( GetImport(), nPrefix, rLocalName );; } void SvXMLStyleContext::StartElement( const uno::Reference< xml::sax::XAttributeList > & xAttrList ) { sal_Int16 nAttrCount = xAttrList.is() ? xAttrList->getLength() : 0; for( sal_Int16 i=0; i < nAttrCount; i++ ) { const OUString& rAttrName = xAttrList->getNameByIndex( i ); OUString aLocalName; sal_uInt16 nPrefix = GetImport().GetNamespaceMap().GetKeyByAttrName( rAttrName, &aLocalName ); const OUString& rValue = xAttrList->getValueByIndex( i ); SetAttribute( nPrefix, aLocalName, rValue ); } } void SvXMLStyleContext::SetDefaults() { } void SvXMLStyleContext::CreateAndInsert( sal_Bool /*bOverwrite*/ ) { } void SvXMLStyleContext::CreateAndInsertLate( sal_Bool /*bOverwrite*/ ) { } void SvXMLStyleContext::Finish( sal_Bool /*bOverwrite*/ ) { } sal_Bool SvXMLStyleContext::IsTransient() const { return sal_False; } // --------------------------------------------------------------------- class SvXMLStyleIndex_Impl { OUString sName; sal_uInt16 nFamily; const SvXMLStyleContext *pStyle; public: SvXMLStyleIndex_Impl( sal_uInt16 nFam, const OUString& rName ) : sName( rName ), nFamily( nFam ), pStyle ( 0 ) { } SvXMLStyleIndex_Impl( const SvXMLStyleContext *pStl ) : sName( pStl->GetName() ), nFamily( pStl->GetFamily() ), pStyle ( pStl ) { } const OUString& GetName() const { return sName; } sal_uInt16 GetFamily() const { return nFamily; } const SvXMLStyleContext *GetStyle() const { return pStyle; } }; int SvXMLStyleIndexCmp_Impl( const SvXMLStyleIndex_Impl& r1, const SvXMLStyleIndex_Impl& r2 ) { int nRet; if( (sal_uInt16)r1.GetFamily() < (sal_uInt16)r2.GetFamily() ) nRet = -1; else if( (sal_uInt16)r1.GetFamily() > (sal_uInt16)r2.GetFamily() ) nRet = 1; else nRet = (int)r1.GetName().compareTo( r2.GetName() ); return nRet; } // --------------------------------------------------------------------- typedef SvXMLStyleContext *SvXMLStyleContextPtr; DECLARE_LIST( SvXMLStyleContexts_Impl, SvXMLStyleContextPtr ) DECLARE_CONTAINER_SORT_DEL( SvXMLStyleIndices_Impl, SvXMLStyleIndex_Impl ) IMPL_CONTAINER_SORT( SvXMLStyleIndices_Impl, SvXMLStyleIndex_Impl, SvXMLStyleIndexCmp_Impl ) class SvXMLStylesContext_Impl { SvXMLStyleContexts_Impl aStyles; SvXMLStyleIndices_Impl *pIndices; sal_Bool bAutomaticStyle; #ifdef DBG_UTIL sal_uInt32 nIndexCreated; #endif void FlushIndex() { delete pIndices; pIndices = 0; } public: SvXMLStylesContext_Impl( sal_Bool bAuto ); ~SvXMLStylesContext_Impl(); sal_uInt32 GetStyleCount() const { return aStyles.Count(); } const SvXMLStyleContext *GetStyle( sal_uInt32 i ) const { return i < aStyles.Count() ? aStyles.GetObject(i) : 0; } SvXMLStyleContext *GetStyle( sal_uInt32 i ) { return i < aStyles.Count() ? aStyles.GetObject(i) : 0; } inline void AddStyle( SvXMLStyleContext *pStyle ); void Clear(); const SvXMLStyleContext *FindStyleChildContext( sal_uInt16 nFamily, const OUString& rName, sal_Bool bCreateIndex ) const; sal_Bool IsAutomaticStyle() const { return bAutomaticStyle; } }; SvXMLStylesContext_Impl::SvXMLStylesContext_Impl( sal_Bool bAuto ) : aStyles( 20, 5 ), pIndices( 0 ), bAutomaticStyle( bAuto ) #ifdef DBG_UTIL , nIndexCreated( 0 ) #endif {} SvXMLStylesContext_Impl::~SvXMLStylesContext_Impl() { delete pIndices; while( aStyles.Count() ) { SvXMLStyleContext *pStyle = aStyles.GetObject(0); aStyles.Remove( 0UL ); pStyle->ReleaseRef(); } } inline void SvXMLStylesContext_Impl::AddStyle( SvXMLStyleContext *pStyle ) { aStyles.Insert( pStyle, aStyles.Count() ); pStyle->AddRef(); FlushIndex(); } void SvXMLStylesContext_Impl::Clear() { FlushIndex(); while( aStyles.Count() ) { SvXMLStyleContext *pStyle = aStyles.GetObject(0); aStyles.Remove( 0UL ); pStyle->ReleaseRef(); } } const SvXMLStyleContext *SvXMLStylesContext_Impl::FindStyleChildContext( sal_uInt16 nFamily, const OUString& rName, sal_Bool bCreateIndex ) const { const SvXMLStyleContext *pStyle = 0; if( !pIndices && bCreateIndex && aStyles.Count() > 0 ) { #ifdef DBG_UTIL DBG_ASSERT( 0==nIndexCreated, "Performance warning: sdbcx::Index created multiple times" ); #endif ((SvXMLStylesContext_Impl *)this)->pIndices = new SvXMLStyleIndices_Impl( sal::static_int_cast< sal_uInt16 >(aStyles.Count()), 5 ); for( sal_uInt32 i=0; i < aStyles.Count(); i++ ) { SvXMLStyleIndex_Impl* pStyleIndex = new SvXMLStyleIndex_Impl( aStyles.GetObject(i)); if (!pIndices->Insert( pStyleIndex )) { DBG_ERROR("Here is a double Style"); delete pStyleIndex; } } #ifdef DBG_UTIL ((SvXMLStylesContext_Impl *)this)->nIndexCreated++; #endif } if( pIndices ) { SvXMLStyleIndex_Impl aIndex( nFamily, rName ); sal_uLong nPos = 0; if( pIndices->Seek_Entry( &aIndex, &nPos ) ) pStyle = pIndices->GetObject( nPos )->GetStyle(); } else { for( sal_uInt32 i=0; !pStyle && i < aStyles.Count(); i++ ) { const SvXMLStyleContext *pS = aStyles.GetObject( i ); if( pS->GetFamily() == nFamily && pS->GetName() == rName ) pStyle = pS; } } return pStyle; } // --------------------------------------------------------------------- TYPEINIT1( SvXMLStylesContext, SvXMLImportContext ); sal_uInt32 SvXMLStylesContext::GetStyleCount() const { return mpImpl->GetStyleCount(); } SvXMLStyleContext *SvXMLStylesContext::GetStyle( sal_uInt32 i ) { return mpImpl->GetStyle( i ); } const SvXMLStyleContext *SvXMLStylesContext::GetStyle( sal_uInt32 i ) const { return mpImpl->GetStyle( i ); } sal_Bool SvXMLStylesContext::IsAutomaticStyle() const { return mpImpl->IsAutomaticStyle(); } SvXMLStyleContext *SvXMLStylesContext::CreateStyleChildContext( sal_uInt16 p_nPrefix, const OUString& rLocalName, const uno::Reference< xml::sax::XAttributeList > & xAttrList ) { SvXMLStyleContext *pStyle = NULL; if(GetImport().GetDataStylesImport()) { pStyle = GetImport().GetDataStylesImport()->CreateChildContext(GetImport(), p_nPrefix, rLocalName, xAttrList, *this); } if (!pStyle) { const SvXMLTokenMap& rTokenMap = GetStyleStylesElemTokenMap(); sal_uInt16 nToken = rTokenMap.Get( p_nPrefix, rLocalName ); switch( nToken ) { case XML_TOK_STYLE_STYLE: case XML_TOK_STYLE_DEFAULT_STYLE: { sal_uInt16 nFamily = 0; sal_Int16 nAttrCount = xAttrList.is() ? xAttrList->getLength() : 0; for( sal_Int16 i=0; i < nAttrCount; i++ ) { const OUString& rAttrName = xAttrList->getNameByIndex( i ); OUString aLocalName; sal_uInt16 nPrefix = GetImport().GetNamespaceMap().GetKeyByAttrName( rAttrName, &aLocalName ); if( XML_NAMESPACE_STYLE == nPrefix && IsXMLToken( aLocalName, XML_FAMILY ) ) { const OUString& rValue = xAttrList->getValueByIndex( i ); nFamily = GetFamily( rValue ); break; } } pStyle = XML_TOK_STYLE_STYLE==nToken ? CreateStyleStyleChildContext( nFamily, p_nPrefix, rLocalName, xAttrList ) : CreateDefaultStyleStyleChildContext( nFamily, p_nPrefix, rLocalName, xAttrList ); } break; case XML_TOK_STYLE_PAGE_MASTER: case XML_TOK_STYLE_DEFAULT_PAGE_LAYOUT: { //there is not page family in odf now, so I specify one for it sal_Bool bDefaultStyle = XML_TOK_STYLE_DEFAULT_PAGE_LAYOUT == nToken ? sal_True: sal_False; pStyle = new PageStyleContext( GetImport(), p_nPrefix, rLocalName, xAttrList, *this, bDefaultStyle ); } break; case XML_TOK_TEXT_LIST_STYLE: pStyle = new SvxXMLListStyleContext( GetImport(), p_nPrefix, rLocalName, xAttrList ); break; case XML_TOK_TEXT_OUTLINE: pStyle = new SvxXMLListStyleContext( GetImport(), p_nPrefix, rLocalName, xAttrList, sal_True ); break; case XML_TOK_TEXT_NOTE_CONFIG: #ifndef SVX_LIGHT pStyle = new XMLFootnoteConfigurationImportContext(GetImport(), p_nPrefix, rLocalName, xAttrList); #else // create default context to skip content pStyle = new SvXMLStyleContext( GetImport(), nPrefix, rLocalName, xAttrList ); #endif // #ifndef SVX_LIGHT break; case XML_TOK_TEXT_BIBLIOGRAPHY_CONFIG: #ifndef SVX_LIGHT pStyle = new XMLIndexBibliographyConfigurationContext( GetImport(), p_nPrefix, rLocalName, xAttrList); #else // create default context to skip content pStyle = new SvXMLStyleContext( GetImport(), p_nPrefix, rLocalName, xAttrList ); #endif // #ifndef SVX_LIGHT break; case XML_TOK_TEXT_LINENUMBERING_CONFIG: #ifndef SVX_LIGHT pStyle = new XMLLineNumberingImportContext( GetImport(), p_nPrefix, rLocalName, xAttrList); #else // create default context to skip content pStyle = new SvXMLStyleContext( GetImport(), p_nPrefix, rLocalName, xAttrList ); #endif // #ifndef SVX_LIGHT break; // // FillStyles // case XML_TOK_STYLES_GRADIENTSTYLES: { pStyle = new XMLGradientStyleContext( GetImport(), p_nPrefix, rLocalName, xAttrList ); break; } case XML_TOK_STYLES_HATCHSTYLES: { pStyle = new XMLHatchStyleContext( GetImport(), p_nPrefix, rLocalName, xAttrList ); break; } case XML_TOK_STYLES_BITMAPSTYLES: { pStyle = new XMLBitmapStyleContext( GetImport(), p_nPrefix, rLocalName, xAttrList ); break; } case XML_TOK_STYLES_TRANSGRADIENTSTYLES: { pStyle = new XMLTransGradientStyleContext( GetImport(), p_nPrefix, rLocalName, xAttrList ); break; } case XML_TOK_STYLES_MARKERSTYLES: { pStyle = new XMLMarkerStyleContext( GetImport(), p_nPrefix, rLocalName, xAttrList ); break; } case XML_TOK_STYLES_DASHSTYLES: { pStyle = new XMLDashStyleContext( GetImport(), p_nPrefix, rLocalName, xAttrList ); break; } } } return pStyle; } SvXMLStyleContext *SvXMLStylesContext::CreateStyleStyleChildContext( sal_uInt16 nFamily, sal_uInt16 nPrefix, const OUString& rLocalName, const uno::Reference< xml::sax::XAttributeList > & xAttrList ) { SvXMLStyleContext *pStyle = 0; switch( nFamily ) { case XML_STYLE_FAMILY_TEXT_PARAGRAPH: case XML_STYLE_FAMILY_TEXT_TEXT: case XML_STYLE_FAMILY_TEXT_SECTION: pStyle = new XMLTextStyleContext( GetImport(), nPrefix, rLocalName, xAttrList, *this, nFamily ); break; case XML_STYLE_FAMILY_TEXT_RUBY: pStyle = new XMLPropStyleContext( GetImport(), nPrefix, rLocalName, xAttrList, *this, nFamily ); break; case XML_STYLE_FAMILY_SCH_CHART_ID: pStyle = new XMLChartStyleContext( GetImport(), nPrefix, rLocalName, xAttrList, *this, nFamily ); break; case XML_STYLE_FAMILY_SD_GRAPHICS_ID: case XML_STYLE_FAMILY_SD_PRESENTATION_ID: case XML_STYLE_FAMILY_SD_POOL_ID: pStyle = new XMLShapeStyleContext( GetImport(), nPrefix, rLocalName, xAttrList, *this, nFamily ); } return pStyle; } SvXMLStyleContext *SvXMLStylesContext::CreateDefaultStyleStyleChildContext( sal_uInt16 /*nFamily*/, sal_uInt16 /*nPrefix*/, const OUString& /*rLocalName*/, const uno::Reference< xml::sax::XAttributeList > & ) { return 0; } sal_Bool SvXMLStylesContext::InsertStyleFamily( sal_uInt16 ) const { return sal_True; } sal_uInt16 SvXMLStylesContext::GetFamily( const ::rtl::OUString& rValue ) const { sal_uInt16 nFamily = 0U; if( IsXMLToken( rValue, XML_PARAGRAPH ) ) { nFamily = XML_STYLE_FAMILY_TEXT_PARAGRAPH; } else if( IsXMLToken( rValue, XML_TEXT ) ) { nFamily = XML_STYLE_FAMILY_TEXT_TEXT; } else if( IsXMLToken( rValue, XML_DATA_STYLE ) ) { nFamily = XML_STYLE_FAMILY_DATA_STYLE; } else if ( IsXMLToken( rValue, XML_SECTION ) ) { nFamily = XML_STYLE_FAMILY_TEXT_SECTION; } else if( IsXMLToken( rValue, XML_TABLE ) ) { nFamily = XML_STYLE_FAMILY_TABLE_TABLE; } else if( IsXMLToken( rValue, XML_TABLE_COLUMN ) ) nFamily = XML_STYLE_FAMILY_TABLE_COLUMN; else if( IsXMLToken( rValue, XML_TABLE_ROW ) ) nFamily = XML_STYLE_FAMILY_TABLE_ROW; else if( IsXMLToken( rValue, XML_TABLE_CELL ) ) nFamily = XML_STYLE_FAMILY_TABLE_CELL; else if( rValue.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM(XML_STYLE_FAMILY_SD_GRAPHICS_NAME))) { nFamily = XML_STYLE_FAMILY_SD_GRAPHICS_ID; } else if( rValue.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM(XML_STYLE_FAMILY_SD_PRESENTATION_NAME))) { nFamily = XML_STYLE_FAMILY_SD_PRESENTATION_ID; } else if( rValue.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM(XML_STYLE_FAMILY_SD_POOL_NAME))) { nFamily = XML_STYLE_FAMILY_SD_POOL_ID; } else if( rValue.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM(XML_STYLE_FAMILY_SD_DRAWINGPAGE_NAME))) { nFamily = XML_STYLE_FAMILY_SD_DRAWINGPAGE_ID; } else if( rValue.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM( XML_STYLE_FAMILY_SCH_CHART_NAME ))) { nFamily = XML_STYLE_FAMILY_SCH_CHART_ID; } else if ( IsXMLToken( rValue, XML_RUBY ) ) { nFamily = XML_STYLE_FAMILY_TEXT_RUBY; } return nFamily; } UniReference < SvXMLImportPropertyMapper > SvXMLStylesContext::GetImportPropertyMapper( sal_uInt16 nFamily ) const { UniReference < SvXMLImportPropertyMapper > xMapper; switch( nFamily ) { case XML_STYLE_FAMILY_TEXT_PARAGRAPH: if( !mxParaImpPropMapper.is() ) { SvXMLStylesContext * pThis = (SvXMLStylesContext *)this; pThis->mxParaImpPropMapper = pThis->GetImport().GetTextImport() ->GetParaImportPropertySetMapper(); } xMapper = mxParaImpPropMapper; break; case XML_STYLE_FAMILY_TEXT_TEXT: if( !mxTextImpPropMapper.is() ) { SvXMLStylesContext * pThis = (SvXMLStylesContext *)this; pThis->mxTextImpPropMapper = pThis->GetImport().GetTextImport() ->GetTextImportPropertySetMapper(); } xMapper = mxTextImpPropMapper; break; case XML_STYLE_FAMILY_TEXT_SECTION: // don't cache section mapper, as it's rarely used // *sigh*, cast to non-const, because this is a const method, // but SvXMLImport::GetTextImport() isn't. xMapper = ((SvXMLStylesContext*)this)->GetImport().GetTextImport()-> GetSectionImportPropertySetMapper(); break; case XML_STYLE_FAMILY_TEXT_RUBY: // don't cache section mapper, as it's rarely used // *sigh*, cast to non-const, because this is a const method, // but SvXMLImport::GetTextImport() isn't. xMapper = ((SvXMLStylesContext*)this)->GetImport().GetTextImport()-> GetRubyImportPropertySetMapper(); break; case XML_STYLE_FAMILY_SD_GRAPHICS_ID: case XML_STYLE_FAMILY_SD_PRESENTATION_ID: case XML_STYLE_FAMILY_SD_POOL_ID: if(!mxShapeImpPropMapper.is()) { UniReference< XMLShapeImportHelper > aImpHelper = ((SvXMLImport&)GetImport()).GetShapeImport(); ((SvXMLStylesContext*)this)->mxShapeImpPropMapper = aImpHelper->GetPropertySetMapper(); } xMapper = mxShapeImpPropMapper; break; #ifndef SVX_LIGHT case XML_STYLE_FAMILY_SCH_CHART_ID: if( ! mxChartImpPropMapper.is() ) { XMLPropertySetMapper *pPropMapper = new XMLChartPropertySetMapper(); mxChartImpPropMapper = new XMLChartImportPropertyMapper( pPropMapper, GetImport() ); } xMapper = mxChartImpPropMapper; break; #endif case XML_STYLE_FAMILY_PAGE_MASTER: if( ! mxPageImpPropMapper.is() ) { XMLPropertySetMapper *pPropMapper = new XMLPageMasterPropSetMapper(); mxPageImpPropMapper = new PageMasterImportPropertyMapper( pPropMapper, ((SvXMLStylesContext*)this)->GetImport() ); } xMapper = mxPageImpPropMapper; break; } return xMapper; } Reference < XAutoStyleFamily > SvXMLStylesContext::GetAutoStyles( sal_uInt16 nFamily ) const { Reference < XAutoStyleFamily > xAutoStyles; if( XML_STYLE_FAMILY_TEXT_TEXT == nFamily || XML_STYLE_FAMILY_TEXT_PARAGRAPH == nFamily) { bool bPara = XML_STYLE_FAMILY_TEXT_PARAGRAPH == nFamily; OUString sName; if( !bPara && mxTextAutoStyles.is() ) xAutoStyles = mxTextAutoStyles; else if( bPara && mxParaAutoStyles.is() ) xAutoStyles = mxParaAutoStyles; else { sName = bPara ? OUString( RTL_CONSTASCII_USTRINGPARAM( "ParagraphStyles" ) ): OUString( RTL_CONSTASCII_USTRINGPARAM( "CharacterStyles" ) ); Reference< XAutoStylesSupplier > xAutoStylesSupp( GetImport().GetModel(), UNO_QUERY ); Reference< XAutoStyles > xAutoStyleFamilies = xAutoStylesSupp->getAutoStyles(); if (xAutoStyleFamilies->hasByName(sName)) { Any aAny = xAutoStyleFamilies->getByName( sName ); xAutoStyles = *(Reference*)aAny.getValue(); if( bPara ) ((SvXMLStylesContext *)this)->mxParaAutoStyles = xAutoStyles; else ((SvXMLStylesContext *)this)->mxTextAutoStyles = xAutoStyles; } } } return xAutoStyles; } Reference < XNameContainer > SvXMLStylesContext::GetStylesContainer( sal_uInt16 nFamily ) const { Reference < XNameContainer > xStyles; OUString sName; switch( nFamily ) { case XML_STYLE_FAMILY_TEXT_PARAGRAPH: if( mxParaStyles.is() ) xStyles = mxParaStyles; else sName = OUString( RTL_CONSTASCII_USTRINGPARAM( "ParagraphStyles" ) ); break; case XML_STYLE_FAMILY_TEXT_TEXT: if( mxTextStyles.is() ) xStyles = mxTextStyles; else sName = OUString( RTL_CONSTASCII_USTRINGPARAM( "CharacterStyles" ) ); break; } if( !xStyles.is() && sName.getLength() ) { Reference< XStyleFamiliesSupplier > xFamiliesSupp( GetImport().GetModel(), UNO_QUERY ); if ( xFamiliesSupp.is() ) { Reference< XNameAccess > xFamilies = xFamiliesSupp->getStyleFamilies(); if (xFamilies->hasByName(sName)) { xStyles.set(xFamilies->getByName( sName ),uno::UNO_QUERY); switch( nFamily ) { case XML_STYLE_FAMILY_TEXT_PARAGRAPH: ((SvXMLStylesContext *)this)->mxParaStyles = xStyles; break; case XML_STYLE_FAMILY_TEXT_TEXT: ((SvXMLStylesContext *)this)->mxTextStyles = xStyles; break; } } } } return xStyles; } OUString SvXMLStylesContext::GetServiceName( sal_uInt16 nFamily ) const { String sServiceName; switch( nFamily ) { case XML_STYLE_FAMILY_TEXT_PARAGRAPH: sServiceName = msParaStyleServiceName; break; case XML_STYLE_FAMILY_TEXT_TEXT: sServiceName = msTextStyleServiceName; break; } return sServiceName; } SvXMLStylesContext::SvXMLStylesContext( SvXMLImport& rImport, sal_uInt16 nPrfx, const OUString& rLName, const uno::Reference< xml::sax::XAttributeList > &, sal_Bool bAuto ) : SvXMLImportContext( rImport, nPrfx, rLName ), msParaStyleServiceName( RTL_CONSTASCII_USTRINGPARAM( "com.sun.star.style.ParagraphStyle" ) ), msTextStyleServiceName( RTL_CONSTASCII_USTRINGPARAM( "com.sun.star.style.CharacterStyle" ) ), mpImpl( new SvXMLStylesContext_Impl( bAuto ) ), mpStyleStylesElemTokenMap( 0 ) { } SvXMLStylesContext::~SvXMLStylesContext() { delete mpStyleStylesElemTokenMap; delete mpImpl; } SvXMLImportContext *SvXMLStylesContext::CreateChildContext( sal_uInt16 nPrefix, const OUString& rLocalName, const uno::Reference< xml::sax::XAttributeList > & xAttrList ) { SvXMLImportContext *pContext = 0; SvXMLStyleContext *pStyle = CreateStyleChildContext( nPrefix, rLocalName, xAttrList ); // DBG_ASSERT( pStyle->GetFamily(), "Style without a family" ); if( pStyle ) { if( !pStyle->IsTransient() ) mpImpl->AddStyle( pStyle ); pContext = pStyle; } else { pContext = new SvXMLImportContext( GetImport(), nPrefix, rLocalName ); } return pContext; } void SvXMLStylesContext::EndElement() { } void SvXMLStylesContext::AddStyle(SvXMLStyleContext& rNew) { mpImpl->AddStyle( &rNew ); } void SvXMLStylesContext::Clear() { mpImpl->Clear(); } void SvXMLStylesContext::CopyAutoStylesToDoc() { sal_uInt32 nCount = GetStyleCount(); sal_uInt32 i; for( i = 0; i < nCount; i++ ) { SvXMLStyleContext *pStyle = GetStyle( i ); if( !pStyle || ( pStyle->GetFamily() != XML_STYLE_FAMILY_TEXT_TEXT && pStyle->GetFamily() != XML_STYLE_FAMILY_TEXT_PARAGRAPH && pStyle->GetFamily() != XML_STYLE_FAMILY_TABLE_CELL ) ) continue; pStyle->CreateAndInsert( sal_False ); } } void SvXMLStylesContext::CopyStylesToDoc( sal_Bool bOverwrite, sal_Bool bFinish ) { // pass 1: create text, paragraph and frame styles sal_uInt32 nCount = GetStyleCount(); sal_uInt32 i; for( i = 0; i < nCount; i++ ) { SvXMLStyleContext *pStyle = GetStyle( i ); if( !pStyle ) continue; if (pStyle->IsDefaultStyle()) pStyle->SetDefaults(); else if( InsertStyleFamily( pStyle->GetFamily() ) ) pStyle->CreateAndInsert( bOverwrite ); } // pass 2: create list styles (they require char styles) for( i=0; iIsDefaultStyle()) continue; if( InsertStyleFamily( pStyle->GetFamily() ) ) pStyle->CreateAndInsertLate( bOverwrite ); } // pass3: finish creation of styles if( bFinish ) FinishStyles( bOverwrite ); } void SvXMLStylesContext::FinishStyles( sal_Bool bOverwrite ) { sal_uInt32 nCount = GetStyleCount(); for( sal_uInt32 i=0; iIsValid() || pStyle->IsDefaultStyle() ) continue; if( InsertStyleFamily( pStyle->GetFamily() ) ) pStyle->Finish( bOverwrite ); } } const SvXMLStyleContext *SvXMLStylesContext::FindStyleChildContext( sal_uInt16 nFamily, const OUString& rName, sal_Bool bCreateIndex ) const { return mpImpl->FindStyleChildContext( nFamily, rName, bCreateIndex ); }