Branch data Line data Source code
1 : : /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
2 : : /*************************************************************************
3 : : *
4 : : * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
5 : : *
6 : : * Copyright 2000, 2010 Oracle and/or its affiliates.
7 : : *
8 : : * OpenOffice.org - a multi-platform office productivity suite
9 : : *
10 : : * This file is part of OpenOffice.org.
11 : : *
12 : : * OpenOffice.org is free software: you can redistribute it and/or modify
13 : : * it under the terms of the GNU Lesser General Public License version 3
14 : : * only, as published by the Free Software Foundation.
15 : : *
16 : : * OpenOffice.org is distributed in the hope that it will be useful,
17 : : * but WITHOUT ANY WARRANTY; without even the implied warranty of
18 : : * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
19 : : * GNU Lesser General Public License version 3 for more details
20 : : * (a copy is included in the LICENSE file that accompanied this code).
21 : : *
22 : : * You should have received a copy of the GNU Lesser General Public License
23 : : * version 3 along with OpenOffice.org. If not, see
24 : : * <http://www.openoffice.org/license.html>
25 : : * for a copy of the LGPLv3 License.
26 : : *
27 : : ************************************************************************/
28 : :
29 : :
30 : : #include <stdio.h>
31 : :
32 : : #include <threadhelp/resetableguard.hxx>
33 : : #include <xml/imagesdocumenthandler.hxx>
34 : : #include <macros/debug.hxx>
35 : :
36 : : #include <com/sun/star/xml/sax/XExtendedDocumentHandler.hpp>
37 : :
38 : : #include <vcl/svapp.hxx>
39 : : #include <vcl/toolbox.hxx>
40 : : #include <rtl/ustrbuf.hxx>
41 : :
42 : : #include <comphelper/attributelist.hxx>
43 : :
44 : : using namespace ::com::sun::star::uno;
45 : : using namespace ::com::sun::star::xml::sax;
46 : :
47 : : #define ELEMENT_IMAGECONTAINER "imagescontainer"
48 : : #define ELEMENT_IMAGES "images"
49 : : #define ELEMENT_ENTRY "entry"
50 : : #define ELEMENT_EXTERNALIMAGES "externalimages"
51 : : #define ELEMENT_EXTERNALENTRY "externalentry"
52 : :
53 : : #define ELEMENT_NS_IMAGESCONTAINER "image:imagescontainer"
54 : : #define ELEMENT_NS_IMAGES "image:images"
55 : : #define ELEMENT_NS_ENTRY "image:entry"
56 : : #define ELEMENT_NS_EXTERNALIMAGES "image:externalimages"
57 : : #define ELEMENT_NS_EXTERNALENTRY "image:externalentry"
58 : :
59 : : #define ATTRIBUTE_HREF "href"
60 : : #define ATTRIBUTE_MASKCOLOR "maskcolor"
61 : : #define ATTRIBUTE_COMMAND "command"
62 : : #define ATTRIBUTE_BITMAPINDEX "bitmap-index"
63 : : #define ATTRIBUTE_MASKURL "maskurl"
64 : : #define ATTRIBUTE_MASKMODE "maskmode"
65 : : #define ATTRIBUTE_HIGHCONTRASTURL "highcontrasturl"
66 : : #define ATTRIBUTE_HIGHCONTRASTMASKURL "highcontrastmaskurl"
67 : : #define ATTRIBUTE_TYPE_CDATA "CDATA"
68 : :
69 : : #define ATTRIBUTE_MASKMODE_BITMAP "maskbitmap"
70 : : #define ATTRIBUTE_MASKMODE_COLOR "maskcolor"
71 : :
72 : : #define ATTRIBUTE_XMLNS_IMAGE "xmlns:image"
73 : : #define ATTRIBUTE_XMLNS_XLINK "xmlns:xlink"
74 : :
75 : : #define ATTRIBUTE_XLINK_TYPE "xlink:type"
76 : : #define ATTRIBUTE_XLINK_TYPE_VALUE "simple"
77 : :
78 : : #define XMLNS_IMAGE "http://openoffice.org/2001/image"
79 : : #define XMLNS_XLINK "http://www.w3.org/1999/xlink"
80 : : #define XMLNS_IMAGE_PREFIX "image:"
81 : : #define XMLNS_XLINK_PREFIX "xlink:"
82 : :
83 : : #define XMLNS_FILTER_SEPARATOR "^"
84 : :
85 : : #define IMAGES_DOCTYPE "<!DOCTYPE image:imagecontainer PUBLIC \"-//OpenOffice.org//DTD OfficeDocument 1.0//EN\" \"image.dtd\">"
86 : :
87 : : namespace framework
88 : : {
89 : :
90 : : struct ImageXMLEntryProperty
91 : : {
92 : : OReadImagesDocumentHandler::Image_XML_Namespace nNamespace;
93 : : char aEntryName[20];
94 : : };
95 : :
96 : : ImageXMLEntryProperty ImagesEntries[OReadImagesDocumentHandler::IMG_XML_ENTRY_COUNT] =
97 : : {
98 : : { OReadImagesDocumentHandler::IMG_NS_IMAGE, ELEMENT_IMAGECONTAINER },
99 : : { OReadImagesDocumentHandler::IMG_NS_IMAGE, ELEMENT_IMAGES },
100 : : { OReadImagesDocumentHandler::IMG_NS_IMAGE, ELEMENT_ENTRY },
101 : : { OReadImagesDocumentHandler::IMG_NS_IMAGE, ELEMENT_EXTERNALIMAGES },
102 : : { OReadImagesDocumentHandler::IMG_NS_IMAGE, ELEMENT_EXTERNALENTRY },
103 : : { OReadImagesDocumentHandler::IMG_NS_XLINK, ATTRIBUTE_HREF },
104 : : { OReadImagesDocumentHandler::IMG_NS_IMAGE, ATTRIBUTE_MASKCOLOR },
105 : : { OReadImagesDocumentHandler::IMG_NS_IMAGE, ATTRIBUTE_COMMAND },
106 : : { OReadImagesDocumentHandler::IMG_NS_IMAGE, ATTRIBUTE_BITMAPINDEX },
107 : : { OReadImagesDocumentHandler::IMG_NS_IMAGE, ATTRIBUTE_MASKURL },
108 : : { OReadImagesDocumentHandler::IMG_NS_IMAGE, ATTRIBUTE_MASKMODE },
109 : : { OReadImagesDocumentHandler::IMG_NS_IMAGE, ATTRIBUTE_HIGHCONTRASTURL },
110 : : { OReadImagesDocumentHandler::IMG_NS_IMAGE, ATTRIBUTE_HIGHCONTRASTMASKURL }
111 : : };
112 : :
113 : :
114 : 0 : OReadImagesDocumentHandler::OReadImagesDocumentHandler( ImageListsDescriptor& aItems ) :
115 : 0 : ThreadHelpBase( &Application::GetSolarMutex() ),
116 : : m_aImageList( aItems ),
117 : : m_pImages( 0 ),
118 [ # # ][ # # ]: 0 : m_pExternalImages( 0 )
119 : : {
120 : 0 : m_aImageList.pImageList = NULL;
121 : 0 : m_aImageList.pExternalImageList = NULL;
122 : :
123 [ # # ]: 0 : m_nHashMaskModeBitmap = ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( ATTRIBUTE_MASKMODE_BITMAP )).hashCode();
124 [ # # ]: 0 : m_nHashMaskModeColor = ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( ATTRIBUTE_MASKMODE_COLOR )).hashCode();
125 : :
126 : : // create hash map to speed up lookup
127 [ # # ]: 0 : for ( int i = 0; i < (int)IMG_XML_ENTRY_COUNT; i++ )
128 : : {
129 : 0 : ::rtl::OUStringBuffer temp( 20 );
130 : :
131 [ # # ]: 0 : if ( ImagesEntries[i].nNamespace == IMG_NS_IMAGE )
132 [ # # ]: 0 : temp.appendAscii( XMLNS_IMAGE );
133 : : else
134 [ # # ]: 0 : temp.appendAscii( XMLNS_XLINK );
135 : :
136 [ # # ]: 0 : temp.appendAscii( XMLNS_FILTER_SEPARATOR );
137 [ # # ]: 0 : temp.appendAscii( ImagesEntries[i].aEntryName );
138 [ # # ][ # # ]: 0 : m_aImageMap.insert( ImageHashMap::value_type( temp.makeStringAndClear(), (Image_XML_Entry)i ) );
139 : 0 : }
140 : :
141 : : // reset states
142 : 0 : m_bImageContainerStartFound = sal_False;
143 : 0 : m_bImageContainerEndFound = sal_False;
144 : 0 : m_bImagesStartFound = sal_False;
145 : 0 : m_bImagesEndFound = sal_False;
146 : 0 : m_bImageStartFound = sal_False;
147 : 0 : m_bExternalImagesStartFound = sal_False;
148 : 0 : m_bExternalImagesEndFound = sal_False;
149 : 0 : m_bExternalImageStartFound = sal_False;
150 : 0 : }
151 : :
152 [ # # ][ # # ]: 0 : OReadImagesDocumentHandler::~OReadImagesDocumentHandler()
153 : : {
154 [ # # ]: 0 : }
155 : :
156 : : // XDocumentHandler
157 : 0 : void SAL_CALL OReadImagesDocumentHandler::startDocument(void)
158 : : throw ( SAXException, RuntimeException )
159 : : {
160 : 0 : }
161 : :
162 : 0 : void SAL_CALL OReadImagesDocumentHandler::endDocument(void)
163 : : throw( SAXException, RuntimeException )
164 : : {
165 [ # # ]: 0 : ResetableGuard aGuard( m_aLock );
166 : :
167 [ # # ][ # # ]: 0 : if (( m_bImageContainerStartFound && !m_bImageContainerEndFound ) ||
[ # # ][ # # ]
168 : 0 : ( !m_bImageContainerStartFound && m_bImageContainerEndFound ) )
169 : : {
170 [ # # ]: 0 : ::rtl::OUString aErrorMessage = getErrorLineString();
171 [ # # ]: 0 : aErrorMessage += ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "No matching start or end element 'image:imagecontainer' found!" ));
172 [ # # ]: 0 : throw SAXException( aErrorMessage, Reference< XInterface >(), Any() );
173 [ # # ]: 0 : }
174 : 0 : }
175 : :
176 : 0 : void SAL_CALL OReadImagesDocumentHandler::startElement(
177 : : const ::rtl::OUString& aName, const Reference< XAttributeList > &xAttribs )
178 : : throw( SAXException, RuntimeException )
179 : : {
180 [ # # ]: 0 : ResetableGuard aGuard( m_aLock );
181 : :
182 [ # # ]: 0 : ImageHashMap::const_iterator pImageEntry = m_aImageMap.find( aName ) ;
183 [ # # ][ # # ]: 0 : if ( pImageEntry != m_aImageMap.end() )
184 : : {
185 [ # # ][ # # : 0 : switch ( pImageEntry->second )
# # # # ]
186 : : {
187 : : case IMG_ELEMENT_IMAGECONTAINER:
188 : : {
189 : : // image:imagecontainer element (container element for all further image elements)
190 [ # # ]: 0 : if ( m_bImageContainerStartFound )
191 : : {
192 [ # # ]: 0 : ::rtl::OUString aErrorMessage = getErrorLineString();
193 [ # # ]: 0 : aErrorMessage += ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "Element 'image:imagecontainer' cannot be embeded into 'image:imagecontainer'!" ));
194 [ # # ]: 0 : throw SAXException( aErrorMessage, Reference< XInterface >(), Any() );
195 : : }
196 : :
197 : 0 : m_bImageContainerStartFound = sal_True;
198 : : }
199 : 0 : break;
200 : :
201 : : case IMG_ELEMENT_IMAGES:
202 : : {
203 [ # # ]: 0 : if ( !m_bImageContainerStartFound )
204 : : {
205 [ # # ]: 0 : ::rtl::OUString aErrorMessage = getErrorLineString();
206 [ # # ]: 0 : aErrorMessage += ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "Element 'image:images' must be embeded into element 'image:imagecontainer'!" ));
207 [ # # ]: 0 : throw SAXException( aErrorMessage, Reference< XInterface >(), Any() );
208 : : }
209 : :
210 [ # # ]: 0 : if ( m_bImagesStartFound )
211 : : {
212 [ # # ]: 0 : ::rtl::OUString aErrorMessage = getErrorLineString();
213 [ # # ]: 0 : aErrorMessage += ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "Element 'image:images' cannot be embeded into 'image:images'!" ));
214 [ # # ]: 0 : throw SAXException( aErrorMessage, Reference< XInterface >(), Any() );
215 : : }
216 : :
217 [ # # ]: 0 : if ( !m_aImageList.pImageList )
218 [ # # ][ # # ]: 0 : m_aImageList.pImageList = new ImageListDescriptor;
219 : :
220 : 0 : m_bImagesStartFound = sal_True;
221 [ # # ][ # # ]: 0 : m_pImages = new ImageListItemDescriptor;
222 : :
223 [ # # ][ # # ]: 0 : for ( sal_Int16 n = 0; n < xAttribs->getLength(); n++ )
[ # # ]
224 : : {
225 [ # # ][ # # ]: 0 : pImageEntry = m_aImageMap.find( xAttribs->getNameByIndex( n ) );
[ # # ]
226 [ # # ][ # # ]: 0 : if ( pImageEntry != m_aImageMap.end() )
227 : : {
228 [ # # ][ # # : 0 : switch ( pImageEntry->second )
# # # #
# ]
229 : : {
230 : : case IMG_ATTRIBUTE_HREF:
231 : : {
232 [ # # ][ # # ]: 0 : m_pImages->aURL = xAttribs->getValueByIndex( n );
[ # # ]
233 : : }
234 : 0 : break;
235 : :
236 : : case IMG_ATTRIBUTE_MASKCOLOR:
237 : : {
238 [ # # ][ # # ]: 0 : ::rtl::OUString aColor = xAttribs->getValueByIndex( n );
239 : :
240 [ # # ]: 0 : if ( !aColor.isEmpty() )
241 : : {
242 [ # # ]: 0 : if ( aColor.getStr()[0] == '#' )
243 : : {
244 : : // the color value is given as #rrggbb and used the hexadecimal system!!
245 : 0 : sal_uInt32 nColor = aColor.copy( 1 ).toInt32( 16 );
246 : :
247 : 0 : m_pImages->aMaskColor = Color( COLORDATA_RGB( nColor ) );
248 : : }
249 : 0 : }
250 : : }
251 : 0 : break;
252 : :
253 : : case IMG_ATTRIBUTE_MASKURL:
254 : : {
255 [ # # ][ # # ]: 0 : m_pImages->aMaskURL = xAttribs->getValueByIndex( n );
[ # # ]
256 : : }
257 : 0 : break;
258 : :
259 : : case IMG_ATTRIBUTE_MASKMODE:
260 : : {
261 [ # # ][ # # ]: 0 : sal_Int32 nHashCode = xAttribs->getValueByIndex( n ).hashCode();
262 [ # # ]: 0 : if ( nHashCode == m_nHashMaskModeBitmap )
263 : 0 : m_pImages->nMaskMode = ImageMaskMode_Bitmap;
264 [ # # ]: 0 : else if ( nHashCode == m_nHashMaskModeColor )
265 : 0 : m_pImages->nMaskMode = ImageMaskMode_Color;
266 : : else
267 : : {
268 [ # # ][ # # ]: 0 : delete m_pImages;
269 : 0 : m_pImages = NULL;
270 : :
271 [ # # ]: 0 : ::rtl::OUString aErrorMessage = getErrorLineString();
272 [ # # ]: 0 : aErrorMessage += ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "Attribute image:maskmode must be 'maskcolor' or 'maskbitmap'!" ));
273 [ # # ]: 0 : throw SAXException( aErrorMessage, Reference< XInterface >(), Any() );
274 : : }
275 : : }
276 : 0 : break;
277 : :
278 : : case IMG_ATTRIBUTE_HIGHCONTRASTURL:
279 : : {
280 [ # # ][ # # ]: 0 : m_pImages->aHighContrastURL = xAttribs->getValueByIndex( n );
[ # # ]
281 : : }
282 : 0 : break;
283 : :
284 : : case IMG_ATTRIBUTE_HIGHCONTRASTMASKURL:
285 : : {
286 [ # # ][ # # ]: 0 : m_pImages->aHighContrastMaskURL = xAttribs->getValueByIndex( n );
[ # # ]
287 : : }
288 : 0 : break;
289 : :
290 : : default:
291 : 0 : break;
292 : : }
293 : : }
294 : : } // for
295 : :
296 [ # # ]: 0 : if ( m_pImages->aURL.Len() == 0 )
297 : : {
298 [ # # ][ # # ]: 0 : delete m_pImages;
299 : 0 : m_pImages = NULL;
300 : :
301 [ # # ]: 0 : ::rtl::OUString aErrorMessage = getErrorLineString();
302 [ # # ]: 0 : aErrorMessage += ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "Required attribute xlink:href must have a value!" ));
303 [ # # ]: 0 : throw SAXException( aErrorMessage, Reference< XInterface >(), Any() );
304 : : }
305 : : }
306 : 0 : break;
307 : :
308 : : case IMG_ELEMENT_ENTRY:
309 : : {
310 : : // Check that image:entry is embeded into image:images!
311 [ # # ]: 0 : if ( !m_bImagesStartFound )
312 : : {
313 [ # # ][ # # ]: 0 : delete m_pImages;
314 : 0 : m_pImages = NULL;
315 : :
316 [ # # ]: 0 : ::rtl::OUString aErrorMessage = getErrorLineString();
317 [ # # ]: 0 : aErrorMessage += ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "Element 'image:entry' must be embeded into element 'image:images'!" ));
318 [ # # ]: 0 : throw SAXException( aErrorMessage, Reference< XInterface >(), Any() );
319 : : }
320 : :
321 [ # # ]: 0 : if ( !m_pImages->pImageItemList )
322 [ # # ][ # # ]: 0 : m_pImages->pImageItemList = new ImageItemListDescriptor;
323 : :
324 : 0 : m_bImageStartFound = sal_True;
325 : :
326 : : // Create new image item descriptor
327 [ # # ][ # # ]: 0 : ImageItemDescriptor* pItem = new ImageItemDescriptor;
328 : 0 : pItem->nIndex = -1;
329 : :
330 : : // Read attributes for this image definition
331 [ # # ][ # # ]: 0 : for ( sal_Int16 n = 0; n < xAttribs->getLength(); n++ )
[ # # ]
332 : : {
333 [ # # ][ # # ]: 0 : pImageEntry = m_aImageMap.find( xAttribs->getNameByIndex( n ) );
[ # # ]
334 [ # # ][ # # ]: 0 : if ( pImageEntry != m_aImageMap.end() )
335 : : {
336 [ # # ]: 0 : switch ( pImageEntry->second )
[ # # # ]
337 : : {
338 : : case IMG_ATTRIBUTE_COMMAND:
339 : : {
340 [ # # ][ # # ]: 0 : pItem->aCommandURL = xAttribs->getValueByIndex( n );
[ # # ]
341 : : }
342 : 0 : break;
343 : :
344 : : case IMG_ATTRIBUTE_BITMAPINDEX:
345 : : {
346 [ # # ][ # # ]: 0 : pItem->nIndex = xAttribs->getValueByIndex( n ).toInt32();
347 : : }
348 : 0 : break;
349 : :
350 : : default:
351 : 0 : break;
352 : : }
353 : : }
354 : : }
355 : :
356 : : // Check required attribute "bitmap-index"
357 [ # # ]: 0 : if ( pItem->nIndex < 0 )
358 : : {
359 [ # # ][ # # ]: 0 : delete pItem;
360 [ # # ][ # # ]: 0 : delete m_pImages;
361 : 0 : m_pImages = NULL;
362 : :
363 [ # # ]: 0 : ::rtl::OUString aErrorMessage = getErrorLineString();
364 [ # # ]: 0 : aErrorMessage += ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "Required attribute 'image:bitmap-index' must have a value >= 0!" ));
365 [ # # ]: 0 : throw SAXException( aErrorMessage, Reference< XInterface >(), Any() );
366 : : }
367 : :
368 : : // Check required attribute "command"
369 [ # # ]: 0 : if ( pItem->aCommandURL.Len() == 0 )
370 : : {
371 [ # # ][ # # ]: 0 : delete pItem;
372 [ # # ][ # # ]: 0 : delete m_pImages;
373 : 0 : m_pImages = NULL;
374 : :
375 [ # # ]: 0 : ::rtl::OUString aErrorMessage = getErrorLineString();
376 [ # # ]: 0 : aErrorMessage += ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "Required attribute 'image:command' must have a value!" ));
377 [ # # ]: 0 : throw SAXException( aErrorMessage, Reference< XInterface >(), Any() );
378 : : }
379 : :
380 [ # # ]: 0 : if ( m_pImages )
381 [ # # ]: 0 : m_pImages->pImageItemList->push_back( pItem );
382 : : }
383 : 0 : break;
384 : :
385 : : case IMG_ELEMENT_EXTERNALIMAGES:
386 : : {
387 : : // Check that image:externalimages is embeded into image:imagecontainer
388 [ # # ]: 0 : if ( !m_bImageContainerStartFound )
389 : : {
390 [ # # ][ # # ]: 0 : delete m_pImages;
391 : 0 : m_pImages = NULL;
392 : :
393 [ # # ]: 0 : ::rtl::OUString aErrorMessage = getErrorLineString();
394 [ # # ]: 0 : aErrorMessage += ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "Element 'image:externalimages' must be embeded into element 'image:imagecontainer'!" ));
395 [ # # ]: 0 : throw SAXException( aErrorMessage, Reference< XInterface >(), Any() );
396 : : }
397 : :
398 : : // Check that image:externalentry is NOT embeded into image:externalentry
399 [ # # ]: 0 : if ( m_bExternalImagesStartFound )
400 : : {
401 [ # # ][ # # ]: 0 : delete m_pImages;
402 : 0 : m_pImages = NULL;
403 : :
404 [ # # ]: 0 : ::rtl::OUString aErrorMessage = getErrorLineString();
405 [ # # ]: 0 : aErrorMessage += ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "Element 'image:externalimages' cannot be embeded into 'image:externalimages'!" ));
406 [ # # ]: 0 : throw SAXException( aErrorMessage, Reference< XInterface >(), Any() );
407 : : }
408 : :
409 : : // Create unique external image container
410 : 0 : m_bExternalImagesStartFound = sal_True;
411 [ # # ][ # # ]: 0 : m_pExternalImages = new ExternalImageItemListDescriptor;
412 : : }
413 : 0 : break;
414 : :
415 : : case IMG_ELEMENT_EXTERNALENTRY:
416 : : {
417 [ # # ]: 0 : if ( !m_bExternalImagesStartFound )
418 : : {
419 [ # # ][ # # ]: 0 : delete m_pImages;
420 [ # # ][ # # ]: 0 : delete m_pExternalImages;
421 : 0 : m_pImages = NULL;
422 : 0 : m_pExternalImages = NULL;
423 : :
424 [ # # ]: 0 : ::rtl::OUString aErrorMessage = getErrorLineString();
425 [ # # ]: 0 : aErrorMessage += ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "Element 'image:externalentry' must be embeded into 'image:externalimages'!" ));
426 [ # # ]: 0 : throw SAXException( aErrorMessage, Reference< XInterface >(), Any() );
427 : : }
428 : :
429 [ # # ]: 0 : if ( m_bExternalImageStartFound )
430 : : {
431 [ # # ][ # # ]: 0 : delete m_pImages;
432 [ # # ][ # # ]: 0 : delete m_pExternalImages;
433 : 0 : m_pImages = NULL;
434 : 0 : m_pExternalImages = NULL;
435 : :
436 [ # # ]: 0 : ::rtl::OUString aErrorMessage = getErrorLineString();
437 [ # # ]: 0 : aErrorMessage += ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "Element 'image:externalentry' cannot be embeded into 'image:externalentry'!" ));
438 [ # # ]: 0 : throw SAXException( aErrorMessage, Reference< XInterface >(), Any() );
439 : : }
440 : :
441 : 0 : m_bExternalImageStartFound = sal_True;
442 : :
443 [ # # ][ # # ]: 0 : ExternalImageItemDescriptor* pItem = new ExternalImageItemDescriptor;
444 : :
445 : : // Read attributes for this external image definition
446 [ # # ][ # # ]: 0 : for ( sal_Int16 n = 0; n < xAttribs->getLength(); n++ )
[ # # ]
447 : : {
448 [ # # ][ # # ]: 0 : pImageEntry = m_aImageMap.find( xAttribs->getNameByIndex( n ) );
[ # # ]
449 [ # # ][ # # ]: 0 : if ( pImageEntry != m_aImageMap.end() )
450 : : {
451 [ # # ]: 0 : switch ( pImageEntry->second )
[ # # # ]
452 : : {
453 : : case IMG_ATTRIBUTE_COMMAND:
454 : : {
455 [ # # ][ # # ]: 0 : pItem->aCommandURL = xAttribs->getValueByIndex( n );
[ # # ]
456 : : }
457 : 0 : break;
458 : :
459 : : case IMG_ATTRIBUTE_HREF:
460 : : {
461 [ # # ][ # # ]: 0 : pItem->aURL = xAttribs->getValueByIndex( n );
[ # # ]
462 : : }
463 : 0 : break;
464 : :
465 : : default:
466 : 0 : break;
467 : : }
468 : : }
469 : : }
470 : :
471 : : // Check required attribute "command"
472 [ # # ]: 0 : if ( pItem->aCommandURL.Len() == 0 )
473 : : {
474 [ # # ][ # # ]: 0 : delete pItem;
475 [ # # ][ # # ]: 0 : delete m_pImages;
476 [ # # ][ # # ]: 0 : delete m_pExternalImages;
477 : 0 : m_pImages = NULL;
478 : 0 : m_pExternalImages = NULL;
479 : :
480 [ # # ]: 0 : ::rtl::OUString aErrorMessage = getErrorLineString();
481 [ # # ]: 0 : aErrorMessage += ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "Required attribute 'image:command' must have a value!" ));
482 [ # # ]: 0 : throw SAXException( aErrorMessage, Reference< XInterface >(), Any() );
483 : : }
484 : :
485 : : // Check required attribute "href"
486 [ # # ]: 0 : if ( pItem->aURL.Len() == 0 )
487 : : {
488 [ # # ][ # # ]: 0 : delete pItem;
489 [ # # ][ # # ]: 0 : delete m_pImages;
490 [ # # ][ # # ]: 0 : delete m_pExternalImages;
491 : 0 : m_pImages = NULL;
492 : 0 : m_pExternalImages = NULL;
493 : :
494 [ # # ]: 0 : ::rtl::OUString aErrorMessage = getErrorLineString();
495 [ # # ]: 0 : aErrorMessage += ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "Required attribute 'xlink:href' must have a value!" ));
496 [ # # ]: 0 : throw SAXException( aErrorMessage, Reference< XInterface >(), Any() );
497 : : }
498 : :
499 [ # # ]: 0 : if ( m_pExternalImages )
500 [ # # ]: 0 : m_pExternalImages->push_back( pItem );
501 : : else
502 [ # # ][ # # ]: 0 : delete pItem;
503 : : }
504 : 0 : break;
505 : :
506 : : default:
507 : 0 : break;
508 : : }
509 [ # # ]: 0 : }
510 : 0 : }
511 : :
512 : 0 : void SAL_CALL OReadImagesDocumentHandler::endElement(const ::rtl::OUString& aName)
513 : : throw( SAXException, RuntimeException )
514 : : {
515 [ # # ]: 0 : ResetableGuard aGuard( m_aLock );
516 : :
517 [ # # ]: 0 : ImageHashMap::const_iterator pImageEntry = m_aImageMap.find( aName ) ;
518 [ # # ][ # # ]: 0 : if ( pImageEntry != m_aImageMap.end() )
519 : : {
520 [ # # ][ # # : 0 : switch ( pImageEntry->second )
# # # # ]
521 : : {
522 : : case IMG_ELEMENT_IMAGECONTAINER:
523 : : {
524 : 0 : m_bImageContainerEndFound = sal_True;
525 : : }
526 : 0 : break;
527 : :
528 : : case IMG_ELEMENT_IMAGES:
529 : : {
530 [ # # ]: 0 : if ( m_pImages )
531 : : {
532 [ # # ]: 0 : if ( m_aImageList.pImageList )
533 [ # # ]: 0 : m_aImageList.pImageList->push_back( m_pImages );
534 : 0 : m_pImages = NULL;
535 : : }
536 : 0 : m_bImagesStartFound = sal_False;
537 : : }
538 : 0 : break;
539 : :
540 : : case IMG_ELEMENT_ENTRY:
541 : : {
542 : 0 : m_bImageStartFound = sal_False;
543 : : }
544 : 0 : break;
545 : :
546 : : case IMG_ELEMENT_EXTERNALIMAGES:
547 : : {
548 [ # # ][ # # ]: 0 : if ( m_pExternalImages && !m_aImageList.pExternalImageList )
549 : : {
550 [ # # ]: 0 : if ( !m_aImageList.pExternalImageList )
551 : 0 : m_aImageList.pExternalImageList = m_pExternalImages;
552 : : }
553 : :
554 : 0 : m_bExternalImagesStartFound = sal_False;
555 : 0 : m_pExternalImages = NULL;
556 : : }
557 : 0 : break;
558 : :
559 : : case IMG_ELEMENT_EXTERNALENTRY:
560 : : {
561 : 0 : m_bExternalImageStartFound = sal_False;
562 : : }
563 : 0 : break;
564 : :
565 : : default:
566 : 0 : break;
567 : : }
568 [ # # ]: 0 : }
569 : 0 : }
570 : :
571 : 0 : void SAL_CALL OReadImagesDocumentHandler::characters(const ::rtl::OUString&)
572 : : throw( SAXException, RuntimeException )
573 : : {
574 : 0 : }
575 : :
576 : 0 : void SAL_CALL OReadImagesDocumentHandler::ignorableWhitespace(const ::rtl::OUString&)
577 : : throw( SAXException, RuntimeException )
578 : : {
579 : 0 : }
580 : :
581 : 0 : void SAL_CALL OReadImagesDocumentHandler::processingInstruction(
582 : : const ::rtl::OUString& /*aTarget*/, const ::rtl::OUString& /*aData*/ )
583 : : throw( SAXException, RuntimeException )
584 : : {
585 : 0 : }
586 : :
587 : 0 : void SAL_CALL OReadImagesDocumentHandler::setDocumentLocator(
588 : : const Reference< XLocator > &xLocator)
589 : : throw( SAXException, RuntimeException )
590 : : {
591 [ # # ]: 0 : ResetableGuard aGuard( m_aLock );
592 : :
593 [ # # ][ # # ]: 0 : m_xLocator = xLocator;
594 : 0 : }
595 : :
596 : 0 : ::rtl::OUString OReadImagesDocumentHandler::getErrorLineString()
597 : : {
598 [ # # ]: 0 : ResetableGuard aGuard( m_aLock );
599 : :
600 : : char buffer[32];
601 : :
602 [ # # ]: 0 : if ( m_xLocator.is() )
603 : : {
604 [ # # ][ # # ]: 0 : snprintf( buffer, sizeof(buffer), "Line: %ld - ", static_cast<long>( m_xLocator->getLineNumber() ));
605 : 0 : return ::rtl::OUString::createFromAscii( buffer );
606 : : }
607 : : else
608 [ # # ]: 0 : return ::rtl::OUString();
609 : : }
610 : :
611 : :
612 : : //_________________________________________________________________________________________________________________
613 : : // OWriteImagesDocumentHandler
614 : : //_________________________________________________________________________________________________________________
615 : :
616 : 0 : OWriteImagesDocumentHandler::OWriteImagesDocumentHandler(
617 : : const ImageListsDescriptor& aItems,
618 : : Reference< XDocumentHandler > rWriteDocumentHandler ) :
619 : 0 : ThreadHelpBase( &Application::GetSolarMutex() ),
620 : : m_aImageListsItems( aItems ),
621 : 0 : m_xWriteDocumentHandler( rWriteDocumentHandler )
622 : : {
623 [ # # ]: 0 : ::comphelper::AttributeList* pList = new ::comphelper::AttributeList;
624 [ # # ][ # # ]: 0 : m_xEmptyList = Reference< XAttributeList >( (XAttributeList *) pList, UNO_QUERY );
[ # # ]
625 [ # # ]: 0 : m_aAttributeType = ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( ATTRIBUTE_TYPE_CDATA ));
626 [ # # ]: 0 : m_aXMLImageNS = ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( XMLNS_IMAGE_PREFIX ));
627 [ # # ]: 0 : m_aXMLXlinkNS = ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( XMLNS_XLINK_PREFIX ));
628 [ # # ]: 0 : m_aAttributeXlinkType = ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( ATTRIBUTE_XLINK_TYPE ));
629 [ # # ]: 0 : m_aAttributeValueSimple = ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( ATTRIBUTE_XLINK_TYPE_VALUE ));
630 : 0 : }
631 : :
632 : 0 : OWriteImagesDocumentHandler::~OWriteImagesDocumentHandler()
633 : : {
634 [ # # ]: 0 : }
635 : :
636 : 0 : void OWriteImagesDocumentHandler::WriteImagesDocument() throw
637 : : ( SAXException, RuntimeException )
638 : : {
639 [ # # ]: 0 : ResetableGuard aGuard( m_aLock );
640 : :
641 [ # # ][ # # ]: 0 : m_xWriteDocumentHandler->startDocument();
642 : :
643 : : // write DOCTYPE line!
644 [ # # ]: 0 : Reference< XExtendedDocumentHandler > xExtendedDocHandler( m_xWriteDocumentHandler, UNO_QUERY );
645 [ # # ]: 0 : if ( xExtendedDocHandler.is() )
646 : : {
647 [ # # ][ # # ]: 0 : xExtendedDocHandler->unknown( ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( IMAGES_DOCTYPE )) );
[ # # ]
648 [ # # ][ # # ]: 0 : m_xWriteDocumentHandler->ignorableWhitespace( ::rtl::OUString() );
649 : : }
650 : :
651 [ # # ]: 0 : ::comphelper::AttributeList* pList = new ::comphelper::AttributeList;
652 [ # # ][ # # ]: 0 : Reference< XAttributeList > xList( (XAttributeList *) pList , UNO_QUERY );
653 : :
654 : : pList->AddAttribute( ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( ATTRIBUTE_XMLNS_IMAGE )),
655 : : m_aAttributeType,
656 [ # # ][ # # ]: 0 : ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( XMLNS_IMAGE )) );
[ # # ]
657 : :
658 : : pList->AddAttribute( ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( ATTRIBUTE_XMLNS_XLINK )),
659 : : m_aAttributeType,
660 [ # # ][ # # ]: 0 : ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( XMLNS_XLINK )) );
[ # # ]
661 : :
662 [ # # ][ # # ]: 0 : m_xWriteDocumentHandler->startElement( ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( ELEMENT_NS_IMAGESCONTAINER )), pList );
[ # # ][ # # ]
[ # # ]
663 [ # # ][ # # ]: 0 : m_xWriteDocumentHandler->ignorableWhitespace( ::rtl::OUString() );
664 : :
665 [ # # ]: 0 : if ( m_aImageListsItems.pImageList )
666 : : {
667 : 0 : ImageListDescriptor* pImageList = m_aImageListsItems.pImageList;
668 : :
669 [ # # ]: 0 : for ( sal_uInt16 i = 0; i < m_aImageListsItems.pImageList->size(); i++ )
670 : : {
671 [ # # ]: 0 : const ImageListItemDescriptor* pImageItems = &(*pImageList)[i];
672 [ # # ]: 0 : WriteImageList( pImageItems );
673 : : }
674 : : }
675 : :
676 [ # # ]: 0 : if ( m_aImageListsItems.pExternalImageList )
677 : : {
678 [ # # ]: 0 : WriteExternalImageList( m_aImageListsItems.pExternalImageList );
679 : : }
680 : :
681 [ # # ][ # # ]: 0 : m_xWriteDocumentHandler->ignorableWhitespace( ::rtl::OUString() );
682 [ # # ][ # # ]: 0 : m_xWriteDocumentHandler->endElement( ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( ELEMENT_NS_IMAGESCONTAINER )) );
[ # # ]
683 [ # # ][ # # ]: 0 : m_xWriteDocumentHandler->ignorableWhitespace( ::rtl::OUString() );
684 [ # # ][ # # ]: 0 : m_xWriteDocumentHandler->endDocument();
[ # # ]
685 : 0 : }
686 : :
687 : : //_________________________________________________________________________________________________________________
688 : : // protected member functions
689 : : //_________________________________________________________________________________________________________________
690 : :
691 : 0 : void OWriteImagesDocumentHandler::WriteImageList( const ImageListItemDescriptor* pImageList ) throw
692 : : ( SAXException, RuntimeException )
693 : : {
694 [ # # ]: 0 : ::comphelper::AttributeList* pList = new ::comphelper::AttributeList;
695 [ # # ][ # # ]: 0 : Reference< XAttributeList > xList( (XAttributeList *) pList , UNO_QUERY );
696 : :
697 : : // save required attributes
698 : : pList->AddAttribute( m_aAttributeXlinkType,
699 : : m_aAttributeType,
700 [ # # ]: 0 : m_aAttributeValueSimple );
701 : :
702 : : pList->AddAttribute( m_aXMLXlinkNS + ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( ATTRIBUTE_HREF )),
703 : : m_aAttributeType,
704 [ # # ][ # # ]: 0 : pImageList->aURL );
[ # # ]
705 : :
706 [ # # ]: 0 : if ( pImageList->nMaskMode == ImageMaskMode_Bitmap )
707 : : {
708 : : pList->AddAttribute( m_aXMLImageNS + ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( ATTRIBUTE_MASKMODE )),
709 : : m_aAttributeType,
710 [ # # ][ # # ]: 0 : ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( ATTRIBUTE_MASKMODE_BITMAP )) );
[ # # ]
711 : :
712 : : pList->AddAttribute( m_aXMLImageNS + ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( ATTRIBUTE_MASKURL )),
713 : : m_aAttributeType,
714 [ # # ][ # # ]: 0 : pImageList->aMaskURL );
[ # # ]
715 : :
716 [ # # ]: 0 : if ( pImageList->aHighContrastMaskURL.Len() > 0 )
717 : : {
718 : : pList->AddAttribute( m_aXMLImageNS + ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( ATTRIBUTE_HIGHCONTRASTMASKURL )),
719 : : m_aAttributeType,
720 [ # # ][ # # ]: 0 : pImageList->aHighContrastMaskURL );
[ # # ]
721 : : }
722 : : }
723 : : else
724 : : {
725 : 0 : ::rtl::OUStringBuffer aColorStrBuffer( 8 );
726 : 0 : sal_Int64 nValue = pImageList->aMaskColor.GetRGBColor();
727 : :
728 [ # # ]: 0 : aColorStrBuffer.appendAscii( "#" );
729 [ # # ]: 0 : aColorStrBuffer.append( ::rtl::OUString::valueOf( nValue, 16 ));
730 : :
731 : : pList->AddAttribute( m_aXMLImageNS + ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( ATTRIBUTE_MASKCOLOR )),
732 : : m_aAttributeType,
733 [ # # ][ # # ]: 0 : aColorStrBuffer.makeStringAndClear() );
[ # # ]
734 : :
735 : : pList->AddAttribute( m_aXMLImageNS + ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( ATTRIBUTE_MASKMODE )),
736 : : m_aAttributeType,
737 [ # # ][ # # ]: 0 : ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( ATTRIBUTE_MASKMODE_COLOR )) );
[ # # ]
738 : : }
739 : :
740 [ # # ]: 0 : if ( pImageList->aHighContrastURL.Len() > 0 )
741 : : {
742 : : pList->AddAttribute( m_aXMLImageNS + ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( ATTRIBUTE_HIGHCONTRASTURL )),
743 : : m_aAttributeType,
744 [ # # ][ # # ]: 0 : pImageList->aHighContrastURL );
[ # # ]
745 : : }
746 : :
747 [ # # ][ # # ]: 0 : m_xWriteDocumentHandler->startElement( ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( ELEMENT_NS_IMAGES )), xList );
[ # # ]
748 [ # # ][ # # ]: 0 : m_xWriteDocumentHandler->ignorableWhitespace( ::rtl::OUString() );
749 : :
750 : 0 : ImageItemListDescriptor* pImageItemList = pImageList->pImageItemList;
751 [ # # ]: 0 : if ( pImageItemList )
752 : : {
753 [ # # ]: 0 : for ( sal_uInt16 i = 0; i < pImageItemList->size(); i++ )
754 [ # # ][ # # ]: 0 : WriteImage( &(*pImageItemList)[i] );
755 : : }
756 : :
757 [ # # ][ # # ]: 0 : m_xWriteDocumentHandler->endElement( ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( ELEMENT_NS_IMAGES )) );
[ # # ]
758 [ # # ][ # # ]: 0 : m_xWriteDocumentHandler->ignorableWhitespace( ::rtl::OUString() );
759 : 0 : }
760 : :
761 : 0 : void OWriteImagesDocumentHandler::WriteImage( const ImageItemDescriptor* pImage ) throw
762 : : ( SAXException, RuntimeException )
763 : : {
764 [ # # ]: 0 : ::comphelper::AttributeList* pList = new ::comphelper::AttributeList;
765 [ # # ][ # # ]: 0 : Reference< XAttributeList > xList( (XAttributeList *) pList , UNO_QUERY );
766 : :
767 : : pList->AddAttribute( m_aXMLImageNS + ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( ATTRIBUTE_BITMAPINDEX )),
768 : : m_aAttributeType,
769 [ # # ][ # # ]: 0 : ::rtl::OUString::valueOf( (sal_Int32)pImage->nIndex ) );
770 : :
771 : : pList->AddAttribute( m_aXMLImageNS + ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( ATTRIBUTE_COMMAND )),
772 : : m_aAttributeType,
773 [ # # ][ # # ]: 0 : pImage->aCommandURL );
[ # # ]
774 : :
775 [ # # ][ # # ]: 0 : m_xWriteDocumentHandler->startElement( ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( ELEMENT_NS_ENTRY )), xList );
[ # # ]
776 [ # # ][ # # ]: 0 : m_xWriteDocumentHandler->ignorableWhitespace( ::rtl::OUString() );
777 : :
778 [ # # ][ # # ]: 0 : m_xWriteDocumentHandler->endElement( ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( ELEMENT_NS_ENTRY )) );
[ # # ]
779 [ # # ][ # # ]: 0 : m_xWriteDocumentHandler->ignorableWhitespace( ::rtl::OUString() );
780 : 0 : }
781 : :
782 : 0 : void OWriteImagesDocumentHandler::WriteExternalImageList( const ExternalImageItemListDescriptor* pExternalImageList ) throw
783 : : ( SAXException, RuntimeException )
784 : : {
785 [ # # ]: 0 : m_xWriteDocumentHandler->startElement( ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( ELEMENT_NS_EXTERNALIMAGES )), m_xEmptyList );
786 [ # # ]: 0 : m_xWriteDocumentHandler->ignorableWhitespace( ::rtl::OUString() );
787 : :
788 [ # # ]: 0 : for ( sal_uInt16 i = 0; i < pExternalImageList->size(); i++ )
789 : : {
790 : 0 : const ExternalImageItemDescriptor* pItem = &(*pExternalImageList)[i];
791 : 0 : WriteExternalImage( pItem );
792 : : }
793 : :
794 [ # # ]: 0 : m_xWriteDocumentHandler->ignorableWhitespace( ::rtl::OUString() );
795 [ # # ]: 0 : m_xWriteDocumentHandler->endElement( ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( ELEMENT_NS_EXTERNALIMAGES )) );
796 [ # # ]: 0 : m_xWriteDocumentHandler->ignorableWhitespace( ::rtl::OUString() );
797 : 0 : }
798 : :
799 : 0 : void OWriteImagesDocumentHandler::WriteExternalImage( const ExternalImageItemDescriptor* pExternalImage ) throw
800 : : ( SAXException, RuntimeException )
801 : : {
802 [ # # ]: 0 : ::comphelper::AttributeList* pList = new ::comphelper::AttributeList;
803 [ # # ][ # # ]: 0 : Reference< XAttributeList > xList( (XAttributeList *) pList , UNO_QUERY );
804 : :
805 : : // save required attributes
806 : : pList->AddAttribute( m_aAttributeXlinkType,
807 : : m_aAttributeType,
808 [ # # ]: 0 : m_aAttributeValueSimple );
809 : :
810 [ # # ]: 0 : if ( pExternalImage->aURL.Len() > 0 )
811 : : {
812 : : pList->AddAttribute( m_aXMLXlinkNS + ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( ATTRIBUTE_HREF )),
813 : : m_aAttributeType,
814 [ # # ][ # # ]: 0 : pExternalImage->aURL );
[ # # ]
815 : : }
816 : :
817 [ # # ]: 0 : if ( pExternalImage->aCommandURL.Len() > 0 )
818 : : {
819 : : pList->AddAttribute( m_aXMLImageNS + ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( ATTRIBUTE_COMMAND )),
820 : : m_aAttributeType,
821 [ # # ][ # # ]: 0 : pExternalImage->aCommandURL );
[ # # ]
822 : : }
823 : :
824 [ # # ][ # # ]: 0 : m_xWriteDocumentHandler->startElement( ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( ELEMENT_NS_EXTERNALENTRY )), xList );
[ # # ]
825 [ # # ][ # # ]: 0 : m_xWriteDocumentHandler->ignorableWhitespace( ::rtl::OUString() );
826 : :
827 [ # # ][ # # ]: 0 : m_xWriteDocumentHandler->endElement( ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( ELEMENT_NS_EXTERNALENTRY )) );
[ # # ]
828 [ # # ][ # # ]: 0 : m_xWriteDocumentHandler->ignorableWhitespace( ::rtl::OUString() );
829 : 0 : }
830 : :
831 : : } // namespace framework
832 : :
833 : :
834 : :
835 : :
836 : : /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
|