1 /************************************************************** 2 * 3 * Licensed to the Apache Software Foundation (ASF) under one 4 * or more contributor license agreements. See the NOTICE file 5 * distributed with this work for additional information 6 * regarding copyright ownership. The ASF licenses this file 7 * to you under the Apache License, Version 2.0 (the 8 * "License"); you may not use this file except in compliance 9 * with the License. You may obtain a copy of the License at 10 * 11 * http://www.apache.org/licenses/LICENSE-2.0 12 * 13 * Unless required by applicable law or agreed to in writing, 14 * software distributed under the License is distributed on an 15 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 16 * KIND, either express or implied. See the License for the 17 * specific language governing permissions and limitations 18 * under the License. 19 * 20 *************************************************************/ 21 22 23 24 #ifndef _XMLOFF_XMLASTPL_IMPL_HXX 25 #define _XMLOFF_XMLASTPL_IMPL_HXX 26 27 #include <sal/types.h> 28 #include <tools/list.hxx> 29 #include <svl/cntnrsrt.hxx> 30 #include <rtl/ustring.hxx> 31 #include <vector> 32 #include <com/sun/star/uno/Reference.h> 33 #include <com/sun/star/xml/sax/XAttributeList.hpp> 34 #include <com/sun/star/xml/sax/XDocumentHandler.hpp> 35 #include <xmloff/maptype.hxx> 36 #include <xmloff/xmlexppr.hxx> 37 38 class SvXMLAutoStylePoolP; 39 class SvXMLAutoStylePoolParentsP_Impl; 40 class SvXMLAutoStylePoolNamesP_Impl; 41 class SvXMLAttributeList; 42 class SvXMLExportPropertyMapper; 43 class SvXMLExport; 44 45 #define MAX_CACHE_SIZE 65536 46 47 /////////////////////////////////////////////////////////////////////////////// 48 // 49 // Implementationclass for stylefamily-information 50 // 51 52 typedef ::rtl::OUString *OUStringPtr; 53 DECLARE_LIST( SvXMLAutoStylePoolCache_Impl, OUStringPtr ) 54 55 class XMLFamilyData_Impl 56 { 57 public: 58 SvXMLAutoStylePoolCache_Impl *pCache; 59 sal_uInt32 mnFamily; 60 ::rtl::OUString maStrFamilyName; 61 UniReference < SvXMLExportPropertyMapper > mxMapper; 62 63 SvXMLAutoStylePoolParentsP_Impl* mpParentList; 64 SvXMLAutoStylePoolNamesP_Impl* mpNameList; 65 sal_uInt32 mnCount; 66 sal_uInt32 mnName; 67 ::rtl::OUString maStrPrefix; 68 sal_Bool bAsFamily; 69 70 public: 71 XMLFamilyData_Impl( sal_Int32 nFamily, const ::rtl::OUString& rStrName, 72 const UniReference < SvXMLExportPropertyMapper > & rMapper, 73 const ::rtl::OUString& rStrPrefix, sal_Bool bAsFamily = sal_True ); 74 XMLFamilyData_Impl(sal_Int32 nFamily)75 XMLFamilyData_Impl( sal_Int32 nFamily ) : 76 pCache( 0 ), 77 mnFamily( nFamily ), mpParentList( NULL ), 78 mpNameList( NULL ), mnCount( 0 ), mnName( 0 ) 79 80 {} 81 ~XMLFamilyData_Impl(); 82 83 friend int XMLFamilyDataSort_Impl( const XMLFamilyData_Impl& r1, const XMLFamilyData_Impl& r2 ); 84 85 void ClearEntries(); 86 }; 87 88 DECLARE_CONTAINER_SORT( XMLFamilyDataList_Impl, XMLFamilyData_Impl ) 89 90 /////////////////////////////////////////////////////////////////////////////// 91 // 92 // 93 // 94 95 DECLARE_CONTAINER_SORT_DEL( SvXMLAutoStylePoolNamesP_Impl, 96 ::rtl::OUString ) 97 98 /////////////////////////////////////////////////////////////////////////////// 99 // 100 // Properties of a pool 101 // 102 103 class SvXMLAutoStylePoolPropertiesP_Impl 104 { 105 ::rtl::OUString msName; 106 ::std::vector< XMLPropertyState > maProperties; 107 sal_uInt32 mnPos; 108 109 public: 110 111 SvXMLAutoStylePoolPropertiesP_Impl( XMLFamilyData_Impl* pFamilyData, const ::std::vector< XMLPropertyState >& rProperties ); 112 ~SvXMLAutoStylePoolPropertiesP_Impl()113 ~SvXMLAutoStylePoolPropertiesP_Impl() 114 { 115 } 116 GetName() const117 const ::rtl::OUString& GetName() const { return msName; } GetProperties() const118 const ::std::vector< XMLPropertyState >& GetProperties() const { return maProperties; } GetPos() const119 sal_uInt32 GetPos() const { return mnPos; } 120 SetName(const::rtl::OUString & rNew)121 void SetName( const ::rtl::OUString& rNew ) { msName = rNew; } 122 }; 123 124 typedef SvXMLAutoStylePoolPropertiesP_Impl *SvXMLAutoStylePoolPropertiesPPtr; 125 DECLARE_LIST( SvXMLAutoStylePoolPropertiesPList_Impl, SvXMLAutoStylePoolPropertiesPPtr ) 126 127 /////////////////////////////////////////////////////////////////////////////// 128 // 129 // Parents of AutoStylePool's 130 // 131 132 class SvXMLAutoStylePoolParentP_Impl 133 { 134 ::rtl::OUString msParent; 135 SvXMLAutoStylePoolPropertiesPList_Impl maPropertiesList; 136 137 public: 138 SvXMLAutoStylePoolParentP_Impl(const::rtl::OUString & rParent)139 SvXMLAutoStylePoolParentP_Impl( const ::rtl::OUString & rParent ) : 140 msParent( rParent ) 141 { 142 } 143 144 ~SvXMLAutoStylePoolParentP_Impl(); 145 146 sal_Bool Add( XMLFamilyData_Impl* pFamilyData, const ::std::vector< XMLPropertyState >& rProperties, ::rtl::OUString& rName, bool bDontSeek = false ); 147 148 sal_Bool AddNamed( XMLFamilyData_Impl* pFamilyData, const ::std::vector< XMLPropertyState >& rProperties, const ::rtl::OUString& rName ); 149 150 ::rtl::OUString Find( const XMLFamilyData_Impl* pFamilyData, const ::std::vector< XMLPropertyState >& rProperties ) const; 151 GetParent() const152 const ::rtl::OUString& GetParent() const { return msParent; } 153 GetPropertiesList() const154 const SvXMLAutoStylePoolPropertiesPList_Impl& GetPropertiesList() const 155 { 156 return maPropertiesList; 157 } 158 }; 159 160 DECLARE_CONTAINER_SORT_DEL( SvXMLAutoStylePoolParentsP_Impl, 161 SvXMLAutoStylePoolParentP_Impl ) 162 163 /////////////////////////////////////////////////////////////////////////////// 164 // 165 // Implementationclass of SvXMLAutoStylePool 166 // 167 168 class SvXMLAutoStylePoolP_Impl 169 { 170 SvXMLExport& rExport; 171 172 XMLFamilyDataList_Impl maFamilyList; 173 174 public: 175 176 SvXMLAutoStylePoolP_Impl( SvXMLExport& rExport ); 177 ~SvXMLAutoStylePoolP_Impl(); 178 GetExport() const179 SvXMLExport& GetExport() const { return rExport; } 180 181 void AddFamily( sal_Int32 nFamily, const ::rtl::OUString& rStrName, 182 const UniReference < SvXMLExportPropertyMapper > & rMapper, 183 const ::rtl::OUString& rStrPrefix, sal_Bool bAsFamily = sal_True ); 184 void RegisterName( sal_Int32 nFamily, const ::rtl::OUString& rName ); 185 void GetRegisteredNames( 186 com::sun::star::uno::Sequence<sal_Int32>& aFamilies, 187 com::sun::star::uno::Sequence<rtl::OUString>& aNames ); 188 189 // ::rtl::OUString Add( sal_Int32 nFamily, const ::rtl::OUString& rParent, 190 // const ::std::vector< XMLPropertyState >& rProperties, 191 // sal_Bool bCache = sal_False ); 192 sal_Bool Add( ::rtl::OUString& rName, sal_Int32 nFamily, 193 const ::rtl::OUString& rParent, 194 const ::std::vector< XMLPropertyState >& rProperties, 195 sal_Bool bCache = sal_False, 196 bool bDontSeek = false ); 197 sal_Bool AddNamed( const ::rtl::OUString& rName, sal_Int32 nFamily, 198 const ::rtl::OUString& rParent, 199 const ::std::vector< XMLPropertyState >& rProperties ); 200 201 ::rtl::OUString AddToCache( sal_Int32 nFamily, 202 const ::rtl::OUString& rParent ); 203 ::rtl::OUString Find( sal_Int32 nFamily, const ::rtl::OUString& rParent, 204 const ::std::vector< XMLPropertyState >& rProperties ) const; 205 206 ::rtl::OUString FindAndRemoveCached( sal_Int32 nFamily ) const; 207 208 void exportXML( sal_Int32 nFamily, 209 const ::com::sun::star::uno::Reference< ::com::sun::star::xml::sax::XDocumentHandler > & rHandler, 210 const SvXMLUnitConverter& rUnitConverter, 211 const SvXMLNamespaceMap& rNamespaceMap, 212 const SvXMLAutoStylePoolP *pAntiImpl) const; 213 214 void ClearEntries(); 215 }; 216 217 struct SvXMLAutoStylePoolPExport_Impl 218 { 219 const ::rtl::OUString *mpParent; 220 const SvXMLAutoStylePoolPropertiesP_Impl *mpProperties; 221 }; 222 223 #endif 224