LCOV - code coverage report
Current view: top level - libreoffice/xmloff/source/style - xmlnumi.cxx (source / functions) Hit Total Coverage
Test: libreoffice_filtered.info Lines: 447 575 77.7 %
Date: 2012-12-17 Functions: 47 52 90.4 %
Legend: Lines: hit not hit

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

Generated by: LCOV version 1.10