LCOV - code coverage report
Current view: top level - libreoffice/xmloff/source/text - txtprhdl.cxx (source / functions) Hit Total Coverage
Test: libreoffice_filtered.info Lines: 216 454 47.6 %
Date: 2012-12-27 Functions: 58 88 65.9 %
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 <tools/debug.hxx>
      21             : #include <rtl/ustrbuf.hxx>
      22             : #include <tools/fontenum.hxx>
      23             : #include <com/sun/star/uno/Any.hxx>
      24             : #include <com/sun/star/style/DropCapFormat.hpp>
      25             : #include <com/sun/star/text/FontRelief.hpp>
      26             : #include <com/sun/star/text/WrapTextMode.hpp>
      27             : #include <com/sun/star/text/XTextColumns.hpp>
      28             : #include <com/sun/star/text/TextColumn.hpp>
      29             : #include <com/sun/star/text/RelOrientation.hpp>
      30             : #include <com/sun/star/text/HoriOrientation.hpp>
      31             : #include <com/sun/star/text/VertOrientation.hpp>
      32             : #include <com/sun/star/text/RubyAdjust.hpp>
      33             : #include <com/sun/star/text/FontEmphasis.hpp>
      34             : #include <com/sun/star/text/ParagraphVertAlign.hpp>
      35             : #include <sax/tools/converter.hxx>
      36             : #include <xmloff/xmltypes.hxx>
      37             : #include <xmloff/xmluconv.hxx>
      38             : #include <xmloff/xmltoken.hxx>
      39             : #include "XMLAnchorTypePropHdl.hxx"
      40             : #include <xmloff/XMLConstantsPropertyHandler.hxx>
      41             : #include "XMLClipPropertyHandler.hxx"
      42             : #include "XMLTextColumnsPropertyHandler.hxx"
      43             : #include <xmloff/NamedBoolPropertyHdl.hxx>
      44             : #include "txtprhdl.hxx"
      45             : // OD 2004-05-05 #i28701#
      46             : #include <com/sun/star/text/WrapInfluenceOnPosition.hpp>
      47             : 
      48             : 
      49             : using ::rtl::OUString;
      50             : using ::rtl::OUStringBuffer;
      51             : 
      52             : using namespace ::com::sun::star::uno;
      53             : using namespace ::com::sun::star::style;
      54             : using namespace ::com::sun::star::text;
      55             : using namespace ::xmloff::token;
      56             : 
      57             : // ---------------------------------------------------------------------------
      58             : 
      59             : SvXMLEnumMapEntry const pXML_HoriPos_Enum[] =
      60             : {
      61             :     { XML_FROM_LEFT,        HoriOrientation::NONE   },
      62             :     { XML_FROM_INSIDE,      HoriOrientation::NONE   },  // import only
      63             :     { XML_LEFT,             HoriOrientation::LEFT   },
      64             :     { XML_INSIDE,           HoriOrientation::LEFT   },  // import only
      65             :     { XML_CENTER,           HoriOrientation::CENTER },
      66             :     { XML_RIGHT,            HoriOrientation::RIGHT  },
      67             :     { XML_OUTSIDE,          HoriOrientation::RIGHT  },  // import only
      68             :     { XML_TOKEN_INVALID, 0 }
      69             : };
      70             : 
      71             : SvXMLEnumMapEntry const pXML_HoriPosMirrored_Enum[] =
      72             : {
      73             :     { XML_FROM_INSIDE,      HoriOrientation::NONE   },
      74             :     { XML_INSIDE,           HoriOrientation::LEFT   },
      75             :     { XML_CENTER,           HoriOrientation::CENTER },
      76             :     { XML_OUTSIDE,          HoriOrientation::RIGHT  },
      77             :     { XML_TOKEN_INVALID, 0 }
      78             : };
      79             : 
      80             : SvXMLEnumMapEntry const pXML_HoriRel_Enum[] =
      81             : {
      82             :     { XML_PARAGRAPH,            RelOrientation::FRAME   },
      83             :     { XML_PARAGRAPH_CONTENT,    RelOrientation::PRINT_AREA  },
      84             :     { XML_PAGE,                 RelOrientation::PAGE_FRAME  },
      85             :     { XML_PAGE_CONTENT,         RelOrientation::PAGE_PRINT_AREA },
      86             :     { XML_PARAGRAPH_START_MARGIN,   RelOrientation::FRAME_LEFT  },
      87             :     { XML_PARAGRAPH_END_MARGIN, RelOrientation::FRAME_RIGHT },
      88             :     { XML_PAGE_START_MARGIN,    RelOrientation::PAGE_LEFT   },
      89             :     { XML_PAGE_END_MARGIN,      RelOrientation::PAGE_RIGHT  },
      90             :     { XML_CHAR,                 RelOrientation::CHAR    },
      91             :     { XML_FRAME,                RelOrientation::FRAME   },      // import only
      92             :     { XML_FRAME_CONTENT,        RelOrientation::PRINT_AREA  },  // import only
      93             :     { XML_FRAME_START_MARGIN,   RelOrientation::FRAME_LEFT  },  // import only
      94             :     { XML_FRAME_END_MARGIN,     RelOrientation::FRAME_RIGHT },  // import only
      95             :     { XML_TOKEN_INVALID, 0 }
      96             : };
      97             : 
      98             : SvXMLEnumMapEntry const pXML_HoriRelFrame_Enum[] =
      99             : {
     100             :     { XML_FRAME,                RelOrientation::FRAME   },
     101             :     { XML_FRAME_CONTENT,        RelOrientation::PRINT_AREA  },
     102             :     { XML_PAGE,                 RelOrientation::PAGE_FRAME  },
     103             :     { XML_PAGE_CONTENT,         RelOrientation::PAGE_PRINT_AREA },
     104             :     { XML_FRAME_START_MARGIN,   RelOrientation::FRAME_LEFT  },
     105             :     { XML_FRAME_END_MARGIN,     RelOrientation::FRAME_RIGHT },
     106             :     { XML_PAGE_START_MARGIN,    RelOrientation::PAGE_LEFT   },
     107             :     { XML_PAGE_END_MARGIN,      RelOrientation::PAGE_RIGHT  },
     108             :     { XML_CHAR,                 RelOrientation::CHAR    },
     109             :     { XML_TOKEN_INVALID, 0 }
     110             : };
     111             : 
     112             : SvXMLEnumMapEntry const pXML_HoriMirror_Enum[] =
     113             : {
     114             :     { XML_FROM_LEFT,        sal_False   },
     115             :     { XML_FROM_INSIDE,      sal_True    },
     116             :     { XML_LEFT,             sal_False   },
     117             :     { XML_INSIDE,           sal_True    },
     118             :     { XML_CENTER,           sal_False   },
     119             :     { XML_RIGHT,            sal_False   },
     120             :     { XML_OUTSIDE,          sal_True    },
     121             :     { XML_TOKEN_INVALID, 0 }
     122             : };
     123             : 
     124             : SvXMLEnumMapEntry const pXML_VertPos_Enum[] =
     125             : {
     126             :     { XML_FROM_TOP,         VertOrientation::NONE       },
     127             :     { XML_TOP,              VertOrientation::TOP        },
     128             :     { XML_TOP,              VertOrientation::CHAR_TOP   },  // export only
     129             :     { XML_TOP,              VertOrientation::LINE_TOP   },  // export only
     130             :     { XML_MIDDLE,           VertOrientation::CENTER     },
     131             :     { XML_MIDDLE,           VertOrientation::CHAR_CENTER    },  // export only
     132             :     { XML_MIDDLE,           VertOrientation::LINE_CENTER    },  // export only
     133             :     { XML_BOTTOM,           VertOrientation::BOTTOM     },
     134             :     { XML_BOTTOM,           VertOrientation::CHAR_BOTTOM    },  // export only
     135             :     { XML_BOTTOM,           VertOrientation::LINE_BOTTOM    },  // export only
     136             :     { XML_BELOW,            VertOrientation::CHAR_BOTTOM    },  // import only
     137             :     { XML_TOKEN_INVALID, 0 }
     138             : };
     139             : 
     140             : SvXMLEnumMapEntry const pXML_VertPosAtChar_Enum[] =
     141             : {
     142             :     { XML_FROM_TOP,         VertOrientation::NONE       },
     143             :     { XML_TOP,              VertOrientation::TOP        },
     144             :     { XML_TOP,              VertOrientation::CHAR_TOP   },  // export only
     145             :     { XML_TOP,              VertOrientation::LINE_TOP   },  // export only
     146             :     { XML_MIDDLE,           VertOrientation::CENTER     },
     147             :     { XML_MIDDLE,           VertOrientation::CHAR_CENTER    },  // export only
     148             :     { XML_MIDDLE,           VertOrientation::LINE_CENTER    },  // export only
     149             :     { XML_BOTTOM,           VertOrientation::BOTTOM     },
     150             :     { XML_BELOW,            VertOrientation::CHAR_BOTTOM    },  // export only
     151             :     { XML_BOTTOM,           VertOrientation::LINE_BOTTOM    },  // export only
     152             :     { XML_TOKEN_INVALID, 0 }
     153             : };
     154             : 
     155             : SvXMLEnumMapEntry const pXML_VertRel_Enum[] =
     156             : {
     157             :     { XML_PARAGRAPH,            RelOrientation::FRAME   },
     158             :     { XML_PARAGRAPH_CONTENT,    RelOrientation::PRINT_AREA  },
     159             :     { XML_CHAR,                 RelOrientation::CHAR    },
     160             :     // DVO, OD 17.09.2003 #i18732# - allow vertical alignment at page
     161             :     { XML_PAGE,                 RelOrientation::PAGE_FRAME  },
     162             :     { XML_PAGE_CONTENT,         RelOrientation::PAGE_PRINT_AREA },
     163             :     { XML_FRAME,                RelOrientation::FRAME   },      // import only
     164             :     { XML_FRAME_CONTENT,        RelOrientation::PRINT_AREA  },  // import only
     165             :     // OD 13.11.2003 #i22341# - new vertical alignment at top of line
     166             :     { XML_LINE,                 RelOrientation::TEXT_LINE },
     167             :     { XML_TOKEN_INVALID, 0 }
     168             : };
     169             : 
     170             : SvXMLEnumMapEntry const pXML_VertRelPage_Enum[] =
     171             : {
     172             :     { XML_PAGE,         RelOrientation::FRAME   },
     173             :     { XML_PAGE_CONTENT, RelOrientation::PRINT_AREA  },
     174             :     { XML_PAGE,         RelOrientation::PAGE_FRAME  },
     175             :     { XML_PAGE_CONTENT, RelOrientation::PAGE_PRINT_AREA },
     176             :     { XML_TOKEN_INVALID, 0 }
     177             : };
     178             : 
     179             : SvXMLEnumMapEntry const pXML_VertRelFrame_Enum[] =
     180             : {
     181             :     { XML_FRAME,            RelOrientation::FRAME   },
     182             :     { XML_FRAME_CONTENT,    RelOrientation::PRINT_AREA  },
     183             :     { XML_TOKEN_INVALID, 0 }
     184             : };
     185             : 
     186             : SvXMLEnumMapEntry const pXML_VertRelAsChar_Enum[] =
     187             : {
     188             :     { XML_BASELINE,     VertOrientation::TOP        },
     189             :     { XML_BASELINE,     VertOrientation::CENTER     },  // export only
     190             :     { XML_BASELINE,     VertOrientation::BOTTOM     },  // export only
     191             :     { XML_TEXT,         VertOrientation::CHAR_TOP   },
     192             :     { XML_TEXT,         VertOrientation::CHAR_CENTER    },  // export only
     193             :     { XML_TEXT,         VertOrientation::CHAR_BOTTOM    },  // export only
     194             :     { XML_LINE,         VertOrientation::LINE_TOP   },
     195             :     { XML_LINE,         VertOrientation::LINE_CENTER    },  // export only
     196             :     { XML_LINE,         VertOrientation::LINE_BOTTOM    },  // export only
     197             :     { XML_TOKEN_INVALID, 0 }
     198             : };
     199             : 
     200             : SvXMLEnumMapEntry const pXML_RubyAdjust_Enum[] =
     201             : {
     202             :     { XML_LEFT,                 RubyAdjust_LEFT },
     203             :     { XML_CENTER,               RubyAdjust_CENTER },
     204             :     { XML_RIGHT,                RubyAdjust_RIGHT },
     205             :     { XML_DISTRIBUTE_LETTER,    RubyAdjust_BLOCK },
     206             :     { XML_DISTRIBUTE_SPACE,     RubyAdjust_INDENT_BLOCK },
     207             :     { XML_TOKEN_INVALID, 0 }
     208             : };
     209             : 
     210             : SvXMLEnumMapEntry const pXML_FontRelief_Enum[] =
     211             : {
     212             :     { XML_NONE,             FontRelief::NONE        },
     213             :     { XML_ENGRAVED,         FontRelief::ENGRAVED    },
     214             :     { XML_EMBOSSED,         FontRelief::EMBOSSED    },
     215             :     { XML_TOKEN_INVALID, 0 }
     216             : };
     217             : 
     218             : SvXMLEnumMapEntry const pXML_VerticalAlign_Enum[] =
     219             : {
     220             :     { XML_TOP,          ParagraphVertAlign::TOP     },
     221             :     { XML_MIDDLE,       ParagraphVertAlign::CENTER  },
     222             :     { XML_BOTTOM,       ParagraphVertAlign::BOTTOM  },
     223             :     { XML_BASELINE,     ParagraphVertAlign::BASELINE    },
     224             :     { XML_AUTO,         ParagraphVertAlign::AUTOMATIC   },
     225             :     { XML_TOKEN_INVALID, 0 }
     226             : };
     227             : 
     228             : // OD 2004-05-05 #i28701#
     229             : SvXMLEnumMapEntry const pXML_WrapInfluenceOnPosition_Enum[] =
     230             : {
     231             :     // Tokens have been renamed and <XML_ITERATIVE> has been added (#i35017#)
     232             :     { XML_ONCE_SUCCESSIVE, WrapInfluenceOnPosition::ONCE_SUCCESSIVE },
     233             :     { XML_ONCE_CONCURRENT, WrapInfluenceOnPosition::ONCE_CONCURRENT },
     234             :     { XML_ITERATIVE,       WrapInfluenceOnPosition::ITERATIVE },
     235             :     { XML_TOKEN_INVALID, 0 }
     236             : };
     237             : 
     238             : // ---------------------------------------------------------------------------
     239             : 
     240         352 : class XMLDropCapPropHdl_Impl : public XMLPropertyHandler
     241             : {
     242             : public:
     243             :     virtual ~XMLDropCapPropHdl_Impl ();
     244             : 
     245             :     virtual bool equals(
     246             :             const ::com::sun::star::uno::Any& r1,
     247             :             const ::com::sun::star::uno::Any& r2 ) const;
     248             : 
     249             :     /// TabStops will be imported/exported as XML-Elements. So the Import/Export-work must be done at another place.
     250             :     virtual sal_Bool importXML(
     251             :             const ::rtl::OUString& rStrImpValue,
     252             :             ::com::sun::star::uno::Any& rValue,
     253             :             const SvXMLUnitConverter& ) const;
     254             :     virtual sal_Bool exportXML(
     255             :             ::rtl::OUString& rStrExpValue,
     256             :             const ::com::sun::star::uno::Any& rValue,
     257             :             const SvXMLUnitConverter& ) const;
     258             : };
     259             : 
     260         704 : XMLDropCapPropHdl_Impl::~XMLDropCapPropHdl_Impl ()
     261             : {
     262         704 : }
     263             : 
     264           0 : bool XMLDropCapPropHdl_Impl::equals(
     265             :         const Any& r1,
     266             :         const Any& r2 ) const
     267             : {
     268           0 :     DropCapFormat aFormat1, aFormat2;
     269           0 :     r1 >>= aFormat1;
     270           0 :     r2 >>= aFormat2;
     271             : 
     272             :     return  (aFormat1.Lines <=1 && aFormat2.Lines <=1) ||
     273             :             (aFormat1.Lines == aFormat2.Lines &&
     274             :              aFormat1.Count == aFormat2.Count &&
     275           0 :              aFormat1.Distance == aFormat2.Distance);
     276             : }
     277             : 
     278           0 : sal_Bool XMLDropCapPropHdl_Impl::importXML(
     279             :         const OUString&,
     280             :            Any&,
     281             :         const SvXMLUnitConverter& ) const
     282             : {
     283             :     DBG_ASSERT( !this, "drop caps are an element import property" );
     284           0 :     return sal_False;
     285             : }
     286             : 
     287           0 : sal_Bool XMLDropCapPropHdl_Impl::exportXML(
     288             :         OUString&,
     289             :         const Any&,
     290             :         const SvXMLUnitConverter& ) const
     291             : {
     292             :     DBG_ASSERT( !this, "drop caps are an element export property" );
     293           0 :     return sal_False;
     294             : }
     295             : 
     296             : // ---------------------------------------------------------------------------
     297             : 
     298         173 : class XMLOpaquePropHdl_Impl : public XMLPropertyHandler
     299             : {
     300             : public:
     301             :     virtual ~XMLOpaquePropHdl_Impl ();
     302             : 
     303             :     virtual sal_Bool importXML(
     304             :             const ::rtl::OUString& rStrImpValue,
     305             :             ::com::sun::star::uno::Any& rValue,
     306             :             const SvXMLUnitConverter& ) const;
     307             :     virtual sal_Bool exportXML(
     308             :             ::rtl::OUString& rStrExpValue,
     309             :             const ::com::sun::star::uno::Any& rValue,
     310             :             const SvXMLUnitConverter& ) const;
     311             : };
     312             : 
     313           1 : sal_Bool XMLOpaquePropHdl_Impl::importXML(
     314             :         const OUString& rStrImpValue,
     315             :            Any& rValue,
     316             :         const SvXMLUnitConverter& ) const
     317             : {
     318           1 :     sal_Bool bRet = sal_True;
     319           1 :     sal_Bool bVal = sal_False;
     320           1 :     if( IsXMLToken( rStrImpValue, XML_FOREGROUND ) )
     321           1 :         bVal = sal_True;
     322           0 :     else if( !IsXMLToken( rStrImpValue, XML_BACKGROUND ) )
     323           0 :         bRet = sal_False;
     324             : 
     325           1 :     if( bRet )
     326           1 :         rValue.setValue( &bVal, ::getBooleanCppuType() );
     327             : 
     328           1 :     return bRet;
     329             : }
     330             : 
     331           0 : sal_Bool XMLOpaquePropHdl_Impl::exportXML(
     332             :         OUString& rStrExpValue,
     333             :         const Any& rValue,
     334             :         const SvXMLUnitConverter& ) const
     335             : {
     336           0 :     if( *(sal_Bool *)rValue.getValue() )
     337           0 :            rStrExpValue = GetXMLToken( XML_FOREGROUND );
     338             :     else
     339           0 :            rStrExpValue = GetXMLToken( XML_BACKGROUND );
     340             : 
     341           0 :     return sal_True;
     342             : }
     343             : 
     344         346 : XMLOpaquePropHdl_Impl::~XMLOpaquePropHdl_Impl ()
     345             : {
     346         346 : }
     347             : 
     348             : // ---------------------------------------------------------------------------
     349             : 
     350         173 : class XMLContourModePropHdl_Impl : public XMLPropertyHandler
     351             : {
     352             : public:
     353             :     virtual ~XMLContourModePropHdl_Impl ();
     354             : 
     355             :     virtual sal_Bool importXML(
     356             :             const ::rtl::OUString& rStrImpValue,
     357             :             ::com::sun::star::uno::Any& rValue,
     358             :             const SvXMLUnitConverter& ) const;
     359             :     virtual sal_Bool exportXML(
     360             :             ::rtl::OUString& rStrExpValue,
     361             :             const ::com::sun::star::uno::Any& rValue,
     362             :             const SvXMLUnitConverter& ) const;
     363             : };
     364             : 
     365           0 : sal_Bool XMLContourModePropHdl_Impl::importXML(
     366             :         const OUString& rStrImpValue,
     367             :            Any& rValue,
     368             :         const SvXMLUnitConverter& ) const
     369             : {
     370           0 :     sal_Bool bRet = sal_True;
     371           0 :     sal_Bool bVal = sal_False;
     372           0 :     if( IsXMLToken( rStrImpValue, XML_OUTSIDE ) )
     373           0 :         bVal = sal_True;
     374           0 :     else if( ! IsXMLToken( rStrImpValue, XML_FULL ) )
     375           0 :         bRet = sal_False;
     376             : 
     377           0 :     if( bRet )
     378           0 :         rValue.setValue( &bVal, ::getBooleanCppuType() );
     379             : 
     380           0 :     return bRet;
     381             : }
     382             : 
     383           0 : sal_Bool XMLContourModePropHdl_Impl::exportXML(
     384             :         OUString& rStrExpValue,
     385             :         const Any& rValue,
     386             :         const SvXMLUnitConverter& ) const
     387             : {
     388           0 :     if( *(sal_Bool *)rValue.getValue() )
     389           0 :            rStrExpValue = GetXMLToken( XML_OUTSIDE );
     390             :     else
     391           0 :            rStrExpValue = GetXMLToken( XML_FULL );
     392             : 
     393           0 :     return sal_True;
     394             : }
     395             : 
     396         346 : XMLContourModePropHdl_Impl::~XMLContourModePropHdl_Impl()
     397             : {
     398         346 : }
     399             : 
     400             : // ---------------------------------------------------------------------------
     401             : 
     402         173 : class XMLParagraphOnlyPropHdl_Impl : public XMLPropertyHandler
     403             : {
     404             : public:
     405             :     virtual ~XMLParagraphOnlyPropHdl_Impl ();
     406             : 
     407             :     virtual sal_Bool importXML(
     408             :             const ::rtl::OUString& rStrImpValue,
     409             :             ::com::sun::star::uno::Any& rValue,
     410             :             const SvXMLUnitConverter& ) const;
     411             :     virtual sal_Bool exportXML(
     412             :             ::rtl::OUString& rStrExpValue,
     413             :             const ::com::sun::star::uno::Any& rValue,
     414             :             const SvXMLUnitConverter& ) const;
     415             : };
     416             : 
     417           3 : sal_Bool XMLParagraphOnlyPropHdl_Impl::importXML(
     418             :         const OUString& rStrImpValue,
     419             :            Any& rValue,
     420             :         const SvXMLUnitConverter& ) const
     421             : {
     422           3 :     sal_Bool bRet = sal_True;
     423           3 :     sal_Bool bVal = sal_False;
     424             : 
     425           3 :     if( ! IsXMLToken( rStrImpValue, XML_NO_LIMIT ) )
     426             :     {
     427           0 :         sal_Int32 nValue = 0;
     428           0 :         bRet = ::sax::Converter::convertNumber( nValue, rStrImpValue );
     429           0 :         bVal = 1 == nValue;
     430             :     }
     431             : 
     432           3 :     if( bRet )
     433           3 :         rValue.setValue( &bVal, ::getBooleanCppuType() );
     434             : 
     435           3 :     return bRet;
     436             : }
     437             : 
     438           0 : sal_Bool XMLParagraphOnlyPropHdl_Impl::exportXML(
     439             :         OUString& rStrExpValue,
     440             :         const Any& rValue,
     441             :         const SvXMLUnitConverter& ) const
     442             : {
     443           0 :     if( *(sal_Bool *)rValue.getValue() )
     444           0 :            rStrExpValue = GetXMLToken( XML_1 );
     445             :     else
     446           0 :            rStrExpValue = GetXMLToken( XML_NO_LIMIT );
     447             : 
     448           0 :     return sal_True;
     449             : }
     450             : 
     451         346 : XMLParagraphOnlyPropHdl_Impl::~XMLParagraphOnlyPropHdl_Impl()
     452             : {
     453         346 : }
     454             : 
     455             : // ---------------------------------------------------------------------------
     456             : 
     457             : SvXMLEnumMapEntry const pXML_Wrap_Enum[] =
     458             : {
     459             :     { XML_NONE,         WrapTextMode_NONE },
     460             :     { XML_RUN_THROUGH,  WrapTextMode_THROUGHT },
     461             :     { XML_PARALLEL,     WrapTextMode_PARALLEL },
     462             :     { XML_DYNAMIC,      WrapTextMode_DYNAMIC },
     463             :     { XML_LEFT,         WrapTextMode_LEFT },
     464             :     { XML_RIGHT,        WrapTextMode_RIGHT },
     465             :     { XML_TOKEN_INVALID, 0 }
     466             : };
     467             : 
     468         173 : class XMLWrapPropHdl_Impl : public XMLPropertyHandler
     469             : {
     470             : public:
     471             :     virtual ~XMLWrapPropHdl_Impl ();
     472             : 
     473             :     virtual sal_Bool importXML(
     474             :             const ::rtl::OUString& rStrImpValue,
     475             :             ::com::sun::star::uno::Any& rValue,
     476             :             const SvXMLUnitConverter& ) const;
     477             :     virtual sal_Bool exportXML(
     478             :             ::rtl::OUString& rStrExpValue,
     479             :             const ::com::sun::star::uno::Any& rValue,
     480             :             const SvXMLUnitConverter& ) const;
     481             : };
     482             : 
     483           4 : sal_Bool XMLWrapPropHdl_Impl::importXML(
     484             :         const OUString& rStrImpValue,
     485             :            Any& rValue,
     486             :         const SvXMLUnitConverter& ) const
     487             : {
     488             :     sal_uInt16 nWrap;
     489             :     sal_Bool bRet = SvXMLUnitConverter::convertEnum( nWrap, rStrImpValue,
     490           4 :                                                 pXML_Wrap_Enum );
     491             : 
     492           4 :     if( bRet )
     493           4 :         rValue <<= (WrapTextMode)nWrap;
     494             : 
     495           4 :     return bRet;
     496             : }
     497             : 
     498           0 : sal_Bool XMLWrapPropHdl_Impl::exportXML(
     499             :         OUString& rStrExpValue,
     500             :         const Any& rValue,
     501             :         const SvXMLUnitConverter& ) const
     502             : {
     503           0 :     OUStringBuffer aOut;
     504             :     WrapTextMode eVal;
     505             : 
     506           0 :     rValue >>= eVal;
     507             : 
     508           0 :     sal_Bool bRet = SvXMLUnitConverter::convertEnum( aOut, eVal, pXML_Wrap_Enum, XML_NONE );
     509             : 
     510           0 :     rStrExpValue = aOut.makeStringAndClear();
     511             : 
     512           0 :     return bRet;
     513             : }
     514             : 
     515         346 : XMLWrapPropHdl_Impl::~XMLWrapPropHdl_Impl ()
     516             : {
     517         346 : }
     518             : 
     519             : // ---------------------------------------------------------------------------
     520             : 
     521             : class XMLFrameProtectPropHdl_Impl : public XMLPropertyHandler
     522             : {
     523             :     const OUString sVal;
     524             : public:
     525         507 :     XMLFrameProtectPropHdl_Impl( enum XMLTokenEnum eVal ) :
     526         507 :            sVal( GetXMLToken(eVal) ) {}
     527             :     virtual ~XMLFrameProtectPropHdl_Impl ();
     528             : 
     529             :     virtual sal_Bool importXML(
     530             :             const ::rtl::OUString& rStrImpValue,
     531             :             ::com::sun::star::uno::Any& rValue,
     532             :             const SvXMLUnitConverter& ) const;
     533             :     virtual sal_Bool exportXML(
     534             :             ::rtl::OUString& rStrExpValue,
     535             :             const ::com::sun::star::uno::Any& rValue,
     536             :             const SvXMLUnitConverter& ) const;
     537             : };
     538             : 
     539           0 : sal_Bool XMLFrameProtectPropHdl_Impl::importXML(
     540             :         const OUString& rStrImpValue,
     541             :            Any& rValue,
     542             :         const SvXMLUnitConverter& ) const
     543             : {
     544           0 :     sal_Bool bRet = sal_True;
     545           0 :     sal_Bool bVal = sal_False;
     546           0 :     if( ! IsXMLToken( rStrImpValue, XML_NONE ) )
     547             :     {
     548           0 :         bRet = sal_False;
     549           0 :         SvXMLTokenEnumerator aTokenEnum( rStrImpValue );
     550           0 :         OUString aToken;
     551           0 :         while( aTokenEnum.getNextToken( aToken ) )
     552             :         {
     553           0 :             bRet = sal_True;
     554           0 :             if( aToken == sVal )
     555             :             {
     556           0 :                 bVal = sal_True;
     557           0 :                 break;
     558             :             }
     559           0 :         }
     560             :     }
     561             : 
     562           0 :     if( bRet )
     563           0 :         rValue.setValue( &bVal, ::getBooleanCppuType() );
     564             : 
     565           0 :     return bRet;
     566             : }
     567             : 
     568           0 : sal_Bool XMLFrameProtectPropHdl_Impl::exportXML(
     569             :         OUString& rStrExpValue,
     570             :         const Any& rValue,
     571             :         const SvXMLUnitConverter& ) const
     572             : {
     573           0 :     if( *(sal_Bool *)rValue.getValue() )
     574             :     {
     575           0 :         if( rStrExpValue.isEmpty() ||
     576           0 :             IsXMLToken( rStrExpValue, XML_NONE ) )
     577             :         {
     578           0 :                rStrExpValue = sVal;
     579             :         }
     580             :         else
     581             :         {
     582           0 :             OUStringBuffer aOut( rStrExpValue.getLength() + 1 +
     583           0 :                                  sVal.getLength() );
     584           0 :             aOut.append( rStrExpValue );
     585           0 :             aOut.append( (sal_Unicode)' ' );
     586           0 :             aOut.append( sVal );
     587           0 :             rStrExpValue = aOut.makeStringAndClear();
     588             :         }
     589             :     }
     590           0 :     else if( rStrExpValue.isEmpty() )
     591             :     {
     592           0 :            rStrExpValue = GetXMLToken( XML_NONE );
     593             :     }
     594             : 
     595           0 :     return sal_True;
     596             : }
     597             : 
     598        1014 : XMLFrameProtectPropHdl_Impl::~XMLFrameProtectPropHdl_Impl()
     599             : {
     600        1014 : }
     601             : 
     602             : // ---------------------------------------------------------------------------
     603             : 
     604             : SvXMLEnumMapEntry const pXML_Anchor_Enum[] =
     605             : {
     606             :     { XML_CHAR,         TextContentAnchorType_AT_CHARACTER },
     607             :     { XML_PAGE,         TextContentAnchorType_AT_PAGE },
     608             :     { XML_FRAME,        TextContentAnchorType_AT_FRAME },
     609             :     { XML_PARAGRAPH,        TextContentAnchorType_AT_PARAGRAPH },
     610             :     { XML_AS_CHAR,      TextContentAnchorType_AS_CHARACTER },
     611             :     { XML_TOKEN_INVALID, 0 }
     612             : };
     613             : 
     614             : 
     615           3 : sal_Bool XMLAnchorTypePropHdl::importXML(
     616             :         const OUString& rStrImpValue,
     617             :            Any& rValue,
     618             :         const SvXMLUnitConverter& ) const
     619             : {
     620             :     sal_uInt16 nAnchor;
     621             :     sal_Bool bRet = SvXMLUnitConverter::convertEnum( nAnchor, rStrImpValue,
     622           3 :                                                 pXML_Anchor_Enum );
     623             : 
     624           3 :     if( bRet )
     625           3 :         rValue <<= (TextContentAnchorType)nAnchor;
     626             : 
     627           3 :     return bRet;
     628             : }
     629             : 
     630           0 : sal_Bool XMLAnchorTypePropHdl::exportXML(
     631             :         OUString& rStrExpValue,
     632             :         const Any& rValue,
     633             :         const SvXMLUnitConverter& ) const
     634             : {
     635           0 :     OUStringBuffer aOut;
     636             :     TextContentAnchorType eVal;
     637             : 
     638           0 :     rValue >>= eVal;
     639             : 
     640           0 :     sal_Bool bRet = SvXMLUnitConverter::convertEnum( aOut, eVal, pXML_Anchor_Enum, XML_PARAGRAPH );
     641             : 
     642           0 :     rStrExpValue = aOut.makeStringAndClear();
     643             : 
     644           0 :     return bRet;
     645             : }
     646             : 
     647         322 : XMLAnchorTypePropHdl::~XMLAnchorTypePropHdl()
     648             : {
     649         322 : }
     650             : 
     651           9 : sal_Bool XMLAnchorTypePropHdl::convert( const OUString& rStrImpValue,
     652             :                  TextContentAnchorType& rType )
     653             : {
     654             :     sal_uInt16 nAnchor;
     655             :     sal_Bool bRet = SvXMLUnitConverter::convertEnum( nAnchor, rStrImpValue,
     656           9 :                                                 pXML_Anchor_Enum );
     657           9 :     if( bRet )
     658           9 :         rType = (TextContentAnchorType)nAnchor;
     659           9 :     return bRet;
     660             : }
     661             : 
     662             : // ---------------------------------------------------------------------------
     663             : 
     664             : 
     665         678 : XMLTextColumnsPropertyHandler::~XMLTextColumnsPropertyHandler ()
     666             : {
     667         678 : }
     668             : 
     669           0 : bool XMLTextColumnsPropertyHandler::equals(
     670             :         const Any& r1,
     671             :         const Any& r2 ) const
     672             : {
     673           0 :     Reference < XTextColumns > xColumns1;
     674           0 :     r1 >>= xColumns1;
     675             : 
     676           0 :     Reference < XTextColumns > xColumns2;
     677           0 :     r2 >>= xColumns2;
     678             : 
     679           0 :     if( xColumns1->getColumnCount() != xColumns2->getColumnCount() ||
     680           0 :           xColumns1->getReferenceValue() != xColumns2->getReferenceValue() )
     681           0 :         return sal_False;
     682             : 
     683           0 :     Sequence < TextColumn > aColumns1 = xColumns1->getColumns();
     684           0 :     Sequence < TextColumn > aColumns2 = xColumns2->getColumns();
     685           0 :     sal_Int32 nCount = aColumns1.getLength();
     686           0 :     if( aColumns2.getLength() != nCount )
     687           0 :         return sal_False;
     688             : 
     689           0 :     const TextColumn *pColumns1 = aColumns1.getArray();
     690           0 :     const TextColumn *pColumns2 = aColumns2.getArray();
     691             : 
     692           0 :     while( nCount-- )
     693             :     {
     694           0 :         if( pColumns1->Width != pColumns2->Width ||
     695             :              pColumns1->LeftMargin != pColumns2->LeftMargin ||
     696             :              pColumns1->RightMargin != pColumns2->RightMargin )
     697           0 :             return sal_False;
     698             : 
     699           0 :         pColumns1++;
     700           0 :         pColumns2++;
     701             :     }
     702             : 
     703           0 :     return sal_True;
     704             : }
     705             : 
     706           0 : sal_Bool XMLTextColumnsPropertyHandler::importXML(
     707             :         const OUString&,
     708             :            Any&,
     709             :         const SvXMLUnitConverter& ) const
     710             : {
     711             :     DBG_ASSERT( !this, "columns are an element import property" );
     712           0 :     return sal_False;
     713             : }
     714             : 
     715           0 : sal_Bool XMLTextColumnsPropertyHandler::exportXML(
     716             :         OUString&,
     717             :         const Any&,
     718             :         const SvXMLUnitConverter& ) const
     719             : {
     720             :     DBG_ASSERT( !this, "columns are an element export property" );
     721           0 :     return sal_False;
     722             : }
     723             : 
     724             : // ---------------------------------------------------------------------------
     725             : 
     726         173 : class XMLHoriMirrorPropHdl_Impl : public XMLPropertyHandler
     727             : {
     728             : public:
     729             :     virtual ~XMLHoriMirrorPropHdl_Impl ();
     730             : 
     731             :     virtual sal_Bool importXML(
     732             :             const ::rtl::OUString& rStrImpValue,
     733             :             ::com::sun::star::uno::Any& rValue,
     734             :             const SvXMLUnitConverter& ) const;
     735             :     virtual sal_Bool exportXML(
     736             :             ::rtl::OUString& rStrExpValue,
     737             :             const ::com::sun::star::uno::Any& rValue,
     738             :             const SvXMLUnitConverter& ) const;
     739             : };
     740             : 
     741           7 : sal_Bool XMLHoriMirrorPropHdl_Impl::importXML(
     742             :         const OUString& rStrImpValue,
     743             :            Any& rValue,
     744             :         const SvXMLUnitConverter& ) const
     745             : {
     746             :     sal_uInt16 nHoriMirror;
     747             :     sal_Bool bRet = SvXMLUnitConverter::convertEnum( nHoriMirror, rStrImpValue,
     748           7 :                                                 pXML_HoriMirror_Enum );
     749             : 
     750           7 :     if( bRet )
     751             :     {
     752           7 :         sal_Bool bTmp = nHoriMirror != 0;
     753           7 :         rValue.setValue( &bTmp, ::getBooleanCppuType() );
     754             :     }
     755             : 
     756           7 :     return bRet;
     757             : }
     758             : 
     759           0 : sal_Bool XMLHoriMirrorPropHdl_Impl::exportXML(
     760             :         OUString&,
     761             :         const Any&,
     762             :         const SvXMLUnitConverter& ) const
     763             : {
     764             :     DBG_ASSERT( !this, "HorMirror properyt shouldn't be exported" );
     765             : 
     766           0 :     return sal_False;
     767             : }
     768             : 
     769         346 : XMLHoriMirrorPropHdl_Impl::~XMLHoriMirrorPropHdl_Impl ()
     770             : {
     771         346 : }
     772             : 
     773             : // ---------------------------------------------------------------------------
     774             : 
     775             : class XMLGrfMirrorPropHdl_Impl : public XMLPropertyHandler
     776             : {
     777             :     const OUString sVal;
     778             :     sal_Bool bHori;
     779             : 
     780             : public:
     781         507 :     XMLGrfMirrorPropHdl_Impl( enum XMLTokenEnum eVal, sal_Bool bH ) :
     782         507 :            sVal( GetXMLToken( eVal ) ),
     783        1014 :         bHori( bH ) {}
     784             :     virtual ~XMLGrfMirrorPropHdl_Impl ();
     785             : 
     786             :     virtual sal_Bool importXML(
     787             :             const ::rtl::OUString& rStrImpValue,
     788             :             ::com::sun::star::uno::Any& rValue,
     789             :             const SvXMLUnitConverter& ) const;
     790             :     virtual sal_Bool exportXML(
     791             :             ::rtl::OUString& rStrExpValue,
     792             :             const ::com::sun::star::uno::Any& rValue,
     793             :             const SvXMLUnitConverter& ) const;
     794             : };
     795             : 
     796           0 : sal_Bool XMLGrfMirrorPropHdl_Impl::importXML(
     797             :         const OUString& rStrImpValue,
     798             :            Any& rValue,
     799             :         const SvXMLUnitConverter& ) const
     800             : {
     801           0 :     sal_Bool bRet = sal_True;
     802           0 :     sal_Bool bVal = sal_False;
     803           0 :     if( ! IsXMLToken( rStrImpValue, XML_NONE ) )
     804             :     {
     805           0 :         bRet = sal_False;
     806           0 :         SvXMLTokenEnumerator aTokenEnum( rStrImpValue );
     807           0 :         OUString aToken;
     808           0 :         while( aTokenEnum.getNextToken( aToken ) )
     809             :         {
     810           0 :             bRet = sal_True;
     811           0 :             if( aToken == sVal ||
     812           0 :                  (bHori && IsXMLToken( aToken, XML_HORIZONTAL ) ) )
     813             :             {
     814           0 :                 bVal = sal_True;
     815           0 :                 break;
     816             :             }
     817           0 :         }
     818             :     }
     819             : 
     820           0 :     if( bRet )
     821           0 :         rValue.setValue( &bVal, ::getBooleanCppuType() );
     822             : 
     823           0 :     return bRet;
     824             : }
     825             : 
     826           0 : sal_Bool XMLGrfMirrorPropHdl_Impl::exportXML(
     827             :         OUString& rStrExpValue,
     828             :         const Any& rValue,
     829             :         const SvXMLUnitConverter& ) const
     830             : {
     831           0 :     if( *(sal_Bool *)rValue.getValue() )
     832             :     {
     833           0 :         if( rStrExpValue.isEmpty() ||
     834           0 :             IsXMLToken( rStrExpValue, XML_NONE ) )
     835             :         {
     836           0 :                rStrExpValue = sVal;
     837             :         }
     838           0 :         else if( bHori &&
     839             :                  /* XML_HORIZONTAL_ON_LEFT_PAGES and XML_HORIZONTAL_ON_RIGHT_PAGES
     840             :                     are replaced by XML_HORIZONTAL_ON_EVEN and XML_HORIZONTAL_ON_ODD.
     841             :                     (#i49139#)
     842             :                  */
     843           0 :                  ( IsXMLToken( rStrExpValue, XML_HORIZONTAL_ON_EVEN ) ||
     844           0 :                    IsXMLToken( rStrExpValue, XML_HORIZONTAL_ON_ODD ) ))
     845             :         {
     846           0 :             rStrExpValue = GetXMLToken( XML_HORIZONTAL );
     847             :         }
     848             :         else
     849             :         {
     850           0 :             OUStringBuffer aOut( rStrExpValue.getLength() + 1 +
     851           0 :                                  sVal.getLength() );
     852           0 :             aOut.append( rStrExpValue );
     853           0 :             aOut.append( (sal_Unicode)' ' );
     854           0 :             aOut.append( sVal );
     855           0 :             rStrExpValue = aOut.makeStringAndClear();
     856             :         }
     857             :     }
     858           0 :     else if( rStrExpValue.isEmpty() )
     859             :     {
     860           0 :            rStrExpValue = GetXMLToken( XML_NONE );
     861             :     }
     862             : 
     863           0 :     return sal_True;
     864             : }
     865             : 
     866        1014 : XMLGrfMirrorPropHdl_Impl::~XMLGrfMirrorPropHdl_Impl()
     867             : {
     868        1014 : }
     869             : 
     870             : // ---------------------------------------------------------------------------
     871             : 
     872             : SvXMLEnumMapEntry const pXML_Emphasize_Enum[] =
     873             : {
     874             :     { XML_NONE,     FontEmphasis::NONE },
     875             :     { XML_DOT,      FontEmphasis::DOT_ABOVE },
     876             :     { XML_CIRCLE,   FontEmphasis::CIRCLE_ABOVE },
     877             :     { XML_DISC,     FontEmphasis::DISK_ABOVE },
     878             :     { XML_ACCENT,   FontEmphasis::ACCENT_ABOVE },
     879             :     { XML_TOKEN_INVALID, 0 }
     880             : };
     881             : class XMLTextEmphasizePropHdl_Impl : public XMLPropertyHandler
     882             : {
     883             : public:
     884         481 :     XMLTextEmphasizePropHdl_Impl() {}
     885             :     virtual ~XMLTextEmphasizePropHdl_Impl();
     886             : 
     887             :     virtual sal_Bool importXML(
     888             :             const ::rtl::OUString& rStrImpValue,
     889             :             ::com::sun::star::uno::Any& rValue,
     890             :             const SvXMLUnitConverter& ) const;
     891             :     virtual sal_Bool exportXML(
     892             :             ::rtl::OUString& rStrExpValue,
     893             :             const ::com::sun::star::uno::Any& rValue,
     894             :             const SvXMLUnitConverter& ) const;
     895             : };
     896             : 
     897           6 : sal_Bool XMLTextEmphasizePropHdl_Impl::importXML(
     898             :         const OUString& rStrImpValue,
     899             :            Any& rValue,
     900             :         const SvXMLUnitConverter& ) const
     901             : {
     902           6 :     sal_Bool bRet = sal_True;
     903           6 :     sal_uInt16 nVal = FontEmphasis::NONE;
     904           6 :     sal_Bool bBelow = sal_False;
     905           6 :     sal_Bool bHasPos = sal_False, bHasType = sal_False;
     906           6 :     OUString aToken;
     907             : 
     908           6 :     SvXMLTokenEnumerator aTokenEnum( rStrImpValue );
     909          18 :     while( aTokenEnum.getNextToken( aToken ) )
     910             :     {
     911           6 :         if( !bHasPos && IsXMLToken( aToken, XML_ABOVE ) )
     912             :         {
     913           0 :             bBelow = sal_False;
     914           0 :             bHasPos = sal_True;
     915             :         }
     916           6 :         else if( !bHasPos && IsXMLToken( aToken, XML_BELOW ) )
     917             :         {
     918           0 :             bBelow = sal_True;
     919           0 :             bHasPos = sal_True;
     920             :         }
     921          12 :         else if( !bHasType &&
     922             :                   SvXMLUnitConverter::convertEnum( nVal, aToken,
     923           6 :                                              pXML_Emphasize_Enum ))
     924             :         {
     925           6 :             bHasType = sal_True;
     926             :         }
     927             :         else
     928             :         {
     929           0 :             bRet = sal_False;
     930           0 :             break;
     931             :         }
     932             :     }
     933             : 
     934           6 :     if( bRet )
     935             :     {
     936           6 :         if( FontEmphasis::NONE != nVal && bBelow )
     937           0 :             nVal += 10;
     938           6 :         rValue <<= (sal_Int16)nVal;
     939             :     }
     940             : 
     941           6 :     return bRet;
     942             : }
     943             : 
     944           0 : sal_Bool XMLTextEmphasizePropHdl_Impl::exportXML(
     945             :         OUString& rStrExpValue,
     946             :         const Any& rValue,
     947             :         const SvXMLUnitConverter& ) const
     948             : {
     949           0 :     OUStringBuffer aOut( 15 );
     950           0 :     sal_Bool bRet = sal_True;
     951           0 :     sal_Int16 nType = sal_Int16();
     952           0 :     if( rValue >>= nType )
     953             :     {
     954           0 :         sal_Bool bBelow = sal_False;
     955           0 :         if( nType > 10 )
     956             :         {
     957           0 :             bBelow = sal_True;
     958           0 :             nType -= 10;
     959             :         }
     960             :         bRet = SvXMLUnitConverter::convertEnum( aOut, nType,
     961             :                                            pXML_Emphasize_Enum,
     962           0 :                                            XML_DOT );
     963           0 :         if( bRet )
     964             :         {
     965           0 :             if( nType != 0 )
     966             :             {
     967           0 :                 enum XMLTokenEnum ePos = bBelow ? XML_BELOW : XML_ABOVE;
     968           0 :                 aOut.append( (sal_Unicode)' ' );
     969           0 :                 aOut.append( GetXMLToken(ePos) );
     970             :             }
     971           0 :             rStrExpValue = aOut.makeStringAndClear();
     972             :         }
     973             :     }
     974             : 
     975           0 :     return bRet;
     976             : }
     977             : 
     978         962 : XMLTextEmphasizePropHdl_Impl::~XMLTextEmphasizePropHdl_Impl()
     979             : {
     980         962 : }
     981             : 
     982             : 
     983             : // ---------------------------------------------------------------------------
     984             : 
     985             : class XMLTextCombineCharPropHdl_Impl : public XMLPropertyHandler
     986             : {
     987             : public:
     988         481 :     XMLTextCombineCharPropHdl_Impl() {}
     989             :     virtual ~XMLTextCombineCharPropHdl_Impl();
     990             : 
     991             :     virtual sal_Bool importXML(
     992             :             const ::rtl::OUString& rStrImpValue,
     993             :             ::com::sun::star::uno::Any& rValue,
     994             :             const SvXMLUnitConverter& ) const;
     995             :     virtual sal_Bool exportXML(
     996             :             ::rtl::OUString& rStrExpValue,
     997             :             const ::com::sun::star::uno::Any& rValue,
     998             :             const SvXMLUnitConverter& ) const;
     999             : };
    1000             : 
    1001           0 : sal_Bool XMLTextCombineCharPropHdl_Impl::importXML(
    1002             :         const OUString& rStrImpValue,
    1003             :            Any& rValue,
    1004             :         const SvXMLUnitConverter& ) const
    1005             : {
    1006           0 :     if( !rStrImpValue.isEmpty() )
    1007           0 :         rValue <<= rStrImpValue.copy( 0, 1 );
    1008             :     else
    1009           0 :         rValue <<= rStrImpValue;
    1010             : 
    1011           0 :     return sal_True;
    1012             : }
    1013             : 
    1014           0 : sal_Bool XMLTextCombineCharPropHdl_Impl::exportXML(
    1015             :         OUString& rStrExpValue,
    1016             :         const Any& rValue,
    1017             :         const SvXMLUnitConverter& ) const
    1018             : {
    1019           0 :     rValue >>= rStrExpValue;
    1020             : 
    1021             :     // #i114107# attribute of type "character": export only if length is 1
    1022           0 :     return (1 == rStrExpValue.getLength())  ? sal_True : sal_False;
    1023             : }
    1024             : 
    1025         962 : XMLTextCombineCharPropHdl_Impl::~XMLTextCombineCharPropHdl_Impl()
    1026             : {
    1027         962 : }
    1028             : 
    1029             : // ---------------------------------------------------------------------------
    1030             : 
    1031             : class XMLTextRelWidthHeightPropHdl_Impl : public XMLPropertyHandler
    1032             : {
    1033             : public:
    1034         161 :     XMLTextRelWidthHeightPropHdl_Impl() {}
    1035             :     virtual ~XMLTextRelWidthHeightPropHdl_Impl();
    1036             : 
    1037             :     virtual sal_Bool importXML(
    1038             :             const ::rtl::OUString& rStrImpValue,
    1039             :             ::com::sun::star::uno::Any& rValue,
    1040             :             const SvXMLUnitConverter& ) const;
    1041             :     virtual sal_Bool exportXML(
    1042             :             ::rtl::OUString& rStrExpValue,
    1043             :             const ::com::sun::star::uno::Any& rValue,
    1044             :             const SvXMLUnitConverter& ) const;
    1045             : };
    1046             : 
    1047           2 : sal_Bool XMLTextRelWidthHeightPropHdl_Impl::importXML(
    1048             :         const OUString& rStrImpValue,
    1049             :            Any& rValue,
    1050             :         const SvXMLUnitConverter& ) const
    1051             : {
    1052             :     sal_Int32 nValue;
    1053           2 :     bool const bRet = ::sax::Converter::convertPercent( nValue, rStrImpValue );
    1054           2 :     if( bRet )
    1055           0 :         rValue <<= (sal_Int16)nValue;
    1056             : 
    1057           2 :     return bRet;
    1058             : }
    1059             : 
    1060           0 : sal_Bool XMLTextRelWidthHeightPropHdl_Impl::exportXML(
    1061             :         OUString& rStrExpValue,
    1062             :         const Any& rValue,
    1063             :         const SvXMLUnitConverter& ) const
    1064             : {
    1065           0 :     sal_Bool bRet = sal_False;
    1066           0 :     sal_Int16 nValue = sal_Int16();
    1067           0 :     if( (rValue >>= nValue) && nValue > 0 )
    1068             :     {
    1069           0 :         OUStringBuffer aOut;
    1070           0 :         ::sax::Converter::convertPercent( aOut, nValue );
    1071           0 :         rStrExpValue = aOut.makeStringAndClear();
    1072             : 
    1073           0 :         bRet = sal_True;
    1074             :     }
    1075             : 
    1076           0 :     return bRet;
    1077             : }
    1078             : 
    1079         322 : XMLTextRelWidthHeightPropHdl_Impl::~XMLTextRelWidthHeightPropHdl_Impl()
    1080             : {
    1081         322 : }
    1082             : 
    1083             : // ---------------------------------------------------------------------------
    1084             : 
    1085             : class XMLTextSyncWidthHeightPropHdl_Impl : public XMLPropertyHandler
    1086             : {
    1087             :     const OUString sValue;
    1088             : 
    1089             : public:
    1090           0 :     XMLTextSyncWidthHeightPropHdl_Impl( enum XMLTokenEnum eValue ) :
    1091           0 :            sValue( GetXMLToken(eValue) )    {}
    1092             :     virtual ~XMLTextSyncWidthHeightPropHdl_Impl();
    1093             : 
    1094             :     virtual sal_Bool importXML(
    1095             :             const ::rtl::OUString& rStrImpValue,
    1096             :             ::com::sun::star::uno::Any& rValue,
    1097             :             const SvXMLUnitConverter& ) const;
    1098             :     virtual sal_Bool exportXML(
    1099             :             ::rtl::OUString& rStrExpValue,
    1100             :             const ::com::sun::star::uno::Any& rValue,
    1101             :             const SvXMLUnitConverter& ) const;
    1102             : };
    1103             : 
    1104           0 : sal_Bool XMLTextSyncWidthHeightPropHdl_Impl::importXML(
    1105             :         const OUString& rStrImpValue,
    1106             :            Any& rValue,
    1107             :         const SvXMLUnitConverter& ) const
    1108             : {
    1109           0 :     sal_Bool bValue = (rStrImpValue == sValue );
    1110           0 :     rValue.setValue( &bValue, ::getBooleanCppuType() );
    1111             : 
    1112           0 :     return sal_True;
    1113             : }
    1114             : 
    1115           0 : sal_Bool XMLTextSyncWidthHeightPropHdl_Impl::exportXML(
    1116             :         OUString& rStrExpValue,
    1117             :         const Any& rValue,
    1118             :         const SvXMLUnitConverter& ) const
    1119             : {
    1120           0 :     sal_Bool bRet = sal_False;
    1121           0 :     if( *(sal_Bool *)rValue.getValue() )
    1122             :     {
    1123           0 :         rStrExpValue = sValue;
    1124           0 :         bRet = sal_True;
    1125             :     }
    1126             : 
    1127           0 :     return bRet;
    1128             : }
    1129             : 
    1130           0 : XMLTextSyncWidthHeightPropHdl_Impl::~XMLTextSyncWidthHeightPropHdl_Impl()
    1131             : {
    1132           0 : }
    1133             : 
    1134             : // ---------------------------------------------------------------------------
    1135             : 
    1136             : class XMLTextRotationAnglePropHdl_Impl : public XMLPropertyHandler
    1137             : {
    1138             : 
    1139             : public:
    1140         481 :     XMLTextRotationAnglePropHdl_Impl()  {}
    1141             :     virtual ~XMLTextRotationAnglePropHdl_Impl();
    1142             : 
    1143             :     virtual sal_Bool importXML(
    1144             :             const ::rtl::OUString& rStrImpValue,
    1145             :             ::com::sun::star::uno::Any& rValue,
    1146             :             const SvXMLUnitConverter& ) const;
    1147             :     virtual sal_Bool exportXML(
    1148             :             ::rtl::OUString& rStrExpValue,
    1149             :             const ::com::sun::star::uno::Any& rValue,
    1150             :             const SvXMLUnitConverter& ) const;
    1151             : };
    1152             : 
    1153           0 : sal_Bool XMLTextRotationAnglePropHdl_Impl::importXML(
    1154             :         const OUString& rStrImpValue,
    1155             :            Any& rValue,
    1156             :         const SvXMLUnitConverter& ) const
    1157             : {
    1158             :     sal_Int32 nValue;
    1159           0 :     bool const bRet = ::sax::Converter::convertNumber( nValue, rStrImpValue );
    1160           0 :     if( bRet )
    1161             :     {
    1162           0 :         nValue = (nValue % 360 );
    1163           0 :         if( nValue < 0 )
    1164           0 :             nValue = 360 + nValue;
    1165             :         sal_Int16 nAngle;
    1166           0 :         if( nValue < 45 || nValue > 315 )
    1167           0 :             nAngle = 0;
    1168           0 :         else if( nValue < 180 )
    1169           0 :             nAngle = 900;
    1170             :         else /* if nValalue <= 315 ) */
    1171           0 :             nAngle = 2700;
    1172           0 :         rValue <<= nAngle;
    1173             :     }
    1174             : 
    1175           0 :     return bRet;
    1176             : }
    1177             : 
    1178           0 : sal_Bool XMLTextRotationAnglePropHdl_Impl::exportXML(
    1179             :         OUString& rStrExpValue,
    1180             :         const Any& rValue,
    1181             :         const SvXMLUnitConverter& ) const
    1182             : {
    1183           0 :     sal_Int16 nAngle = sal_Int16();
    1184           0 :     sal_Bool bRet = ( rValue >>= nAngle );
    1185           0 :     if( bRet )
    1186             :     {
    1187           0 :         OUStringBuffer aOut;
    1188           0 :         ::sax::Converter::convertNumber( aOut, nAngle / 10 );
    1189           0 :         rStrExpValue = aOut.makeStringAndClear();
    1190             :     }
    1191             :     OSL_ENSURE( bRet, "illegal rotation angle" );
    1192             : 
    1193           0 :     return bRet;
    1194             : }
    1195             : 
    1196         962 : XMLTextRotationAnglePropHdl_Impl::~XMLTextRotationAnglePropHdl_Impl()
    1197             : {
    1198         962 : }
    1199             : // ---------------------------------------------------------------------------
    1200             : class XMLNumber8OneBasedHdl : public XMLPropertyHandler
    1201             : {
    1202             : 
    1203             : public:
    1204         352 :     XMLNumber8OneBasedHdl() {}
    1205         704 :     virtual ~XMLNumber8OneBasedHdl() {};
    1206             : 
    1207             :     virtual sal_Bool importXML(
    1208             :             const ::rtl::OUString& rStrImpValue,
    1209             :             ::com::sun::star::uno::Any& rValue,
    1210             :             const SvXMLUnitConverter& ) const;
    1211             :     virtual sal_Bool exportXML(
    1212             :             ::rtl::OUString& rStrExpValue,
    1213             :             const ::com::sun::star::uno::Any& rValue,
    1214             :             const SvXMLUnitConverter& ) const;
    1215             : };
    1216             : 
    1217           0 : sal_Bool XMLNumber8OneBasedHdl::importXML(
    1218             :         const OUString& rStrImpValue,
    1219             :            Any& rValue,
    1220             :         const SvXMLUnitConverter& ) const
    1221             : {
    1222           0 :     sal_Int32 nValue = 0;
    1223           0 :     bool const bRet = ::sax::Converter::convertNumber(nValue, rStrImpValue);
    1224           0 :     if( bRet )
    1225           0 :         rValue <<= static_cast<sal_Int8>( nValue - 1 );
    1226           0 :     return bRet;
    1227             : }
    1228             : 
    1229           0 : sal_Bool XMLNumber8OneBasedHdl::exportXML(
    1230             :         OUString& rStrExpValue,
    1231             :         const Any& rValue,
    1232             :         const SvXMLUnitConverter& ) const
    1233             : {
    1234           0 :     sal_Int8 nValue = sal_Int8();
    1235           0 :     sal_Bool bRet = ( rValue >>= nValue );
    1236           0 :     if( bRet )
    1237             :     {
    1238           0 :         OUStringBuffer aOut;
    1239           0 :         ::sax::Converter::convertNumber( aOut, nValue + 1 );
    1240           0 :         rStrExpValue = aOut.makeStringAndClear();
    1241             :     }
    1242           0 :     return bRet;
    1243             : }
    1244             : // ---------------------------------------------------------------------------
    1245             : class XMLTextPropertyHandlerFactory_Impl
    1246             : {
    1247             : public:
    1248             :     const XMLPropertyHandler *GetPropertyHandler( sal_Int32 nType ) const;
    1249             : 
    1250             :     XMLTextPropertyHandlerFactory_Impl();
    1251             :     ~XMLTextPropertyHandlerFactory_Impl();
    1252             : };
    1253             : 
    1254       11499 : const XMLPropertyHandler *XMLTextPropertyHandlerFactory_Impl::GetPropertyHandler
    1255             :     ( sal_Int32 nType ) const
    1256             : {
    1257       11499 :     const XMLPropertyHandler* pHdl = 0;
    1258       11499 :     switch( nType )
    1259             :     {
    1260             :     case XML_TYPE_TEXT_DROPCAP:
    1261         352 :         pHdl = new XMLDropCapPropHdl_Impl;
    1262         352 :         break;
    1263             :     case XML_TYPE_TEXT_WRAP:
    1264         173 :         pHdl = new XMLWrapPropHdl_Impl;
    1265         173 :         break;
    1266             :     case XML_TYPE_TEXT_PARAGRAPH_ONLY:
    1267         173 :         pHdl = new XMLParagraphOnlyPropHdl_Impl;
    1268         173 :         break;
    1269             :     case XML_TYPE_TEXT_WRAP_OUTSIDE:
    1270         173 :         pHdl = new XMLContourModePropHdl_Impl;
    1271         173 :         break;
    1272             :     case XML_TYPE_TEXT_OPAQUE:
    1273         173 :         pHdl = new XMLOpaquePropHdl_Impl;
    1274         173 :         break;
    1275             :     case XML_TYPE_TEXT_PROTECT_CONTENT:
    1276         169 :         pHdl = new XMLFrameProtectPropHdl_Impl( XML_CONTENT );
    1277         169 :         break;
    1278             :     case XML_TYPE_TEXT_PROTECT_SIZE:
    1279         169 :         pHdl = new XMLFrameProtectPropHdl_Impl( XML_SIZE );
    1280         169 :         break;
    1281             :     case XML_TYPE_TEXT_PROTECT_POSITION:
    1282         169 :         pHdl = new XMLFrameProtectPropHdl_Impl( XML_POSITION );
    1283         169 :         break;
    1284             :     case XML_TYPE_TEXT_ANCHOR_TYPE:
    1285         161 :         pHdl = new XMLAnchorTypePropHdl;
    1286         161 :         break;
    1287             :     case XML_TYPE_TEXT_COLUMNS:
    1288         296 :         pHdl = new XMLTextColumnsPropertyHandler;
    1289         296 :         break;
    1290             :     case XML_TYPE_TEXT_HORIZONTAL_POS:
    1291         173 :         pHdl = new XMLConstantsPropertyHandler( pXML_HoriPos_Enum, XML_TOKEN_INVALID );
    1292         173 :         break;
    1293             :     case XML_TYPE_TEXT_HORIZONTAL_POS_MIRRORED:
    1294         173 :         pHdl = new XMLConstantsPropertyHandler( pXML_HoriPosMirrored_Enum, XML_TOKEN_INVALID );
    1295         173 :         break;
    1296             :     case XML_TYPE_TEXT_HORIZONTAL_REL:
    1297         173 :         pHdl = new XMLConstantsPropertyHandler( pXML_HoriRel_Enum, XML_TOKEN_INVALID );
    1298         173 :         break;
    1299             :     case XML_TYPE_TEXT_HORIZONTAL_REL_FRAME:
    1300         173 :         pHdl = new XMLConstantsPropertyHandler( pXML_HoriRelFrame_Enum, XML_TOKEN_INVALID );
    1301         173 :         break;
    1302             :     case XML_TYPE_TEXT_HORIZONTAL_MIRROR:
    1303         173 :         pHdl = new XMLHoriMirrorPropHdl_Impl;
    1304         173 :         break;
    1305             :     case XML_TYPE_TEXT_VERTICAL_POS:
    1306         173 :         pHdl = new XMLConstantsPropertyHandler( pXML_VertPos_Enum, XML_TOKEN_INVALID );
    1307         173 :         break;
    1308             :     case XML_TYPE_TEXT_VERTICAL_POS_AT_CHAR:
    1309         173 :         pHdl = new XMLConstantsPropertyHandler( pXML_VertPosAtChar_Enum, XML_TOKEN_INVALID );
    1310         173 :         break;
    1311             :     case XML_TYPE_TEXT_VERTICAL_REL:
    1312         173 :         pHdl = new XMLConstantsPropertyHandler( pXML_VertRel_Enum, XML_TOKEN_INVALID );
    1313         173 :         break;
    1314             :     case XML_TYPE_TEXT_VERTICAL_REL_PAGE:
    1315         173 :         pHdl = new XMLConstantsPropertyHandler( pXML_VertRelPage_Enum, XML_TOKEN_INVALID );
    1316         173 :         break;
    1317             :     case XML_TYPE_TEXT_VERTICAL_REL_FRAME:
    1318         173 :         pHdl = new XMLConstantsPropertyHandler( pXML_VertRelFrame_Enum, XML_TOKEN_INVALID );
    1319         173 :         break;
    1320             :     case XML_TYPE_TEXT_VERTICAL_REL_AS_CHAR:
    1321         173 :         pHdl = new XMLConstantsPropertyHandler( pXML_VertRelAsChar_Enum, XML_TOKEN_INVALID );
    1322         173 :         break;
    1323             :     case XML_TYPE_TEXT_MIRROR_VERTICAL:
    1324         169 :         pHdl = new XMLGrfMirrorPropHdl_Impl( XML_VERTICAL, sal_False );
    1325         169 :         break;
    1326             :     case XML_TYPE_TEXT_MIRROR_HORIZONTAL_LEFT:
    1327             :         // XML_HORIZONTAL_ON_LEFT_PAGES is replaced by XML_HORIZONTAL_ON_EVEN. (#i49139#)
    1328         169 :         pHdl = new XMLGrfMirrorPropHdl_Impl( XML_HORIZONTAL_ON_EVEN, sal_True );
    1329         169 :         break;
    1330             :     case XML_TYPE_TEXT_MIRROR_HORIZONTAL_RIGHT:
    1331             :         // XML_HORIZONTAL_ON_RIGHT_PAGES is replaced by XML_HORIZONTAL_ON_ODD. (#i49139#)
    1332         169 :         pHdl = new XMLGrfMirrorPropHdl_Impl( XML_HORIZONTAL_ON_ODD, sal_True );
    1333         169 :         break;
    1334             :     case XML_TYPE_TEXT_CLIP:
    1335         169 :         pHdl = new XMLClipPropertyHandler( sal_False );
    1336         169 :         break;
    1337             :     case XML_TYPE_TEXT_CLIP11:
    1338         169 :         pHdl = new XMLClipPropertyHandler( sal_True );
    1339         169 :         break;
    1340             :     case XML_TYPE_TEXT_EMPHASIZE:
    1341         481 :         pHdl = new XMLTextEmphasizePropHdl_Impl;
    1342         481 :         break;
    1343             :     case XML_TYPE_TEXT_COMBINE:
    1344             :         pHdl = new XMLNamedBoolPropertyHdl( GetXMLToken( XML_LINES ),
    1345         481 :                                             GetXMLToken( XML_NONE ) );
    1346         481 :         break;
    1347             :     case XML_TYPE_TEXT_COMBINE_CHARACTERS:
    1348             :         pHdl = new XMLNamedBoolPropertyHdl( GetXMLToken( XML_LETTERS ),
    1349         129 :                                             GetXMLToken( XML_NONE ) );
    1350         129 :         break;
    1351             :     case XML_TYPE_TEXT_COMBINECHAR:
    1352         481 :         pHdl = new XMLTextCombineCharPropHdl_Impl;
    1353         481 :         break;
    1354             :     case XML_TYPE_TEXT_AUTOSPACE:
    1355             :         pHdl = new XMLNamedBoolPropertyHdl( GetXMLToken( XML_IDEOGRAPH_ALPHA ),
    1356         481 :                                             GetXMLToken( XML_NONE ) );
    1357         481 :         break;
    1358             :     case XML_TYPE_TEXT_PUNCTUATION_WRAP:
    1359             :         pHdl = new XMLNamedBoolPropertyHdl( GetXMLToken( XML_HANGING ),
    1360         481 :                                             GetXMLToken( XML_SIMPLE ) );
    1361         481 :         break;
    1362             :     case XML_TYPE_TEXT_LINE_BREAK:
    1363             :         pHdl = new XMLNamedBoolPropertyHdl( GetXMLToken( XML_STRICT ),
    1364         481 :                                             GetXMLToken( XML_NORMAL ) );
    1365         481 :         break;
    1366             :     case XML_TYPE_TEXT_REL_WIDTH_HEIGHT:
    1367         161 :         pHdl = new XMLTextRelWidthHeightPropHdl_Impl;
    1368         161 :         break;
    1369             :     case XML_TYPE_TEXT_SYNC_WIDTH_HEIGHT:
    1370           0 :         pHdl = new XMLTextSyncWidthHeightPropHdl_Impl( XML_SCALE );
    1371           0 :         break;
    1372             :     case XML_TYPE_TEXT_SYNC_WIDTH_HEIGHT_MIN:
    1373           0 :         pHdl = new XMLTextSyncWidthHeightPropHdl_Impl( XML_SCALE_MIN );
    1374           0 :         break;
    1375             :     case XML_TYPE_TEXT_RUBY_ADJUST:
    1376         127 :         pHdl = new XMLConstantsPropertyHandler( pXML_RubyAdjust_Enum, XML_TOKEN_INVALID );
    1377         127 :         break;
    1378             :     case XML_TYPE_TEXT_FONT_RELIEF:
    1379         481 :         pHdl = new XMLConstantsPropertyHandler( pXML_FontRelief_Enum, XML_TOKEN_INVALID );
    1380         481 :         break;
    1381             :     case XML_TYPE_TEXT_ROTATION_ANGLE:
    1382         481 :         pHdl = new XMLTextRotationAnglePropHdl_Impl;
    1383         481 :         break;
    1384             :     case XML_TYPE_TEXT_ROTATION_SCALE:
    1385             :         pHdl = new XMLNamedBoolPropertyHdl( GetXMLToken( XML_FIXED ),
    1386         481 :                                             GetXMLToken( XML_LINE_HEIGHT ) );
    1387         481 :         break;
    1388             :     case XML_TYPE_TEXT_VERTICAL_ALIGN:
    1389         352 :         pHdl = new XMLConstantsPropertyHandler( pXML_VerticalAlign_Enum, XML_TOKEN_INVALID );
    1390         352 :         break;
    1391             :     case XML_TYPE_TEXT_RUBY_POSITION:
    1392             :         pHdl = new XMLNamedBoolPropertyHdl( ::xmloff::token::XML_ABOVE,
    1393         127 :                                             ::xmloff::token::XML_BELOW );
    1394         127 :         break;
    1395             :     // OD 2004-05-05 #i28701#
    1396             :     case XML_TYPE_WRAP_INFLUENCE_ON_POSITION:
    1397             :         pHdl = new XMLConstantsPropertyHandler( pXML_WrapInfluenceOnPosition_Enum,
    1398         261 :                                                 XML_TOKEN_INVALID );
    1399         261 :         break;
    1400             :     case XML_TYPE_BORDER_MODEL:
    1401             :         pHdl = new XMLNamedBoolPropertyHdl( xmloff::token::XML_COLLAPSING,
    1402          36 :                                             xmloff::token::XML_SEPARATING );
    1403          36 :         break;
    1404             :     case XML_TYPE_TEXT_LINE_MODE:
    1405             :         pHdl = new XMLNamedBoolPropertyHdl(
    1406             :                                     ::xmloff::token::XML_SKIP_WHITE_SPACE,
    1407         481 :                                     ::xmloff::token::XML_CONTINUOUS);
    1408         481 :         break;
    1409             :     case XML_TYPE_TEXT_KEEP:
    1410             :         pHdl = new XMLNamedBoolPropertyHdl(
    1411             :                                     ::xmloff::token::XML_ALWAYS,
    1412         352 :                                     ::xmloff::token::XML_AUTO);
    1413         352 :         break;
    1414             :     case XML_TYPE_TEXT_NKEEP:
    1415             :         pHdl = new XMLNamedBoolPropertyHdl(
    1416             :                                     ::xmloff::token::XML_AUTO,
    1417          36 :                                     ::xmloff::token::XML_ALWAYS);
    1418          36 :         break;
    1419             :     case XML_TYPE_TEXT_NUMBER8_ONE_BASED:
    1420         352 :         pHdl = new XMLNumber8OneBasedHdl();
    1421         352 :         break;
    1422             :     }
    1423             : 
    1424       11499 :     return pHdl;
    1425             : }
    1426             : 
    1427        1068 : XMLTextPropertyHandlerFactory_Impl::XMLTextPropertyHandlerFactory_Impl()
    1428             : {
    1429        1068 : }
    1430             : 
    1431        1068 : XMLTextPropertyHandlerFactory_Impl::~XMLTextPropertyHandlerFactory_Impl()
    1432             : {
    1433        1068 : }
    1434             : 
    1435             : // ----------------------------------------------------------------------------
    1436             : 
    1437        1068 : XMLTextPropertyHandlerFactory::XMLTextPropertyHandlerFactory() :
    1438             :     XMLPropertyHandlerFactory(),
    1439        1068 :    pImpl( new XMLTextPropertyHandlerFactory_Impl )
    1440             : {
    1441        1068 : }
    1442             : 
    1443        3204 : XMLTextPropertyHandlerFactory::~XMLTextPropertyHandlerFactory()
    1444             : {
    1445        1068 :     delete pImpl;
    1446        2136 : }
    1447             : 
    1448       84279 : const XMLPropertyHandler *XMLTextPropertyHandlerFactory::GetPropertyHandler(
    1449             :         sal_Int32 nType ) const
    1450             : {
    1451             :     const XMLPropertyHandler *pHdl =
    1452       84279 :         XMLPropertyHandlerFactory::GetPropertyHandler( nType );
    1453             : 
    1454       84279 :     if( !pHdl )
    1455             :     {
    1456       11499 :         const XMLPropertyHandler *pNewHdl = pImpl->GetPropertyHandler( nType );
    1457             : 
    1458       11499 :         if( pNewHdl )
    1459       11499 :             PutHdlCache( nType, pNewHdl );
    1460             : 
    1461       11499 :         pHdl = pNewHdl;
    1462             :     }
    1463             : 
    1464       84279 :     return pHdl;
    1465             : }
    1466             : 
    1467             : 
    1468             : /* vim:set shiftwidth=4 softtabstop=4 expandtab: */

Generated by: LCOV version 1.10