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

Generated by: LCOV version 1.10