LCOV - code coverage report
Current view: top level - usr/local/src/libreoffice/sw/source/filter/xml - xmlexpit.cxx (source / functions) Hit Total Coverage
Test: libreoffice_filtered.info Lines: 6 464 1.3 %
Date: 2013-07-09 Functions: 4 15 26.7 %
Legend: Lines: hit not hit

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

Generated by: LCOV version 1.10