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

Generated by: LCOV version 1.10