LCOV - code coverage report
Current view: top level - xmloff/source/style - xmlnumi.cxx (source / functions) Hit Total Coverage
Test: libreoffice_filtered.info Lines: 436 574 76.0 %
Date: 2012-08-25 Functions: 47 52 90.4 %
Legend: Lines: hit not hit | Branches: + taken - not taken # not executed Branches: 359 794 45.2 %

           Branch data     Line data    Source code
       1                 :            : /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
       2                 :            : /*************************************************************************
       3                 :            :  *
       4                 :            :  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
       5                 :            :  *
       6                 :            :  * Copyright 2000, 2010 Oracle and/or its affiliates.
       7                 :            :  *
       8                 :            :  * OpenOffice.org - a multi-platform office productivity suite
       9                 :            :  *
      10                 :            :  * This file is part of OpenOffice.org.
      11                 :            :  *
      12                 :            :  * OpenOffice.org is free software: you can redistribute it and/or modify
      13                 :            :  * it under the terms of the GNU Lesser General Public License version 3
      14                 :            :  * only, as published by the Free Software Foundation.
      15                 :            :  *
      16                 :            :  * OpenOffice.org is distributed in the hope that it will be useful,
      17                 :            :  * but WITHOUT ANY WARRANTY; without even the implied warranty of
      18                 :            :  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
      19                 :            :  * GNU Lesser General Public License version 3 for more details
      20                 :            :  * (a copy is included in the LICENSE file that accompanied this code).
      21                 :            :  *
      22                 :            :  * You should have received a copy of the GNU Lesser General Public License
      23                 :            :  * version 3 along with OpenOffice.org.  If not, see
      24                 :            :  * <http://www.openoffice.org/license.html>
      25                 :            :  * for a copy of the LGPLv3 License.
      26                 :            :  *
      27                 :            :  ************************************************************************/
      28                 :            : 
      29                 :            : #include <com/sun/star/beans/PropertyValue.hpp>
      30                 :            : #include <com/sun/star/beans/XPropertySet.hpp>
      31                 :            : #include <com/sun/star/awt/Size.hpp>
      32                 :            : #include <com/sun/star/awt/FontDescriptor.hpp>
      33                 :            : #include <com/sun/star/text/HoriOrientation.hpp>
      34                 :            : #include <com/sun/star/text/VertOrientation.hpp>
      35                 :            : #include <com/sun/star/text/PositionAndSpaceMode.hpp>
      36                 :            : #include <com/sun/star/text/LabelFollow.hpp>
      37                 :            : #include <com/sun/star/container/XNameContainer.hpp>
      38                 :            : #include <com/sun/star/lang/XMultiServiceFactory.hpp>
      39                 :            : #include <com/sun/star/style/XStyle.hpp>
      40                 :            : #include <com/sun/star/io/XOutputStream.hpp>
      41                 :            : 
      42                 :            : #include <rtl/ustrbuf.hxx>
      43                 :            : 
      44                 :            : #include <tools/debug.hxx>
      45                 :            : #include <tools/fontenum.hxx>
      46                 :            : #include <tools/string.hxx>
      47                 :            : 
      48                 :            : #include <sax/tools/converter.hxx>
      49                 :            : 
      50                 :            : #include <xmloff/xmltkmap.hxx>
      51                 :            : #include <xmloff/nmspmap.hxx>
      52                 :            : #include "xmloff/xmlnmspe.hxx"
      53                 :            : #include <xmloff/xmlimp.hxx>
      54                 :            : #include <xmloff/XMLBase64ImportContext.hxx>
      55                 :            : #include <xmloff/xmltoken.hxx>
      56                 :            : 
      57                 :            : #include <xmloff/i18nmap.hxx>
      58                 :            : #include <xmloff/xmluconv.hxx>
      59                 :            : #include "fonthdl.hxx"
      60                 :            : #include <xmloff/XMLFontStylesContext.hxx>
      61                 :            : #include <xmloff/families.hxx>
      62                 :            : #include <xmloff/maptype.hxx>
      63                 :            : 
      64                 :            : #include <xmloff/xmlnumi.hxx>
      65                 :            : 
      66                 :            : 
      67                 :            : using ::rtl::OUString;
      68                 :            : using ::rtl::OUStringBuffer;
      69                 :            : 
      70                 :            : using namespace ::com::sun::star;
      71                 :            : using namespace ::com::sun::star::uno;
      72                 :            : using namespace ::com::sun::star::style;
      73                 :            : using namespace ::com::sun::star::text;
      74                 :            : using namespace ::com::sun::star::beans;
      75                 :            : using namespace ::com::sun::star::container;
      76                 :            : using namespace ::com::sun::star::lang;
      77                 :            : using namespace ::com::sun::star::frame;
      78                 :            : using namespace ::xmloff::token;
      79                 :            : using namespace ::com::sun::star::io;
      80                 :            : 
      81                 :            : using rtl::OUString;
      82                 :            : using rtl::OUStringBuffer;
      83                 :            : 
      84                 :            : static sal_Char const XML_UNO_NAME_NRULE_SYMBOL_TEXT_DISTANCE[] =
      85                 :            :         "SymbolTextDistance";
      86                 :            : static sal_Char const XML_UNO_NAME_NRULE_PARENT_NUMBERING[] =
      87                 :            :         "ParentNumbering";
      88                 :            : static sal_Char const XML_UNO_NAME_NRULE_CHAR_STYLE_NAME[] =
      89                 :            :         "CharStyleName";
      90                 :            : static sal_Char const XML_UNO_NAME_NRULE_BULLET_CHAR[] ="BulletChar";
      91                 :            : static sal_Char const XML_UNO_NAME_NRULE_BULLET_RELSIZE[] = "BulletRelSize";
      92                 :            : static sal_Char const XML_UNO_NAME_NRULE_GRAPHIC_SIZE[] =
      93                 :            :         "GraphicSize";
      94                 :            : static sal_Char const XML_UNO_NAME_NRULE_VERT_ORIENT[] ="VertOrient";
      95                 :            : 
      96                 :            : static sal_Char const XML_UNO_NAME_NRULE_NUMBERINGTYPE[] = "NumberingType";
      97                 :            : static sal_Char const XML_UNO_NAME_NRULE_PREFIX[] = "Prefix";
      98                 :            : static sal_Char const XML_UNO_NAME_NRULE_SUFFIX[] = "Suffix";
      99                 :            : static sal_Char const XML_UNO_NAME_NRULE_ADJUST[] = "Adjust";
     100                 :            : static sal_Char const XML_UNO_NAME_NRULE_LEFT_MARGIN[] = "LeftMargin";
     101                 :            : static sal_Char const XML_UNO_NAME_NRULE_FIRST_LINE_OFFSET[] =
     102                 :            :     "FirstLineOffset";
     103                 :            : static sal_Char const XML_UNO_NAME_NRULE_BULLET_FONT[] = "BulletFont";
     104                 :            : static sal_Char const XML_UNO_NAME_NRULE_GRAPHICURL[] = "GraphicURL";
     105                 :            : static sal_Char const XML_UNO_NAME_NRULE_START_WITH[] = "StartWith";
     106                 :            : static sal_Char const XML_UNO_NAME_NRULE_BULLET_COLOR[] = "BulletColor";
     107                 :            : static sal_Char const XML_UNO_NAME_NRULE_POSITION_AND_SPACE_MODE[] = "PositionAndSpaceMode";
     108                 :            : static sal_Char const XML_UNO_NAME_NRULE_LABEL_FOLLOWED_BY[] = "LabelFollowedBy";
     109                 :            : static sal_Char const XML_UNO_NAME_NRULE_LISTTAB_STOP_POSITION[] = "ListtabStopPosition";
     110                 :            : static sal_Char const XML_UNO_NAME_NRULE_FIRST_LINE_INDENT[] = "FirstLineIndent";
     111                 :            : static sal_Char const XML_UNO_NAME_NRULE_INDENT_AT[] = "IndentAt";
     112                 :            : 
     113                 :            : // ---------------------------------------------------------------------
     114                 :            : 
     115                 :            : class SvxXMLListLevelStyleContext_Impl;
     116                 :            : 
     117                 :            : class SvxXMLListLevelStyleAttrContext_Impl : public SvXMLImportContext
     118                 :            : {
     119                 :            :     SvxXMLListLevelStyleContext_Impl&   rListLevel;
     120                 :            : 
     121                 :            : public:
     122                 :            : 
     123                 :            :     SvxXMLListLevelStyleAttrContext_Impl(
     124                 :            :             SvXMLImport& rImport, sal_uInt16 nPrfx,
     125                 :            :              const OUString& rLName,
     126                 :            :               const Reference< xml::sax::XAttributeList >& xAttrList,
     127                 :            :             SvxXMLListLevelStyleContext_Impl& rLLevel   );
     128                 :            :     virtual ~SvxXMLListLevelStyleAttrContext_Impl();
     129                 :            : 
     130                 :            :     virtual SvXMLImportContext *CreateChildContext(
     131                 :            :             sal_uInt16 nPrefix, const OUString& rLocalName,
     132                 :            :             const Reference< xml::sax::XAttributeList > & xAttrList );
     133                 :            : };
     134                 :            : 
     135                 :            : // ---------------------------------------------------------------------
     136                 :            : 
     137                 :            : class SvxXMLListLevelStyleLabelAlignmentAttrContext_Impl : public SvXMLImportContext
     138                 :            : {
     139                 :            :     SvxXMLListLevelStyleContext_Impl&   rListLevel;
     140                 :            : 
     141                 :            : public:
     142                 :            : 
     143                 :            :     SvxXMLListLevelStyleLabelAlignmentAttrContext_Impl(
     144                 :            :             SvXMLImport& rImport, sal_uInt16 nPrfx,
     145                 :            :             const OUString& rLName,
     146                 :            :             const Reference< xml::sax::XAttributeList >& xAttrList,
     147                 :            :             SvxXMLListLevelStyleContext_Impl& rLLevel   );
     148                 :            :     virtual ~SvxXMLListLevelStyleLabelAlignmentAttrContext_Impl();
     149                 :            : };
     150                 :            : 
     151                 :            : // ---------------------------------------------------------------------
     152                 :            : 
     153                 :            : enum SvxXMLTextListLevelStyleAttrTokens
     154                 :            : {
     155                 :            :     XML_TOK_TEXT_LEVEL_ATTR_LEVEL,
     156                 :            :     XML_TOK_TEXT_LEVEL_ATTR_STYLE_NAME,
     157                 :            :     XML_TOK_TEXT_LEVEL_ATTR_BULLET_CHAR,
     158                 :            :     XML_TOK_TEXT_LEVEL_ATTR_HREF,
     159                 :            :     XML_TOK_TEXT_LEVEL_ATTR_TYPE,
     160                 :            :     XML_TOK_TEXT_LEVEL_ATTR_SHOW,
     161                 :            :     XML_TOK_TEXT_LEVEL_ATTR_ACTUATE,
     162                 :            :     XML_TOK_TEXT_LEVEL_ATTR_NUM_FORMAT,
     163                 :            :     XML_TOK_TEXT_LEVEL_ATTR_NUM_PREFIX,
     164                 :            :     XML_TOK_TEXT_LEVEL_ATTR_NUM_SUFFIX,
     165                 :            :     XML_TOK_TEXT_LEVEL_ATTR_NUM_LETTER_SYNC,
     166                 :            :     XML_TOK_TEXT_LEVEL_ATTR_START_VALUE,
     167                 :            :     XML_TOK_TEXT_LEVEL_ATTR_DISPLAY_LEVELS,
     168                 :            : 
     169                 :            :     XML_TOK_TEXT_LEVEL_ATTR_END=XML_TOK_UNKNOWN
     170                 :            : };
     171                 :            : 
     172                 :       1450 : const SvXMLTokenMapEntry* lcl_getLevelAttrTokenMap()
     173                 :            : {
     174                 :            :     static SvXMLTokenMapEntry aLevelAttrTokenMap[] =
     175                 :            :     {
     176                 :            :         { XML_NAMESPACE_TEXT, XML_LEVEL, XML_TOK_TEXT_LEVEL_ATTR_LEVEL },
     177                 :            :         { XML_NAMESPACE_TEXT, XML_STYLE_NAME, XML_TOK_TEXT_LEVEL_ATTR_STYLE_NAME },
     178                 :            :         { XML_NAMESPACE_TEXT, XML_BULLET_CHAR, XML_TOK_TEXT_LEVEL_ATTR_BULLET_CHAR },
     179                 :            :         { XML_NAMESPACE_XLINK, XML_HREF, XML_TOK_TEXT_LEVEL_ATTR_HREF },
     180                 :            :         { XML_NAMESPACE_XLINK, XML_TYPE, XML_TOK_TEXT_LEVEL_ATTR_TYPE },
     181                 :            :         { XML_NAMESPACE_XLINK, XML_SHOW, XML_TOK_TEXT_LEVEL_ATTR_SHOW },
     182                 :            :         { XML_NAMESPACE_XLINK, XML_ACTUATE, XML_TOK_TEXT_LEVEL_ATTR_ACTUATE },
     183                 :            : 
     184                 :            :         { XML_NAMESPACE_STYLE, XML_NUM_FORMAT, XML_TOK_TEXT_LEVEL_ATTR_NUM_FORMAT },
     185                 :            :         { XML_NAMESPACE_STYLE, XML_NUM_PREFIX, XML_TOK_TEXT_LEVEL_ATTR_NUM_PREFIX },
     186                 :            :         { XML_NAMESPACE_STYLE, XML_NUM_SUFFIX, XML_TOK_TEXT_LEVEL_ATTR_NUM_SUFFIX },
     187                 :            :         { XML_NAMESPACE_STYLE, XML_NUM_LETTER_SYNC, XML_TOK_TEXT_LEVEL_ATTR_NUM_LETTER_SYNC },
     188                 :            :         { XML_NAMESPACE_TEXT, XML_START_VALUE, XML_TOK_TEXT_LEVEL_ATTR_START_VALUE },
     189                 :            :         { XML_NAMESPACE_TEXT, XML_DISPLAY_LEVELS, XML_TOK_TEXT_LEVEL_ATTR_DISPLAY_LEVELS },
     190                 :            : 
     191                 :            :         XML_TOKEN_MAP_END
     192                 :            :     };
     193                 :       1450 :     return aLevelAttrTokenMap;
     194                 :            : }
     195                 :            : 
     196                 :            : class SvxXMLListLevelStyleContext_Impl : public SvXMLImportContext
     197                 :            : {
     198                 :            :     friend class SvxXMLListLevelStyleAttrContext_Impl;
     199                 :            :     const OUString      sStarBats;
     200                 :            :     const OUString      sStarMath;
     201                 :            : 
     202                 :            :     OUString            sPrefix;
     203                 :            :     OUString            sSuffix;
     204                 :            :     OUString            sTextStyleName;
     205                 :            :     OUString            sNumFormat;
     206                 :            :     OUString            sNumLetterSync;
     207                 :            :     OUString            sBulletFontName;
     208                 :            :     OUString            sBulletFontStyleName;
     209                 :            :     OUString            sImageURL;
     210                 :            : 
     211                 :            :     Reference < XOutputStream > xBase64Stream;
     212                 :            : 
     213                 :            :     sal_Int32           nLevel;
     214                 :            :     sal_Int32           nSpaceBefore;
     215                 :            :     sal_Int32           nMinLabelWidth;
     216                 :            :     sal_Int32           nMinLabelDist;
     217                 :            :     sal_Int32           nImageWidth;
     218                 :            :     sal_Int32           nImageHeight;
     219                 :            :     sal_Int16           nNumStartValue;
     220                 :            :     sal_Int16           nNumDisplayLevels;
     221                 :            : 
     222                 :            :     sal_Int16           eAdjust;
     223                 :            :     sal_Int16           eBulletFontFamily;
     224                 :            :     sal_Int16           eBulletFontPitch;
     225                 :            :     rtl_TextEncoding    eBulletFontEncoding;
     226                 :            :     sal_Int16           eImageVertOrient;
     227                 :            : 
     228                 :            :     sal_Unicode         cBullet;
     229                 :            : 
     230                 :            :     sal_Int16           nRelSize;
     231                 :            :     sal_Int32           m_nColor;
     232                 :            : 
     233                 :            :     sal_Int16           ePosAndSpaceMode;
     234                 :            :     sal_Int16           eLabelFollowedBy;
     235                 :            :     sal_Int32           nListtabStopPosition;
     236                 :            :     sal_Int32           nFirstLineIndent;
     237                 :            :     sal_Int32           nIndentAt;
     238                 :            : 
     239                 :            :     sal_Bool            bBullet : 1;
     240                 :            :     sal_Bool            bImage : 1;
     241                 :            :     sal_Bool            bNum : 1;
     242                 :            :     sal_Bool            bHasColor : 1;
     243                 :            : 
     244                 :        460 :     void SetRelSize( sal_Int16 nRel ) { nRelSize = nRel; }
     245                 :        460 :     void SetColor( sal_Int32 nColor )
     246                 :        460 :         { m_nColor = nColor; bHasColor = sal_True; }
     247                 :        479 :     void SetSpaceBefore( sal_Int32 nSet ) { nSpaceBefore = nSet; }
     248                 :        499 :     void SetMinLabelWidth( sal_Int32 nSet ) { nMinLabelWidth = nSet; }
     249                 :         50 :     void SetMinLabelDist( sal_Int32 nSet ) { nMinLabelDist = nSet; }
     250                 :          9 :     void SetAdjust( sal_Int16 eSet ) { eAdjust = eSet; }
     251                 :            : 
     252                 :        522 :     void SetBulletFontName( const OUString& rSet ) { sBulletFontName = rSet; }
     253                 :         32 :     void SetBulletFontStyleName( const OUString& rSet )
     254                 :         32 :          { sBulletFontStyleName = rSet; }
     255                 :         32 :     void SetBulletFontFamily( sal_Int16 eSet ) { eBulletFontFamily = eSet; }
     256                 :         32 :     void SetBulletFontPitch( sal_Int16 eSet ) { eBulletFontPitch = eSet; }
     257                 :         32 :     void SetBulletFontEncoding( rtl_TextEncoding eSet )
     258                 :         32 :          { eBulletFontEncoding = eSet; }
     259                 :            : 
     260                 :          0 :     void SetImageWidth( sal_Int32 nSet ) { nImageWidth = nSet; }
     261                 :          0 :     void SetImageHeight( sal_Int32 nSet ) { nImageHeight = nSet; }
     262                 :       1812 :     void SetImageVertOrient( sal_Int16 eSet )
     263                 :       1812 :          { eImageVertOrient = eSet; }
     264                 :            : 
     265                 :            : public:
     266                 :            : 
     267                 :            :     SvxXMLListLevelStyleContext_Impl(
     268                 :            :             SvXMLImport& rImport, sal_uInt16 nPrfx,
     269                 :            :             const OUString& rLName,
     270                 :            :             const Reference< xml::sax::XAttributeList > & xAttrList );
     271                 :            :     virtual ~SvxXMLListLevelStyleContext_Impl();
     272                 :            : 
     273                 :            :     virtual SvXMLImportContext *CreateChildContext(
     274                 :            :             sal_uInt16 nPrefix, const OUString& rLocalName,
     275                 :            :             const Reference< xml::sax::XAttributeList > & xAttrList );
     276                 :            : 
     277                 :       1310 :     sal_Int32 GetLevel() const { return nLevel; }
     278                 :            :     Sequence<beans::PropertyValue> GetProperties(
     279                 :            :             const SvI18NMap *pI18NMap=0 );
     280                 :            : 
     281                 :        860 :     inline void SetPosAndSpaceMode( sal_Int16 eValue )
     282                 :            :     {
     283                 :        860 :         ePosAndSpaceMode = eValue;
     284                 :        860 :     }
     285                 :        860 :     inline void SetLabelFollowedBy( sal_Int16 eValue )
     286                 :            :     {
     287                 :        860 :         eLabelFollowedBy = eValue;
     288                 :        860 :     }
     289                 :        644 :     inline void SetListtabStopPosition( sal_Int32 nValue )
     290                 :            :     {
     291                 :        644 :         nListtabStopPosition = nValue;
     292                 :        644 :     }
     293                 :        833 :     inline void SetFirstLineIndent( sal_Int32 nValue )
     294                 :            :     {
     295                 :        833 :         nFirstLineIndent = nValue;
     296                 :        833 :     }
     297                 :        857 :     inline void SetIndentAt( sal_Int32 nValue )
     298                 :            :     {
     299                 :        857 :         nIndentAt = nValue;
     300                 :        857 :     }
     301                 :            : };
     302                 :            : 
     303                 :       1450 : SvxXMLListLevelStyleContext_Impl::SvxXMLListLevelStyleContext_Impl(
     304                 :            :         SvXMLImport& rImport, sal_uInt16 nPrfx,
     305                 :            :         const OUString& rLName,
     306                 :            :         const Reference< xml::sax::XAttributeList > & xAttrList )
     307                 :            : 
     308                 :            : :   SvXMLImportContext( rImport, nPrfx, rLName )
     309                 :            : ,   sStarBats( "StarBats"  )
     310                 :            : ,   sStarMath( "StarMath"  )
     311                 :            : ,   sNumFormat( OUString("1") )
     312                 :            : ,   nLevel( -1L )
     313                 :            : ,   nSpaceBefore( 0L )
     314                 :            : ,   nMinLabelWidth( 0L )
     315                 :            : ,   nMinLabelDist( 0L )
     316                 :            : ,   nImageWidth( 0L )
     317                 :            : ,   nImageHeight( 0L )
     318                 :            : ,   nNumStartValue( 1 )
     319                 :            : ,   nNumDisplayLevels( 1 )
     320                 :            : ,   eAdjust( HoriOrientation::LEFT )
     321                 :            : ,   eBulletFontFamily( FAMILY_DONTKNOW )
     322                 :            : ,   eBulletFontPitch( PITCH_DONTKNOW )
     323                 :            : ,   eBulletFontEncoding( RTL_TEXTENCODING_DONTKNOW )
     324                 :            : ,   eImageVertOrient(0)
     325                 :            : ,   cBullet( 0 )
     326                 :            : ,   nRelSize(0)
     327                 :            : ,   m_nColor(0)
     328                 :            : ,   ePosAndSpaceMode( PositionAndSpaceMode::LABEL_WIDTH_AND_POSITION )
     329                 :            : ,   eLabelFollowedBy( LabelFollow::LISTTAB )
     330                 :            : ,   nListtabStopPosition( 0 )
     331                 :            : ,   nFirstLineIndent( 0 )
     332                 :            : ,   nIndentAt( 0 )
     333                 :            : ,   bBullet( sal_False )
     334                 :            : ,   bImage( sal_False )
     335                 :            : ,   bNum( sal_False )
     336                 :       1450 : ,   bHasColor( sal_False )
     337                 :            : {
     338 [ +  + ][ +  + ]:       2602 :     if( IsXMLToken( rLName, XML_LIST_LEVEL_STYLE_NUMBER ) ||
         [ +  + ][ +  - ]
     339         [ +  - ]:       1152 :         IsXMLToken( rLName, XML_OUTLINE_LEVEL_STYLE )        )
     340                 :        928 :         bNum = sal_True;
     341 [ +  - ][ +  - ]:        522 :     else if( IsXMLToken( rLName, XML_LIST_LEVEL_STYLE_BULLET ) )
     342                 :        522 :         bBullet = sal_True;
     343 [ #  # ][ #  # ]:          0 :     else if( IsXMLToken( rLName, XML_LIST_LEVEL_STYLE_IMAGE ) )
     344                 :          0 :         bImage = sal_True;
     345                 :            : 
     346         [ +  - ]:       1450 :     SvXMLTokenMap aTokenMap( lcl_getLevelAttrTokenMap() );
     347 [ +  - ][ +  - ]:       1450 :     sal_Int16 nAttrCount = xAttrList.is() ? xAttrList->getLength() : 0;
                 [ +  - ]
     348         [ +  + ]:       4863 :     for( sal_Int16 i=0; i < nAttrCount; i++ )
     349                 :            :     {
     350 [ +  - ][ +  - ]:       3413 :         const OUString& rAttrName = xAttrList->getNameByIndex( i );
     351                 :       3413 :         OUString aLocalName;
     352                 :            :         sal_uInt16 nPrefix =
     353                 :       3413 :             GetImport().GetNamespaceMap().GetKeyByAttrName( rAttrName,
     354         [ +  - ]:       3413 :                                                             &aLocalName );
     355 [ +  - ][ +  - ]:       3413 :         const OUString& rValue = xAttrList->getValueByIndex( i );
     356                 :            : 
     357 [ +  - ][ +  +  :       3413 :         switch( aTokenMap.Get( nPrefix, aLocalName ) )
          +  -  -  +  +  
             +  -  -  +  
                      - ]
     358                 :            :         {
     359                 :            :         case XML_TOK_TEXT_LEVEL_ATTR_LEVEL:
     360                 :       1450 :             nLevel = rValue.toInt32();
     361         [ +  - ]:       1450 :             if( nLevel >= 1L )
     362                 :       1450 :                 nLevel--;
     363                 :            :             else
     364                 :          0 :                 nLevel = 0;
     365                 :       1450 :             break;
     366                 :            :         case XML_TOK_TEXT_LEVEL_ATTR_STYLE_NAME:
     367                 :        120 :             sTextStyleName = rValue;
     368                 :        120 :             break;
     369                 :            :         case XML_TOK_TEXT_LEVEL_ATTR_BULLET_CHAR:
     370                 :        522 :             cBullet = rValue[0];
     371                 :        522 :             break;
     372                 :            :         case XML_TOK_TEXT_LEVEL_ATTR_HREF:
     373         [ #  # ]:          0 :             if( bImage )
     374                 :          0 :                 sImageURL = rValue;
     375                 :          0 :             break;
     376                 :            :         case XML_TOK_TEXT_LEVEL_ATTR_TYPE:
     377                 :            :         case XML_TOK_TEXT_LEVEL_ATTR_SHOW:
     378                 :            :         case XML_TOK_TEXT_LEVEL_ATTR_ACTUATE:
     379                 :            :             // This properties will be ignored
     380                 :          0 :             break;
     381                 :            :         case XML_TOK_TEXT_LEVEL_ATTR_NUM_FORMAT:
     382         [ +  - ]:        928 :             if( bNum )
     383                 :        928 :                 sNumFormat = rValue;
     384                 :        928 :             break;
     385                 :            :         case XML_TOK_TEXT_LEVEL_ATTR_NUM_PREFIX:
     386                 :         21 :             sPrefix = rValue;
     387                 :         21 :             break;
     388                 :            :         case XML_TOK_TEXT_LEVEL_ATTR_NUM_SUFFIX:
     389                 :        276 :             sSuffix = rValue;
     390                 :        276 :             break;
     391                 :            :         case XML_TOK_TEXT_LEVEL_ATTR_NUM_LETTER_SYNC:
     392         [ #  # ]:          0 :             if( bNum )
     393                 :          0 :                 sNumLetterSync = rValue;
     394                 :          0 :             break;
     395                 :            :         case XML_TOK_TEXT_LEVEL_ATTR_START_VALUE:
     396         [ #  # ]:          0 :             if( bNum )
     397                 :            :             {
     398                 :          0 :                 sal_Int32 nTmp = rValue.toInt32();
     399                 :            :                 nNumStartValue =
     400                 :            :                     (nTmp < 0L) ? 1 : ( (nTmp>SHRT_MAX) ? SHRT_MAX
     401 [ #  # ][ #  # ]:          0 :                                                         : (sal_Int16)nTmp );
     402                 :            :             }
     403                 :          0 :             break;
     404                 :            :         case XML_TOK_TEXT_LEVEL_ATTR_DISPLAY_LEVELS:
     405         [ +  - ]:         96 :             if( bNum )
     406                 :            :             {
     407                 :         96 :                 sal_Int32 nTmp = rValue.toInt32();
     408                 :            :                 nNumDisplayLevels =
     409                 :            :                     (nTmp < 1L) ? 1 : ( (nTmp>SHRT_MAX) ? SHRT_MAX
     410 [ +  - ][ +  - ]:         96 :                                                         : (sal_Int16)nTmp );
     411                 :            :             }
     412                 :         96 :             break;
     413                 :            :         }
     414         [ +  - ]:       4863 :     }
     415                 :       1450 : }
     416                 :            : 
     417                 :       1450 : SvxXMLListLevelStyleContext_Impl::~SvxXMLListLevelStyleContext_Impl()
     418                 :            : {
     419         [ -  + ]:       2900 : }
     420                 :            : 
     421                 :       1812 : SvXMLImportContext *SvxXMLListLevelStyleContext_Impl::CreateChildContext(
     422                 :            :         sal_uInt16 nPrefix, const OUString& rLocalName,
     423                 :            :         const Reference< xml::sax::XAttributeList > & xAttrList )
     424                 :            : {
     425                 :       1812 :     SvXMLImportContext *pContext = 0;
     426   [ +  -  +  +  :       4006 :     if( XML_NAMESPACE_STYLE == nPrefix &&
           +  - ][ +  - ]
     427                 :       1812 :         ( IsXMLToken( rLocalName, XML_LIST_LEVEL_PROPERTIES ) ||
     428                 :        382 :              IsXMLToken( rLocalName, XML_TEXT_PROPERTIES ) ) )
     429                 :            :     {
     430                 :       1812 :         pContext = new SvxXMLListLevelStyleAttrContext_Impl( GetImport(),
     431                 :            :                                                              nPrefix,
     432                 :            :                                                              rLocalName,
     433                 :            :                                                                xAttrList,
     434         [ +  - ]:       1812 :                                                              *this );
     435                 :            :     }
     436   [ #  #  #  # ]:          0 :     else if( (XML_NAMESPACE_OFFICE == nPrefix) && xmloff::token::IsXMLToken( rLocalName,
                 [ #  # ]
     437                 :          0 :                                         xmloff::token::XML_BINARY_DATA ) )
     438                 :            :     {
     439 [ #  # ][ #  # ]:          0 :         if( bImage && sImageURL.isEmpty() && !xBase64Stream.is() )
         [ #  # ][ #  # ]
     440                 :            :         {
     441         [ #  # ]:          0 :             xBase64Stream = GetImport().GetStreamForGraphicObjectURLFromBase64();
     442         [ #  # ]:          0 :             if( xBase64Stream.is() )
     443                 :          0 :                 pContext = new XMLBase64ImportContext( GetImport(), nPrefix,
     444                 :            :                                                     rLocalName, xAttrList,
     445         [ #  # ]:          0 :                                                     xBase64Stream );
     446                 :            :         }
     447                 :            :     }
     448         [ -  + ]:       1812 :     if( !pContext )
     449                 :            :     {
     450         [ #  # ]:          0 :         pContext = new SvXMLImportContext( GetImport(), nPrefix, rLocalName );
     451                 :            :     }
     452                 :            : 
     453                 :       1812 :     return pContext;
     454                 :            : }
     455                 :            : 
     456                 :       1310 : Sequence<beans::PropertyValue> SvxXMLListLevelStyleContext_Impl::GetProperties(
     457                 :            :         const SvI18NMap *pI18NMap )
     458                 :            : {
     459                 :            :     sal_Int16 eType;
     460                 :            : 
     461                 :       1310 :     sal_Int32 nCount = 0;
     462         [ +  + ]:       1310 :     if( bBullet )
     463                 :            :     {
     464                 :        382 :         eType = NumberingType::CHAR_SPECIAL;
     465         [ +  - ]:        382 :         nCount = cBullet ? 15 : 14;
     466                 :            :     }
     467         [ -  + ]:       1310 :     if( bImage )
     468                 :            :     {
     469                 :          0 :         eType = NumberingType::BITMAP;
     470                 :          0 :         nCount = 15;
     471                 :            : 
     472 [ #  # ][ #  # ]:          0 :         if( !sImageURL.isEmpty() || xBase64Stream.is() )
                 [ #  # ]
     473                 :          0 :             nCount++;
     474                 :            :     }
     475         [ +  + ]:       1310 :     if( bNum )
     476                 :            :     {
     477                 :        928 :         eType = NumberingType::ARABIC;
     478                 :        928 :         GetImport().GetMM100UnitConverter().convertNumFormat(
     479         [ +  - ]:        928 :                 eType, sNumFormat, sNumLetterSync, sal_True );
     480                 :        928 :         nCount = 15;
     481                 :            :     }
     482                 :            : 
     483 [ +  + ][ +  - ]:       1310 :     if( ( bBullet || bNum ) && nRelSize )
                 [ +  + ]
     484                 :        320 :         nCount++;
     485                 :            : 
     486 [ +  - ][ +  + ]:       1310 :     if( !bImage && bHasColor )
     487                 :            :     {
     488                 :        320 :         nCount++;
     489                 :            :     }
     490                 :            : 
     491 [ +  + ][ +  + ]:       1310 :     if (bBullet && !sSuffix.isEmpty())
                 [ +  + ]
     492                 :            :     {
     493         [ +  - ]:         32 :         sal_uInt16 const nVersion(GetImport().getGeneratorVersion());
     494                 :            :         sal_Int32 nUPD;
     495                 :            :         sal_Int32 nBuildId;
     496 [ +  - ][ +  - ]:         32 :         if (GetImport().getBuildIds(nUPD, nBuildId)
         [ +  - ][ -  + ]
         [ #  # ][ #  # ]
         [ #  # ][ #  # ]
         [ #  # ][ +  - ]
     497                 :            :             && (   (SvXMLImport::OOo_1x == nVersion)
     498                 :            :                 || (SvXMLImport::OOo_2x == nVersion)
     499                 :            :                 || (310 == nUPD) || (320 == nUPD) || (330 == nUPD)
     500                 :            :                 || ((300 == nUPD) && (nBuildId <= 9573))))
     501                 :            :         {
     502                 :            :             // #i93908# OOo < 3.4 wrote a bogus suffix for bullet chars
     503                 :         32 :             sSuffix = ::rtl::OUString(); // clear it
     504                 :            :         }
     505                 :            :     }
     506                 :            : 
     507         [ +  - ]:       1310 :     Sequence<beans::PropertyValue> aPropSeq( nCount );
     508         [ +  - ]:       1310 :     if( nCount > 0 )
     509                 :            :     {
     510         [ +  - ]:       1310 :         beans::PropertyValue *pProps = aPropSeq.getArray();
     511                 :       1310 :         sal_Int32 nPos = 0;
     512                 :       1310 :         pProps[nPos].Name =
     513                 :       1310 :                 OUString(XML_UNO_NAME_NRULE_NUMBERINGTYPE );
     514         [ +  - ]:       1310 :         pProps[nPos++].Value <<= (sal_Int16)eType ;
     515                 :            : 
     516                 :       1310 :         pProps[nPos].Name = OUString(XML_UNO_NAME_NRULE_PREFIX );
     517         [ +  - ]:       1310 :         pProps[nPos++].Value <<= sPrefix;
     518                 :            : 
     519                 :       1310 :         pProps[nPos].Name = OUString(XML_UNO_NAME_NRULE_SUFFIX );
     520         [ +  - ]:       1310 :         pProps[nPos++].Value <<= sSuffix;
     521                 :            : 
     522                 :       1310 :         pProps[nPos].Name = OUString(XML_UNO_NAME_NRULE_ADJUST );
     523         [ +  - ]:       1310 :         pProps[nPos++].Value <<= eAdjust;
     524                 :            : 
     525                 :       1310 :         sal_Int32 nLeftMargin = nSpaceBefore + nMinLabelWidth;
     526                 :       1310 :         pProps[nPos].Name =
     527                 :       1310 :             OUString(XML_UNO_NAME_NRULE_LEFT_MARGIN );
     528         [ +  - ]:       1310 :         pProps[nPos++].Value <<= (sal_Int32)nLeftMargin;
     529                 :            : 
     530                 :       1310 :         sal_Int32 nFirstLineOffset = -nMinLabelWidth;
     531                 :            : 
     532                 :       1310 :         pProps[nPos].Name =
     533                 :       1310 :                 OUString(XML_UNO_NAME_NRULE_FIRST_LINE_OFFSET );
     534         [ +  - ]:       1310 :         pProps[nPos++].Value <<= (sal_Int32)nFirstLineOffset;
     535                 :            : 
     536                 :       1310 :         pProps[nPos].Name =
     537                 :       1310 :             OUString(XML_UNO_NAME_NRULE_SYMBOL_TEXT_DISTANCE);
     538         [ +  - ]:       1310 :         pProps[nPos++].Value <<= (sal_Int16)nMinLabelDist;
     539                 :            : 
     540                 :       1310 :         pProps[nPos].Name =
     541                 :       1310 :             OUString(XML_UNO_NAME_NRULE_POSITION_AND_SPACE_MODE);
     542         [ +  - ]:       1310 :         pProps[nPos++].Value <<= (sal_Int16)ePosAndSpaceMode;
     543                 :       1310 :         pProps[nPos].Name =
     544                 :       1310 :             OUString(XML_UNO_NAME_NRULE_LABEL_FOLLOWED_BY);
     545         [ +  - ]:       1310 :         pProps[nPos++].Value <<= (sal_Int16)eLabelFollowedBy;
     546                 :       1310 :         pProps[nPos].Name =
     547                 :       1310 :             OUString(XML_UNO_NAME_NRULE_LISTTAB_STOP_POSITION);
     548         [ +  - ]:       1310 :         pProps[nPos++].Value <<= (sal_Int32)nListtabStopPosition;
     549                 :       1310 :         pProps[nPos].Name =
     550                 :       1310 :             OUString(XML_UNO_NAME_NRULE_FIRST_LINE_INDENT);
     551         [ +  - ]:       1310 :         pProps[nPos++].Value <<= (sal_Int32)nFirstLineIndent;
     552                 :       1310 :         pProps[nPos].Name =
     553                 :       1310 :             OUString(XML_UNO_NAME_NRULE_INDENT_AT);
     554         [ +  - ]:       1310 :         pProps[nPos++].Value <<= (sal_Int32)nIndentAt;
     555                 :            : 
     556                 :       1310 :         OUString sDisplayTextStyleName = GetImport().GetStyleDisplayName(
     557         [ +  - ]:       1310 :                                 XML_STYLE_FAMILY_TEXT_TEXT, sTextStyleName  );
     558                 :       1310 :         OUString sStyleName = sDisplayTextStyleName;
     559 [ -  + ][ -  + ]:       1310 :         if( !sStyleName.isEmpty() && pI18NMap )
                 [ +  + ]
     560         [ #  # ]:          0 :             sStyleName = pI18NMap->Get( SFX_STYLE_FAMILY_CHAR, sStyleName );
     561                 :       1310 :         pProps[nPos].Name =
     562                 :       1310 :                 OUString(XML_UNO_NAME_NRULE_CHAR_STYLE_NAME );
     563         [ +  - ]:       1310 :         pProps[nPos++].Value <<= sDisplayTextStyleName;
     564                 :            : 
     565         [ +  + ]:       1310 :         if( bBullet )
     566                 :            :         {
     567                 :        382 :             awt::FontDescriptor aFDesc;
     568                 :        382 :             aFDesc.Name = sBulletFontName;
     569         [ +  - ]:        382 :             if( !sBulletFontName.isEmpty() )
     570                 :            :             {
     571                 :        382 :                 aFDesc.StyleName = sBulletFontStyleName;
     572                 :        382 :                 aFDesc.Family = eBulletFontFamily;
     573                 :        382 :                 aFDesc.Pitch = eBulletFontPitch;
     574                 :        382 :                 aFDesc.CharSet = eBulletFontEncoding;
     575                 :        382 :                 aFDesc.Weight = WEIGHT_DONTKNOW;
     576                 :        382 :                 sal_Bool bStarSymbol = sal_False;
     577         [ -  + ]:        382 :                 if( aFDesc.Name.equalsIgnoreAsciiCase( sStarBats ) )
     578                 :            :                 {
     579         [ #  # ]:          0 :                     cBullet = GetImport().ConvStarBatsCharToStarSymbol( cBullet );
     580                 :          0 :                     bStarSymbol = sal_True;
     581                 :            :                 }
     582         [ -  + ]:        382 :                 else if( aFDesc.Name.equalsIgnoreAsciiCase( sStarMath ) )
     583                 :            :                 {
     584         [ #  # ]:          0 :                     cBullet = GetImport().ConvStarMathCharToStarSymbol( cBullet );
     585                 :          0 :                     bStarSymbol = sal_True;
     586                 :            :                 }
     587         [ -  + ]:        382 :                 if( bStarSymbol )
     588                 :          0 :                     aFDesc.Name = OUString( "StarSymbol"  );
     589                 :            :             }
     590                 :            : 
     591         [ +  - ]:        382 :             if( cBullet )
     592                 :            :             {
     593                 :        382 :                 OUStringBuffer sTmp(1);
     594         [ +  - ]:        382 :                 sTmp.append( cBullet );
     595                 :        382 :                 pProps[nPos].Name =
     596                 :        382 :                         OUString(XML_UNO_NAME_NRULE_BULLET_CHAR );
     597 [ +  - ][ +  - ]:        382 :                 pProps[nPos++].Value <<= sTmp.makeStringAndClear();
     598                 :            :             }
     599                 :            : 
     600                 :        382 :             pProps[nPos].Name = OUString(XML_UNO_NAME_NRULE_BULLET_FONT );
     601         [ +  - ]:        382 :             pProps[nPos++].Value <<= aFDesc;
     602                 :            : 
     603                 :            :         }
     604                 :            : 
     605         [ -  + ]:       1310 :         if( bImage )
     606                 :            :         {
     607                 :          0 :             OUString sStr( sImageURL );
     608         [ #  # ]:          0 :             if( !sImageURL.isEmpty() )
     609                 :            :             {
     610                 :          0 :                 sStr = GetImport().ResolveGraphicObjectURL( sImageURL,
     611         [ #  # ]:          0 :                                                                  sal_False );
     612                 :            :             }
     613         [ #  # ]:          0 :             else if( xBase64Stream.is() )
     614                 :            :             {
     615         [ #  # ]:          0 :                 sStr = GetImport().ResolveGraphicObjectURLFromBase64( xBase64Stream );
     616                 :            :             }
     617                 :            : 
     618         [ #  # ]:          0 :             if( !sStr.isEmpty() )
     619                 :            :             {
     620                 :          0 :                 pProps[nPos].Name = OUString(XML_UNO_NAME_NRULE_GRAPHICURL );
     621         [ #  # ]:          0 :                 pProps[nPos++].Value <<= sStr;
     622                 :            :             }
     623                 :            : 
     624                 :          0 :             awt::Size aSize( nImageWidth, nImageHeight );
     625                 :          0 :             pProps[nPos].Name = OUString(XML_UNO_NAME_NRULE_GRAPHIC_SIZE );
     626         [ #  # ]:          0 :             pProps[nPos++].Value <<= aSize;
     627                 :            : 
     628                 :          0 :             pProps[nPos].Name = OUString(XML_UNO_NAME_NRULE_VERT_ORIENT );
     629         [ #  # ]:          0 :             pProps[nPos++].Value <<= (sal_Int16)eImageVertOrient;
     630                 :            :         }
     631                 :            : 
     632         [ +  + ]:       1310 :         if( bNum )
     633                 :            :         {
     634                 :        928 :             pProps[nPos].Name = OUString(XML_UNO_NAME_NRULE_START_WITH );
     635         [ +  - ]:        928 :             pProps[nPos++].Value <<= (sal_Int16)nNumStartValue;
     636                 :            : 
     637                 :        928 :             pProps[nPos].Name = OUString(XML_UNO_NAME_NRULE_PARENT_NUMBERING);
     638         [ +  - ]:        928 :             pProps[nPos++].Value <<= (sal_Int16)nNumDisplayLevels;
     639                 :            :         }
     640                 :            : 
     641 [ +  + ][ +  - ]:       1310 :         if( ( bNum || bBullet ) && nRelSize )
                 [ +  + ]
     642                 :            :         {
     643                 :        320 :             pProps[nPos].Name = OUString(XML_UNO_NAME_NRULE_BULLET_RELSIZE );
     644         [ +  - ]:        320 :             pProps[nPos++].Value <<= nRelSize;
     645                 :            :         }
     646                 :            : 
     647 [ +  - ][ +  + ]:       1310 :         if( !bImage && bHasColor )
     648                 :            :         {
     649                 :        320 :             pProps[nPos].Name = OUString(XML_UNO_NAME_NRULE_BULLET_COLOR );
     650         [ +  - ]:        320 :             pProps[nPos++].Value <<= m_nColor;
     651                 :            :         }
     652                 :            : 
     653                 :       1310 :         DBG_ASSERT( nPos == nCount, "array under/overflow" );
     654                 :            :     }
     655                 :            : 
     656                 :       1310 :     return aPropSeq;
     657                 :            : }
     658                 :            : 
     659                 :            : // ---------------------------------------------------------------------
     660                 :            : 
     661                 :            : enum SvxXMLStyleAttributesAttrTokens
     662                 :            : {
     663                 :            :     XML_TOK_STYLE_ATTRIBUTES_ATTR_SPACE_BEFORE,
     664                 :            :     XML_TOK_STYLE_ATTRIBUTES_ATTR_MIN_LABEL_WIDTH,
     665                 :            :     XML_TOK_STYLE_ATTRIBUTES_ATTR_MIN_LABEL_DIST,
     666                 :            :     XML_TOK_STYLE_ATTRIBUTES_ATTR_TEXT_ALIGN,
     667                 :            :     XML_TOK_STYLE_ATTRIBUTES_ATTR_FONT_NAME,
     668                 :            :     XML_TOK_STYLE_ATTRIBUTES_ATTR_FONT_FAMILY,
     669                 :            :     XML_TOK_STYLE_ATTRIBUTES_ATTR_FONT_FAMILY_GENERIC,
     670                 :            :     XML_TOK_STYLE_ATTRIBUTES_ATTR_FONT_STYLENAME,
     671                 :            :     XML_TOK_STYLE_ATTRIBUTES_ATTR_FONT_PITCH,
     672                 :            :     XML_TOK_STYLE_ATTRIBUTES_ATTR_FONT_CHARSET,
     673                 :            :     XML_TOK_STYLE_ATTRIBUTES_ATTR_VERTICAL_POS,
     674                 :            :     XML_TOK_STYLE_ATTRIBUTES_ATTR_VERTICAL_REL,
     675                 :            :     XML_TOK_STYLE_ATTRIBUTES_ATTR_WIDTH,
     676                 :            :     XML_TOK_STYLE_ATTRIBUTES_ATTR_HEIGHT,
     677                 :            :     XML_TOK_STYLE_ATTRIBUTES_ATTR_COLOR,
     678                 :            :     XML_TOK_STYLE_ATTRIBUTES_ATTR_WINDOW_FONT_COLOR,
     679                 :            :     XML_TOK_STYLE_ATTRIBUTES_ATTR_FONT_SIZE,
     680                 :            :     XML_TOK_STYLE_ATTRIBUTES_ATTR_POSITION_AND_SPACE_MODE,
     681                 :            :     XML_TOK_STYLE_ATTRIBUTES_ATTR_END=XML_TOK_UNKNOWN
     682                 :            : };
     683                 :       1812 : const SvXMLTokenMapEntry* lcl_getStyleAttributesAttrTokenMap()
     684                 :            : {
     685                 :            :     static SvXMLTokenMapEntry aStyleAttributesAttrTokenMap[] =
     686                 :            :     {
     687                 :            :         { XML_NAMESPACE_TEXT, XML_SPACE_BEFORE,
     688                 :            :                 XML_TOK_STYLE_ATTRIBUTES_ATTR_SPACE_BEFORE },
     689                 :            :         { XML_NAMESPACE_TEXT, XML_MIN_LABEL_WIDTH,
     690                 :            :                   XML_TOK_STYLE_ATTRIBUTES_ATTR_MIN_LABEL_WIDTH },
     691                 :            :         { XML_NAMESPACE_TEXT, XML_MIN_LABEL_DISTANCE,
     692                 :            :                 XML_TOK_STYLE_ATTRIBUTES_ATTR_MIN_LABEL_DIST },
     693                 :            :         { XML_NAMESPACE_FO, XML_TEXT_ALIGN,
     694                 :            :                 XML_TOK_STYLE_ATTRIBUTES_ATTR_TEXT_ALIGN },
     695                 :            :         { XML_NAMESPACE_STYLE, XML_FONT_NAME,
     696                 :            :                 XML_TOK_STYLE_ATTRIBUTES_ATTR_FONT_NAME },
     697                 :            :         { XML_NAMESPACE_FO, XML_FONT_FAMILY,
     698                 :            :                 XML_TOK_STYLE_ATTRIBUTES_ATTR_FONT_FAMILY },
     699                 :            :         { XML_NAMESPACE_STYLE, XML_FONT_FAMILY_GENERIC,
     700                 :            :                 XML_TOK_STYLE_ATTRIBUTES_ATTR_FONT_FAMILY_GENERIC },
     701                 :            :         { XML_NAMESPACE_STYLE, XML_FONT_STYLE_NAME,
     702                 :            :                 XML_TOK_STYLE_ATTRIBUTES_ATTR_FONT_STYLENAME },
     703                 :            :         { XML_NAMESPACE_STYLE, XML_FONT_PITCH,
     704                 :            :                 XML_TOK_STYLE_ATTRIBUTES_ATTR_FONT_PITCH },
     705                 :            :         { XML_NAMESPACE_STYLE, XML_FONT_CHARSET,
     706                 :            :                 XML_TOK_STYLE_ATTRIBUTES_ATTR_FONT_CHARSET },
     707                 :            :         { XML_NAMESPACE_STYLE, XML_VERTICAL_POS,
     708                 :            :                 XML_TOK_STYLE_ATTRIBUTES_ATTR_VERTICAL_POS },
     709                 :            :         { XML_NAMESPACE_STYLE, XML_VERTICAL_REL,
     710                 :            :                 XML_TOK_STYLE_ATTRIBUTES_ATTR_VERTICAL_REL },
     711                 :            :         { XML_NAMESPACE_FO, XML_WIDTH,
     712                 :            :                 XML_TOK_STYLE_ATTRIBUTES_ATTR_WIDTH },
     713                 :            :         { XML_NAMESPACE_FO, XML_HEIGHT,
     714                 :            :                 XML_TOK_STYLE_ATTRIBUTES_ATTR_HEIGHT },
     715                 :            :         { XML_NAMESPACE_FO, XML_COLOR,
     716                 :            :                 XML_TOK_STYLE_ATTRIBUTES_ATTR_COLOR },
     717                 :            :         { XML_NAMESPACE_STYLE, XML_USE_WINDOW_FONT_COLOR,
     718                 :            :                 XML_TOK_STYLE_ATTRIBUTES_ATTR_WINDOW_FONT_COLOR },
     719                 :            :         { XML_NAMESPACE_FO, XML_FONT_SIZE,
     720                 :            :                 XML_TOK_STYLE_ATTRIBUTES_ATTR_FONT_SIZE },
     721                 :            :         { XML_NAMESPACE_TEXT, XML_LIST_LEVEL_POSITION_AND_SPACE_MODE,
     722                 :            :                 XML_TOK_STYLE_ATTRIBUTES_ATTR_POSITION_AND_SPACE_MODE },
     723                 :            :         XML_TOKEN_MAP_END
     724                 :            :     };
     725                 :       1812 :     return aStyleAttributesAttrTokenMap;
     726                 :            : }
     727                 :       1812 : SvxXMLListLevelStyleAttrContext_Impl::SvxXMLListLevelStyleAttrContext_Impl(
     728                 :            :         SvXMLImport& rImport, sal_uInt16 nPrfx,
     729                 :            :         const OUString& rLName,
     730                 :            :         const Reference< xml::sax::XAttributeList > & xAttrList,
     731                 :            :         SvxXMLListLevelStyleContext_Impl& rLLevel ) :
     732                 :            :     SvXMLImportContext( rImport, nPrfx, rLName ),
     733                 :       1812 :     rListLevel( rLLevel )
     734                 :            : {
     735         [ +  - ]:       1812 :     SvXMLTokenMap aTokenMap( lcl_getStyleAttributesAttrTokenMap() );
     736                 :       1812 :     SvXMLUnitConverter& rUnitConv = GetImport().GetMM100UnitConverter();
     737                 :            : 
     738                 :       1812 :     OUString sFontName, sFontFamily, sFontStyleName, sFontFamilyGeneric,
     739                 :       1812 :              sFontPitch, sFontCharset;
     740                 :       1812 :     OUString sVerticalPos, sVerticalRel;
     741                 :            : 
     742 [ +  - ][ +  - ]:       1812 :     sal_Int16 nAttrCount = xAttrList.is() ? xAttrList->getLength() : 0;
                 [ +  - ]
     743         [ +  + ]:       5151 :     for( sal_Int16 i=0; i < nAttrCount; i++ )
     744                 :            :     {
     745 [ +  - ][ +  - ]:       3339 :         const OUString& rAttrName = xAttrList->getNameByIndex( i );
     746                 :       3339 :         OUString aLocalName;
     747                 :            :         sal_uInt16 nPrefix =
     748                 :       3339 :             GetImport().GetNamespaceMap().GetKeyByAttrName( rAttrName,
     749         [ +  - ]:       3339 :                                                             &aLocalName );
     750 [ +  - ][ +  - ]:       3339 :         const OUString& rValue = xAttrList->getValueByIndex( i );
     751                 :            : 
     752                 :            :         sal_Int32 nVal;
     753 [ +  - ][ +  +  :       3339 :         switch( aTokenMap.Get( nPrefix, aLocalName ) )
          +  +  +  +  -  
          -  -  -  -  -  
          -  -  -  +  +  
                   +  - ]
     754                 :            :         {
     755                 :            :         case XML_TOK_STYLE_ATTRIBUTES_ATTR_SPACE_BEFORE:
     756 [ +  - ][ +  - ]:        479 :             if (rUnitConv.convertMeasureToCore(nVal, rValue, SHRT_MIN, SHRT_MAX))
     757                 :        479 :                 rListLevel.SetSpaceBefore( nVal );
     758                 :        479 :             break;
     759                 :            :         case XML_TOK_STYLE_ATTRIBUTES_ATTR_MIN_LABEL_WIDTH:
     760 [ +  - ][ +  - ]:        499 :             if (rUnitConv.convertMeasureToCore( nVal, rValue, 0, SHRT_MAX ))
     761                 :        499 :                 rListLevel.SetMinLabelWidth( nVal );
     762                 :        499 :             break;
     763                 :            :         case XML_TOK_STYLE_ATTRIBUTES_ATTR_MIN_LABEL_DIST:
     764 [ +  - ][ +  - ]:         50 :             if (rUnitConv.convertMeasureToCore( nVal, rValue, 0, USHRT_MAX ))
     765                 :         50 :                 rListLevel.SetMinLabelDist( nVal );
     766                 :         50 :             break;
     767                 :            :         case XML_TOK_STYLE_ATTRIBUTES_ATTR_TEXT_ALIGN:
     768         [ +  - ]:          9 :             if( !rValue.isEmpty() )
     769                 :            :             {
     770                 :          9 :                 sal_Int16 eAdjust = HoriOrientation::LEFT;
     771 [ +  - ][ -  + ]:          9 :                 if( IsXMLToken( rValue, XML_CENTER ) )
     772                 :          0 :                     eAdjust = HoriOrientation::CENTER;
     773 [ +  - ][ +  - ]:          9 :                 else if( IsXMLToken( rValue, XML_END ) )
     774                 :          9 :                     eAdjust = HoriOrientation::RIGHT;
     775                 :          9 :                 rListLevel.SetAdjust( eAdjust );
     776                 :            :             }
     777                 :          9 :             break;
     778                 :            :         case XML_TOK_STYLE_ATTRIBUTES_ATTR_FONT_NAME:
     779                 :         32 :             sFontName = rValue;
     780                 :         32 :             break;
     781                 :            :         case XML_TOK_STYLE_ATTRIBUTES_ATTR_FONT_FAMILY:
     782                 :        490 :             sFontFamily = rValue;
     783                 :        490 :             break;
     784                 :            :         case XML_TOK_STYLE_ATTRIBUTES_ATTR_FONT_FAMILY_GENERIC:
     785                 :          0 :             sFontFamilyGeneric = rValue;
     786                 :          0 :             break;
     787                 :            :         case XML_TOK_STYLE_ATTRIBUTES_ATTR_FONT_STYLENAME:
     788                 :          0 :             sFontStyleName = rValue;
     789                 :          0 :             break;
     790                 :            :         case XML_TOK_STYLE_ATTRIBUTES_ATTR_FONT_PITCH:
     791                 :          0 :             sFontPitch = rValue;
     792                 :          0 :             break;
     793                 :            :         case XML_TOK_STYLE_ATTRIBUTES_ATTR_FONT_CHARSET:
     794                 :          0 :             sFontCharset = rValue;
     795                 :          0 :             break;
     796                 :            :         case XML_TOK_STYLE_ATTRIBUTES_ATTR_VERTICAL_POS:
     797                 :          0 :             sVerticalPos = rValue;
     798                 :          0 :             break;
     799                 :            :         case XML_TOK_STYLE_ATTRIBUTES_ATTR_VERTICAL_REL:
     800                 :          0 :             sVerticalRel = rValue;
     801                 :          0 :             break;
     802                 :            :         case XML_TOK_STYLE_ATTRIBUTES_ATTR_WIDTH:
     803 [ #  # ][ #  # ]:          0 :             if (rUnitConv.convertMeasureToCore(nVal, rValue, 0, SAL_MAX_INT32))
     804                 :          0 :                 rListLevel.SetImageWidth( nVal );
     805                 :          0 :             break;
     806                 :            :         case XML_TOK_STYLE_ATTRIBUTES_ATTR_HEIGHT:
     807 [ #  # ][ #  # ]:          0 :             if (rUnitConv.convertMeasureToCore(nVal, rValue, 0, SAL_MAX_INT32))
     808                 :          0 :                 rListLevel.SetImageHeight( nVal );
     809                 :          0 :             break;
     810                 :            :         case XML_TOK_STYLE_ATTRIBUTES_ATTR_COLOR:
     811                 :            :             {
     812                 :          0 :                 sal_Int32 nColor(0);
     813 [ #  # ][ #  # ]:          0 :                 if (::sax::Converter::convertColor( nColor, rValue ))
     814                 :            :                 {
     815                 :          0 :                     rListLevel.SetColor( nColor );
     816                 :            :                 }
     817                 :            :             }
     818                 :          0 :             break;
     819                 :            :         case XML_TOK_STYLE_ATTRIBUTES_ATTR_WINDOW_FONT_COLOR:
     820                 :            :             {
     821 [ +  - ][ +  - ]:        460 :                 if( IsXMLToken( rValue, XML_TRUE ) )
     822                 :        460 :                     rListLevel.SetColor( (sal_Int32)0xffffffff );
     823                 :            :             }
     824                 :        460 :             break;
     825                 :            :         case XML_TOK_STYLE_ATTRIBUTES_ATTR_FONT_SIZE:
     826 [ +  - ][ +  - ]:        460 :             if (::sax::Converter::convertPercent( nVal, rValue ))
     827                 :        460 :                 rListLevel.SetRelSize( (sal_Int16)nVal );
     828                 :        460 :             break;
     829                 :            :         case XML_TOK_STYLE_ATTRIBUTES_ATTR_POSITION_AND_SPACE_MODE:
     830                 :            :             {
     831                 :        860 :                 sal_Int16 ePosAndSpaceMode = PositionAndSpaceMode::LABEL_WIDTH_AND_POSITION;
     832 [ +  - ][ +  - ]:        860 :                 if( IsXMLToken( rValue, XML_LABEL_ALIGNMENT ) )
     833                 :        860 :                     ePosAndSpaceMode = PositionAndSpaceMode::LABEL_ALIGNMENT;
     834                 :        860 :                 rListLevel.SetPosAndSpaceMode( ePosAndSpaceMode );
     835                 :            :             }
     836                 :        860 :             break;
     837                 :            :         }
     838                 :       3339 :     }
     839                 :            : 
     840         [ +  + ]:       1812 :     if( !sFontName.isEmpty() )
     841                 :            :     {
     842                 :            :         const XMLFontStylesContext *pFontDecls =
     843 [ +  - ][ +  - ]:         32 :             GetImport().GetTextImport()->GetFontDecls();
         [ +  - ][ +  - ]
     844         [ +  - ]:         32 :         if( pFontDecls )
     845                 :            :         {
     846         [ +  - ]:         32 :             ::std::vector < XMLPropertyState > aProps;
     847 [ +  - ][ +  - ]:         32 :             if( pFontDecls->FillProperties( sFontName, aProps, 0, 1, 2, 3, 4 ) )
     848                 :            :             {
     849                 :         32 :                 OUString sTmp;
     850                 :         32 :                 sal_Int16 nTmp = 0;
     851                 :         32 :                 ::std::vector< XMLPropertyState >::iterator i;
     852 [ +  - ][ +  + ]:        192 :                 for( i = aProps.begin(); i != aProps.end(); ++i )
     853                 :            :                 {
     854   [ +  +  +  +  :        160 :                     switch( i->mnIndex )
                   +  - ]
     855                 :            :                     {
     856                 :            :                     case 0:
     857                 :         32 :                         i->maValue >>= sTmp;
     858                 :         32 :                         rListLevel.SetBulletFontName( sTmp);
     859                 :         32 :                         break;
     860                 :            :                     case 1:
     861                 :         32 :                         i->maValue >>= sTmp;
     862                 :         32 :                         rListLevel.SetBulletFontStyleName( sTmp );
     863                 :         32 :                         break;
     864                 :            :                     case 2:
     865                 :         32 :                         i->maValue >>= nTmp;
     866                 :         32 :                         rListLevel.SetBulletFontFamily( nTmp );
     867                 :         32 :                         break;
     868                 :            :                     case 3:
     869                 :         32 :                         i->maValue >>= nTmp;
     870                 :         32 :                         rListLevel.SetBulletFontPitch( nTmp );
     871                 :         32 :                         break;
     872                 :            :                     case 4:
     873                 :         32 :                         i->maValue >>= nTmp;
     874                 :         32 :                         rListLevel.SetBulletFontEncoding( nTmp );
     875                 :         32 :                         break;
     876                 :            :                     }
     877                 :         32 :                 }
     878                 :         32 :             }
     879                 :            :         }
     880                 :            :     }
     881         [ +  + ]:       1812 :     if( !sFontFamily.isEmpty() )
     882                 :            :     {
     883         [ +  - ]:        490 :         String sEmpty;
     884                 :        490 :         Any aAny;
     885                 :            : 
     886                 :        490 :         XMLFontFamilyNamePropHdl aFamilyNameHdl;
     887 [ +  - ][ +  - ]:        490 :         if( aFamilyNameHdl.importXML( sFontFamily, aAny, rUnitConv ) )
     888                 :            :         {
     889                 :        490 :             OUString sTmp;
     890                 :        490 :             aAny >>= sTmp;
     891                 :        490 :             rListLevel.SetBulletFontName( sTmp);
     892                 :            :         }
     893                 :            : 
     894                 :        490 :         XMLFontFamilyPropHdl aFamilyHdl;
     895 [ -  + ][ #  # ]:        490 :         if( !sFontFamilyGeneric.isEmpty() &&
                 [ -  + ]
     896         [ #  # ]:          0 :             aFamilyHdl.importXML( sFontFamilyGeneric, aAny, rUnitConv  ) )
     897                 :            :         {
     898                 :          0 :             sal_Int16 nTmp = 0;
     899                 :          0 :             aAny >>= nTmp;
     900                 :          0 :             rListLevel.SetBulletFontFamily( nTmp );
     901                 :            :         }
     902                 :            : 
     903         [ -  + ]:        490 :         if( !sFontStyleName.isEmpty() )
     904                 :          0 :             rListLevel.SetBulletFontStyleName( sFontStyleName );
     905                 :            : 
     906                 :        490 :         XMLFontPitchPropHdl aPitchHdl;
     907 [ -  + ][ #  # ]:        490 :         if( !sFontPitch.isEmpty() &&
                 [ -  + ]
     908         [ #  # ]:          0 :             aPitchHdl.importXML( sFontPitch, aAny, rUnitConv  ) )
     909                 :            :         {
     910                 :          0 :             sal_Int16 nTmp = 0;
     911                 :          0 :             aAny >>= nTmp;
     912                 :          0 :             rListLevel.SetBulletFontPitch( nTmp );
     913                 :            :         }
     914                 :            : 
     915                 :        490 :         XMLFontEncodingPropHdl aEncHdl;
     916 [ -  + ][ #  # ]:        490 :         if( !sFontCharset.isEmpty() &&
                 [ -  + ]
     917         [ #  # ]:          0 :             aEncHdl.importXML( sFontCharset, aAny, rUnitConv  ) )
     918                 :            :         {
     919                 :          0 :             sal_Int16 nTmp = 0;
     920                 :          0 :             aAny >>= nTmp;
     921                 :          0 :             rListLevel.SetBulletFontEncoding( nTmp );
     922 [ +  - ][ +  - ]:        490 :         }
         [ +  - ][ +  - ]
                 [ +  - ]
     923                 :            :     }
     924                 :            : 
     925                 :       1812 :     sal_Int16 eVertOrient = VertOrientation::LINE_CENTER;
     926         [ -  + ]:       1812 :     if( !sVerticalPos.isEmpty() )
     927                 :            :     {
     928 [ #  # ][ #  # ]:          0 :         if( IsXMLToken( sVerticalPos, XML_TOP ) )
     929                 :          0 :             eVertOrient = VertOrientation::LINE_TOP;
     930 [ #  # ][ #  # ]:          0 :         else if( IsXMLToken( sVerticalPos, XML_BOTTOM ) )
     931                 :          0 :             eVertOrient = VertOrientation::LINE_BOTTOM;
     932                 :            :     }
     933         [ -  + ]:       1812 :     if( !sVerticalRel.isEmpty() )
     934                 :            :     {
     935 [ #  # ][ #  # ]:          0 :         if( IsXMLToken( sVerticalRel, XML_BASELINE ) )
     936                 :            :         {
     937                 :            :             // TOP and BOTTOM are exchanged for a baseline relation
     938   [ #  #  #  # ]:          0 :             switch( eVertOrient  )
     939                 :            :             {
     940                 :            :             case VertOrientation::LINE_TOP:
     941                 :          0 :                 eVertOrient = VertOrientation::BOTTOM;
     942                 :          0 :                 break;
     943                 :            :             case VertOrientation::LINE_CENTER:
     944                 :          0 :                 eVertOrient = VertOrientation::CENTER;
     945                 :          0 :                 break;
     946                 :            :             case VertOrientation::LINE_BOTTOM:
     947                 :          0 :                 eVertOrient = VertOrientation::TOP;
     948                 :          0 :                 break;
     949                 :            :             }
     950                 :            :         }
     951 [ #  # ][ #  # ]:          0 :         else if( IsXMLToken( sVerticalRel, XML_CHAR ) )
     952                 :            :         {
     953   [ #  #  #  # ]:          0 :             switch( eVertOrient  )
     954                 :            :             {
     955                 :            :             case VertOrientation::LINE_TOP:
     956                 :          0 :                 eVertOrient = VertOrientation::CHAR_TOP;
     957                 :          0 :                 break;
     958                 :            :             case VertOrientation::LINE_CENTER:
     959                 :          0 :                 eVertOrient = VertOrientation::CHAR_CENTER;
     960                 :          0 :                 break;
     961                 :            :             case VertOrientation::LINE_BOTTOM:
     962                 :          0 :                 eVertOrient = VertOrientation::CHAR_BOTTOM;
     963                 :          0 :                 break;
     964                 :            :             }
     965                 :            :         }
     966                 :            :     }
     967         [ +  - ]:       1812 :     rListLevel.SetImageVertOrient( eVertOrient );
     968                 :       1812 : }
     969                 :            : 
     970                 :       1812 : SvxXMLListLevelStyleAttrContext_Impl::~SvxXMLListLevelStyleAttrContext_Impl()
     971                 :            : {
     972         [ -  + ]:       3624 : }
     973                 :            : 
     974                 :        860 : SvXMLImportContext* SvxXMLListLevelStyleAttrContext_Impl::CreateChildContext(
     975                 :            :         sal_uInt16 nPrefix, const OUString& rLocalName,
     976                 :            :         const Reference< xml::sax::XAttributeList > & xAttrList )
     977                 :            : {
     978                 :        860 :     SvXMLImportContext *pContext = 0;
     979   [ +  -  +  - ]:       1720 :     if ( XML_NAMESPACE_STYLE == nPrefix &&
                 [ +  - ]
     980                 :        860 :          IsXMLToken( rLocalName, XML_LIST_LEVEL_LABEL_ALIGNMENT ) )
     981                 :            :     {
     982                 :        860 :         pContext = new SvxXMLListLevelStyleLabelAlignmentAttrContext_Impl( GetImport(),
     983                 :            :                                                              nPrefix,
     984                 :            :                                                              rLocalName,
     985                 :            :                                                              xAttrList,
     986         [ +  - ]:        860 :                                                              rListLevel );
     987                 :            :     }
     988         [ -  + ]:        860 :     if( !pContext )
     989                 :            :     {
     990         [ #  # ]:          0 :         pContext = new SvXMLImportContext( GetImport(), nPrefix, rLocalName );
     991                 :            :     }
     992                 :            : 
     993                 :        860 :     return pContext;
     994                 :            : }
     995                 :            : 
     996                 :            : // ---------------------------------------------------------------------
     997                 :            : 
     998                 :            : enum SvxXMLStyleAttributesLabelAlignmentAttrTokens
     999                 :            : {
    1000                 :            :     XML_TOK_STYLE_ATTRIBUTES_ATTR_LABEL_FOLLOWED_BY,
    1001                 :            :     XML_TOK_STYLE_ATTRIBUTES_ATTR_LISTTAB_STOP_POSITION,
    1002                 :            :     XML_TOK_STYLE_ATTRIBUTES_ATTR_FIRST_LINE_INDENT,
    1003                 :            :     XML_TOK_STYLE_ATTRIBUTES_ATTR_INDENT_AT,
    1004                 :            : 
    1005                 :            :     XML_TOK_STYLE_ATTRIBUTES_LABEL_ALIGNMENT_ATTR_END=XML_TOK_UNKNOWN
    1006                 :            : };
    1007                 :        860 : const SvXMLTokenMapEntry* lcl_getStyleAlignmentAttributesAttrTokenMap()
    1008                 :            : {
    1009                 :            :     static SvXMLTokenMapEntry aStyleAlignmentAttributesAttrTokenMap[] =
    1010                 :            :     {
    1011                 :            :         { XML_NAMESPACE_TEXT, XML_LABEL_FOLLOWED_BY,
    1012                 :            :                 XML_TOK_STYLE_ATTRIBUTES_ATTR_LABEL_FOLLOWED_BY },
    1013                 :            :         { XML_NAMESPACE_TEXT, XML_LIST_TAB_STOP_POSITION,
    1014                 :            :                 XML_TOK_STYLE_ATTRIBUTES_ATTR_LISTTAB_STOP_POSITION },
    1015                 :            :         { XML_NAMESPACE_FO, XML_TEXT_INDENT,
    1016                 :            :                 XML_TOK_STYLE_ATTRIBUTES_ATTR_FIRST_LINE_INDENT },
    1017                 :            :         { XML_NAMESPACE_FO, XML_MARGIN_LEFT,
    1018                 :            :                 XML_TOK_STYLE_ATTRIBUTES_ATTR_INDENT_AT },
    1019                 :            : 
    1020                 :            :         XML_TOKEN_MAP_END
    1021                 :            :     };
    1022                 :        860 :     return aStyleAlignmentAttributesAttrTokenMap;
    1023                 :            : }
    1024                 :        860 : SvxXMLListLevelStyleLabelAlignmentAttrContext_Impl::SvxXMLListLevelStyleLabelAlignmentAttrContext_Impl(
    1025                 :            :         SvXMLImport& rImport, sal_uInt16 nPrfx,
    1026                 :            :         const OUString& rLName,
    1027                 :            :         const Reference< xml::sax::XAttributeList > & xAttrList,
    1028                 :            :         SvxXMLListLevelStyleContext_Impl& rLLevel ) :
    1029                 :            :     SvXMLImportContext( rImport, nPrfx, rLName ),
    1030                 :        860 :     rListLevel( rLLevel )
    1031                 :            : {
    1032         [ +  - ]:        860 :     SvXMLTokenMap aTokenMap( lcl_getStyleAlignmentAttributesAttrTokenMap() );
    1033                 :        860 :     SvXMLUnitConverter& rUnitConv = GetImport().GetMM100UnitConverter();
    1034                 :            : 
    1035 [ +  - ][ +  - ]:        860 :     sal_Int16 nAttrCount = xAttrList.is() ? xAttrList->getLength() : 0;
                 [ +  - ]
    1036         [ +  + ]:       4054 :     for( sal_Int16 i=0; i < nAttrCount; i++ )
    1037                 :            :     {
    1038 [ +  - ][ +  - ]:       3194 :         const OUString& rAttrName = xAttrList->getNameByIndex( i );
    1039                 :       3194 :         OUString aLocalName;
    1040                 :            :         sal_uInt16 nPrefix =
    1041                 :       3194 :             GetImport().GetNamespaceMap().GetKeyByAttrName( rAttrName,
    1042         [ +  - ]:       3194 :                                                             &aLocalName );
    1043 [ +  - ][ +  - ]:       3194 :         const OUString& rValue = xAttrList->getValueByIndex( i );
    1044                 :            : 
    1045                 :            :         sal_Int32 nVal;
    1046 [ +  - ][ +  +  :       3194 :         switch( aTokenMap.Get( nPrefix, aLocalName ) )
                +  +  - ]
    1047                 :            :         {
    1048                 :            :         case XML_TOK_STYLE_ATTRIBUTES_ATTR_LABEL_FOLLOWED_BY:
    1049                 :            :             {
    1050                 :        860 :                 sal_Int16 eLabelFollowedBy = LabelFollow::LISTTAB;
    1051 [ +  - ][ -  + ]:        860 :                 if( IsXMLToken( rValue, XML_SPACE ) )
    1052                 :          0 :                     eLabelFollowedBy = LabelFollow::SPACE;
    1053 [ +  - ][ +  + ]:        860 :                 else if( IsXMLToken( rValue, XML_NOTHING ) )
    1054                 :         54 :                     eLabelFollowedBy = LabelFollow::NOTHING;
    1055                 :        860 :                 rListLevel.SetLabelFollowedBy( eLabelFollowedBy );
    1056                 :            :             }
    1057                 :        860 :             break;
    1058                 :            :         case XML_TOK_STYLE_ATTRIBUTES_ATTR_LISTTAB_STOP_POSITION:
    1059 [ +  - ][ +  - ]:        644 :             if (rUnitConv.convertMeasureToCore(nVal, rValue, 0, SHRT_MAX))
    1060                 :        644 :                 rListLevel.SetListtabStopPosition( nVal );
    1061                 :        644 :             break;
    1062                 :            :         case XML_TOK_STYLE_ATTRIBUTES_ATTR_FIRST_LINE_INDENT:
    1063 [ +  - ][ +  - ]:        833 :             if (rUnitConv.convertMeasureToCore(nVal, rValue, SHRT_MIN, SHRT_MAX))
    1064                 :        833 :                 rListLevel.SetFirstLineIndent( nVal );
    1065                 :        833 :             break;
    1066                 :            :         case XML_TOK_STYLE_ATTRIBUTES_ATTR_INDENT_AT:
    1067 [ +  - ][ +  - ]:        857 :             if (rUnitConv.convertMeasureToCore(nVal, rValue, SHRT_MIN, SHRT_MAX))
    1068                 :        857 :                 rListLevel.SetIndentAt( nVal );
    1069                 :        857 :             break;
    1070                 :            :         }
    1071         [ +  - ]:       4054 :     }
    1072                 :        860 : }
    1073                 :            : 
    1074                 :        860 : SvxXMLListLevelStyleLabelAlignmentAttrContext_Impl::~SvxXMLListLevelStyleLabelAlignmentAttrContext_Impl()
    1075                 :            : {
    1076         [ -  + ]:       1720 : }
    1077                 :            : 
    1078                 :            : // ---------------------------------------------------------------------
    1079                 :            : 
    1080                 :        290 : class SvxXMLListStyle_Impl : public std::vector<SvxXMLListLevelStyleContext_Impl *> {};
    1081                 :            : 
    1082                 :        151 : void SvxXMLListStyleContext::SetAttribute( sal_uInt16 nPrefixKey,
    1083                 :            :                                            const OUString& rLocalName,
    1084                 :            :                                            const OUString& rValue )
    1085                 :            : {
    1086   [ -  +  #  # ]:        151 :     if( XML_NAMESPACE_TEXT == nPrefixKey &&
                 [ -  + ]
    1087                 :          0 :         IsXMLToken( rLocalName, XML_CONSECUTIVE_NUMBERING ) )
    1088                 :            :     {
    1089                 :          0 :         bConsecutive = IsXMLToken( rValue, XML_TRUE );
    1090                 :            :     }
    1091                 :            :     else
    1092                 :            :     {
    1093                 :        151 :         SvXMLStyleContext::SetAttribute( nPrefixKey, rLocalName, rValue );
    1094                 :            :     }
    1095                 :        151 : }
    1096                 :            : 
    1097                 :            : 
    1098                 :        145 : SvxXMLListStyleContext::SvxXMLListStyleContext( SvXMLImport& rImport,
    1099                 :            :         sal_uInt16 nPrfx,
    1100                 :            :         const OUString& rLName,
    1101                 :            :         const Reference< xml::sax::XAttributeList > & xAttrList,
    1102                 :            :         sal_Bool bOutl )
    1103                 :            : :   SvXMLStyleContext( rImport, nPrfx, rLName, xAttrList, bOutl ? XML_STYLE_FAMILY_TEXT_OUTLINE : XML_STYLE_FAMILY_TEXT_LIST )
    1104                 :            : ,   sIsPhysical( "IsPhysical"  )
    1105                 :            : ,   sNumberingRules( "NumberingRules"  )
    1106                 :            : ,   sName( "Name"  )
    1107                 :            : ,   sIsContinuousNumbering( "IsContinuousNumbering"  )
    1108                 :            : ,   pLevelStyles( 0 )
    1109                 :            : ,   nLevels( 0 )
    1110                 :            : ,   bConsecutive( sal_False )
    1111         [ +  + ]:        145 : ,   bOutline( bOutl )
    1112                 :            : {
    1113                 :        145 : }
    1114                 :            : 
    1115                 :        145 : SvxXMLListStyleContext::~SvxXMLListStyleContext()
    1116                 :            : {
    1117         [ +  - ]:        145 :     if( pLevelStyles )
    1118                 :            :     {
    1119         [ +  + ]:       1595 :         while( !pLevelStyles->empty() )
    1120                 :            :         {
    1121         [ +  - ]:       1450 :             SvxXMLListLevelStyleContext_Impl *pStyle = pLevelStyles->back();
    1122         [ +  - ]:       1450 :             pLevelStyles->pop_back();
    1123         [ +  - ]:       1450 :             pStyle->ReleaseRef();
    1124                 :            :         }
    1125                 :            :     }
    1126                 :            : 
    1127         [ +  - ]:        145 :     delete pLevelStyles;
    1128         [ -  + ]:        290 : }
    1129                 :            : 
    1130 [ +  + ][ -  + ]:         74 : TYPEINIT1( SvxXMLListStyleContext, SvXMLStyleContext );
    1131                 :            : 
    1132                 :       1450 : SvXMLImportContext *SvxXMLListStyleContext::CreateChildContext(
    1133                 :            :         sal_uInt16 nPrefix,
    1134                 :            :         const OUString& rLocalName,
    1135                 :            :         const Reference< xml::sax::XAttributeList > & xAttrList )
    1136                 :            : {
    1137                 :       1450 :     SvXMLImportContext *pContext = 0;
    1138                 :            : 
    1139         [ +  - ]:       2900 :     if( XML_NAMESPACE_TEXT == nPrefix &&
           [ +  +  +  - ]
                 [ +  - ]
    1140                 :            :         ( bOutline
    1141                 :        630 :               ? IsXMLToken( rLocalName, XML_OUTLINE_LEVEL_STYLE )
    1142                 :        820 :               : ( IsXMLToken( rLocalName, XML_LIST_LEVEL_STYLE_NUMBER ) ||
    1143                 :        522 :                 IsXMLToken( rLocalName, XML_LIST_LEVEL_STYLE_BULLET ) ||
    1144         [ #  # ]:       1342 :                  IsXMLToken( rLocalName, XML_LIST_LEVEL_STYLE_IMAGE )    ) ) )
           [ +  +  -  + ]
    1145                 :            :     {
    1146                 :            :         SvxXMLListLevelStyleContext_Impl *pLevelStyle =
    1147                 :       1450 :             new SvxXMLListLevelStyleContext_Impl( GetImport(), nPrefix,
    1148 [ +  - ][ +  - ]:       1450 :                                                   rLocalName, xAttrList );
    1149         [ +  + ]:       1450 :         if( !pLevelStyles )
    1150 [ +  - ][ +  - ]:        145 :             pLevelStyles = new SvxXMLListStyle_Impl;
    1151         [ +  - ]:       1450 :         pLevelStyles->push_back( pLevelStyle );
    1152                 :       1450 :         pLevelStyle->AddRef();
    1153                 :            : 
    1154                 :       1450 :         pContext = pLevelStyle;
    1155                 :            :     }
    1156                 :            :     else
    1157                 :            :     {
    1158         [ #  # ]:          0 :         pContext = new SvXMLImportContext( GetImport(), nPrefix, rLocalName );
    1159                 :            :     }
    1160                 :            : 
    1161                 :       1450 :     return pContext;
    1162                 :            : }
    1163                 :            : 
    1164                 :        131 : void SvxXMLListStyleContext::FillUnoNumRule(
    1165                 :            :         const Reference< container::XIndexReplace > & rNumRule,
    1166                 :            :         const SvI18NMap *pI18NMap ) const
    1167                 :            : {
    1168                 :            :     try
    1169                 :            :     {
    1170 [ +  - ][ +  - ]:        131 :         if( pLevelStyles && rNumRule.is() )
                 [ +  - ]
    1171                 :            :         {
    1172                 :        131 :             sal_uInt16 nCount = pLevelStyles->size();
    1173 [ +  - ][ +  - ]:        131 :             sal_Int32 l_nLevels = rNumRule->getCount();
    1174         [ +  + ]:       1441 :             for( sal_uInt16 i=0; i < nCount; i++ )
    1175                 :            :             {
    1176                 :            :                 SvxXMLListLevelStyleContext_Impl *pLevelStyle =
    1177                 :       1310 :                     (*pLevelStyles)[i];
    1178                 :       1310 :                 sal_Int32 nLevel = pLevelStyle->GetLevel();
    1179 [ +  - ][ +  - ]:       1310 :                 if( nLevel >= 0 && nLevel < l_nLevels )
    1180                 :            :                 {
    1181                 :            :                     Sequence<beans::PropertyValue> aProps =
    1182         [ +  - ]:       1310 :                         pLevelStyle->GetProperties( pI18NMap );
    1183                 :       1310 :                     Any aAny;
    1184         [ +  - ]:       1310 :                     aAny <<= aProps;
    1185 [ +  - ][ +  - ]:       1310 :                     rNumRule->replaceByIndex( nLevel, aAny );
                 [ +  - ]
    1186                 :            :                 }
    1187                 :            :             }
    1188                 :            :         }
    1189                 :            : 
    1190         [ +  - ]:        131 :         Reference < XPropertySet > xPropSet( rNumRule, UNO_QUERY );
    1191                 :        131 :         Reference< XPropertySetInfo > xPropSetInfo;
    1192         [ +  + ]:        131 :         if (xPropSet.is())
    1193 [ +  - ][ +  - ]:         99 :             xPropSetInfo = xPropSet->getPropertySetInfo();
                 [ +  - ]
    1194 [ +  + ][ +  - ]:        230 :         if( xPropSetInfo.is() &&
                 [ +  + ]
    1195 [ +  - ][ +  - ]:         99 :             xPropSetInfo->hasPropertyByName( sIsContinuousNumbering ) )
    1196                 :            :         {
    1197                 :         99 :             Any aAny;
    1198                 :         99 :             sal_Bool bTmp = bConsecutive;
    1199         [ +  - ]:         99 :             aAny.setValue( &bTmp, ::getBooleanCppuType() );
    1200 [ +  - ][ +  - ]:         99 :             xPropSet->setPropertyValue( sIsContinuousNumbering, aAny );
    1201         [ #  # ]:        131 :         }
    1202                 :            :     }
    1203                 :          0 :     catch (const Exception&)
    1204                 :            :     {
    1205                 :            :         OSL_FAIL( "SvxXMLListStyleContext::FillUnoNumRule - Exception caught" );
    1206                 :            :     }
    1207                 :        131 : }
    1208                 :            : 
    1209                 :         95 : void SvxXMLListStyleContext::CreateAndInsertLate( sal_Bool bOverwrite )
    1210                 :            : {
    1211         [ +  + ]:         95 :     if( bOutline )
    1212                 :            :     {
    1213         [ +  - ]:         63 :         if( bOverwrite )
    1214                 :            :         {
    1215                 :            :             const Reference< XIndexReplace >& rNumRule =
    1216 [ +  - ][ +  - ]:         63 :                 GetImport().GetTextImport()->GetChapterNumbering();
    1217                 :            :             // We don't set xNumberingRules here, to avoid using them
    1218                 :            :             // as numbering rules.
    1219         [ +  - ]:         63 :             if( rNumRule.is() )
    1220                 :         63 :                 FillUnoNumRule( rNumRule, 0 );
    1221                 :            :         }
    1222                 :            :     }
    1223                 :            :     else
    1224                 :            :     {
    1225                 :         32 :         Reference < XStyle > xStyle;
    1226                 :         32 :         const OUString& rName = GetDisplayName();
    1227         [ -  + ]:         32 :         if( rName.isEmpty() )
    1228                 :            :         {
    1229                 :          0 :             SetValid( sal_False );
    1230                 :            :             return;
    1231                 :            :         }
    1232                 :            : 
    1233                 :            :         const Reference < XNameContainer >& rNumStyles =
    1234 [ +  - ][ +  - ]:         32 :                 GetImport().GetTextImport()->GetNumberingStyles();
         [ +  - ][ +  - ]
    1235         [ -  + ]:         32 :         if( !rNumStyles.is() )
    1236                 :            :         {
    1237                 :          0 :             SetValid( sal_False );
    1238                 :            :             return;
    1239                 :            :         }
    1240                 :            : 
    1241                 :         32 :         sal_Bool bNew = sal_False;
    1242 [ +  - ][ +  - ]:         32 :         if( rNumStyles->hasByName( rName ) )
                 [ +  + ]
    1243                 :            :         {
    1244 [ +  - ][ +  - ]:          8 :             Any aAny = rNumStyles->getByName( rName );
    1245         [ +  - ]:          8 :             aAny >>= xStyle;
    1246                 :            :         }
    1247                 :            :         else
    1248                 :            :         {
    1249                 :         24 :             Reference< XMultiServiceFactory > xFactory( GetImport().GetModel(),
    1250         [ +  - ]:         24 :                                                         UNO_QUERY );
    1251                 :            :             DBG_ASSERT( xFactory.is(), "no factory" );
    1252         [ -  + ]:         24 :             if( !xFactory.is() )
    1253                 :            :                 return;
    1254                 :            : 
    1255 [ +  - ][ +  - ]:         24 :             Reference < XInterface > xIfc = xFactory->createInstance(OUString("com.sun.star.style.NumberingStyle") );
    1256         [ -  + ]:         24 :             if( !xIfc.is() )
    1257                 :            :                 return;
    1258         [ +  - ]:         24 :             Reference < XStyle > xTmp( xIfc, UNO_QUERY );
    1259         [ +  - ]:         24 :             xStyle = xTmp;
    1260         [ -  + ]:         24 :             if( !xStyle.is() )
    1261                 :            :                 return;
    1262                 :            : 
    1263                 :         24 :             Any aAny;
    1264         [ +  - ]:         24 :             aAny <<= xStyle;
    1265 [ +  - ][ +  - ]:         24 :             rNumStyles->insertByName( rName, aAny );
    1266 [ -  + ][ -  + ]:         24 :             bNew = sal_True;
                 [ +  - ]
    1267                 :            :         }
    1268                 :            : 
    1269         [ +  - ]:         32 :         Reference < XPropertySet > xPropSet( xStyle, UNO_QUERY );
    1270                 :            :         Reference< XPropertySetInfo > xPropSetInfo =
    1271 [ +  - ][ +  - ]:         32 :             xPropSet->getPropertySetInfo();
    1272 [ +  + ][ +  - ]:         32 :         if( !bNew && xPropSetInfo->hasPropertyByName( sIsPhysical ) )
         [ +  - ][ +  - ]
                 [ +  + ]
    1273                 :            :         {
    1274 [ +  - ][ +  - ]:          8 :             Any aAny = xPropSet->getPropertyValue( sIsPhysical );
    1275                 :          8 :             bNew = !*(sal_Bool *)aAny.getValue();
    1276                 :            :         }
    1277         [ +  + ]:         32 :         if( rName != GetName() )
    1278                 :          8 :             GetImport().AddStyleDisplayName( XML_STYLE_FAMILY_TEXT_LIST,
    1279         [ +  - ]:         16 :                                              GetName(), rName );
    1280                 :            : 
    1281 [ +  - ][ +  - ]:         32 :         Any aAny = xPropSet->getPropertyValue( sNumberingRules );
    1282         [ +  - ]:         32 :         aAny >>= xNumRules;
    1283 [ +  - ][ +  - ]:         32 :         nLevels = xNumRules->getCount();
    1284 [ -  + ][ #  # ]:         32 :         if( bOverwrite || bNew )
    1285                 :            :         {
    1286         [ +  - ]:         32 :             FillUnoNumRule( xNumRules, 0 );
    1287         [ +  - ]:         32 :             aAny <<= xNumRules;
    1288 [ +  - ][ +  - ]:         32 :             xPropSet->setPropertyValue( sNumberingRules, aAny );
    1289                 :            :         }
    1290                 :            :         else
    1291                 :            :         {
    1292                 :          0 :             SetValid( sal_False );
    1293                 :            :         }
    1294                 :            : 
    1295         [ +  - ]:         95 :         SetNew( bNew );
    1296                 :            :     }
    1297                 :            : }
    1298                 :            : 
    1299                 :          4 : void SvxXMLListStyleContext::CreateAndInsertAuto() const
    1300                 :            : {
    1301                 :            :     DBG_ASSERT( !bOutline, "Outlines cannot be inserted here" );
    1302                 :            :     DBG_ASSERT( !xNumRules.is(), "Numbering Rule is existing already" );
    1303                 :            : 
    1304                 :          4 :     const OUString& rName = GetName();
    1305 [ +  - ][ -  + ]:          4 :     if( bOutline || xNumRules.is() || rName.isEmpty() )
         [ -  + ][ +  - ]
    1306                 :            :     {
    1307                 :          0 :         ((SvxXMLListStyleContext *)this)->SetValid( sal_False );
    1308                 :          4 :         return;
    1309                 :            :     }
    1310                 :            : 
    1311                 :            :     ((SvxXMLListStyleContext *)this)->xNumRules = CreateNumRule(
    1312         [ +  - ]:          4 :         GetImport().GetModel() );
    1313                 :          4 :     ((SvxXMLListStyleContext *)this)->nLevels = xNumRules->getCount();
    1314                 :            : 
    1315                 :          4 :     FillUnoNumRule( xNumRules, 0 );
    1316                 :            : }
    1317                 :            : 
    1318                 :         36 : Reference < XIndexReplace > SvxXMLListStyleContext::CreateNumRule(
    1319                 :            :                                 const Reference < XModel > & rModel )
    1320                 :            : {
    1321                 :         36 :     Reference<XIndexReplace> xNumRule;
    1322                 :            : 
    1323         [ +  - ]:         36 :     Reference< XMultiServiceFactory > xFactory( rModel, UNO_QUERY );
    1324                 :            :     DBG_ASSERT( xFactory.is(), "no factory" );
    1325         [ +  - ]:         36 :     if( !xFactory.is() )
    1326                 :            :         return xNumRule;
    1327                 :            : 
    1328 [ +  - ][ +  - ]:         36 :     Reference < XInterface > xIfc = xFactory->createInstance(OUString("com.sun.star.text.NumberingRules") );
    1329         [ +  - ]:         36 :     if( !xIfc.is() )
    1330                 :            :         return xNumRule;
    1331                 :            : 
    1332 [ +  - ][ +  - ]:         36 :     xNumRule = Reference<XIndexReplace>( xIfc, UNO_QUERY );
    1333                 :            :     DBG_ASSERT( xNumRule.is(), "go no numbering rule" );
    1334                 :            : 
    1335                 :         36 :     return xNumRule;
    1336                 :            : }
    1337                 :            : 
    1338                 :          0 : void SvxXMLListStyleContext::SetDefaultStyle(
    1339                 :            :         const Reference < XIndexReplace > & rNumRule,
    1340                 :            :         sal_Int16 nLevel,
    1341                 :            :         sal_Bool bOrdered )
    1342                 :            : {
    1343 [ #  # ][ #  # ]:          0 :     Sequence<beans::PropertyValue> aPropSeq( bOrdered ? 1 : 4  );
    1344         [ #  # ]:          0 :     beans::PropertyValue *pProps = aPropSeq.getArray();
    1345                 :            : 
    1346                 :            :     pProps->Name =
    1347                 :          0 :                 OUString(XML_UNO_NAME_NRULE_NUMBERINGTYPE );
    1348                 :            :     (pProps++)->Value <<= (sal_Int16)(bOrdered ? NumberingType::ARABIC
    1349 [ #  # ][ #  # ]:          0 :                                                  : NumberingType::CHAR_SPECIAL );
    1350         [ #  # ]:          0 :     if( !bOrdered )
    1351                 :            :     {
    1352                 :            :         // TODO: Bullet-Font
    1353                 :          0 :         awt::FontDescriptor aFDesc;
    1354                 :            :         aFDesc.Name = OUString(
    1355                 :            : #if defined UNX
    1356                 :            :                         "starbats"
    1357                 :            : #else
    1358                 :            :                         "StarBats"
    1359                 :            : #endif
    1360                 :          0 :                                         );
    1361                 :          0 :         aFDesc.Family = FAMILY_DONTKNOW ;
    1362                 :          0 :         aFDesc.Pitch = PITCH_DONTKNOW ;
    1363                 :          0 :         aFDesc.CharSet = RTL_TEXTENCODING_SYMBOL ;
    1364                 :          0 :         aFDesc.Weight = WEIGHT_DONTKNOW;
    1365                 :            :         pProps->Name =
    1366                 :          0 :                     OUString(XML_UNO_NAME_NRULE_BULLET_FONT );
    1367         [ #  # ]:          0 :         (pProps++)->Value <<= aFDesc;
    1368                 :            : 
    1369                 :          0 :         OUStringBuffer sTmp(1);
    1370         [ #  # ]:          0 :         sTmp.append( (sal_Unicode)(0xF000 + 149) );
    1371                 :            :         pProps->Name =
    1372                 :          0 :                     OUString(XML_UNO_NAME_NRULE_BULLET_CHAR );
    1373 [ #  # ][ #  # ]:          0 :         (pProps++)->Value <<= sTmp.makeStringAndClear();
    1374                 :            :         pProps->Name =
    1375                 :          0 :                 OUString(XML_UNO_NAME_NRULE_CHAR_STYLE_NAME );
    1376         [ #  # ]:          0 :         (pProps++)->Value <<= OUString( "Numbering Symbols"  );
    1377                 :            :     }
    1378                 :            : 
    1379                 :          0 :     Any aAny;
    1380         [ #  # ]:          0 :     aAny <<= aPropSeq;
    1381 [ #  # ][ #  # ]:          0 :     rNumRule->replaceByIndex( nLevel, aAny );
                 [ #  # ]
    1382                 :          0 : }
    1383                 :            : 
    1384                 :            : /* vim:set shiftwidth=4 softtabstop=4 expandtab: */

Generated by: LCOV version 1.10