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 : : #include "xmlexpit.hxx"
30 : :
31 : : #include <rtl/ustrbuf.hxx>
32 : : #include <sax/tools/converter.hxx>
33 : : #include <svl/itempool.hxx>
34 : : #include <svl/poolitem.hxx>
35 : : #include <svl/itemset.hxx>
36 : : #include <xmloff/xmluconv.hxx>
37 : : #include <xmloff/attrlist.hxx>
38 : : #include <xmloff/nmspmap.hxx>
39 : : #include <xmloff/xmlnmspe.hxx>
40 : : #include <editeng/xmlcnitm.hxx>
41 : : #include <xmloff/xmlexp.hxx>
42 : : #include <editeng/memberids.hrc>
43 : : #include "hintids.hxx"
44 : : #include "unomid.h"
45 : : #include <svx/unomid.hxx>
46 : : #include <editeng/lrspitem.hxx>
47 : : #include <editeng/ulspitem.hxx>
48 : : #include <editeng/shaditem.hxx>
49 : : #include <editeng/boxitem.hxx>
50 : : #include <editeng/brkitem.hxx>
51 : : #include <editeng/keepitem.hxx>
52 : : #include <editeng/brshitem.hxx>
53 : : #include "fmtpdsc.hxx"
54 : : #include "fmtornt.hxx"
55 : : #include "fmtfsize.hxx"
56 : :
57 : : #include "fmtlsplt.hxx"
58 : : #include "xmlithlp.hxx"
59 : :
60 : : #include "fmtrowsplt.hxx"
61 : :
62 : :
63 : : using ::editeng::SvxBorderLine;
64 : : using ::rtl::OUString;
65 : : using ::rtl::OUStringBuffer;
66 : : using namespace ::com::sun::star;
67 : : using namespace ::xmloff::token;
68 : : using uno::Any;
69 : :
70 : : /** fills the given attribute list with the items in the given set */
71 : 0 : void SvXMLExportItemMapper::exportXML( const SvXMLExport& rExport,
72 : : SvXMLAttributeList& rAttrList,
73 : : const SfxItemSet& rSet,
74 : : const SvXMLUnitConverter& rUnitConverter,
75 : : const SvXMLNamespaceMap& rNamespaceMap,
76 : : sal_uInt16 nFlags,
77 : : std::vector<sal_uInt16> *pIndexArray ) const
78 : : {
79 [ # # ]: 0 : const sal_uInt16 nCount = mrMapEntries->getCount();
80 : 0 : sal_uInt16 nIndex = 0;
81 : :
82 [ # # ]: 0 : while( nIndex < nCount )
83 : : {
84 [ # # ]: 0 : SvXMLItemMapEntry* pEntry = mrMapEntries->getByIndex( nIndex );
85 : :
86 : : // we have a valid map entry here, so lets use it...
87 [ # # ]: 0 : if( 0 == (pEntry->nMemberId & MID_SW_FLAG_NO_ITEM_EXPORT) )
88 : : {
89 : : const SfxPoolItem* pItem = GetItem( rSet, pEntry->nWhichId,
90 [ # # ]: 0 : nFlags );
91 : : // do we have an item?
92 [ # # ]: 0 : if(pItem)
93 : : {
94 [ # # ]: 0 : if( 0 != (pEntry->nMemberId & MID_SW_FLAG_ELEMENT_ITEM_EXPORT) )
95 : : {
96 : : // element items do not add any properties,
97 : : // we export it later
98 [ # # ]: 0 : if( pIndexArray )
99 [ # # ]: 0 : pIndexArray->push_back( nIndex );
100 : :
101 : : }
102 : : else
103 : : {
104 : : exportXML( rExport, rAttrList, *pItem, *pEntry, rUnitConverter,
105 [ # # ]: 0 : rNamespaceMap, nFlags, &rSet );
106 : : }
107 : : }
108 : : }
109 : : else
110 : : {
111 : : handleNoItem( rAttrList, *pEntry, rUnitConverter, rNamespaceMap,
112 [ # # ]: 0 : rSet );
113 : : }
114 : 0 : nIndex++;
115 : : }
116 : 0 : }
117 : :
118 : 0 : void SvXMLExportItemMapper::exportXML( const SvXMLExport& rExport,
119 : : SvXMLAttributeList& rAttrList,
120 : : const SfxPoolItem& rItem,
121 : : const SvXMLItemMapEntry& rEntry,
122 : : const SvXMLUnitConverter& rUnitConverter,
123 : : const SvXMLNamespaceMap& rNamespaceMap,
124 : : sal_uInt16 /*nFlags*/,
125 : : const SfxItemSet *pSet ) const
126 : : {
127 [ # # ]: 0 : if( 0 != (rEntry.nMemberId & MID_SW_FLAG_SPECIAL_ITEM_EXPORT) )
128 : : {
129 [ # # ]: 0 : if( rItem.ISA( SwFmtRowSplit ) )
130 : : {
131 : 0 : OUString aValue;
132 : 0 : bool bAddAttribute = true;
133 [ # # ]: 0 : if( rEntry.nNameSpace == XML_NAMESPACE_STYLE )
134 : : {
135 [ # # ][ # # ]: 0 : if( (rExport.getExportFlags() & EXPORT_SAVEBACKWARDCOMPATIBLE ) == 0 ||
[ # # ]
136 : : !QueryXMLValue(rItem, aValue,
137 : : static_cast< sal_uInt16 >( rEntry.nMemberId & MID_SW_FLAG_MASK ),
138 [ # # ]: 0 : rUnitConverter ) )
139 : : {
140 : 0 : bAddAttribute = false;
141 : : }
142 : : }
143 : : else
144 : : {
145 : 0 : OUStringBuffer aOut;
146 [ # # ][ # # ]: 0 : const SfxBoolItem* pSplit = PTR_CAST(SfxBoolItem, &rItem);
[ # # ][ # # ]
147 : : OSL_ENSURE( pSplit != NULL, "Wrong Which-ID" );
148 [ # # ]: 0 : sal_uInt16 eEnum = pSplit->GetValue() ? 1 : 0;
149 [ # # ]: 0 : rUnitConverter.convertEnum( aOut, eEnum, aXML_KeepTogetherType );
150 [ # # ]: 0 : aValue = aOut.makeStringAndClear();
151 : : }
152 [ # # ]: 0 : if( bAddAttribute )
153 : : {
154 : : OUString sName( rNamespaceMap.GetQNameByKey( rEntry.nNameSpace,
155 [ # # ][ # # ]: 0 : GetXMLToken(rEntry.eLocalName) ) );
156 [ # # ]: 0 : rAttrList.AddAttribute( sName, aValue );
157 : 0 : }
158 : : }
159 [ # # ]: 0 : if( rItem.ISA( SvXMLAttrContainerItem ) )
160 : : {
161 : 0 : SvXMLNamespaceMap *pNewNamespaceMap = 0;
162 : 0 : const SvXMLNamespaceMap *pNamespaceMap = &rNamespaceMap;
163 : :
164 : : const SvXMLAttrContainerItem *pUnknown =
165 [ # # ][ # # ]: 0 : PTR_CAST( SvXMLAttrContainerItem, &rItem );
[ # # ][ # # ]
166 : :
167 [ # # ]: 0 : sal_uInt16 nCount = pUnknown->GetAttrCount();
168 : 0 : OUStringBuffer sName;
169 [ # # ]: 0 : for( sal_uInt16 i=0; i < nCount; i++ )
170 : : {
171 [ # # ]: 0 : OUString sPrefix( pUnknown->GetAttrPrefix( i ) );
172 [ # # ]: 0 : if( !sPrefix.isEmpty() )
173 : : {
174 [ # # ]: 0 : OUString sNamespace( pUnknown->GetAttrNamespace( i ) );
175 : :
176 : : // if the prefix isn't defined yet or has another meaning,
177 : : // we have to redefine it now.
178 [ # # ]: 0 : sal_uInt16 nIdx = pNamespaceMap->GetIndexByPrefix( sPrefix );
179 [ # # # # ]: 0 : if( USHRT_MAX == nIdx ||
[ # # ]
180 [ # # ]: 0 : pNamespaceMap->GetNameByIndex( nIdx ) != sNamespace )
181 : : {
182 [ # # ]: 0 : if( !pNewNamespaceMap )
183 : : {
184 : : pNewNamespaceMap =
185 [ # # ][ # # ]: 0 : new SvXMLNamespaceMap( rNamespaceMap );
186 : 0 : pNamespaceMap = pNewNamespaceMap;
187 : : }
188 [ # # ]: 0 : pNewNamespaceMap->Add( sPrefix, sNamespace );
189 : :
190 [ # # ][ # # ]: 0 : sName.append( GetXMLToken(XML_XMLNS) );
191 [ # # ]: 0 : sName.append( sal_Unicode(':') );
192 [ # # ]: 0 : sName.append( sPrefix );
193 : : rAttrList.AddAttribute( sName.makeStringAndClear(),
194 [ # # ][ # # ]: 0 : sNamespace );
195 : : }
196 : :
197 [ # # ]: 0 : sName.append( sPrefix );
198 [ # # ]: 0 : sName.append( sal_Unicode(':') );
199 : : }
200 : :
201 [ # # ][ # # ]: 0 : sName.append( pUnknown->GetAttrLName( i ) );
202 : : rAttrList.AddAttribute( sName.makeStringAndClear(),
203 [ # # ][ # # ]: 0 : pUnknown->GetAttrValue(i) );
[ # # ]
204 : 0 : }
205 : :
206 [ # # ][ # # ]: 0 : delete pNewNamespaceMap;
207 : : }
208 : : else
209 : : {
210 : : handleSpecialItem( rAttrList, rEntry, rItem, rUnitConverter,
211 : 0 : rNamespaceMap, pSet );
212 : : }
213 : : }
214 [ # # ]: 0 : else if( 0 == (rEntry.nMemberId & MID_SW_FLAG_ELEMENT_ITEM_EXPORT) )
215 : : {
216 : 0 : OUString aValue;
217 [ # # ]: 0 : if( QueryXMLValue(rItem, aValue,
218 : : static_cast< sal_uInt16 >(
219 : : rEntry.nMemberId & MID_SW_FLAG_MASK ),
220 [ # # ]: 0 : rUnitConverter ) )
221 : : {
222 : : OUString sName(
223 : : rNamespaceMap.GetQNameByKey( rEntry.nNameSpace,
224 [ # # ][ # # ]: 0 : GetXMLToken(rEntry.eLocalName)));
225 [ # # ]: 0 : rAttrList.AddAttribute( sName, aValue );
226 : 0 : }
227 : : }
228 : 0 : }
229 : :
230 : 0 : void SvXMLExportItemMapper::exportElementItems(
231 : : SvXMLExport& rExport,
232 : : const SvXMLUnitConverter& rUnitConverter,
233 : : const SfxItemSet &rSet,
234 : : sal_uInt16 nFlags,
235 : : const std::vector<sal_uInt16> &rIndexArray ) const
236 : : {
237 : 0 : const sal_uInt16 nCount = rIndexArray.size();
238 : :
239 : 0 : sal_Bool bItemsExported = sal_False;
240 [ # # ]: 0 : for( sal_uInt16 nIndex = 0; nIndex < nCount; nIndex++ )
241 : : {
242 : 0 : const sal_uInt16 nElement = rIndexArray[ nIndex ];
243 : 0 : SvXMLItemMapEntry* pEntry = mrMapEntries->getByIndex( nElement );
244 : : OSL_ENSURE( 0 != (pEntry->nMemberId & MID_SW_FLAG_ELEMENT_ITEM_EXPORT),
245 : : "wrong mid flag!" );
246 : :
247 : 0 : const SfxPoolItem* pItem = GetItem( rSet, pEntry->nWhichId, nFlags );
248 : : // do we have an item?
249 [ # # ]: 0 : if(pItem)
250 : : {
251 : 0 : rExport.IgnorableWhitespace();
252 : : handleElementItem( rExport, *pEntry, *pItem, rUnitConverter,
253 : 0 : rSet, nFlags);
254 : 0 : bItemsExported = sal_True;
255 : : }
256 : : }
257 : :
258 [ # # ]: 0 : if( bItemsExported )
259 : 0 : rExport.IgnorableWhitespace();
260 : 0 : }
261 : :
262 : : /** returns the item with the givin WhichId from the given ItemSet if its
263 : : set or its default item if its not set and the XML_EXPORT_FLAG_DEEP
264 : : is set in the flags
265 : : */
266 : 0 : const SfxPoolItem* SvXMLExportItemMapper::GetItem( const SfxItemSet& rSet,
267 : : sal_uInt16 nWhichId,
268 : : sal_uInt16 nFlags )
269 : : {
270 : : // first get item from itemset
271 : : const SfxPoolItem* pItem;
272 : : SfxItemState eState =
273 : : rSet.GetItemState( nWhichId,
274 : : ( nFlags & XML_EXPORT_FLAG_DEEP ) != 0,
275 [ # # ]: 0 : &pItem );
276 : :
277 [ # # ]: 0 : if( SFX_ITEM_SET == eState )
278 : : {
279 : 0 : return pItem;
280 : : }
281 [ # # ][ # # ]: 0 : else if( (nFlags & XML_EXPORT_FLAG_DEFAULTS) != 0 &&
282 : : SFX_WHICH_MAX > nWhichId )
283 : : {
284 : : // if its not set, try the pool if we export defaults
285 [ # # ]: 0 : return &rSet.GetPool()->GetDefaultItem(nWhichId);
286 : : }
287 : : else
288 : : {
289 : 0 : return NULL;
290 : : }
291 : : }
292 : :
293 : 92 : SvXMLExportItemMapper::SvXMLExportItemMapper( SvXMLItemMapEntriesRef rMapEntries )
294 : : {
295 [ + - ]: 92 : mrMapEntries = rMapEntries;
296 : 92 : }
297 : :
298 : 92 : SvXMLExportItemMapper::~SvXMLExportItemMapper()
299 : : {
300 [ - + ]: 92 : }
301 : :
302 : 0 : void SvXMLExportItemMapper::exportXML( SvXMLExport& rExport,
303 : : const SfxItemSet& rSet,
304 : : const SvXMLUnitConverter& rUnitConverter,
305 : : XMLTokenEnum ePropToken,
306 : : sal_uInt16 nFlags ) const
307 : : {
308 [ # # ]: 0 : std::vector<sal_uInt16> aIndexArray;
309 : :
310 : 0 : exportXML( rExport, rExport.GetAttrList(), rSet, rUnitConverter,
311 [ # # ]: 0 : rExport.GetNamespaceMap(), nFlags, &aIndexArray );
312 : :
313 [ # # ][ # # ]: 0 : if( rExport.GetAttrList().getLength() > 0L ||
[ # # # # ]
[ # # ]
314 : : (nFlags & XML_EXPORT_FLAG_EMPTY) != 0 ||
315 : 0 : !aIndexArray.empty() )
316 : : {
317 [ # # ]: 0 : if( (nFlags & XML_EXPORT_FLAG_IGN_WS) != 0 )
318 : : {
319 [ # # ]: 0 : rExport.IgnorableWhitespace();
320 : : }
321 : :
322 : : SvXMLElementExport aElem( rExport, XML_NAMESPACE_STYLE, ePropToken,
323 [ # # ]: 0 : sal_False, sal_False );
324 : : exportElementItems( rExport, rUnitConverter,
325 [ # # ][ # # ]: 0 : rSet, nFlags, aIndexArray );
326 : 0 : }
327 : 0 : }
328 : :
329 : : /** this method is called for every item that has the
330 : : MID_SW_FLAG_SPECIAL_ITEM_EXPORT flag set */
331 : 0 : void SvXMLExportItemMapper::handleSpecialItem( SvXMLAttributeList& /*rAttrList*/,
332 : : const SvXMLItemMapEntry& /*rEntry*/,
333 : : const SfxPoolItem& /*rItem*/,
334 : : const SvXMLUnitConverter& /*rUnitConverter*/,
335 : : const SvXMLNamespaceMap& /*rNamespaceMap*/,
336 : : const SfxItemSet* /*pSet*/ /* = NULL */ ) const
337 : : {
338 : : OSL_FAIL( "special item not handled in xml export" );
339 : 0 : }
340 : :
341 : : /** this method is called for every item that has the
342 : : MID_SW_FLAG_NO_ITEM_EXPORT flag set */
343 : 0 : void SvXMLExportItemMapper::handleNoItem( SvXMLAttributeList& /*rAttrList*/,
344 : : const SvXMLItemMapEntry& /*rEntry*/,
345 : : const SvXMLUnitConverter& /*rUnitConverter*/,
346 : : const SvXMLNamespaceMap& /*rNamespaceMap*/,
347 : : const SfxItemSet& /*rSet*/ ) const
348 : : {
349 : : OSL_FAIL( "no item not handled in xml export" );
350 : 0 : }
351 : :
352 : : /** this method is called for every item that has the
353 : : MID_SW_FLAG_ELEMENT_EXPORT flag set */
354 : 0 : void SvXMLExportItemMapper::handleElementItem(
355 : : SvXMLExport& /*rExport*/,
356 : : const SvXMLItemMapEntry& /*rEntry*/,
357 : : const SfxPoolItem& /*rItem*/,
358 : : const SvXMLUnitConverter& /*rUnitConverter*/,
359 : : const SfxItemSet& /*rSet*/,
360 : : sal_uInt16 /*nFlags*/ ) const
361 : : {
362 : : OSL_FAIL( "element item not handled in xml export" );
363 : 0 : }
364 : :
365 : 0 : bool lcl_isOdfDoubleLine( const SvxBorderLine* pLine )
366 : : {
367 : 0 : bool bIsOdfDouble = false;
368 [ # # ]: 0 : switch (pLine->GetBorderLineStyle())
369 : : {
370 : : case table::BorderLineStyle::DOUBLE:
371 : : case table::BorderLineStyle::THINTHICK_SMALLGAP:
372 : : case table::BorderLineStyle::THINTHICK_MEDIUMGAP:
373 : : case table::BorderLineStyle::THINTHICK_LARGEGAP:
374 : : case table::BorderLineStyle::THICKTHIN_SMALLGAP:
375 : : case table::BorderLineStyle::THICKTHIN_MEDIUMGAP:
376 : : case table::BorderLineStyle::THICKTHIN_LARGEGAP:
377 : 0 : bIsOdfDouble = true;
378 : 0 : break;
379 : : default:
380 : 0 : break;
381 : : }
382 : 0 : return bIsOdfDouble;
383 : : }
384 : :
385 : 0 : sal_Bool SvXMLExportItemMapper::QueryXMLValue(
386 : : const SfxPoolItem& rItem,
387 : : OUString& rValue,
388 : : sal_uInt16 nMemberId,
389 : : const SvXMLUnitConverter& rUnitConverter )
390 : : {
391 : 0 : sal_Bool bOk = sal_False;
392 : 0 : OUStringBuffer aOut;
393 : :
394 [ # # # # : 0 : switch ( rItem.Which() )
# # # # #
# # # # #
# ]
395 : : {
396 : :
397 : : case RES_LR_SPACE:
398 : : {
399 [ # # ][ # # ]: 0 : const SvxLRSpaceItem* pLRSpace = PTR_CAST(SvxLRSpaceItem, &rItem);
[ # # ][ # # ]
400 : : OSL_ENSURE( pLRSpace != NULL, "Wrong Which-ID!" );
401 : :
402 : 0 : bOk = sal_True;
403 [ # # # # : 0 : switch( nMemberId )
# ]
404 : : {
405 : : case MID_L_MARGIN:
406 [ # # ]: 0 : if(pLRSpace->GetPropLeft() != 100)
407 : : {
408 : : ::sax::Converter::convertPercent(
409 [ # # ]: 0 : aOut, pLRSpace->GetPropLeft() );
410 : : }
411 : : else
412 : : {
413 : : rUnitConverter.convertMeasureToXML(
414 [ # # ]: 0 : aOut, pLRSpace->GetLeft() );
415 : : }
416 : 0 : break;
417 : :
418 : : case MID_R_MARGIN:
419 [ # # ]: 0 : if(pLRSpace->GetPropRight() != 100)
420 : : {
421 : : ::sax::Converter::convertPercent(
422 [ # # ]: 0 : aOut, pLRSpace->GetPropRight() );
423 : : }
424 : : else
425 : : {
426 : : rUnitConverter.convertMeasureToXML(
427 [ # # ]: 0 : aOut, pLRSpace->GetRight() );
428 : : }
429 : 0 : break;
430 : :
431 : : case MID_FIRST_AUTO:
432 [ # # ]: 0 : if( pLRSpace->IsAutoFirst() )
433 : : {
434 : : ::sax::Converter::convertBool(
435 [ # # ]: 0 : aOut, pLRSpace->IsAutoFirst() );
436 : : }
437 : : else
438 : 0 : bOk = sal_False;
439 : 0 : break;
440 : :
441 : : case MID_FIRST_LINE_INDENT:
442 [ # # ]: 0 : if( !pLRSpace->IsAutoFirst() )
443 : : {
444 [ # # ]: 0 : if(pLRSpace->GetPropTxtFirstLineOfst() != 100)
445 : : {
446 : : ::sax::Converter::convertPercent(
447 [ # # ]: 0 : aOut, pLRSpace->GetPropTxtFirstLineOfst() );
448 : : }
449 : : else
450 : : {
451 : : rUnitConverter.convertMeasureToXML(
452 [ # # ]: 0 : aOut, pLRSpace->GetTxtFirstLineOfst() );
453 : : }
454 : : }
455 : : else
456 : 0 : bOk = sal_False;
457 : 0 : break;
458 : :
459 : : default:
460 : : OSL_FAIL( "unknown member id!");
461 : 0 : bOk = sal_False;
462 : 0 : break;
463 : : }
464 : : }
465 : 0 : break;
466 : :
467 : : case RES_UL_SPACE:
468 : : {
469 [ # # ][ # # ]: 0 : const SvxULSpaceItem* pULSpace = PTR_CAST(SvxULSpaceItem, &rItem);
[ # # ][ # # ]
470 : : OSL_ENSURE( pULSpace != NULL, "Wrong Which-ID!" );
471 : :
472 [ # # # ]: 0 : switch( nMemberId )
473 : : {
474 : : case MID_UP_MARGIN:
475 [ # # ]: 0 : if( pULSpace->GetPropUpper() != 100 )
476 : : {
477 : : ::sax::Converter::convertPercent(
478 [ # # ]: 0 : aOut, pULSpace->GetPropUpper() );
479 : : }
480 : : else
481 : : {
482 : : rUnitConverter.convertMeasureToXML(
483 [ # # ]: 0 : aOut, pULSpace->GetUpper() );
484 : : }
485 : 0 : break;
486 : :
487 : : case MID_LO_MARGIN:
488 [ # # ]: 0 : if( pULSpace->GetPropLower() != 100 )
489 : : {
490 : : ::sax::Converter::convertPercent(
491 [ # # ]: 0 : aOut, pULSpace->GetPropLower() );
492 : : }
493 : : else
494 : : {
495 : : rUnitConverter.convertMeasureToXML(
496 [ # # ]: 0 : aOut, pULSpace->GetLower() );
497 : : }
498 : 0 : break;
499 : :
500 : : default:
501 : : OSL_FAIL("unknown MemberId");
502 : : };
503 : :
504 : 0 : bOk = sal_True;
505 : : }
506 : 0 : break;
507 : :
508 : : case RES_SHADOW:
509 : : {
510 [ # # ][ # # ]: 0 : const SvxShadowItem* pShadow = PTR_CAST(SvxShadowItem, &rItem);
[ # # ][ # # ]
511 : : OSL_ENSURE( pShadow != NULL, "Wrong Which-ID" );
512 : :
513 : 0 : sal_Int32 nX = 1, nY = 1;
514 [ # # # # : 0 : switch( pShadow->GetLocation() )
# ]
515 : : {
516 : : case SVX_SHADOW_TOPLEFT:
517 : 0 : nX = -1;
518 : 0 : nY = -1;
519 : 0 : break;
520 : : case SVX_SHADOW_TOPRIGHT:
521 : 0 : nY = -1;
522 : 0 : break;
523 : : case SVX_SHADOW_BOTTOMLEFT:
524 : 0 : nX = -1;
525 : 0 : break;
526 : : case SVX_SHADOW_BOTTOMRIGHT:
527 : 0 : break;
528 : : case SVX_SHADOW_NONE:
529 : : default:
530 [ # # ]: 0 : rValue = GetXMLToken(XML_NONE);
531 : 0 : return sal_True;
532 : : }
533 : :
534 : 0 : nX *= pShadow->GetWidth();
535 : 0 : nY *= pShadow->GetWidth();
536 : :
537 [ # # ]: 0 : ::sax::Converter::convertColor(aOut, pShadow->GetColor().GetColor());
538 [ # # ]: 0 : aOut.append( sal_Unicode(' ') );
539 [ # # ]: 0 : rUnitConverter.convertMeasureToXML( aOut, nX );
540 [ # # ]: 0 : aOut.append( sal_Unicode(' ') );
541 [ # # ]: 0 : rUnitConverter.convertMeasureToXML( aOut, nY );
542 : :
543 : 0 : bOk = sal_True;
544 : : }
545 : 0 : break;
546 : :
547 : : case RES_BOX:
548 : : {
549 [ # # ][ # # ]: 0 : SvxBoxItem* pBox = PTR_CAST(SvxBoxItem, &rItem);
[ # # ][ # # ]
550 : : OSL_ENSURE( pBox != NULL, "Wrong WHich-ID" );
551 : :
552 : : /**
553 : : xml -> MemberId
554 : :
555 : : border-padding ALL_BORDER_PADDING
556 : : border-padding-before LEFT_BORDER_PADDING
557 : : border-padding-after RIGHT_BORDER_PADDING
558 : : border-padding-start TOP_BORDER_PADDING
559 : : border-padding-end BOTTOM_BORDER_PADDING
560 : :
561 : : border ALL_BORDER
562 : : border-before LEFT_BORDER
563 : : border-after RIGHT_BORDER
564 : : border-start TOP_BORDER
565 : : border-end BOTTOM_BORDER
566 : :
567 : : border-line-width ALL_BORDER_LINE_WIDTH
568 : : border-line-width-before LEFT_BORDER_LINE_WIDTH
569 : : border-line-width-after RIGHT_BORDER_LINE_WIDTH
570 : : border-line-width-start TOP_BORDER_LINE_WIDTH
571 : : border-line-width-end BOTTOM_BORDER_LINE_WIDTH
572 : : */
573 : :
574 : 0 : const SvxBorderLine* pLeft = pBox->GetLeft();
575 : 0 : const SvxBorderLine* pRight = pBox->GetRight();
576 : 0 : const SvxBorderLine* pTop = pBox->GetTop();
577 : 0 : const SvxBorderLine* pBottom = pBox->GetBottom();
578 [ # # ]: 0 : sal_uInt16 nTopDist = pBox->GetDistance( BOX_LINE_TOP );
579 [ # # ]: 0 : sal_uInt16 nBottomDist = pBox->GetDistance( BOX_LINE_BOTTOM );
580 [ # # ]: 0 : sal_uInt16 nLeftDist = pBox->GetDistance( BOX_LINE_LEFT );
581 [ # # ]: 0 : sal_uInt16 nRightDist = pBox->GetDistance( BOX_LINE_RIGHT );
582 : :
583 : :
584 : : // check if we need to export it
585 [ # # # # ]: 0 : switch( nMemberId )
586 : : {
587 : : case ALL_BORDER_PADDING:
588 : : case LEFT_BORDER_PADDING:
589 : : case RIGHT_BORDER_PADDING:
590 : : case TOP_BORDER_PADDING:
591 : : case BOTTOM_BORDER_PADDING:
592 : : {
593 : : sal_Bool bEqual = nLeftDist == nRightDist &&
594 : : nLeftDist == nTopDist &&
595 [ # # ][ # # ]: 0 : nLeftDist == nBottomDist;
[ # # ]
596 : : // don't export individual paddings if all paddings are equal and
597 : : // don't export all padding if some paddings are not equal
598 [ # # ][ # # ]: 0 : if( (bEqual && ALL_BORDER_PADDING != nMemberId) ||
[ # # ][ # # ]
599 : : (!bEqual && ALL_BORDER_PADDING == nMemberId) )
600 : 0 : return sal_False;
601 : : }
602 : 0 : break;
603 : : case ALL_BORDER:
604 : : case LEFT_BORDER:
605 : : case RIGHT_BORDER:
606 : : case TOP_BORDER:
607 : : case BOTTOM_BORDER:
608 : : {
609 : : sal_Bool bEqual = ( NULL == pTop && NULL == pBottom &&
610 : : NULL == pLeft && NULL == pRight ) ||
611 : : ( pTop && pBottom && pLeft && pRight &&
612 [ # # ][ # # ]: 0 : *pTop == *pBottom && *pTop == *pLeft &&
613 [ # # ][ # # ]: 0 : *pTop == *pRight );
[ # # ][ # # ]
[ # # ][ # # ]
[ # # ][ # # ]
[ # # ][ # # ]
[ # # ][ # # ]
614 : :
615 : : // don't export individual borders if all are the same and
616 : : // don't export all borders if some are not equal
617 [ # # ][ # # ]: 0 : if( (bEqual && ALL_BORDER != nMemberId) ||
[ # # ][ # # ]
618 : : (!bEqual && ALL_BORDER == nMemberId) )
619 : 0 : return sal_False;
620 : : }
621 : 0 : break;
622 : : case ALL_BORDER_LINE_WIDTH:
623 : : case LEFT_BORDER_LINE_WIDTH:
624 : : case RIGHT_BORDER_LINE_WIDTH:
625 : : case TOP_BORDER_LINE_WIDTH:
626 : : case BOTTOM_BORDER_LINE_WIDTH:
627 : : {
628 : : // if no line is set, there is nothing to export
629 [ # # ][ # # ]: 0 : if( !pTop && !pBottom && !pLeft && !pRight )
[ # # ][ # # ]
630 : 0 : return sal_False;
631 : :
632 : : sal_Bool bEqual = NULL != pTop &&
633 : : NULL != pBottom &&
634 : : NULL != pLeft &&
635 [ # # ][ # # ]: 0 : NULL != pRight;
[ # # ][ # # ]
636 : :
637 [ # # ]: 0 : if( bEqual )
638 : : {
639 [ # # ]: 0 : const sal_uInt16 nDistance = pTop->GetDistance();
640 [ # # ]: 0 : const sal_uInt16 nInWidth = pTop->GetInWidth();
641 [ # # ]: 0 : const sal_uInt16 nOutWidth = pTop->GetOutWidth();
642 : 0 : const sal_uInt16 nWidth = pTop->GetWidth();
643 : :
644 [ # # ]: 0 : bEqual = nDistance == pLeft->GetDistance() &&
645 [ # # ]: 0 : nInWidth == pLeft->GetInWidth() &&
646 [ # # ]: 0 : nOutWidth == pLeft->GetOutWidth() &&
647 : 0 : nWidth == pLeft->GetWidth() &&
648 [ # # ]: 0 : nDistance == pRight->GetDistance() &&
649 [ # # ]: 0 : nInWidth == pRight->GetInWidth() &&
650 [ # # ]: 0 : nOutWidth == pRight->GetOutWidth() &&
651 : 0 : nWidth == pRight->GetWidth() &&
652 [ # # ]: 0 : nDistance == pBottom->GetDistance() &&
653 [ # # ]: 0 : nInWidth == pBottom->GetInWidth() &&
654 [ # # ]: 0 : nOutWidth == pBottom->GetOutWidth() &&
655 [ # # ][ # # ]: 0 : nWidth == pBottom->GetWidth();
[ # # # # ]
[ # # ][ # # ]
[ # # # # ]
[ # # ][ # # ]
[ # # ][ # # ]
656 : : }
657 : :
658 [ # # # # : 0 : switch( nMemberId )
# # ]
659 : : {
660 : : case ALL_BORDER_LINE_WIDTH:
661 [ # # ][ # # ]: 0 : if( !bEqual || pTop->GetDistance() == 0 ||
[ # # # # ]
[ # # ]
662 : 0 : !lcl_isOdfDoubleLine( pTop ) )
663 : 0 : return sal_False;
664 : 0 : break;
665 : : case LEFT_BORDER_LINE_WIDTH:
666 [ # # ][ # # ]: 0 : if( bEqual || NULL == pLeft ||
[ # # # # ]
[ # # ]
667 [ # # ]: 0 : 0 == pLeft->GetDistance() ||
668 : 0 : !lcl_isOdfDoubleLine( pLeft ) )
669 : 0 : return sal_False;
670 : 0 : break;
671 : : case RIGHT_BORDER_LINE_WIDTH:
672 [ # # ][ # # ]: 0 : if( bEqual || NULL == pRight ||
[ # # # # ]
[ # # ]
673 [ # # ]: 0 : 0 == pRight->GetDistance() ||
674 : 0 : !lcl_isOdfDoubleLine( pRight ) )
675 : 0 : return sal_False;
676 : 0 : break;
677 : : case TOP_BORDER_LINE_WIDTH:
678 [ # # ][ # # ]: 0 : if( bEqual || NULL == pTop ||
[ # # # # ]
[ # # ]
679 [ # # ]: 0 : 0 == pTop->GetDistance() ||
680 : 0 : !lcl_isOdfDoubleLine( pTop ) )
681 : 0 : return sal_False;
682 : 0 : break;
683 : : case BOTTOM_BORDER_LINE_WIDTH:
684 [ # # ][ # # ]: 0 : if( bEqual || NULL == pBottom ||
[ # # # # ]
[ # # ]
685 [ # # ]: 0 : 0 == pBottom->GetDistance() ||
686 : 0 : !lcl_isOdfDoubleLine( pBottom ) )
687 : 0 : return sal_False;
688 : 0 : break;
689 : : }
690 : : }
691 : 0 : break;
692 : : }
693 : :
694 : : // now export it export
695 [ # # # # : 0 : switch( nMemberId )
# # # ]
696 : : {
697 : : // padding
698 : : case ALL_BORDER_PADDING:
699 : : case LEFT_BORDER_PADDING:
700 [ # # ]: 0 : rUnitConverter.convertMeasureToXML( aOut, nLeftDist );
701 : 0 : break;
702 : : case RIGHT_BORDER_PADDING:
703 [ # # ]: 0 : rUnitConverter.convertMeasureToXML( aOut, nRightDist );
704 : 0 : break;
705 : : case TOP_BORDER_PADDING:
706 [ # # ]: 0 : rUnitConverter.convertMeasureToXML( aOut, nTopDist );
707 : 0 : break;
708 : : case BOTTOM_BORDER_PADDING:
709 [ # # ]: 0 : rUnitConverter.convertMeasureToXML( aOut, nBottomDist );
710 : 0 : break;
711 : :
712 : : // border
713 : : case ALL_BORDER:
714 : : case LEFT_BORDER:
715 : : case RIGHT_BORDER:
716 : : case TOP_BORDER:
717 : : case BOTTOM_BORDER:
718 : : {
719 : : const SvxBorderLine* pLine;
720 [ # # # # : 0 : switch( nMemberId )
# ]
721 : : {
722 : : case ALL_BORDER:
723 : : case LEFT_BORDER:
724 : 0 : pLine = pLeft;
725 : 0 : break;
726 : : case RIGHT_BORDER:
727 : 0 : pLine = pRight;
728 : 0 : break;
729 : : case TOP_BORDER:
730 : 0 : pLine = pTop;
731 : 0 : break;
732 : : case BOTTOM_BORDER:
733 : 0 : pLine = pBottom;
734 : 0 : break;
735 : : default:
736 : 0 : pLine = NULL;
737 : 0 : break;
738 : : }
739 : :
740 [ # # ]: 0 : if( NULL != pLine )
741 : : {
742 : 0 : sal_Int32 nWidth = pLine->GetWidth();
743 : :
744 : 0 : enum XMLTokenEnum eStyle = XML_SOLID;
745 : 0 : bool bNoBorder = false;
746 [ # # # # : 0 : switch (pLine->GetBorderLineStyle())
# # # #
# ]
747 : : {
748 : : case table::BorderLineStyle::SOLID:
749 : 0 : eStyle = XML_SOLID;
750 : 0 : break;
751 : : case table::BorderLineStyle::DOTTED:
752 : 0 : eStyle = XML_DOTTED;
753 : 0 : break;
754 : : case table::BorderLineStyle::DASHED:
755 : 0 : eStyle = XML_DASHED;
756 : 0 : break;
757 : : case table::BorderLineStyle::DOUBLE:
758 : : case table::BorderLineStyle::THINTHICK_SMALLGAP:
759 : : case table::BorderLineStyle::THINTHICK_MEDIUMGAP:
760 : : case table::BorderLineStyle::THINTHICK_LARGEGAP:
761 : : case table::BorderLineStyle::THICKTHIN_SMALLGAP:
762 : : case table::BorderLineStyle::THICKTHIN_MEDIUMGAP:
763 : : case table::BorderLineStyle::THICKTHIN_LARGEGAP:
764 : 0 : eStyle = XML_DOUBLE;
765 : 0 : break;
766 : : case table::BorderLineStyle::EMBOSSED:
767 : 0 : eStyle = XML_RIDGE;
768 : 0 : break;
769 : : case table::BorderLineStyle::ENGRAVED:
770 : 0 : eStyle = XML_GROOVE;
771 : 0 : break;
772 : : case table::BorderLineStyle::INSET:
773 : 0 : eStyle = XML_INSET;
774 : 0 : break;
775 : : case table::BorderLineStyle::OUTSET:
776 : 0 : eStyle = XML_OUTSET;
777 : 0 : break;
778 : : default:
779 : 0 : bNoBorder = true;
780 : : }
781 : :
782 [ # # ]: 0 : if ( !bNoBorder )
783 : : {
784 : : ::sax::Converter::convertMeasure(aOut, nWidth,
785 : : util::MeasureUnit::TWIP,
786 [ # # ]: 0 : util::MeasureUnit::POINT);
787 [ # # ]: 0 : aOut.append( sal_Unicode( ' ' ) );
788 [ # # ][ # # ]: 0 : aOut.append( GetXMLToken( eStyle ) );
789 [ # # ]: 0 : aOut.append( sal_Unicode( ' ' ) );
790 : : ::sax::Converter::convertColor(aOut,
791 [ # # ]: 0 : pLine->GetColor().GetColor());
792 : : }
793 : : }
794 : : else
795 : : {
796 [ # # ][ # # ]: 0 : aOut.append( GetXMLToken(XML_NONE) );
797 : : }
798 : : }
799 : 0 : break;
800 : :
801 : : // width
802 : : case ALL_BORDER_LINE_WIDTH:
803 : : case LEFT_BORDER_LINE_WIDTH:
804 : : case RIGHT_BORDER_LINE_WIDTH:
805 : : case TOP_BORDER_LINE_WIDTH:
806 : : case BOTTOM_BORDER_LINE_WIDTH:
807 : : const SvxBorderLine* pLine;
808 [ # # # # : 0 : switch( nMemberId )
# ]
809 : : {
810 : : case ALL_BORDER_LINE_WIDTH:
811 : : case LEFT_BORDER_LINE_WIDTH:
812 : 0 : pLine = pLeft;
813 : 0 : break;
814 : : case RIGHT_BORDER_LINE_WIDTH:
815 : 0 : pLine = pRight;
816 : 0 : break;
817 : : case TOP_BORDER_LINE_WIDTH:
818 : 0 : pLine = pTop;
819 : 0 : break;
820 : : case BOTTOM_BORDER_LINE_WIDTH:
821 : 0 : pLine = pBottom;
822 : 0 : break;
823 : : default:
824 : 0 : return sal_False;
825 : : }
826 [ # # ][ # # ]: 0 : rUnitConverter.convertMeasureToXML( aOut, pLine->GetInWidth() );
827 [ # # ]: 0 : aOut.append( sal_Unicode( ' ' ) );
828 [ # # ][ # # ]: 0 : rUnitConverter.convertMeasureToXML( aOut, pLine->GetDistance() );
829 [ # # ]: 0 : aOut.append( sal_Unicode( ' ' ) );
830 [ # # ][ # # ]: 0 : rUnitConverter.convertMeasureToXML( aOut, pLine->GetOutWidth() );
831 : 0 : break;
832 : : }
833 : :
834 : 0 : bOk = sal_True;
835 : : }
836 : 0 : break;
837 : :
838 : : case RES_BREAK:
839 : : {
840 [ # # ][ # # ]: 0 : const SvxFmtBreakItem* pFmtBreak = PTR_CAST(SvxFmtBreakItem, &rItem);
[ # # ][ # # ]
841 : : OSL_ENSURE( pFmtBreak != NULL, "Wrong Which-ID" );
842 : :
843 : 0 : sal_uInt16 eEnum = 0;
844 : :
845 [ # # # ]: 0 : switch( nMemberId )
846 : : {
847 : : case MID_BREAK_BEFORE:
848 [ # # # # ]: 0 : switch( pFmtBreak->GetValue() )
849 : : {
850 : : case SVX_BREAK_COLUMN_BEFORE:
851 : 0 : eEnum = 1;
852 : 0 : break;
853 : : case SVX_BREAK_PAGE_BEFORE:
854 : 0 : eEnum = 2;
855 : 0 : break;
856 : : case SVX_BREAK_NONE:
857 : 0 : eEnum = 0;
858 : 0 : break;
859 : : default:
860 : 0 : return sal_False;
861 : : }
862 : 0 : break;
863 : : case MID_BREAK_AFTER:
864 [ # # # # ]: 0 : switch( pFmtBreak->GetValue() )
865 : : {
866 : : case SVX_BREAK_COLUMN_AFTER:
867 : 0 : eEnum = 1;
868 : 0 : break;
869 : : case SVX_BREAK_PAGE_AFTER:
870 : 0 : eEnum = 2;
871 : 0 : break;
872 : : case SVX_BREAK_NONE:
873 : 0 : eEnum = 0;
874 : 0 : break;
875 : : default:
876 : 0 : return sal_False;
877 : : }
878 : 0 : break;
879 : : }
880 : :
881 [ # # ]: 0 : bOk = rUnitConverter.convertEnum( aOut, eEnum, psXML_BreakType );
882 : : }
883 : 0 : break;
884 : :
885 : : case RES_KEEP:
886 : : {
887 [ # # ][ # # ]: 0 : SvxFmtKeepItem* pFmtKeep = PTR_CAST(SvxFmtKeepItem, &rItem);
[ # # ][ # # ]
888 : : OSL_ENSURE( pFmtKeep != NULL, "Wrong Which-ID" );
889 : :
890 : 0 : aOut.append( pFmtKeep->GetValue()
891 : : ? GetXMLToken( XML_ALWAYS )
892 [ # # ][ # # ]: 0 : : GetXMLToken( XML_AUTO ) );
[ # # ][ # # ]
893 : 0 : bOk = sal_True;
894 : : }
895 : 0 : break;
896 : :
897 : : case RES_BACKGROUND:
898 : : {
899 [ # # ][ # # ]: 0 : SvxBrushItem* pBrush = PTR_CAST(SvxBrushItem, &rItem);
[ # # ][ # # ]
900 : : OSL_ENSURE( pBrush != NULL, "Wrong Which-ID" );
901 : :
902 : : // note: the graphic is only exported if nMemberId equals
903 : : // MID_GRAPHIC..
904 : : // If not, only the color or transparency is exported
905 : :
906 [ # # # # : 0 : switch( nMemberId )
# # ]
907 : : {
908 : : case MID_BACK_COLOR:
909 [ # # ]: 0 : if ( pBrush->GetColor().GetTransparency() )
910 [ # # ][ # # ]: 0 : aOut.append( GetXMLToken(XML_TRANSPARENT) );
911 : : else
912 : : {
913 : : ::sax::Converter::convertColor(aOut,
914 [ # # ]: 0 : pBrush->GetColor().GetColor());
915 : : }
916 : 0 : bOk = sal_True;
917 : 0 : break;
918 : :
919 : : case MID_GRAPHIC_LINK:
920 [ # # ]: 0 : if( pBrush->GetGraphicPos() != GPOS_NONE )
921 : : {
922 : 0 : uno::Any aAny;
923 [ # # ]: 0 : pBrush->QueryValue( aAny, MID_GRAPHIC_URL );
924 : 0 : OUString sTmp;
925 : 0 : aAny >>= sTmp;
926 [ # # ]: 0 : aOut.append( sTmp );
927 : 0 : bOk = sal_True;
928 : : }
929 : 0 : break;
930 : :
931 : : case MID_GRAPHIC_POSITION:
932 [ # # # # ]: 0 : switch( pBrush->GetGraphicPos() )
933 : : {
934 : : case GPOS_LT:
935 : : case GPOS_MT:
936 : : case GPOS_RT:
937 [ # # ][ # # ]: 0 : aOut.append( GetXMLToken(XML_TOP) );
938 : 0 : bOk = sal_True;
939 : 0 : break;
940 : : case GPOS_LM:
941 : : case GPOS_MM:
942 : : case GPOS_RM:
943 [ # # ][ # # ]: 0 : aOut.append( GetXMLToken(XML_CENTER) );
944 : 0 : bOk = sal_True;
945 : 0 : break;
946 : : case GPOS_LB:
947 : : case GPOS_MB:
948 : : case GPOS_RB:
949 [ # # ][ # # ]: 0 : aOut.append( GetXMLToken(XML_BOTTOM) );
950 : 0 : bOk = sal_True;
951 : 0 : break;
952 : : default:
953 : : ;
954 : : }
955 : :
956 [ # # ]: 0 : if( bOk )
957 : : {
958 [ # # ]: 0 : aOut.append( sal_Unicode( ' ' ) );
959 : :
960 [ # # # # ]: 0 : switch( pBrush->GetGraphicPos() )
961 : : {
962 : : case GPOS_LT:
963 : : case GPOS_LB:
964 : : case GPOS_LM:
965 [ # # ][ # # ]: 0 : aOut.append( GetXMLToken(XML_LEFT) );
966 : 0 : break;
967 : : case GPOS_MT:
968 : : case GPOS_MM:
969 : : case GPOS_MB:
970 [ # # ][ # # ]: 0 : aOut.append( GetXMLToken(XML_CENTER) );
971 : 0 : break;
972 : : case GPOS_RM:
973 : : case GPOS_RT:
974 : : case GPOS_RB:
975 [ # # ][ # # ]: 0 : aOut.append( GetXMLToken(XML_RIGHT) );
976 : 0 : break;
977 : : default:
978 : : ;
979 : : }
980 : : }
981 : 0 : break;
982 : :
983 : : case MID_GRAPHIC_REPEAT:
984 : : {
985 : 0 : SvxGraphicPosition eGraphicPos = pBrush->GetGraphicPos();
986 [ # # ]: 0 : if( GPOS_AREA == eGraphicPos )
987 : : {
988 [ # # ][ # # ]: 0 : aOut.append( GetXMLToken(XML_BACKGROUND_STRETCH) );
989 : 0 : bOk = sal_True;
990 : : }
991 [ # # ][ # # ]: 0 : else if( GPOS_NONE != eGraphicPos && GPOS_TILED != eGraphicPos )
992 : : {
993 [ # # ][ # # ]: 0 : aOut.append( GetXMLToken(XML_BACKGROUND_NO_REPEAT) );
994 : 0 : bOk = sal_True;
995 : : }
996 : : }
997 : 0 : break;
998 : :
999 : : case MID_GRAPHIC_FILTER:
1000 [ # # # # ]: 0 : if( pBrush->GetGraphicPos() != GPOS_NONE &&
[ # # ]
1001 : 0 : pBrush->GetGraphicFilter() )
1002 : : {
1003 [ # # ]: 0 : aOut.append( pBrush->GetGraphicFilter()->GetBuffer() );
1004 : 0 : bOk = sal_True;
1005 : : }
1006 : 0 : break;
1007 : : }
1008 : : }
1009 : 0 : break;
1010 : :
1011 : : case RES_PAGEDESC:
1012 : : {
1013 [ # # ][ # # ]: 0 : const SwFmtPageDesc* pPageDesc = PTR_CAST(SwFmtPageDesc, &rItem);
[ # # ][ # # ]
1014 : : OSL_ENSURE( pPageDesc != NULL, "Wrong Which-ID" );
1015 : :
1016 [ # # ]: 0 : if( MID_PAGEDESC_PAGENUMOFFSET==nMemberId )
1017 : : {
1018 : 0 : sal_Int32 const number(pPageDesc->GetNumOffset());
1019 [ # # ]: 0 : if (0 >= number)
1020 : : {
1021 [ # # ][ # # ]: 0 : aOut.append(GetXMLToken(XML_AUTO));
1022 : : }
1023 : : else // #i114163# positiveInteger only!
1024 : : {
1025 [ # # ]: 0 : ::sax::Converter::convertNumber(aOut, number);
1026 : : }
1027 : 0 : bOk = sal_True;
1028 : : }
1029 : : }
1030 : 0 : break;
1031 : :
1032 : : case RES_LAYOUT_SPLIT:
1033 : : case RES_ROW_SPLIT:
1034 : : {
1035 [ # # ][ # # ]: 0 : const SfxBoolItem* pSplit = PTR_CAST(SfxBoolItem, &rItem);
[ # # ][ # # ]
1036 : : OSL_ENSURE( pSplit != NULL, "Wrong Which-ID" );
1037 : :
1038 [ # # ]: 0 : ::sax::Converter::convertBool( aOut, pSplit->GetValue() );
1039 : 0 : bOk = sal_True;
1040 : : }
1041 : 0 : break;
1042 : :
1043 : : case RES_HORI_ORIENT:
1044 : : {
1045 [ # # ][ # # ]: 0 : SwFmtHoriOrient* pHoriOrient = PTR_CAST(SwFmtHoriOrient, &rItem);
[ # # ][ # # ]
1046 : : OSL_ENSURE( pHoriOrient != NULL, "Wrong Which-ID" );
1047 : :
1048 : 0 : rUnitConverter.convertEnum( aOut, pHoriOrient->GetHoriOrient(),
1049 [ # # ]: 0 : aXMLTableAlignMap );
1050 : 0 : bOk = sal_True;
1051 : : }
1052 : 0 : break;
1053 : :
1054 : : case RES_VERT_ORIENT:
1055 : : {
1056 [ # # ][ # # ]: 0 : SwFmtVertOrient* pVertOrient = PTR_CAST(SwFmtVertOrient, &rItem);
[ # # ][ # # ]
1057 : : OSL_ENSURE( pVertOrient != NULL, "Wrong Which-ID" );
1058 : :
1059 : 0 : rUnitConverter.convertEnum( aOut, pVertOrient->GetVertOrient(),
1060 [ # # ]: 0 : aXMLTableVAlignMap );
1061 : 0 : bOk = sal_True;
1062 : : }
1063 : 0 : break;
1064 : :
1065 : : case RES_FRM_SIZE:
1066 : : {
1067 [ # # ][ # # ]: 0 : SwFmtFrmSize* pFrmSize = PTR_CAST(SwFmtFrmSize, &rItem);
[ # # ][ # # ]
1068 : : OSL_ENSURE( pFrmSize != NULL, "Wrong Which-ID" );
1069 : :
1070 : 0 : sal_Bool bOutHeight = sal_False;
1071 [ # # # # ]: 0 : switch( nMemberId )
1072 : : {
1073 : : case MID_FRMSIZE_REL_WIDTH:
1074 [ # # ]: 0 : if( pFrmSize->GetWidthPercent() )
1075 : : {
1076 : : ::sax::Converter::convertPercent(
1077 [ # # ]: 0 : aOut, pFrmSize->GetWidthPercent() );
1078 : 0 : bOk = sal_True;
1079 : : }
1080 : 0 : break;
1081 : : case MID_FRMSIZE_MIN_HEIGHT:
1082 [ # # ]: 0 : if( ATT_MIN_SIZE == pFrmSize->GetHeightSizeType() )
1083 : 0 : bOutHeight = sal_True;
1084 : 0 : break;
1085 : : case MID_FRMSIZE_FIX_HEIGHT:
1086 [ # # ]: 0 : if( ATT_FIX_SIZE == pFrmSize->GetHeightSizeType() )
1087 : 0 : bOutHeight = sal_True;
1088 : 0 : break;
1089 : : }
1090 : :
1091 [ # # ]: 0 : if( bOutHeight )
1092 : : {
1093 [ # # ]: 0 : rUnitConverter.convertMeasureToXML(aOut, pFrmSize->GetHeight());
1094 : 0 : bOk = sal_True;
1095 : : }
1096 : : }
1097 : 0 : break;
1098 : :
1099 : : case RES_FRAMEDIR:
1100 : : {
1101 : 0 : Any aAny;
1102 [ # # ]: 0 : bOk = rItem.QueryValue( aAny );
1103 [ # # ]: 0 : if( bOk )
1104 : : {
1105 : : const XMLPropertyHandler* pWritingModeHandler =
1106 : : XMLPropertyHandlerFactory::CreatePropertyHandler(
1107 [ # # ]: 0 : XML_TYPE_TEXT_WRITING_MODE_WITH_DEFAULT );
1108 : 0 : OUString sValue;
1109 : : bOk = pWritingModeHandler->exportXML( sValue, aAny,
1110 [ # # ]: 0 : rUnitConverter );
1111 [ # # ]: 0 : if( bOk )
1112 [ # # ]: 0 : aOut.append( sValue );
1113 : :
1114 [ # # ][ # # ]: 0 : delete pWritingModeHandler;
1115 : 0 : }
1116 : : }
1117 : 0 : break;
1118 : :
1119 : : case RES_COLLAPSING_BORDERS:
1120 : : {
1121 [ # # ][ # # ]: 0 : const SfxBoolItem* pBorders = PTR_CAST(SfxBoolItem, &rItem);
[ # # ][ # # ]
1122 : : OSL_ENSURE( pBorders != NULL, "Wrong RES-ID" );
1123 : :
1124 : 0 : aOut.append( pBorders->GetValue()
1125 : : ? GetXMLToken( XML_COLLAPSING )
1126 [ # # ][ # # ]: 0 : : GetXMLToken( XML_SEPARATING ) );
[ # # ][ # # ]
1127 : 0 : bOk = sal_True;
1128 : : }
1129 : 0 : break;
1130 : :
1131 : : default:
1132 : : OSL_FAIL("GetXMLValue not implemented for this item.");
1133 : 0 : break;
1134 : : }
1135 : :
1136 [ # # ]: 0 : if ( bOk )
1137 [ # # ]: 0 : rValue = aOut.makeStringAndClear();
1138 : :
1139 : 0 : return bOk;
1140 : : }
1141 : :
1142 : : /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
|