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

Generated by: LCOV version 1.11