xref: /AOO41X/main/xmloff/source/style/impastpl.hxx (revision ecfe53c5d1886e1e0d215b0d140d05282ab1c477)
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