LCOV - code coverage report
Current view: top level - usr/local/src/libreoffice/xmloff/source/style - xmlnumi.cxx (source / functions) Hit Total Coverage
Test: libreoffice_filtered.info Lines: 482 579 83.2 %
Date: 2013-07-09 Functions: 48 52 92.3 %
Legend: Lines: hit not hit

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

Generated by: LCOV version 1.10