diff options
-rw-r--r-- | xmloff/Library_xo.mk | 1 | ||||
-rw-r--r-- | xmloff/source/style/impastp4.cxx | 404 | ||||
-rw-r--r-- | xmloff/source/style/impastpl.cxx | 381 |
3 files changed, 380 insertions, 406 deletions
diff --git a/xmloff/Library_xo.mk b/xmloff/Library_xo.mk index d2d52a7d629f..b72172b8cb3a 100644 --- a/xmloff/Library_xo.mk +++ b/xmloff/Library_xo.mk @@ -247,7 +247,6 @@ $(eval $(call gb_Library_add_exception_objects,xo,\ xmloff/source/style/escphdl \ xmloff/source/style/fonthdl \ xmloff/source/style/impastpl \ - xmloff/source/style/impastp4 \ xmloff/source/style/kernihdl \ xmloff/source/style/lspachdl \ xmloff/source/style/numehelp \ diff --git a/xmloff/source/style/impastp4.cxx b/xmloff/source/style/impastp4.cxx deleted file mode 100644 index 8aa7214d747a..000000000000 --- a/xmloff/source/style/impastp4.cxx +++ /dev/null @@ -1,404 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/* - * This file is part of the LibreOffice project. - * - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/. - * - * This file incorporates work covered by the following license notice: - * - * 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 . - */ - -#include <tools/debug.hxx> -#include <xmloff/xmlaustp.hxx> -#include <xmloff/xmltoken.hxx> -#include <xmloff/nmspmap.hxx> -#include "xmloff/xmlnmspe.hxx" -#include <xmloff/attrlist.hxx> -#include "impastpl.hxx" -#include <xmloff/xmlexppr.hxx> -#include <xmloff/xmlexp.hxx> -#include <xmloff/families.hxx> -#include <xmloff/PageMasterStyleMap.hxx> - -using namespace ::std; - -using namespace ::com::sun::star; -using namespace ::xmloff::token; - -// Class SvXMLAutoStylePool_Impl -// ctor/dtor class SvXMLAutoStylePool_Impl - -SvXMLAutoStylePoolP_Impl::SvXMLAutoStylePoolP_Impl( SvXMLExport& rExp) - : rExport( rExp ) -{ -} - -SvXMLAutoStylePoolP_Impl::~SvXMLAutoStylePoolP_Impl() -{ -} - -// Adds stylefamily-information to sorted list - -void SvXMLAutoStylePoolP_Impl::AddFamily( - sal_Int32 nFamily, - const OUString& rStrName, - const UniReference < SvXMLExportPropertyMapper > & rMapper, - const OUString& rStrPrefix, - sal_Bool bAsFamily ) -{ - // store family in a list if not already stored - sal_uInt16 nExportFlags = GetExport().getExportFlags(); - sal_Bool bStylesOnly = (nExportFlags & EXPORT_STYLES) != 0 && (nExportFlags & EXPORT_CONTENT) == 0; - - OUString aPrefix( rStrPrefix ); - if( bStylesOnly ) - { - aPrefix = OUString( 'M' ); - aPrefix += rStrPrefix; - } - -#if OSL_DEBUG_LEVEL > 0 - XMLAutoStyleFamily aTemporary( nFamily ); - FamilyListType::iterator aFind = maFamilyList.find(aTemporary); - if( aFind != maFamilyList.end() ) - { - // FIXME: do we really intend to replace the previous nFamily - // entry in this case ? - SAL_WARN_IF( aFind->mxMapper != rMapper, "xmloff", - "Adding duplicate family " << rStrName << - " with mismatching mapper ! " << - typeid(*aFind->mxMapper.get()).name() << " " << - typeid(*rMapper.get()).name() ); - } -#endif - - XMLAutoStyleFamily *pFamily = new XMLAutoStyleFamily( nFamily, rStrName, rMapper, aPrefix, bAsFamily ); - maFamilyList.insert(pFamily); -} - -void SvXMLAutoStylePoolP_Impl::SetFamilyPropSetMapper( - sal_Int32 nFamily, - const UniReference < SvXMLExportPropertyMapper > & rMapper ) -{ - - XMLAutoStyleFamily aTemporary( nFamily ); - FamilyListType::iterator aFind = maFamilyList.find(aTemporary); - if (aFind != maFamilyList.end()) - aFind->mxMapper = rMapper; -} - -// Adds a name to list -void SvXMLAutoStylePoolP_Impl::RegisterName( sal_Int32 nFamily, const OUString& rName ) -{ - XMLAutoStyleFamily aTmp( nFamily ); - FamilyListType::iterator aFind = maFamilyList.find(aTmp); - DBG_ASSERT( aFind != maFamilyList.end(), - "SvXMLAutoStylePool_Impl::RegisterName: unknown family" ); - if (aFind != maFamilyList.end()) - aFind->maNameList.insert(rName); -} - -// -// Retrieve the list of registered names -// - -void SvXMLAutoStylePoolP_Impl::GetRegisteredNames( - uno::Sequence<sal_Int32>& rFamilies, - uno::Sequence<OUString>& rNames ) -{ - // collect registered names + families - vector<sal_Int32> aFamilies; - vector<OUString> aNames; - - // iterate over families - for (FamilyListType::iterator aJ = maFamilyList.begin(); aJ != maFamilyList.end(); ++aJ) - { - XMLAutoStyleFamily &rFamily = *aJ; - - // iterate over names - for (XMLAutoStyleFamily::NameSetType::const_iterator aI = rFamily.maNameList.begin(); aI != rFamily.maNameList.end(); ++aI) - { - aFamilies.push_back( rFamily.mnFamily ); - aNames.push_back( *aI ); - } - } - - // copy the families + names into the sequence types - DBG_ASSERT( aFamilies.size() == aNames.size(), "families != names" ); - - rFamilies.realloc( aFamilies.size() ); - std::copy( aFamilies.begin(), aFamilies.end(), rFamilies.getArray() ); - - rNames.realloc( aNames.size() ); - std::copy( aNames.begin(), aNames.end(), rNames.getArray() ); -} - -// Adds a array of XMLPropertyState ( vector< XMLPropertyState > ) to list -// if not added, yet. - -bool SvXMLAutoStylePoolP_Impl::Add( - OUString& rName, sal_Int32 nFamily, const OUString& rParentName, - const ::std::vector< XMLPropertyState >& rProperties, bool bDontSeek ) -{ - XMLAutoStyleFamily aTemporary( nFamily ); - FamilyListType::iterator aFind = maFamilyList.find(aTemporary); - DBG_ASSERT(aFind != maFamilyList.end(), "SvXMLAutoStylePool_Impl::Add: unknown family"); - - if (aFind == maFamilyList.end()) - return false; - - XMLAutoStyleFamily &rFamily = *aFind; - - XMLAutoStylePoolParent aTmp(rParentName); - XMLAutoStyleFamily::ParentsType::iterator it2 = rFamily.maParents.find(aTmp); - if (it2 == rFamily.maParents.end()) - { - std::pair<XMLAutoStyleFamily::ParentsType::iterator,bool> r = - rFamily.maParents.insert(new XMLAutoStylePoolParent(rParentName)); - it2 = r.first; - } - - XMLAutoStylePoolParent& rParent = *it2; - - bool bRet = false; - if (rParent.Add(rFamily, rProperties, rName, bDontSeek)) - { - rFamily.mnCount++; - bRet = true; - } - - return bRet; -} - -bool SvXMLAutoStylePoolP_Impl::AddNamed( - const OUString& rName, sal_Int32 nFamily, const OUString& rParentName, - const ::std::vector< XMLPropertyState >& rProperties ) -{ - // get family and parent the same way as in Add() - - XMLAutoStyleFamily aTemporary( nFamily ); - FamilyListType::iterator aFind = maFamilyList.find(aTemporary); - DBG_ASSERT(aFind != maFamilyList.end(), "SvXMLAutoStylePool_Impl::Add: unknown family"); - - if (aFind == maFamilyList.end()) - return false; - - XMLAutoStyleFamily &rFamily = *aFind; - - XMLAutoStylePoolParent aTmp(rParentName); - XMLAutoStyleFamily::ParentsType::iterator it2 = rFamily.maParents.find(aTmp); - if (it2 == rFamily.maParents.end()) - { - std::pair<XMLAutoStyleFamily::ParentsType::iterator,bool> r = - rFamily.maParents.insert(new XMLAutoStylePoolParent(rParentName)); - it2 = r.first; - } - - XMLAutoStylePoolParent& rParent = *it2; - - bool bRet = false; - if (rParent.AddNamed(rFamily, rProperties, rName)) - { - rFamily.mnCount++; - bRet = true; - } - - return bRet; -} - -// -// Search for a array of XMLPropertyState ( vector< XMLPropertyState > ) in list -// - -OUString SvXMLAutoStylePoolP_Impl::Find( sal_Int32 nFamily, - const OUString& rParent, - const vector< XMLPropertyState >& rProperties ) const -{ - OUString sName; - - XMLAutoStyleFamily aTemporary( nFamily ); - FamilyListType::const_iterator const iter = maFamilyList.find(aTemporary); - OSL_ENSURE(iter != maFamilyList.end(), "SvXMLAutoStylePool_Impl::Find: unknown family"); - - if (iter != maFamilyList.end()) - { - XMLAutoStyleFamily const& rFamily = *iter; - XMLAutoStylePoolParent aTmp( rParent ); - XMLAutoStyleFamily::ParentsType::const_iterator it2 = rFamily.maParents.find(aTmp); - if (it2 != rFamily.maParents.end()) - { - sName = it2->Find(rFamily, rProperties); - } - } - - return sName; -} - -namespace { - -struct AutoStylePoolExport -{ - const OUString* mpParent; - const XMLAutoStylePoolProperties* mpProperties; - - AutoStylePoolExport() : mpParent(NULL), mpProperties(NULL) {} -}; - -} - -void SvXMLAutoStylePoolP_Impl::exportXML( - sal_Int32 nFamily, - const uno::Reference< ::com::sun::star::xml::sax::XDocumentHandler > &, - const SvXMLUnitConverter&, - const SvXMLNamespaceMap&, - const SvXMLAutoStylePoolP *pAntiImpl) const -{ - // Get list of parents for current family (nFamily) - XMLAutoStyleFamily aTmp( nFamily ); - FamilyListType::const_iterator aFind = maFamilyList.find(aTmp); - DBG_ASSERT( aFind != maFamilyList.end(), - "SvXMLAutoStylePool_Impl::exportXML: unknown family" ); - if (aFind == maFamilyList.end()) - return; - - const XMLAutoStyleFamily &rFamily = *aFind; - sal_uInt32 nCount = rFamily.mnCount; - - if (!nCount) - return; - - // create, initialize and fill helper-structure (SvXMLAutoStylePoolProperties_Impl) - // which contains a parent-name and a SvXMLAutoStylePoolProperties_Impl - std::vector<AutoStylePoolExport> aExpStyles(nCount); - - sal_uInt32 i; - for( i=0; i < nCount; i++ ) - { - aExpStyles[i].mpParent = 0; - aExpStyles[i].mpProperties = 0; - } - - XMLAutoStyleFamily::ParentsType::const_iterator it = rFamily.maParents.begin(), itEnd = rFamily.maParents.end(); - for (; it != itEnd; ++it) - { - const XMLAutoStylePoolParent& rParent = *it; - size_t nProperties = rParent.GetPropertiesList().size(); - for( size_t j = 0; j < nProperties; j++ ) - { - const XMLAutoStylePoolProperties* pProperties = - &rParent.GetPropertiesList()[j]; - sal_uLong nPos = pProperties->GetPos(); - DBG_ASSERT( nPos < nCount, - "SvXMLAutoStylePool_Impl::exportXML: wrong position" ); - if( nPos < nCount ) - { - DBG_ASSERT( !aExpStyles[nPos].mpProperties, - "SvXMLAutoStylePool_Impl::exportXML: double position" ); - aExpStyles[nPos].mpProperties = pProperties; - aExpStyles[nPos].mpParent = &rParent.GetParent(); - } - } - } - - // - // create string to export for each XML-style. That means for each property-list - // - OUString aStrFamilyName = rFamily.maStrFamilyName; - - for( i=0; i<nCount; i++ ) - { - DBG_ASSERT( aExpStyles[i].mpProperties, - "SvXMLAutoStylePool_Impl::exportXML: empty position" ); - - if( aExpStyles[i].mpProperties ) - { - GetExport().AddAttribute( - XML_NAMESPACE_STYLE, XML_NAME, - aExpStyles[i].mpProperties->GetName() ); - - if( rFamily.mbAsFamily ) - { - GetExport().AddAttribute( - XML_NAMESPACE_STYLE, XML_FAMILY, aStrFamilyName ); - } - - if( !aExpStyles[i].mpParent->isEmpty() ) - { - GetExport().AddAttribute( - XML_NAMESPACE_STYLE, XML_PARENT_STYLE_NAME, - GetExport().EncodeStyleName( - *aExpStyles[i].mpParent ) ); - } - - OUString sName; - if( rFamily.mbAsFamily ) - sName = GetXMLToken(XML_STYLE); - else - sName = rFamily.maStrFamilyName; - - pAntiImpl->exportStyleAttributes( - GetExport().GetAttrList(), - nFamily, - aExpStyles[i].mpProperties->GetProperties(), - *rFamily.mxMapper.get() - , GetExport().GetMM100UnitConverter(), - GetExport().GetNamespaceMap() - ); - - SvXMLElementExport aElem( GetExport(), - XML_NAMESPACE_STYLE, sName, - sal_True, sal_True ); - - sal_Int32 nStart(-1); - sal_Int32 nEnd(-1); - if (nFamily == XML_STYLE_FAMILY_PAGE_MASTER) - { - nStart = 0; - sal_Int32 nIndex = 0; - UniReference< XMLPropertySetMapper > aPropMapper = - rFamily.mxMapper->getPropertySetMapper(); - sal_Int16 nContextID; - while(nIndex < aPropMapper->GetEntryCount() && nEnd == -1) - { - nContextID = aPropMapper->GetEntryContextId( nIndex ); - if (nContextID && ((nContextID & CTF_PM_FLAGMASK) != XML_PM_CTF_START)) - nEnd = nIndex; - nIndex++; - } - if (nEnd == -1) - nEnd = nIndex; - } - - rFamily.mxMapper->exportXML( - GetExport(), - aExpStyles[i].mpProperties->GetProperties(), - nStart, nEnd, XML_EXPORT_FLAG_IGN_WS ); - - pAntiImpl->exportStyleContent( - GetExport().GetDocHandler(), - nFamily, - aExpStyles[i].mpProperties->GetProperties(), - *rFamily.mxMapper.get(), - GetExport().GetMM100UnitConverter(), - GetExport().GetNamespaceMap() - ); - } - } -} - -void SvXMLAutoStylePoolP_Impl::ClearEntries() -{ - for (FamilyListType::iterator aI = maFamilyList.begin(); aI != maFamilyList.end(); ++aI) - aI->ClearEntries(); -} - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/xmloff/source/style/impastpl.cxx b/xmloff/source/style/impastpl.cxx index 608575f839fc..d03ca3175ffa 100644 --- a/xmloff/source/style/impastpl.cxx +++ b/xmloff/source/style/impastpl.cxx @@ -19,11 +19,23 @@ #include <rtl/ustrbuf.hxx> #include <tools/debug.hxx> +#include <xmloff/PageMasterStyleMap.hxx> +#include <xmloff/attrlist.hxx> +#include <xmloff/families.hxx> +#include <xmloff/nmspmap.hxx> +#include <xmloff/xmlaustp.hxx> +#include <xmloff/xmlexp.hxx> +#include <xmloff/xmlexppr.hxx> +#include <xmloff/xmlnmspe.hxx> #include <xmloff/xmlprmap.hxx> +#include <xmloff/xmltoken.hxx> #include "impastpl.hxx" -using namespace std; +using namespace ::std; + +using namespace ::com::sun::star; +using namespace ::xmloff::token; // Class XMLAutoStyleFamily // ctor/dtor class XMLAutoStyleFamily @@ -192,4 +204,371 @@ bool XMLAutoStylePoolParent::operator< (const XMLAutoStylePoolParent& rOther) co return msParent < rOther.msParent; } +// Class SvXMLAutoStylePool_Impl +// ctor/dtor class SvXMLAutoStylePool_Impl + +SvXMLAutoStylePoolP_Impl::SvXMLAutoStylePoolP_Impl( SvXMLExport& rExp) + : rExport( rExp ) +{ +} + +SvXMLAutoStylePoolP_Impl::~SvXMLAutoStylePoolP_Impl() +{ +} + +// Adds stylefamily-information to sorted list + +void SvXMLAutoStylePoolP_Impl::AddFamily( + sal_Int32 nFamily, + const OUString& rStrName, + const UniReference < SvXMLExportPropertyMapper > & rMapper, + const OUString& rStrPrefix, + sal_Bool bAsFamily ) +{ + // store family in a list if not already stored + sal_uInt16 nExportFlags = GetExport().getExportFlags(); + sal_Bool bStylesOnly = (nExportFlags & EXPORT_STYLES) != 0 && (nExportFlags & EXPORT_CONTENT) == 0; + + OUString aPrefix( rStrPrefix ); + if( bStylesOnly ) + { + aPrefix = OUString( 'M' ); + aPrefix += rStrPrefix; + } + +#if OSL_DEBUG_LEVEL > 0 + XMLAutoStyleFamily aTemporary( nFamily ); + FamilyListType::iterator aFind = maFamilyList.find(aTemporary); + if( aFind != maFamilyList.end() ) + { + // FIXME: do we really intend to replace the previous nFamily + // entry in this case ? + SAL_WARN_IF( aFind->mxMapper != rMapper, "xmloff", + "Adding duplicate family " << rStrName << + " with mismatching mapper ! " << + typeid(*aFind->mxMapper.get()).name() << " " << + typeid(*rMapper.get()).name() ); + } +#endif + + XMLAutoStyleFamily *pFamily = new XMLAutoStyleFamily( nFamily, rStrName, rMapper, aPrefix, bAsFamily ); + maFamilyList.insert(pFamily); +} + +void SvXMLAutoStylePoolP_Impl::SetFamilyPropSetMapper( + sal_Int32 nFamily, + const UniReference < SvXMLExportPropertyMapper > & rMapper ) +{ + + XMLAutoStyleFamily aTemporary( nFamily ); + FamilyListType::iterator aFind = maFamilyList.find(aTemporary); + if (aFind != maFamilyList.end()) + aFind->mxMapper = rMapper; +} + +// Adds a name to list +void SvXMLAutoStylePoolP_Impl::RegisterName( sal_Int32 nFamily, const OUString& rName ) +{ + XMLAutoStyleFamily aTmp( nFamily ); + FamilyListType::iterator aFind = maFamilyList.find(aTmp); + DBG_ASSERT( aFind != maFamilyList.end(), + "SvXMLAutoStylePool_Impl::RegisterName: unknown family" ); + if (aFind != maFamilyList.end()) + aFind->maNameList.insert(rName); +} + +// +// Retrieve the list of registered names +// + +void SvXMLAutoStylePoolP_Impl::GetRegisteredNames( + uno::Sequence<sal_Int32>& rFamilies, + uno::Sequence<OUString>& rNames ) +{ + // collect registered names + families + vector<sal_Int32> aFamilies; + vector<OUString> aNames; + + // iterate over families + for (FamilyListType::iterator aJ = maFamilyList.begin(); aJ != maFamilyList.end(); ++aJ) + { + XMLAutoStyleFamily &rFamily = *aJ; + + // iterate over names + for (XMLAutoStyleFamily::NameSetType::const_iterator aI = rFamily.maNameList.begin(); aI != rFamily.maNameList.end(); ++aI) + { + aFamilies.push_back( rFamily.mnFamily ); + aNames.push_back( *aI ); + } + } + + // copy the families + names into the sequence types + DBG_ASSERT( aFamilies.size() == aNames.size(), "families != names" ); + + rFamilies.realloc( aFamilies.size() ); + std::copy( aFamilies.begin(), aFamilies.end(), rFamilies.getArray() ); + + rNames.realloc( aNames.size() ); + std::copy( aNames.begin(), aNames.end(), rNames.getArray() ); +} + +// Adds a array of XMLPropertyState ( vector< XMLPropertyState > ) to list +// if not added, yet. + +bool SvXMLAutoStylePoolP_Impl::Add( + OUString& rName, sal_Int32 nFamily, const OUString& rParentName, + const ::std::vector< XMLPropertyState >& rProperties, bool bDontSeek ) +{ + XMLAutoStyleFamily aTemporary( nFamily ); + FamilyListType::iterator aFind = maFamilyList.find(aTemporary); + DBG_ASSERT(aFind != maFamilyList.end(), "SvXMLAutoStylePool_Impl::Add: unknown family"); + + if (aFind == maFamilyList.end()) + return false; + + XMLAutoStyleFamily &rFamily = *aFind; + + XMLAutoStylePoolParent aTmp(rParentName); + XMLAutoStyleFamily::ParentsType::iterator it2 = rFamily.maParents.find(aTmp); + if (it2 == rFamily.maParents.end()) + { + std::pair<XMLAutoStyleFamily::ParentsType::iterator,bool> r = + rFamily.maParents.insert(new XMLAutoStylePoolParent(rParentName)); + it2 = r.first; + } + + XMLAutoStylePoolParent& rParent = *it2; + + bool bRet = false; + if (rParent.Add(rFamily, rProperties, rName, bDontSeek)) + { + rFamily.mnCount++; + bRet = true; + } + + return bRet; +} + +bool SvXMLAutoStylePoolP_Impl::AddNamed( + const OUString& rName, sal_Int32 nFamily, const OUString& rParentName, + const ::std::vector< XMLPropertyState >& rProperties ) +{ + // get family and parent the same way as in Add() + + XMLAutoStyleFamily aTemporary( nFamily ); + FamilyListType::iterator aFind = maFamilyList.find(aTemporary); + DBG_ASSERT(aFind != maFamilyList.end(), "SvXMLAutoStylePool_Impl::Add: unknown family"); + + if (aFind == maFamilyList.end()) + return false; + + XMLAutoStyleFamily &rFamily = *aFind; + + XMLAutoStylePoolParent aTmp(rParentName); + XMLAutoStyleFamily::ParentsType::iterator it2 = rFamily.maParents.find(aTmp); + if (it2 == rFamily.maParents.end()) + { + std::pair<XMLAutoStyleFamily::ParentsType::iterator,bool> r = + rFamily.maParents.insert(new XMLAutoStylePoolParent(rParentName)); + it2 = r.first; + } + + XMLAutoStylePoolParent& rParent = *it2; + + bool bRet = false; + if (rParent.AddNamed(rFamily, rProperties, rName)) + { + rFamily.mnCount++; + bRet = true; + } + + return bRet; +} + +// +// Search for a array of XMLPropertyState ( vector< XMLPropertyState > ) in list +// + +OUString SvXMLAutoStylePoolP_Impl::Find( sal_Int32 nFamily, + const OUString& rParent, + const vector< XMLPropertyState >& rProperties ) const +{ + OUString sName; + + XMLAutoStyleFamily aTemporary( nFamily ); + FamilyListType::const_iterator const iter = maFamilyList.find(aTemporary); + OSL_ENSURE(iter != maFamilyList.end(), "SvXMLAutoStylePool_Impl::Find: unknown family"); + + if (iter != maFamilyList.end()) + { + XMLAutoStyleFamily const& rFamily = *iter; + XMLAutoStylePoolParent aTmp( rParent ); + XMLAutoStyleFamily::ParentsType::const_iterator it2 = rFamily.maParents.find(aTmp); + if (it2 != rFamily.maParents.end()) + { + sName = it2->Find(rFamily, rProperties); + } + } + + return sName; +} + +namespace { + +struct AutoStylePoolExport +{ + const OUString* mpParent; + const XMLAutoStylePoolProperties* mpProperties; + + AutoStylePoolExport() : mpParent(NULL), mpProperties(NULL) {} +}; + +} + +void SvXMLAutoStylePoolP_Impl::exportXML( + sal_Int32 nFamily, + const uno::Reference< ::com::sun::star::xml::sax::XDocumentHandler > &, + const SvXMLUnitConverter&, + const SvXMLNamespaceMap&, + const SvXMLAutoStylePoolP *pAntiImpl) const +{ + // Get list of parents for current family (nFamily) + XMLAutoStyleFamily aTmp( nFamily ); + FamilyListType::const_iterator aFind = maFamilyList.find(aTmp); + DBG_ASSERT( aFind != maFamilyList.end(), + "SvXMLAutoStylePool_Impl::exportXML: unknown family" ); + if (aFind == maFamilyList.end()) + return; + + const XMLAutoStyleFamily &rFamily = *aFind; + sal_uInt32 nCount = rFamily.mnCount; + + if (!nCount) + return; + + // create, initialize and fill helper-structure (SvXMLAutoStylePoolProperties_Impl) + // which contains a parent-name and a SvXMLAutoStylePoolProperties_Impl + std::vector<AutoStylePoolExport> aExpStyles(nCount); + + sal_uInt32 i; + for( i=0; i < nCount; i++ ) + { + aExpStyles[i].mpParent = 0; + aExpStyles[i].mpProperties = 0; + } + + XMLAutoStyleFamily::ParentsType::const_iterator it = rFamily.maParents.begin(), itEnd = rFamily.maParents.end(); + for (; it != itEnd; ++it) + { + const XMLAutoStylePoolParent& rParent = *it; + size_t nProperties = rParent.GetPropertiesList().size(); + for( size_t j = 0; j < nProperties; j++ ) + { + const XMLAutoStylePoolProperties* pProperties = + &rParent.GetPropertiesList()[j]; + sal_uLong nPos = pProperties->GetPos(); + DBG_ASSERT( nPos < nCount, + "SvXMLAutoStylePool_Impl::exportXML: wrong position" ); + if( nPos < nCount ) + { + DBG_ASSERT( !aExpStyles[nPos].mpProperties, + "SvXMLAutoStylePool_Impl::exportXML: double position" ); + aExpStyles[nPos].mpProperties = pProperties; + aExpStyles[nPos].mpParent = &rParent.GetParent(); + } + } + } + + // + // create string to export for each XML-style. That means for each property-list + // + OUString aStrFamilyName = rFamily.maStrFamilyName; + + for( i=0; i<nCount; i++ ) + { + DBG_ASSERT( aExpStyles[i].mpProperties, + "SvXMLAutoStylePool_Impl::exportXML: empty position" ); + + if( aExpStyles[i].mpProperties ) + { + GetExport().AddAttribute( + XML_NAMESPACE_STYLE, XML_NAME, + aExpStyles[i].mpProperties->GetName() ); + + if( rFamily.mbAsFamily ) + { + GetExport().AddAttribute( + XML_NAMESPACE_STYLE, XML_FAMILY, aStrFamilyName ); + } + + if( !aExpStyles[i].mpParent->isEmpty() ) + { + GetExport().AddAttribute( + XML_NAMESPACE_STYLE, XML_PARENT_STYLE_NAME, + GetExport().EncodeStyleName( + *aExpStyles[i].mpParent ) ); + } + + OUString sName; + if( rFamily.mbAsFamily ) + sName = GetXMLToken(XML_STYLE); + else + sName = rFamily.maStrFamilyName; + + pAntiImpl->exportStyleAttributes( + GetExport().GetAttrList(), + nFamily, + aExpStyles[i].mpProperties->GetProperties(), + *rFamily.mxMapper.get() + , GetExport().GetMM100UnitConverter(), + GetExport().GetNamespaceMap() + ); + + SvXMLElementExport aElem( GetExport(), + XML_NAMESPACE_STYLE, sName, + sal_True, sal_True ); + + sal_Int32 nStart(-1); + sal_Int32 nEnd(-1); + if (nFamily == XML_STYLE_FAMILY_PAGE_MASTER) + { + nStart = 0; + sal_Int32 nIndex = 0; + UniReference< XMLPropertySetMapper > aPropMapper = + rFamily.mxMapper->getPropertySetMapper(); + sal_Int16 nContextID; + while(nIndex < aPropMapper->GetEntryCount() && nEnd == -1) + { + nContextID = aPropMapper->GetEntryContextId( nIndex ); + if (nContextID && ((nContextID & CTF_PM_FLAGMASK) != XML_PM_CTF_START)) + nEnd = nIndex; + nIndex++; + } + if (nEnd == -1) + nEnd = nIndex; + } + + rFamily.mxMapper->exportXML( + GetExport(), + aExpStyles[i].mpProperties->GetProperties(), + nStart, nEnd, XML_EXPORT_FLAG_IGN_WS ); + + pAntiImpl->exportStyleContent( + GetExport().GetDocHandler(), + nFamily, + aExpStyles[i].mpProperties->GetProperties(), + *rFamily.mxMapper.get(), + GetExport().GetMM100UnitConverter(), + GetExport().GetNamespaceMap() + ); + } + } +} + +void SvXMLAutoStylePoolP_Impl::ClearEntries() +{ + for (FamilyListType::iterator aI = maFamilyList.begin(); aI != maFamilyList.end(); ++aI) + aI->ClearEntries(); +} + /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ |