LCOV - code coverage report
Current view: top level - xmloff/source/transform - StyleOOoTContext.cxx (source / functions) Hit Total Coverage
Test: libreoffice_filtered.info Lines: 369 598 61.7 %
Date: 2012-08-25 Functions: 25 43 58.1 %
Legend: Lines: hit not hit | Branches: + taken - not taken # not executed Branches: 312 785 39.7 %

           Branch data     Line data    Source code
       1                 :            : /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
       2                 :            : /*************************************************************************
       3                 :            :  *
       4                 :            :  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
       5                 :            :  *
       6                 :            :  * Copyright 2000, 2010 Oracle and/or its affiliates.
       7                 :            :  *
       8                 :            :  * OpenOffice.org - a multi-platform office productivity suite
       9                 :            :  *
      10                 :            :  * This file is part of OpenOffice.org.
      11                 :            :  *
      12                 :            :  * OpenOffice.org is free software: you can redistribute it and/or modify
      13                 :            :  * it under the terms of the GNU Lesser General Public License version 3
      14                 :            :  * only, as published by the Free Software Foundation.
      15                 :            :  *
      16                 :            :  * OpenOffice.org is distributed in the hope that it will be useful,
      17                 :            :  * but WITHOUT ANY WARRANTY; without even the implied warranty of
      18                 :            :  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
      19                 :            :  * GNU Lesser General Public License version 3 for more details
      20                 :            :  * (a copy is included in the LICENSE file that accompanied this code).
      21                 :            :  *
      22                 :            :  * You should have received a copy of the GNU Lesser General Public License
      23                 :            :  * version 3 along with OpenOffice.org.  If not, see
      24                 :            :  * <http://www.openoffice.org/license.html>
      25                 :            :  * for a copy of the LGPLv3 License.
      26                 :            :  *
      27                 :            :  ************************************************************************/
      28                 :            : 
      29                 :            : #include <com/sun/star/xml/sax/SAXParseException.hpp>
      30                 :            : #include <com/sun/star/xml/sax/SAXException.hpp>
      31                 :            : #include <com/sun/star/xml/sax/XDocumentHandler.hpp>
      32                 :            : #include <com/sun/star/xml/sax/XAttributeList.hpp>
      33                 :            : 
      34                 :            : #include <sax/tools/converter.hxx>
      35                 :            : 
      36                 :            : #include <xmloff/nmspmap.hxx>
      37                 :            : #include <xmloff/xmltoken.hxx>
      38                 :            : #include "xmloff/xmlnmspe.hxx"
      39                 :            : #include "PropType.hxx"
      40                 :            : #include "DeepTContext.hxx"
      41                 :            : #include "RenameElemTContext.hxx"
      42                 :            : #include "ProcAttrTContext.hxx"
      43                 :            : #include "ActionMapTypesOOo.hxx"
      44                 :            : #include "MutableAttrList.hxx"
      45                 :            : #include "TransformerActions.hxx"
      46                 :            : #include "PropertyActionsOOo.hxx"
      47                 :            : #include "TransformerBase.hxx"
      48                 :            : 
      49                 :            : #include "StyleOOoTContext.hxx"
      50                 :            : #include <xmloff/xmluconv.hxx>
      51                 :            : #include <rtl/ustrbuf.hxx>
      52                 :            : #include <rtl/math.hxx>
      53                 :            : 
      54                 :            : using ::rtl::OUString;
      55                 :            : using namespace ::xmloff::token;
      56                 :            : using namespace ::com::sun::star::uno;
      57                 :            : using namespace ::com::sun::star::xml::sax;
      58                 :            : 
      59                 :            : const sal_uInt16 MAX_PROP_TYPES = 4;
      60                 :            : #define ENTRY4(a,b,c,d) \
      61                 :            :     { XML_PROP_TYPE_##a, XML_PROP_TYPE_##b, \
      62                 :            :         XML_PROP_TYPE_##c, XML_PROP_TYPE_##d  }
      63                 :            : #define ENTRY3(a,b,c) \
      64                 :            :     { XML_PROP_TYPE_##a, XML_PROP_TYPE_##b,  \
      65                 :            :         XML_PROP_TYPE_##c, XML_PROP_TYPE_END }
      66                 :            : #define ENTRY2(a,b) \
      67                 :            :     { XML_PROP_TYPE_##a, XML_PROP_TYPE_##b, \
      68                 :            :         XML_PROP_TYPE_END, XML_PROP_TYPE_END }
      69                 :            : #define ENTRY1(a) \
      70                 :            :     { XML_PROP_TYPE_##a, XML_PROP_TYPE_##END, \
      71                 :            :         XML_PROP_TYPE_END, XML_PROP_TYPE_END }
      72                 :            : 
      73                 :            : static XMLPropType aPropTypes[XML_FAMILY_TYPE_END][MAX_PROP_TYPES] =
      74                 :            : {
      75                 :            :     ENTRY3( GRAPHIC, PARAGRAPH, TEXT ),         // XML_FAMILY_TYPE_GRAPHIC,
      76                 :            :     ENTRY3( GRAPHIC, PARAGRAPH, TEXT ),         // XML_FAMILY_TYPE_PRESENTATION,
      77                 :            :     ENTRY1( DRAWING_PAGE ),                     // XML_FAMILY_TYPE_DRAWING_PAGE,
      78                 :            :     ENTRY1( END ),                              // XML_FAMILY_TYPE_MASTER_PAGE
      79                 :            :     ENTRY1( PAGE_LAYOUT ),                      // XML_FAMILY_TYPE_PAGE_LAYOUT,
      80                 :            :     ENTRY1( HEADER_FOOTER ),                    // XML_FAMILY_TYPE_HEADER_FOOTER
      81                 :            :     ENTRY1( TEXT ),                             // XML_FAMILY_TYPE_TEXT,
      82                 :            :     ENTRY2( PARAGRAPH, TEXT ),                  // XML_FAMILY_TYPE_PARAGRAPH,
      83                 :            :     ENTRY1( RUBY ),                             //XML_FAMILY_TYPE_RUBY,
      84                 :            :     ENTRY1( SECTION ),                          // XML_FAMILY_TYPE_SECTION,
      85                 :            :     ENTRY1( TABLE ),                            // XML_FAMILY_TYPE_TABLE,
      86                 :            :     ENTRY1( TABLE_COLUMN ),                     // XML_FAMILY_TYPE_TABLE_COLUMN,
      87                 :            :     ENTRY1( TABLE_ROW ),                        // XML_FAMILY_TYPE_TABLE_ROW,
      88                 :            :     ENTRY3( TABLE_CELL, PARAGRAPH, TEXT ),      // XML_FAMILY_TYPE_TABLE_CELL,
      89                 :            :     ENTRY1( LIST_LEVEL ),                       // XML_FAMILY_TYPE_LIST,
      90                 :            :     ENTRY4( CHART, GRAPHIC, PARAGRAPH, TEXT ),  // XML_FAMILY_TYPE_CHART,
      91                 :            :     ENTRY1( TEXT ),                             // XML_FAMILY_TYPE_DATA,
      92                 :            :     ENTRY1( END ),                              // XML_FAMILY_TYPE_GRADIENT,
      93                 :            :     ENTRY1( END ),                              // XML_FAMILY_TYPE_HATCH,
      94                 :            :     ENTRY1( END ),                              // XML_FAMILY_TYPE_FILL_IMAGE,
      95                 :            :     ENTRY1( END ),                              // XML_FAMILY_TYPE_STROKE_DASH,
      96                 :            :     ENTRY1( END ),                              // XML_FAMILY_TYPE_MARKER,
      97                 :            :     ENTRY1( END )                               // XML_FAMILY_TYPE_PRESENTATION_PAGE_LAYOUT,
      98                 :            : };
      99                 :            : 
     100                 :            : static XMLTokenEnum aPropTokens[XML_PROP_TYPE_END] =
     101                 :            : {
     102                 :            :     XML_GRAPHIC_PROPERTIES,
     103                 :            :     XML_DRAWING_PAGE_PROPERTIES,
     104                 :            :     XML_PAGE_LAYOUT_PROPERTIES,
     105                 :            :     XML_HEADER_FOOTER_PROPERTIES,
     106                 :            :     XML_TEXT_PROPERTIES,
     107                 :            :     XML_PARAGRAPH_PROPERTIES,
     108                 :            :     XML_RUBY_PROPERTIES,
     109                 :            :     XML_SECTION_PROPERTIES,
     110                 :            :     XML_TABLE_PROPERTIES,
     111                 :            :     XML_TABLE_COLUMN_PROPERTIES,
     112                 :            :     XML_TABLE_ROW_PROPERTIES,
     113                 :            :     XML_TABLE_CELL_PROPERTIES,
     114                 :            :     XML_LIST_LEVEL_PROPERTIES,
     115                 :            :     XML_CHART_PROPERTIES
     116                 :            : };
     117                 :            : 
     118                 :            : static sal_uInt16 aAttrActionMaps[XML_PROP_TYPE_END] =
     119                 :            : {
     120                 :            :     PROP_OOO_GRAPHIC_ATTR_ACTIONS,
     121                 :            :     PROP_OOO_DRAWING_PAGE_ATTR_ACTIONS,     // DRAWING_PAGE
     122                 :            :     PROP_OOO_PAGE_LAYOUT_ATTR_ACTIONS,
     123                 :            :     PROP_OOO_HEADER_FOOTER_ATTR_ACTIONS,
     124                 :            :     PROP_OOO_TEXT_ATTR_ACTIONS,
     125                 :            :     PROP_OOO_PARAGRAPH_ATTR_ACTIONS,
     126                 :            :     MAX_OOO_PROP_ACTIONS,       // RUBY
     127                 :            :     PROP_OOO_SECTION_ATTR_ACTIONS,
     128                 :            :     PROP_OOO_TABLE_ATTR_ACTIONS,
     129                 :            :     PROP_OOO_TABLE_COLUMN_ATTR_ACTIONS,
     130                 :            :     PROP_OOO_TABLE_ROW_ATTR_ACTIONS,
     131                 :            :     PROP_OOO_TABLE_CELL_ATTR_ACTIONS,
     132                 :            :     PROP_OOO_LIST_LEVEL_ATTR_ACTIONS,
     133                 :            :     PROP_OOO_CHART_ATTR_ACTIONS
     134                 :            : };
     135                 :            : 
     136                 :            : static sal_uInt16 aElemActionMaps[XML_PROP_TYPE_END] =
     137                 :            : {
     138                 :            :     PROP_OOO_GRAPHIC_ELEM_ACTIONS,
     139                 :            :     MAX_OOO_PROP_ACTIONS,
     140                 :            :     MAX_OOO_PROP_ACTIONS,
     141                 :            :     MAX_OOO_PROP_ACTIONS,
     142                 :            :     PROP_OOO_TEXT_ELEM_ACTIONS,
     143                 :            :     PROP_OOO_PARAGRAPH_ELEM_ACTIONS,
     144                 :            :     MAX_OOO_PROP_ACTIONS,
     145                 :            :     MAX_OOO_PROP_ACTIONS,
     146                 :            :     MAX_OOO_PROP_ACTIONS,
     147                 :            :     MAX_OOO_PROP_ACTIONS,
     148                 :            :     MAX_OOO_PROP_ACTIONS,
     149                 :            :     PROP_OOO_TABLE_CELL_ELEM_ACTIONS,
     150                 :            :     MAX_OOO_PROP_ACTIONS,
     151                 :            :     PROP_OOO_CHART_ELEM_ACTIONS
     152                 :            : };
     153                 :            : 
     154                 :            : 
     155                 :            : //------------------------------------------------------------------------------
     156                 :            : 
     157                 :            : class XMLTypedPropertiesOOoTContext_Impl : public XMLPersElemContentTContext
     158                 :            : {
     159                 :            :     ::com::sun::star::uno::Reference<
     160                 :            :         ::com::sun::star::xml::sax::XAttributeList > m_xAttrList;
     161                 :            : 
     162                 :            : public:
     163                 :            : 
     164                 :            :     TYPEINFO();
     165                 :            : 
     166                 :            :     XMLTypedPropertiesOOoTContext_Impl( XMLTransformerBase& rTransformer,
     167                 :            :                            const ::rtl::OUString& rQName );
     168                 :            : 
     169                 :            :     virtual ~XMLTypedPropertiesOOoTContext_Impl();
     170                 :            : 
     171                 :            :     using XMLPersAttrListTContext::AddAttribute;
     172                 :            :     void AddAttribute( const ::rtl::OUString &sName ,
     173                 :            :                        const ::rtl::OUString &sValue );
     174                 :            :     void AddAttribute( sal_uInt16 nPrefix, XMLTokenEnum eToken,
     175                 :            :                        const ::rtl::OUString &sValue );
     176                 :            : 
     177                 :            :     virtual void StartElement( const ::com::sun::star::uno::Reference< ::com::sun::star::xml::sax::XAttributeList >& rAttrList );
     178                 :            : 
     179                 :            :     virtual void Export();
     180                 :            : };
     181                 :            : 
     182 [ #  # ][ #  # ]:          0 : TYPEINIT1( XMLTypedPropertiesOOoTContext_Impl, XMLPersElemContentTContext );
     183                 :            : 
     184                 :        887 : XMLTypedPropertiesOOoTContext_Impl::XMLTypedPropertiesOOoTContext_Impl(
     185                 :            :     XMLTransformerBase& rImp,
     186                 :            :     const OUString& rQName ) :
     187                 :            :     XMLPersElemContentTContext( rImp, rQName ),
     188 [ +  - ][ +  - ]:        887 :     m_xAttrList( new XMLMutableAttributeList() )
                 [ +  - ]
     189                 :            : {
     190                 :        887 : }
     191                 :            : 
     192                 :        887 : XMLTypedPropertiesOOoTContext_Impl::~XMLTypedPropertiesOOoTContext_Impl()
     193                 :            : {
     194         [ -  + ]:       1774 : }
     195                 :            : 
     196                 :       4406 : void XMLTypedPropertiesOOoTContext_Impl::AddAttribute(
     197                 :            :     const ::rtl::OUString &sName ,
     198                 :            :     const ::rtl::OUString &sValue )
     199                 :            : {
     200                 :       4406 :     static_cast< XMLMutableAttributeList * >( m_xAttrList.get() )
     201         [ +  - ]:       4406 :             ->AddAttribute( sName, sValue );
     202                 :       4406 : }
     203                 :            : 
     204                 :         90 : void XMLTypedPropertiesOOoTContext_Impl::AddAttribute(
     205                 :            :     sal_uInt16 nPrefix, XMLTokenEnum eToken,
     206                 :            :     const ::rtl::OUString &sValue )
     207                 :            : {
     208                 :            :     OUString sName(
     209                 :         90 :             GetTransformer().GetNamespaceMap().GetQNameByKey(
     210   [ +  -  +  - ]:        180 :                         nPrefix, ::xmloff::token::GetXMLToken( eToken ) ) );
     211         [ +  - ]:         90 :     static_cast< XMLMutableAttributeList * >( m_xAttrList.get() )
     212 [ +  - ][ +  - ]:         90 :             ->AddAttribute( sName, sValue );
     213                 :         90 : }
     214                 :            : 
     215                 :          0 : void XMLTypedPropertiesOOoTContext_Impl::StartElement(
     216                 :            :         const Reference< XAttributeList >& )
     217                 :            : {
     218                 :            :     // empty, ignore even the attribute list
     219                 :          0 : }
     220                 :            : 
     221                 :        887 : void XMLTypedPropertiesOOoTContext_Impl::Export()
     222                 :            : {
     223 [ -  + ][ #  # ]:        887 :     if( m_xAttrList->getLength() || HasElementContent() )
                 [ +  - ]
     224                 :            :     {
     225                 :        887 :         GetTransformer().GetDocHandler()->startElement( GetQName(), m_xAttrList );
     226                 :        887 :         ExportContent();
     227                 :        887 :         GetTransformer().GetDocHandler()->endElement( GetQName() );
     228                 :            :     }
     229                 :        887 : }
     230                 :            : 
     231                 :            : //------------------------------------------------------------------------------
     232                 :            : 
     233                 :            : class XMLPropertiesOOoTContext_Impl : public XMLTransformerContext
     234                 :            : {
     235                 :            :     ::rtl::Reference < XMLTypedPropertiesOOoTContext_Impl >
     236                 :            :         m_aPropContexts[MAX_PROP_TYPES];
     237                 :            : 
     238                 :            :     typedef XMLPropType XMLPropTypes[MAX_PROP_TYPES];
     239                 :            : 
     240                 :            :     XMLPropTypes m_aPropTypes;
     241                 :            : 
     242                 :            :     sal_Bool m_bPersistent;
     243                 :            : 
     244                 :            :     XMLTypedPropertiesOOoTContext_Impl *GetPropContextAndAction(
     245                 :            :             TransformerAction_Impl& rAction,
     246                 :            :             sal_uInt16 nPrefix, const OUString& rLocalName,
     247                 :            :             sal_Bool bElem );
     248                 :            : 
     249                 :            :     XMLTypedPropertiesOOoTContext_Impl *GetPropContext(
     250                 :            :             XMLPropType eType );
     251                 :            : 
     252                 :            : 
     253                 :            : public:
     254                 :            : 
     255                 :            :     TYPEINFO();
     256                 :            : 
     257                 :            :     XMLPropertiesOOoTContext_Impl( XMLTransformerBase& rTransformer,
     258                 :            :                            const ::rtl::OUString& rQName,
     259                 :            :                                XMLPropTypes& rTypes,
     260                 :            :                                sal_Bool bPersistent );
     261                 :            : 
     262                 :            :     virtual ~XMLPropertiesOOoTContext_Impl();
     263                 :            : 
     264                 :            :     XMLTransformerContext *CreateChildContext(
     265                 :            :             sal_uInt16 nPrefix,
     266                 :            :             const OUString& rLocalName,
     267                 :            :             const OUString& rQName,
     268                 :            :             const Reference< XAttributeList >& rAttrList );
     269                 :            : 
     270                 :            :     virtual void StartElement( const ::com::sun::star::uno::Reference< ::com::sun::star::xml::sax::XAttributeList >& rAttrList );
     271                 :            : 
     272                 :            :     virtual void EndElement();
     273                 :            : 
     274                 :            :     virtual void Characters( const ::rtl::OUString& rChars );
     275                 :            : 
     276                 :            :     virtual void Export();
     277                 :            : 
     278                 :            :     virtual sal_Bool IsPersistent() const;
     279                 :            : };
     280                 :            : 
     281 [ #  # ][ #  # ]:          0 : TYPEINIT1( XMLPropertiesOOoTContext_Impl, XMLTransformerContext );
     282                 :            : 
     283                 :            : XMLTypedPropertiesOOoTContext_Impl
     284                 :        115 :     *XMLPropertiesOOoTContext_Impl::GetPropContext(
     285                 :            :             XMLPropType eType )
     286                 :            : {
     287                 :        115 :     sal_uInt16 nIndex = MAX_PROP_TYPES;
     288         [ +  - ]:        230 :     for( sal_uInt16 i=0; i< MAX_PROP_TYPES; i++ )
     289                 :            :     {
     290         [ +  + ]:        230 :         if( m_aPropTypes[i] == eType )
     291                 :            :         {
     292                 :        115 :             nIndex = i;
     293                 :        115 :             break;
     294                 :            :         }
     295                 :            :     }
     296         [ -  + ]:        115 :     if( MAX_PROP_TYPES == nIndex )
     297                 :          0 :         return 0;
     298                 :            : 
     299         [ +  + ]:        115 :     if( !m_aPropContexts[nIndex].is() )
     300                 :            :     {
     301                 :         53 :         m_aPropContexts[nIndex] =
     302                 :            :             new XMLTypedPropertiesOOoTContext_Impl(
     303                 :         53 :                     GetTransformer(),
     304                 :         53 :                     GetTransformer().GetNamespaceMap().GetQNameByKey(
     305                 :            :                         XML_NAMESPACE_STYLE,
     306                 :            :                         ::xmloff::token::GetXMLToken(
     307 [ +  - ][ +  - ]:        106 :                             aPropTokens[m_aPropTypes[nIndex]] ) ));
                 [ +  - ]
     308                 :            :     }
     309                 :            : 
     310                 :        115 :     return m_aPropContexts[nIndex].get();
     311                 :            : }
     312                 :            : 
     313                 :            : 
     314                 :            : XMLTypedPropertiesOOoTContext_Impl
     315                 :       4500 :     *XMLPropertiesOOoTContext_Impl::GetPropContextAndAction(
     316                 :            :             TransformerAction_Impl& rAction,
     317                 :            :             sal_uInt16 nPrefix, const OUString& rLocalName,
     318                 :            :             sal_Bool bElem )
     319                 :            : {
     320                 :       4500 :     rAction.m_nActionType = XML_ATACTION_COPY;
     321                 :       4500 :     sal_uInt16 nIndex = 0;
     322                 :            : 
     323                 :       4500 :     XMLTransformerActions::key_type aKey( nPrefix, rLocalName );
     324                 :       4500 :     sal_uInt16 i=0;
     325 [ +  - ][ +  + ]:       8826 :     while( i < MAX_PROP_TYPES && XML_PROP_TYPE_END!=m_aPropTypes[i])
                 [ +  + ]
     326                 :            :     {
     327                 :            :         sal_uInt16 nActionMap =
     328         [ +  + ]:       8170 :             (bElem ? aElemActionMaps : aAttrActionMaps)[m_aPropTypes[i]];
     329         [ +  + ]:       8170 :         if( nActionMap < MAX_OOO_PROP_ACTIONS )
     330                 :            :         {
     331                 :            :             XMLTransformerActions *pActions =
     332         [ +  - ]:       8106 :                 GetTransformer().GetUserDefinedActions( nActionMap );
     333                 :            :             OSL_ENSURE( pActions, "go no actions" );
     334         [ +  - ]:       8106 :             if( pActions )
     335                 :            :             {
     336                 :            :                 XMLTransformerActions::const_iterator aIter =
     337         [ +  - ]:       8106 :                     pActions->find( aKey );
     338                 :            : 
     339 [ +  + ][ +  - ]:       8106 :                 if( !(aIter == pActions->end()) )
     340                 :            :                 {
     341         [ +  - ]:       3844 :                     rAction = (*aIter).second;
     342                 :       8106 :                     nIndex = i;
     343                 :            :                     break;
     344                 :            :                 }
     345                 :            :             }
     346                 :            :         }
     347                 :       4326 :         ++i;
     348                 :            :     }
     349                 :            : 
     350                 :            : #ifdef DBG_UTIL
     351                 :            :     if( !( XML_NAMESPACE_NONE == nPrefix ||
     352                 :            :                 (XML_NAMESPACE_UNKNOWN_FLAG & nPrefix) ||
     353                 :            :                 XML_PROP_TYPE_END==m_aPropTypes[1] ||
     354                 :            :                 (i<MAX_PROP_TYPES && XML_PROP_TYPE_END!=m_aPropTypes[i]) ) )
     355                 :            :     {
     356                 :            :         ::rtl::OString aTmp("Didnt't find property: ");
     357                 :            :         const ::rtl::OUString& rPrefix =
     358                 :            :             GetTransformer().GetNamespaceMap().GetPrefixByKey( nPrefix );
     359                 :            :         aTmp += ::rtl::OString( rPrefix.getStr(), rPrefix.getLength(),
     360                 :            :                                 RTL_TEXTENCODING_ASCII_US );
     361                 :            :         aTmp += ::rtl::OString::valueOf( ':' );
     362                 :            :         aTmp += ::rtl::OString( rLocalName.getStr(), rLocalName.getLength(),
     363                 :            :                                 RTL_TEXTENCODING_ASCII_US );
     364                 :            :         aTmp += ::rtl::OString(", assuming <style:");
     365                 :            :         const ::rtl::OUString& rName =
     366                 :            :             ::xmloff::token::GetXMLToken( aPropTokens[m_aPropTypes[0]] );
     367                 :            :         aTmp += ::rtl::OString( rName.getStr(), rName.getLength(),
     368                 :            :                                 RTL_TEXTENCODING_ASCII_US );
     369                 :            :         aTmp += ::rtl::OString::valueOf( '>' );
     370                 :            : 
     371                 :            :         OSL_FAIL(aTmp.getStr());
     372                 :            :     }
     373                 :            : #endif
     374                 :            : 
     375         [ +  + ]:       4500 :     if( !m_aPropContexts[nIndex].is() )
     376                 :            :     {
     377                 :        834 :         m_aPropContexts[nIndex] =
     378                 :            :             new XMLTypedPropertiesOOoTContext_Impl(
     379                 :        834 :                     GetTransformer(),
     380                 :        834 :                     GetTransformer().GetNamespaceMap().GetQNameByKey(
     381                 :            :                         XML_NAMESPACE_STYLE,
     382                 :            :                         ::xmloff::token::GetXMLToken(
     383   [ +  -  +  - ]:       1668 :                             aPropTokens[m_aPropTypes[nIndex]] ) ));
         [ +  - ][ +  - ]
                 [ +  - ]
     384                 :            :     }
     385                 :            : 
     386                 :       4500 :     return m_aPropContexts[nIndex].get();
     387                 :            : }
     388                 :            : 
     389                 :        610 : XMLPropertiesOOoTContext_Impl::XMLPropertiesOOoTContext_Impl(
     390                 :            :     XMLTransformerBase& rImp,
     391                 :            :     const OUString& rQName,
     392                 :            :     XMLPropTypes& rTypes,
     393                 :            :     sal_Bool bPersistent    ) :
     394                 :            :     XMLTransformerContext( rImp, rQName ),
     395         [ +  + ]:       3050 :     m_bPersistent( bPersistent )
     396                 :            : {
     397         [ +  + ]:       3050 :     for( sal_uInt16 i=0; i < MAX_PROP_TYPES; ++i )
     398                 :            :     {
     399                 :            :         // remember the types that belong to the attribute and element lists
     400                 :       2440 :         m_aPropTypes[i] = rTypes[i];
     401                 :            :     }
     402                 :        610 : }
     403                 :            : 
     404         [ +  - ]:       3050 : XMLPropertiesOOoTContext_Impl::~XMLPropertiesOOoTContext_Impl()
     405                 :            : {
     406 [ +  - ][ +  + ]:       4270 : }
                 [ -  + ]
     407                 :            : 
     408                 :         90 : XMLTransformerContext *XMLPropertiesOOoTContext_Impl::CreateChildContext(
     409                 :            :             sal_uInt16 nPrefix,
     410                 :            :             const OUString& rLocalName,
     411                 :            :             const OUString& rQName,
     412                 :            :             const Reference< XAttributeList >& rAttrList )
     413                 :            : {
     414                 :         90 :     TransformerAction_Impl aAction;
     415         [ +  - ]:         90 :     return GetPropContextAndAction( aAction, nPrefix, rLocalName, sal_True )
     416         [ +  - ]:         90 :                 ->CreateChildContext( nPrefix, rLocalName, rQName, rAttrList );
     417                 :            : }
     418                 :            : 
     419                 :            : 
     420                 :        610 : void XMLPropertiesOOoTContext_Impl::StartElement(
     421                 :            :         const Reference< XAttributeList >& rAttrList )
     422                 :            : {
     423                 :        610 :     Reference< XAttributeList > xAttrList( rAttrList );
     424                 :            : 
     425                 :        610 :     XMLTypedPropertiesOOoTContext_Impl * pIntervalMinorDivisorContext = 0;
     426                 :        610 :     double fIntervalMajor = 0.0;
     427                 :        610 :     double fIntervalMinor = 0.0;
     428                 :        610 :     sal_Bool bMoveProtect = sal_False;
     429                 :        610 :     sal_Bool bSizeProtect = sal_False;
     430                 :        610 :     OUString aProtectAttrValue;
     431                 :        610 :     XMLTypedPropertiesOOoTContext_Impl * pProtectContext = 0;
     432                 :            : 
     433                 :            :     /* Attribute <style:mirror> has to be priority over attribute <style:draw>.
     434                 :            :        The filter from OpenDocument file format to OpenOffice.org file format
     435                 :            :        produces styles with both attributes. (#i49139#)
     436                 :            :     */
     437                 :        610 :     sal_Bool bExistStyleMirror( sal_False );
     438                 :        610 :     OUString aStyleMirrorAttrValue;
     439                 :        610 :     sal_Bool bExistDrawMirror( sal_False );
     440                 :        610 :     OUString aDrawMirrorAttrValue;
     441                 :        610 :     XMLTypedPropertiesOOoTContext_Impl* pMirrorContext( 0L );
     442                 :            : 
     443 [ +  - ][ +  - ]:        610 :     sal_Int16 nAttrCount = xAttrList.is() ? xAttrList->getLength() : 0;
                 [ +  - ]
     444         [ +  + ]:       5020 :     for( sal_Int16 i=0; i < nAttrCount; i++ )
     445                 :            :     {
     446 [ +  - ][ +  - ]:       4410 :         const OUString sAttrName = xAttrList->getNameByIndex( i );
     447 [ +  - ][ +  - ]:       4410 :         const OUString sAttrValue = xAttrList->getValueByIndex( i );
     448                 :       4410 :         OUString aLocalName;
     449                 :            :         sal_uInt16 nPrefix =
     450                 :       4410 :             GetTransformer().GetNamespaceMap().GetKeyByAttrName( sAttrName,
     451         [ +  - ]:       4410 :                                                                  &aLocalName );
     452                 :       4410 :         TransformerAction_Impl aAction;
     453                 :            :         XMLTypedPropertiesOOoTContext_Impl *pContext =
     454         [ +  - ]:       4410 :             GetPropContextAndAction( aAction, nPrefix, aLocalName, sal_False );
     455   [ +  +  +  +  :       4410 :         switch( aAction.m_nActionType )
          +  +  -  -  +  
          +  +  -  +  +  
          +  +  -  -  +  
          -  +  -  -  -  
          +  +  +  -  +  
                   -  - ]
     456                 :            :         {
     457                 :            :         case XML_ATACTION_REMOVE:
     458                 :         32 :             break;
     459                 :            :         case XML_ATACTION_COPY:
     460         [ +  - ]:       2738 :             pContext->AddAttribute( sAttrName, sAttrValue );
     461                 :       2738 :             break;
     462                 :            :         case XML_ATACTION_COPY_DUPLICATE:
     463                 :            :             {
     464         [ +  - ]:          7 :                 pContext->AddAttribute( sAttrName, sAttrValue );
     465                 :            :                 XMLTypedPropertiesOOoTContext_Impl *pContext2 =
     466         [ +  - ]:          7 :                     GetPropContext( (XMLPropType)aAction.m_nParam1 );
     467         [ +  - ]:          7 :                 if( pContext2 )
     468         [ +  - ]:          7 :                     pContext2->AddAttribute( sAttrName, sAttrValue );
     469                 :            :             }
     470                 :          7 :             break;
     471                 :            :         case XML_ATACTION_RENAME:
     472                 :            :             {
     473                 :         48 :                 pContext->AddAttribute( aAction.GetQNamePrefixFromParam1(),
     474                 :            :                                         aAction.GetQNameTokenFromParam1(),
     475         [ +  - ]:         96 :                                         sAttrValue );
     476                 :            :             }
     477                 :         48 :             break;
     478                 :            :         case XML_ATACTION_ENCODE_STYLE_NAME_REF:
     479                 :            :             {
     480                 :         54 :                 OUString aAttrValue( sAttrValue );
     481         [ +  - ]:         54 :                 GetTransformer().EncodeStyleName(aAttrValue);
     482         [ +  - ]:         54 :                 pContext->AddAttribute( sAttrName, aAttrValue );
     483                 :            :             }
     484                 :         54 :             break;
     485                 :            :         case XML_ATACTION_RENAME_ENCODE_STYLE_NAME_REF:
     486                 :            :             {
     487                 :         32 :                 OUString aAttrValue( sAttrValue );
     488         [ +  - ]:         32 :                 GetTransformer().EncodeStyleName(aAttrValue);
     489                 :         32 :                 pContext->AddAttribute( aAction.GetQNamePrefixFromParam1(),
     490                 :            :                                         aAction.GetQNameTokenFromParam1(),
     491         [ +  - ]:         64 :                                         aAttrValue );
     492                 :            :             }
     493                 :         32 :             break;
     494                 :            :         case XML_ATACTION_NEG_PERCENT:
     495                 :            :             {
     496                 :          0 :                 OUString aAttrValue( sAttrValue );
     497         [ #  # ]:          0 :                 GetTransformer().NegPercent(aAttrValue);
     498         [ #  # ]:          0 :                 pContext->AddAttribute( sAttrName, aAttrValue );
     499                 :            :             }
     500                 :          0 :             break;
     501                 :            :         case XML_ATACTION_RENAME_NEG_PERCENT:
     502                 :            :             {
     503                 :          0 :                 OUString aAttrValue( sAttrValue );
     504         [ #  # ]:          0 :                 GetTransformer().NegPercent(aAttrValue);
     505                 :          0 :                 pContext->AddAttribute( aAction.GetQNamePrefixFromParam1(),
     506                 :            :                                         aAction.GetQNameTokenFromParam1(),
     507         [ #  # ]:          0 :                                         aAttrValue );
     508                 :            :             }
     509                 :          0 :             break;
     510                 :            :         case XML_ATACTION_INCH2IN:
     511                 :            :             {
     512                 :       1286 :                 OUString aAttrValue( sAttrValue );
     513         [ +  - ]:       1286 :                 XMLTransformerBase::ReplaceSingleInchWithIn( aAttrValue );
     514         [ +  - ]:       1286 :                 pContext->AddAttribute( sAttrName, aAttrValue );
     515                 :            :             }
     516                 :       1286 :             break;
     517                 :            :         case XML_ATACTION_INCH2IN_DUPLICATE:
     518                 :            :             {
     519                 :        108 :                 OUString aAttrValue( sAttrValue );
     520         [ +  - ]:        108 :                 XMLTransformerBase::ReplaceSingleInchWithIn( aAttrValue );
     521         [ +  - ]:        108 :                 pContext->AddAttribute( sAttrName, aAttrValue );
     522                 :            :                 XMLTypedPropertiesOOoTContext_Impl *pContext2 =
     523         [ +  - ]:        108 :                     GetPropContext( (XMLPropType)aAction.m_nParam1 );
     524         [ +  - ]:        108 :                 if( pContext2 )
     525         [ +  - ]:        108 :                     pContext2->AddAttribute( sAttrName, aAttrValue );
     526                 :            :             }
     527                 :        108 :             break;
     528                 :            :         case XML_ATACTION_INCHS2INS:
     529                 :            :             {
     530                 :         34 :                 OUString aAttrValue( sAttrValue );
     531         [ +  - ]:         34 :                 XMLTransformerBase::ReplaceInchWithIn( aAttrValue );
     532         [ +  - ]:         34 :                 pContext->AddAttribute( sAttrName, aAttrValue );
     533                 :            :             }
     534                 :         34 :             break;
     535                 :            :         case XML_PTACTION_LINE_MODE:
     536                 :            :             {
     537                 :            :                 OUString aAttrValue( GetXMLToken(
     538         [ #  # ]:          0 :                                         IsXMLToken( sAttrValue, XML_TRUE )
     539                 :            :                                             ? XML_CONTINUOUS
     540 [ #  # ][ #  # ]:          0 :                                             : XML_SKIP_WHITE_SPACE) );
     541                 :            :                 OUString aAttrQName(
     542                 :          0 :                         GetTransformer().GetNamespaceMap().GetQNameByKey(
     543                 :            :                             XML_NAMESPACE_STYLE,
     544   [ #  #  #  # ]:          0 :                             GetXMLToken( XML_TEXT_UNDERLINE_MODE ) ) );
     545         [ #  # ]:          0 :                 pContext->AddAttribute( aAttrQName, aAttrValue );
     546                 :            : 
     547                 :            :                 aAttrQName =
     548                 :          0 :                         GetTransformer().GetNamespaceMap().GetQNameByKey(
     549                 :            :                             XML_NAMESPACE_STYLE,
     550   [ #  #  #  # ]:          0 :                             GetXMLToken( XML_TEXT_LINE_THROUGH_MODE ) );
     551         [ #  # ]:          0 :                 pContext->AddAttribute( aAttrQName, aAttrValue );
     552                 :            :             }
     553                 :          0 :             break;
     554                 :            :         case XML_PTACTION_KEEP_WITH_NEXT:
     555                 :            :             {
     556                 :            :                 OUString aAttrValue( GetXMLToken(
     557         [ +  - ]:          6 :                                         IsXMLToken( sAttrValue, XML_TRUE )
     558                 :            :                                             ? XML_ALWAYS
     559 [ +  - ][ +  - ]:          6 :                                             : XML_AUTO) );
     560         [ +  - ]:          6 :                 pContext->AddAttribute( sAttrName, aAttrValue );
     561                 :            :             }
     562                 :          6 :             break;
     563                 :            :         case XML_PTACTION_UNDERLINE:
     564                 :            :             {
     565         [ +  - ]:         21 :                 XMLTokenEnum eToken = GetTransformer().GetToken( sAttrValue );
     566                 :         21 :                 sal_Bool bBold = sal_False, bDouble = sal_False;
     567   [ +  -  -  -  :         21 :                 switch( eToken )
          -  -  -  -  -  
                -  +  - ]
     568                 :            :                 {
     569                 :            :                 case XML_SINGLE:
     570                 :          8 :                     eToken = XML_SOLID;
     571                 :          8 :                     break;
     572                 :            :                 case XML_DOUBLE:
     573                 :          0 :                     eToken = XML_SOLID;
     574                 :          0 :                     bDouble = sal_True;
     575                 :          0 :                     break;
     576                 :            :                 case XML_BOLD:
     577                 :          0 :                     eToken = XML_SOLID;
     578                 :          0 :                     bBold = sal_True;
     579                 :          0 :                     break;
     580                 :            :                 case XML_BOLD_DOTTED:
     581                 :          0 :                     eToken = XML_DOTTED;
     582                 :          0 :                     bBold = sal_True;
     583                 :          0 :                     break;
     584                 :            :                 case XML_BOLD_DASH:
     585                 :          0 :                     eToken = XML_DASH;
     586                 :          0 :                     bBold = sal_True;
     587                 :          0 :                     break;
     588                 :            :                 case XML_BOLD_LONG_DASH:
     589                 :          0 :                     eToken = XML_LONG_DASH;
     590                 :          0 :                     bBold = sal_True;
     591                 :          0 :                     break;
     592                 :            :                 case XML_BOLD_DOT_DASH:
     593                 :          0 :                     eToken = XML_DOT_DASH;
     594                 :          0 :                     bBold = sal_True;
     595                 :          0 :                     break;
     596                 :            :                 case XML_BOLD_DOT_DOT_DASH:
     597                 :          0 :                     eToken = XML_DOT_DOT_DASH;
     598                 :          0 :                     bBold = sal_True;
     599                 :          0 :                     break;
     600                 :            :                 case XML_BOLD_WAVE:
     601                 :          0 :                     eToken = XML_WAVE;
     602                 :          0 :                     bBold = sal_True;
     603                 :          0 :                     break;
     604                 :            :                 case XML_DOUBLE_WAVE:
     605                 :          0 :                     eToken = XML_WAVE;
     606                 :          0 :                     bDouble = sal_True;
     607                 :          0 :                     break;
     608                 :            :                 case XML_NONE:
     609                 :         13 :                     eToken = XML_NONE;
     610                 :         13 :                     bDouble = sal_False;
     611                 :         13 :                     break;
     612                 :            :                 default:
     613                 :            :                     OSL_FAIL( "xmloff::XMLPropertiesOOoTContext_Impl::StartElement(), unknown underline token!" );
     614                 :          0 :                     break;
     615                 :            :                 }
     616                 :            :                 pContext->AddAttribute(
     617                 :         21 :                         GetTransformer().GetNamespaceMap().GetQNameByKey(
     618                 :            :                             XML_NAMESPACE_STYLE,
     619         [ +  - ]:         21 :                             GetXMLToken( XML_TEXT_UNDERLINE_STYLE ) ),
     620                 :            :                         eToken != XML_TOKEN_END ? GetXMLToken( eToken )
     621 [ +  - ][ +  - ]:         42 :                                                    : sAttrValue );
         [ +  - ][ +  - ]
     622         [ -  + ]:         21 :                 if( bDouble )
     623                 :            :                     pContext->AddAttribute(
     624                 :          0 :                             GetTransformer().GetNamespaceMap().GetQNameByKey(
     625                 :            :                                 XML_NAMESPACE_STYLE,
     626         [ #  # ]:          0 :                                 GetXMLToken( XML_TEXT_UNDERLINE_TYPE ) ),
     627   [ #  #  #  # ]:          0 :                             GetXMLToken( XML_DOUBLE ) );
                 [ #  # ]
     628         [ -  + ]:         21 :                 if( bBold )
     629                 :            :                     pContext->AddAttribute(
     630                 :          0 :                             GetTransformer().GetNamespaceMap().GetQNameByKey(
     631                 :            :                                 XML_NAMESPACE_STYLE,
     632         [ #  # ]:          0 :                                 GetXMLToken( XML_TEXT_UNDERLINE_WIDTH ) ),
     633   [ #  #  #  # ]:          0 :                             GetXMLToken( XML_BOLD ) );
                 [ #  # ]
     634                 :            :             }
     635                 :         21 :             break;
     636                 :            :         case XML_PTACTION_LINETHROUGH:
     637                 :            :             {
     638         [ +  - ]:         13 :                 XMLTokenEnum eToken = GetTransformer().GetToken( sAttrValue );
     639                 :         13 :                 sal_Bool bBold = sal_False, bDouble = sal_False;
     640                 :         13 :                 sal_Unicode c = 0;
     641   [ -  -  -  -  :         13 :                 switch( eToken )
                   -  + ]
     642                 :            :                 {
     643                 :            :                 case XML_SINGLE_LINE:
     644                 :          0 :                     eToken = XML_SOLID;
     645                 :          0 :                     break;
     646                 :            :                 case XML_DOUBLE_LINE:
     647                 :          0 :                     eToken = XML_SOLID;
     648                 :          0 :                     bDouble = sal_True;
     649                 :          0 :                     break;
     650                 :            :                 case XML_THICK_LINE:
     651                 :          0 :                     eToken = XML_SOLID;
     652                 :          0 :                     bBold = sal_True;
     653                 :          0 :                     break;
     654                 :            :                 case XML_SLASH:
     655                 :          0 :                     eToken = XML_SOLID;
     656                 :          0 :                     c = '/';
     657                 :          0 :                     break;
     658                 :            :                 case XML_uX:
     659                 :          0 :                     eToken = XML_SOLID;
     660                 :          0 :                     c = 'X';
     661                 :          0 :                     break;
     662                 :            :                 default:
     663                 :         13 :                     break;
     664                 :            :                 }
     665                 :            :                 pContext->AddAttribute(
     666                 :         13 :                         GetTransformer().GetNamespaceMap().GetQNameByKey(
     667                 :            :                             XML_NAMESPACE_STYLE,
     668         [ +  - ]:         13 :                             GetXMLToken( XML_TEXT_LINE_THROUGH_STYLE ) ),
     669                 :            :                         eToken != XML_TOKEN_END ? GetXMLToken( eToken )
     670 [ +  - ][ +  - ]:         26 :                                                    : sAttrValue );
         [ +  - ][ +  - ]
     671         [ -  + ]:         13 :                 if( bDouble )
     672                 :            :                     pContext->AddAttribute(
     673                 :          0 :                             GetTransformer().GetNamespaceMap().GetQNameByKey(
     674                 :            :                                 XML_NAMESPACE_STYLE,
     675         [ #  # ]:          0 :                                 GetXMLToken( XML_TEXT_LINE_THROUGH_TYPE ) ),
     676   [ #  #  #  # ]:          0 :                             GetXMLToken( XML_DOUBLE ) );
                 [ #  # ]
     677         [ -  + ]:         13 :                 if( bBold )
     678                 :            :                     pContext->AddAttribute(
     679                 :          0 :                             GetTransformer().GetNamespaceMap().GetQNameByKey(
     680                 :            :                                 XML_NAMESPACE_STYLE,
     681         [ #  # ]:          0 :                                 GetXMLToken( XML_TEXT_LINE_THROUGH_WIDTH ) ),
     682   [ #  #  #  # ]:          0 :                             GetXMLToken( XML_BOLD ) );
                 [ #  # ]
     683         [ -  + ]:         13 :                 if( c )
     684                 :            :                     pContext->AddAttribute(
     685                 :          0 :                             GetTransformer().GetNamespaceMap().GetQNameByKey(
     686                 :            :                                 XML_NAMESPACE_STYLE,
     687         [ #  # ]:          0 :                                 GetXMLToken( XML_TEXT_LINE_THROUGH_TEXT ) ),
     688 [ #  # ][ #  # ]:          0 :                             OUString::valueOf( c ) );
     689                 :            :             }
     690                 :         13 :             break;
     691                 :            :         case XML_PTACTION_SPLINES:
     692                 :            :             {
     693                 :          6 :                 sal_Int32 nSplineType = sAttrValue.toInt32();
     694                 :          6 :                 OUString aNewAttrName = GetTransformer().GetNamespaceMap().GetQNameByKey(
     695   [ +  -  +  - ]:         12 :                     XML_NAMESPACE_CHART, GetXMLToken( XML_INTERPOLATION ) );
     696                 :            : 
     697   [ +  -  -  - ]:          6 :                 switch( nSplineType )
     698                 :            :                 {
     699                 :            :                     // straight lines
     700                 :            :                     case 0:
     701                 :            :                         pContext->AddAttribute(
     702 [ +  - ][ +  - ]:          6 :                             aNewAttrName, GetXMLToken( XML_NONE ));
     703                 :          6 :                         break;
     704                 :            :                     // cubic spline
     705                 :            :                     case 1:
     706                 :            :                         pContext->AddAttribute(
     707 [ #  # ][ #  # ]:          0 :                             aNewAttrName, GetXMLToken( XML_CUBIC_SPLINE ));
     708                 :          0 :                         break;
     709                 :            :                     // B-spline
     710                 :            :                     case 2:
     711                 :            :                         pContext->AddAttribute(
     712 [ #  # ][ #  # ]:          0 :                             aNewAttrName, GetXMLToken( XML_B_SPLINE ));
     713                 :          0 :                         break;
     714                 :            : 
     715                 :            :                     default:
     716                 :            :                         OSL_FAIL( "invalid spline type" );
     717                 :            :                         pContext->AddAttribute(
     718 [ #  # ][ #  # ]:          0 :                             aNewAttrName, GetXMLToken( XML_NONE ));
     719                 :          0 :                         break;
     720                 :          6 :                 }
     721                 :            :             }
     722                 :          6 :             break;
     723                 :            :         case XML_PTACTION_INTERVAL_MAJOR:
     724         [ #  # ]:          0 :             pContext->AddAttribute( sAttrName, sAttrValue );
     725         [ #  # ]:          0 :             ::sax::Converter::convertDouble( fIntervalMajor, sAttrValue );
     726                 :          0 :             break;
     727                 :            :         case XML_PTACTION_INTERVAL_MINOR:
     728         [ #  # ]:          0 :             ::sax::Converter::convertDouble( fIntervalMinor, sAttrValue );
     729                 :          0 :             pIntervalMinorDivisorContext = pContext;
     730                 :          0 :             break;
     731                 :            :         case XML_PTACTION_SYMBOL:
     732                 :            :             {
     733                 :          6 :                 sal_Int32 nSymbolType = sAttrValue.toInt32();
     734                 :          6 :                 OUString aNewAttrName = GetTransformer().GetNamespaceMap().GetQNameByKey(
     735   [ +  -  +  - ]:         12 :                     XML_NAMESPACE_CHART, GetXMLToken( XML_SYMBOL_TYPE ) );
     736                 :            : 
     737         [ -  + ]:          6 :                 if( nSymbolType >= 0 )
     738                 :            :                 {
     739 [ #  # ][ #  # ]:          0 :                     pContext->AddAttribute( aNewAttrName, GetXMLToken( XML_NAMED_SYMBOL ));
     740                 :          0 :                     enum XMLTokenEnum eToken = XML_TOKEN_INVALID;
     741   [ #  #  #  #  :          0 :                     switch( nSymbolType )
          #  #  #  #  #  
          #  #  #  #  #  
                   #  # ]
     742                 :            :                     {
     743                 :            :                         // SYMBOL0
     744                 :            :                         case 0:
     745                 :            :                             // "square" has an awkward token name
     746                 :          0 :                             eToken = XML_GRADIENTSTYLE_SQUARE;
     747                 :          0 :                             break;
     748                 :            :                         // SYMBOL1
     749                 :            :                         case 1:
     750                 :          0 :                             eToken = XML_DIAMOND;
     751                 :          0 :                             break;
     752                 :            :                         // SYMBOL2
     753                 :            :                         case 2:
     754                 :          0 :                             eToken = XML_ARROW_DOWN;
     755                 :          0 :                             break;
     756                 :            :                         // SYMBOL3
     757                 :            :                         case 3:
     758                 :          0 :                             eToken = XML_ARROW_UP;
     759                 :          0 :                             break;
     760                 :            :                         // SYMBOL4
     761                 :            :                         case 4:
     762                 :          0 :                             eToken = XML_ARROW_RIGHT;
     763                 :          0 :                             break;
     764                 :            :                         // SYMBOL5
     765                 :            :                         case 5:
     766                 :          0 :                             eToken = XML_ARROW_LEFT;
     767                 :          0 :                             break;
     768                 :            :                         // SYMBOL6
     769                 :            :                         case 6:
     770                 :          0 :                             eToken = XML_BOW_TIE;
     771                 :          0 :                             break;
     772                 :            :                         // SYMBOL7
     773                 :            :                         case 7:
     774                 :          0 :                             eToken = XML_HOURGLASS;
     775                 :          0 :                             break;
     776                 :            :                         case 8:
     777                 :          0 :                             eToken = XML_CIRCLE;
     778                 :          0 :                             break;
     779                 :            :                         case 9:
     780                 :          0 :                             eToken = XML_STAR;
     781                 :          0 :                             break;
     782                 :            :                         case 10:
     783                 :          0 :                             eToken = XML_X;
     784                 :          0 :                             break;
     785                 :            :                         case 11:
     786                 :          0 :                             eToken = XML_PLUS;
     787                 :          0 :                             break;
     788                 :            :                         case 12:
     789                 :          0 :                             eToken = XML_ASTERISK;
     790                 :          0 :                             break;
     791                 :            :                         case 13:
     792                 :          0 :                             eToken = XML_HORIZONTAL_BAR;
     793                 :          0 :                             break;
     794                 :            :                         case 14:
     795                 :          0 :                             eToken = XML_VERTICAL_BAR;
     796                 :          0 :                             break;
     797                 :            :                         default:
     798                 :            :                             OSL_FAIL( "invalid named symbol" );
     799                 :          0 :                             break;
     800                 :            :                     }
     801                 :            : 
     802         [ #  # ]:          0 :                     if( eToken != XML_TOKEN_INVALID )
     803                 :            :                     {
     804                 :          0 :                         pContext->AddAttribute( GetTransformer().GetNamespaceMap().GetQNameByKey(
     805         [ #  # ]:          0 :                                                     XML_NAMESPACE_CHART, GetXMLToken( XML_SYMBOL_NAME )),
     806   [ #  #  #  # ]:          0 :                                                 GetXMLToken( eToken ));
                 [ #  # ]
     807                 :            :                     }
     808                 :            :                 }
     809                 :            :                 else
     810                 :            :                 {
     811   [ +  -  -  - ]:          6 :                     switch( nSymbolType )
     812                 :            :                     {
     813                 :            :                         // NONE
     814                 :            :                         case -3:
     815                 :            :                             pContext->AddAttribute(
     816 [ +  - ][ +  - ]:          6 :                                 aNewAttrName, GetXMLToken( XML_NONE ));
     817                 :          6 :                             break;
     818                 :            :                             // AUTO
     819                 :            :                         case -2:
     820                 :            :                             pContext->AddAttribute(
     821 [ #  # ][ #  # ]:          0 :                                 aNewAttrName, GetXMLToken( XML_AUTOMATIC ));
     822                 :          0 :                             break;
     823                 :            :                             // BITMAPURL
     824                 :            :                         case -1:
     825                 :            :                             pContext->AddAttribute(
     826 [ #  # ][ #  # ]:          0 :                                 aNewAttrName, GetXMLToken( XML_IMAGE ));
     827                 :          0 :                             break;
     828                 :            :                         default:
     829                 :            :                             OSL_FAIL( "invalid symbol type" );
     830                 :            :                             pContext->AddAttribute(
     831 [ #  # ][ #  # ]:          0 :                                 aNewAttrName, GetXMLToken( XML_NONE ));
     832                 :          0 :                             break;
     833                 :            :                     }
     834                 :          6 :                 }
     835                 :            :             }
     836                 :          6 :             break;
     837                 :            :         case XML_PTACTION_SYMBOL_IMAGE_NAME:
     838                 :            :             {
     839                 :            :                 // create an xlink:href element for URI attribute
     840                 :            :                 XMLPersAttrListTContext *pSymbolImageContext = new XMLPersAttrListTContext(
     841                 :          0 :                     GetTransformer(), GetTransformer().GetNamespaceMap().GetQNameByKey(
     842   [ #  #  #  # ]:          0 :                         XML_NAMESPACE_CHART, GetXMLToken( XML_SYMBOL_IMAGE )));
         [ #  # ][ #  # ]
     843                 :            : 
     844                 :          0 :                 OUString aAttrValue( sAttrValue );
     845 [ #  # ][ #  # ]:          0 :                 if( GetTransformer().ConvertURIToOASIS( aAttrValue, sal_True ))
     846                 :            :                 {
     847         [ #  # ]:          0 :                     pSymbolImageContext->AddAttribute( XML_NAMESPACE_XLINK, XML_HREF, aAttrValue );
     848         [ #  # ]:          0 :                     pContext->AddContent( pSymbolImageContext );
     849                 :          0 :                 }
     850                 :            :             }
     851                 :          0 :             break;
     852                 :            : 
     853                 :            :         // #i25616#
     854                 :            :         case XML_PTACTION_TRANSPARENCY :
     855                 :            :             {
     856                 :          5 :                 OUString aAttrValue( sAttrValue );
     857         [ +  - ]:          5 :                 GetTransformer().NegPercent(aAttrValue);
     858                 :            :                 pContext->AddAttribute( XML_NAMESPACE_DRAW,
     859                 :            :                                         XML_OPACITY,
     860         [ +  - ]:          5 :                                         aAttrValue );
     861                 :            :                 pContext->AddAttribute( XML_NAMESPACE_DRAW,
     862                 :            :                                         XML_IMAGE_OPACITY,
     863         [ +  - ]:          5 :                                         aAttrValue );
     864                 :            :             }
     865                 :          5 :             break;
     866                 :            : 
     867                 :            :         case XML_PTACTION_BREAK_INSIDE:
     868                 :            :             {
     869                 :            :                 pContext->AddAttribute(
     870                 :            :                     XML_NAMESPACE_FO, XML_KEEP_TOGETHER,
     871                 :            :                     GetXMLToken(
     872         [ #  # ]:          0 :                         IsXMLToken( sAttrValue, XML_COLUMNSPLIT_AVOID )
     873                 :            :                         ? XML_ALWAYS
     874 [ #  # ][ #  # ]:          0 :                         : XML_AUTO ) );
                 [ #  # ]
     875                 :            :             }
     876                 :          0 :             break;
     877                 :            :         case XML_ATACTION_CAPTION_ESCAPE_OOO:
     878                 :            :             {
     879                 :          0 :                 OUString aAttrValue( sAttrValue );
     880         [ #  # ]:          0 :                 if( aAttrValue.indexOf( sal_Unicode('%') ) != -1 )
     881                 :            :                 {
     882                 :          0 :                     sal_Int32 nValue = 0;
     883         [ #  # ]:          0 :                     ::sax::Converter::convertPercent( nValue, sAttrValue );
     884         [ #  # ]:          0 :                     if( nValue )
     885                 :            :                     {
     886                 :          0 :                         nValue /= 100;
     887                 :          0 :                         rtl::OUStringBuffer aOut;
     888         [ #  # ]:          0 :                         ::sax::Converter::convertPercent( aOut, nValue );
     889         [ #  # ]:          0 :                         aAttrValue = aOut.makeStringAndClear();
     890                 :            :                     }
     891                 :            :                 }
     892                 :            :                 else
     893                 :            :                 {
     894         [ #  # ]:          0 :                     XMLTransformerBase::ReplaceSingleInchWithIn( aAttrValue );
     895                 :            :                 }
     896                 :            : 
     897         [ #  # ]:          0 :                 pContext->AddAttribute( sAttrName, aAttrValue );
     898                 :            :             }
     899                 :          0 :             break;
     900                 :            :         case XML_ATACTION_MOVE_PROTECT:
     901         [ #  # ]:          0 :             bMoveProtect = IsXMLToken( sAttrValue, XML_TRUE );
     902                 :          0 :             pProtectContext = pContext;
     903                 :          0 :             break;
     904                 :            :         case XML_ATACTION_SIZE_PROTECT:
     905         [ +  - ]:          2 :             bSizeProtect = IsXMLToken( sAttrValue, XML_TRUE );
     906                 :          2 :             pProtectContext = pContext;
     907                 :          2 :             break;
     908                 :            :         case XML_ATACTION_PROTECT:
     909                 :          2 :             aProtectAttrValue = sAttrValue;
     910                 :          2 :             pProtectContext = pContext;
     911                 :          2 :             break;
     912                 :            :         case XML_ATACTION_DRAW_MIRROR_OOO:   // renames draw:mirror to style:mirror and adapts values
     913                 :            :             {
     914                 :            :                 // OpenDocument file format: attribute value of <style:mirror> wrong (#i49139#)
     915                 :            :                 aDrawMirrorAttrValue =
     916         [ +  - ]:          5 :                                 GetXMLToken( IsXMLToken( sAttrValue, XML_TRUE )
     917 [ -  + ][ +  - ]:          5 :                                              ? XML_HORIZONTAL : XML_NONE );
     918                 :          5 :                 bExistDrawMirror = sal_True;
     919                 :          5 :                 pMirrorContext = pContext;
     920                 :            :             }
     921                 :          5 :             break;
     922                 :            :         // OpenDocument file format: attribute value of <style:mirror> wrong (#i49139#)
     923                 :            :         case XML_ATACTION_STYLE_MIRROR_OOO:   // adapts style:mirror values
     924                 :            :             {
     925         [ #  # ]:          0 :                 SvXMLTokenEnumerator aTokenEnum( sAttrValue );
     926                 :          0 :                 OUString aToken;
     927 [ #  # ][ #  # ]:          0 :                 while( aTokenEnum.getNextToken( aToken ) )
     928                 :            :                 {
     929         [ #  # ]:          0 :                     if ( !aStyleMirrorAttrValue.isEmpty() )
     930                 :            :                     {
     931                 :          0 :                         aStyleMirrorAttrValue += rtl::OUString(" " );
     932                 :            :                     }
     933                 :            : 
     934 [ #  # ][ #  # ]:          0 :                     if ( IsXMLToken( aToken, XML_HORIZONTAL_ON_LEFT_PAGES ) )
     935                 :            :                     {
     936         [ #  # ]:          0 :                         aStyleMirrorAttrValue += GetXMLToken( XML_HORIZONTAL_ON_EVEN );
     937                 :            :                     }
     938 [ #  # ][ #  # ]:          0 :                     else if ( IsXMLToken( aToken, XML_HORIZONTAL_ON_RIGHT_PAGES ) )
     939                 :            :                     {
     940         [ #  # ]:          0 :                         aStyleMirrorAttrValue += GetXMLToken( XML_HORIZONTAL_ON_ODD );
     941                 :            :                     }
     942                 :            :                     else
     943                 :            :                     {
     944                 :          0 :                         aStyleMirrorAttrValue += aToken;
     945                 :            :                     }
     946                 :            :                 }
     947                 :          0 :                 bExistStyleMirror = sal_True;
     948                 :          0 :                 pMirrorContext = pContext;
     949                 :            :             }
     950                 :          0 :             break;
     951                 :            :         case XML_ATACTION_GAMMA_OOO:        // converts double value to percentage
     952                 :            :             {
     953                 :          5 :                 double fValue = sAttrValue.toDouble();
     954         [ +  - ]:          5 :                 sal_Int32 nValue = (sal_Int32)((fValue * 100.0) + ( fValue > 0 ? 0.5 : - 0.5 ) );
     955                 :            : 
     956                 :          5 :                 rtl::OUStringBuffer aOut;
     957         [ +  - ]:          5 :                 ::sax::Converter::convertPercent( aOut, nValue );
     958         [ +  - ]:          5 :                 OUString aAttrValue( aOut.makeStringAndClear() );
     959         [ +  - ]:          5 :                 pContext->AddAttribute( sAttrName, aAttrValue );
     960                 :            :             }
     961                 :          5 :             break;
     962                 :            :         case XML_ATACTION_OPACITY_FIX:
     963                 :            :             {
     964                 :            :                 sal_Int32 nValue;
     965         [ #  # ]:          0 :                 if( sAttrValue.indexOf( sal_Unicode('%') ) != -1 )
     966                 :            :                 {
     967         [ #  # ]:          0 :                     ::sax::Converter::convertPercent( nValue, sAttrValue );
     968                 :            :                 }
     969                 :            :                 else
     970                 :            :                 {
     971                 :          0 :                     nValue = sal_Int32( sAttrValue.toDouble() * 100.0 );
     972                 :            :                 }
     973                 :          0 :                 nValue = 100 - nValue;
     974                 :            : 
     975                 :          0 :                 rtl::OUStringBuffer aOut;
     976         [ #  # ]:          0 :                 ::sax::Converter::convertPercent( aOut, nValue );
     977 [ #  # ][ #  # ]:          0 :                 pContext->AddAttribute( sAttrName, aOut.makeStringAndClear() );
     978                 :            :             }
     979                 :          0 :             break;
     980                 :            :         default:
     981                 :            :             OSL_ENSURE( !this, "unknown action" );
     982                 :          0 :             break;
     983                 :            :         }
     984                 :       4410 :     }
     985                 :            : 
     986                 :            :     // OpenDocument file format: attribute value of <style:mirror> wrong (#i49139#)
     987         [ -  + ]:        610 :     if ( bExistStyleMirror )
     988                 :            :     {
     989                 :            :         pMirrorContext->AddAttribute(
     990                 :          0 :                         GetTransformer().GetNamespaceMap().GetQNameByKey(
     991         [ #  # ]:          0 :                                 XML_NAMESPACE_STYLE, GetXMLToken( XML_MIRROR ) ),
     992 [ #  # ][ #  # ]:          0 :                         aStyleMirrorAttrValue);
     993                 :            :     }
     994         [ +  + ]:        610 :     else if ( bExistDrawMirror )
     995                 :            :     {
     996                 :            :         pMirrorContext->AddAttribute(
     997                 :          5 :                         GetTransformer().GetNamespaceMap().GetQNameByKey(
     998         [ +  - ]:          5 :                                 XML_NAMESPACE_STYLE, GetXMLToken( XML_MIRROR ) ),
     999 [ +  - ][ +  - ]:          5 :                         aDrawMirrorAttrValue);
    1000                 :            :     }
    1001                 :            : 
    1002 [ +  - ][ +  + ]:        610 :     if( bMoveProtect || bSizeProtect || !aProtectAttrValue.isEmpty() )
         [ -  + ][ +  + ]
    1003                 :            :     {
    1004 [ +  - ][ +  - ]:          2 :         if( (bMoveProtect ||bSizeProtect) && IsXMLToken( aProtectAttrValue, XML_NONE ) )
         [ +  - ][ -  + ]
                 [ -  + ]
    1005                 :          0 :             aProtectAttrValue = OUString();
    1006                 :            : 
    1007         [ +  - ]:          2 :         const OUString& rPosition = GetXMLToken( XML_POSITION );
    1008 [ -  + ][ #  # ]:          2 :         if( bMoveProtect && -1 == aProtectAttrValue.indexOf( rPosition ) )
                 [ -  + ]
    1009                 :            :         {
    1010         [ #  # ]:          0 :             if( !aProtectAttrValue.isEmpty() )
    1011                 :          0 :                 aProtectAttrValue += OUString::valueOf( sal_Unicode( ' ' ) );
    1012                 :          0 :             aProtectAttrValue += rPosition;
    1013                 :            :         }
    1014                 :            : 
    1015         [ +  - ]:          2 :         const OUString& rSize = GetXMLToken( XML_SIZE );
    1016 [ +  - ][ -  + ]:          2 :         if( bSizeProtect && -1 == aProtectAttrValue.indexOf( rSize ) )
                 [ -  + ]
    1017                 :            :         {
    1018         [ #  # ]:          0 :             if( !aProtectAttrValue.isEmpty() )
    1019                 :          0 :                 aProtectAttrValue += OUString::valueOf( sal_Unicode( ' ' ) );
    1020                 :          0 :             aProtectAttrValue += rSize;
    1021                 :            :         }
    1022                 :            : 
    1023 [ +  - ][ +  - ]:          2 :         pProtectContext->AddAttribute( GetTransformer().GetNamespaceMap().GetQNameByKey( XML_NAMESPACE_STYLE, GetXMLToken( XML_PROTECT ) ), aProtectAttrValue );
                 [ +  - ]
    1024                 :            :     }
    1025                 :            : 
    1026         [ -  + ]:        610 :     if( pIntervalMinorDivisorContext )
    1027                 :            :     {
    1028         [ #  # ]:          0 :         if( fIntervalMinor != 0.0 )
    1029                 :            :         {
    1030                 :            :             sal_Int32 nIntervalMinorDivisor = static_cast< sal_Int32 >(
    1031                 :          0 :                 ::rtl::math::round( fIntervalMajor / fIntervalMinor ));
    1032                 :            : 
    1033                 :          0 :             ::rtl::OUStringBuffer aBuf;
    1034         [ #  # ]:          0 :             ::sax::Converter::convertNumber( aBuf, nIntervalMinorDivisor );
    1035                 :            :             pIntervalMinorDivisorContext->AddAttribute(
    1036                 :          0 :                 GetTransformer().GetNamespaceMap().GetQNameByKey(
    1037                 :            :                     XML_NAMESPACE_CHART,
    1038         [ #  # ]:          0 :                     GetXMLToken( XML_INTERVAL_MINOR_DIVISOR )),
    1039   [ #  #  #  # ]:          0 :                 aBuf.makeStringAndClear());
                 [ #  # ]
    1040                 :            :         }
    1041                 :        610 :     }
    1042                 :        610 : }
    1043                 :            : 
    1044                 :        610 : void XMLPropertiesOOoTContext_Impl::EndElement()
    1045                 :            : {
    1046         [ +  + ]:        610 :     if( !m_bPersistent )
    1047                 :        510 :         Export();
    1048                 :        610 : }
    1049                 :            : 
    1050                 :          0 : void XMLPropertiesOOoTContext_Impl::Characters( const OUString& )
    1051                 :            : {
    1052                 :            :     // ignore them
    1053                 :          0 : }
    1054                 :            : 
    1055                 :        610 : void XMLPropertiesOOoTContext_Impl::Export()
    1056                 :            : {
    1057                 :            : 
    1058         [ +  + ]:       3050 :     for( sal_uInt16 i=0; i < MAX_PROP_TYPES; i++ )
    1059                 :            :     {
    1060         [ +  + ]:       2440 :         if( m_aPropContexts[i].is() )
    1061                 :        887 :             m_aPropContexts[i]->Export();
    1062                 :            :     }
    1063                 :        610 : }
    1064                 :            : 
    1065                 :          0 : sal_Bool XMLPropertiesOOoTContext_Impl::IsPersistent() const
    1066                 :            : {
    1067                 :          0 :     return m_bPersistent;
    1068                 :            : }
    1069                 :            : 
    1070                 :            : 
    1071                 :            : //------------------------------------------------------------------------------
    1072                 :            : 
    1073 [ #  # ][ #  # ]:          0 : TYPEINIT1( XMLStyleOOoTContext, XMLPersElemContentTContext );
    1074                 :            : 
    1075                 :        725 : XMLStyleOOoTContext::XMLStyleOOoTContext( XMLTransformerBase& rImp,
    1076                 :            :                                             const OUString& rQName,
    1077                 :            :                                                 XMLFamilyType eT,
    1078                 :            :                                              sal_Bool bPersistent ) :
    1079                 :            :     XMLPersElemContentTContext( rImp, rQName ),
    1080                 :            :     m_eFamily( eT ),
    1081                 :        725 :     m_bPersistent( bPersistent )
    1082                 :            : {
    1083                 :        725 : }
    1084                 :            : 
    1085                 :         44 : XMLStyleOOoTContext::XMLStyleOOoTContext(
    1086                 :            :         XMLTransformerBase& rImp,
    1087                 :            :           const OUString& rQName,
    1088                 :            :         XMLFamilyType eT,
    1089                 :            :         sal_uInt16 nPrefix,
    1090                 :            :         ::xmloff::token::XMLTokenEnum eToken,
    1091                 :            :            sal_Bool bPersistent ) :
    1092                 :            :     XMLPersElemContentTContext( rImp, rQName, nPrefix, eToken ),
    1093                 :            :     m_eFamily( eT ),
    1094                 :         44 :     m_bPersistent( bPersistent )
    1095                 :            : {
    1096                 :         44 : }
    1097                 :            : 
    1098                 :        769 : XMLStyleOOoTContext::~XMLStyleOOoTContext()
    1099                 :            : {
    1100         [ -  + ]:       1538 : }
    1101                 :            : 
    1102                 :        872 : XMLTransformerContext *XMLStyleOOoTContext::CreateChildContext(
    1103                 :            :             sal_uInt16 nPrefix,
    1104                 :            :             const OUString& rLocalName,
    1105                 :            :             const OUString& rQName,
    1106                 :            :             const Reference< XAttributeList >& rAttrList )
    1107                 :            : {
    1108                 :        872 :     XMLTransformerContext *pContext = 0;
    1109                 :            : 
    1110   [ +  +  +  + ]:       1538 :     if( XML_NAMESPACE_STYLE == nPrefix &&
                 [ +  + ]
    1111                 :        666 :         IsXMLToken( rLocalName, XML_PROPERTIES ) )
    1112                 :            :     {
    1113         [ -  + ]:        610 :         if( aPropTypes[m_eFamily][0] == XML_PROP_TYPE_END )
    1114                 :            :         {
    1115                 :            :             OSL_ENSURE( !this, "unexpected properties element" );
    1116                 :            :             pContext = m_bPersistent
    1117                 :            :                             ? XMLPersElemContentTContext::CreateChildContext(
    1118                 :          0 :                                     nPrefix, rLocalName, rQName, rAttrList )
    1119                 :            :                             : XMLTransformerContext::CreateChildContext(
    1120         [ #  # ]:          0 :                                     nPrefix, rLocalName, rQName, rAttrList );
    1121                 :            :         }
    1122         [ +  + ]:        610 :         else if( aPropTypes[m_eFamily][1] == XML_PROP_TYPE_END )
    1123                 :            :         {
    1124                 :            :             sal_uInt16 nActionMap =
    1125                 :        311 :                 aAttrActionMaps[aPropTypes[m_eFamily][0]];
    1126         [ +  - ]:        311 :             if( nActionMap < MAX_OOO_PROP_ACTIONS )
    1127                 :            :             {
    1128                 :            :                 pContext = new XMLPropertiesOOoTContext_Impl(
    1129                 :        311 :                                     GetTransformer(), rQName,
    1130         [ +  - ]:        311 :                                     aPropTypes[m_eFamily], m_bPersistent );
    1131                 :            :             }
    1132                 :            :             else
    1133                 :            :             {
    1134         [ #  # ]:          0 :                 if( m_bPersistent )
    1135                 :            :                     pContext = new XMLPersElemContentTContext(
    1136                 :          0 :                                     GetTransformer(), rQName,
    1137                 :            :                                     XML_NAMESPACE_STYLE,
    1138         [ #  # ]:          0 :                                     aPropTokens[aPropTypes[m_eFamily][0]] );
    1139                 :            :                 else
    1140                 :            :                     pContext = new XMLRenameElemTransformerContext(
    1141                 :          0 :                                     GetTransformer(), rQName,
    1142                 :            :                                     XML_NAMESPACE_STYLE,
    1143         [ #  # ]:          0 :                                     aPropTokens[aPropTypes[m_eFamily][0]] );
    1144                 :            :             }
    1145                 :            :         }
    1146                 :            :         else
    1147                 :            :         {
    1148                 :            :             pContext = new XMLPropertiesOOoTContext_Impl(
    1149                 :        299 :                                 GetTransformer(), rQName,
    1150         [ +  - ]:        299 :                                 aPropTypes[m_eFamily], m_bPersistent);
    1151                 :            :         }
    1152                 :            : 
    1153         [ +  + ]:        610 :         if( m_bPersistent )
    1154                 :        100 :             AddContent( pContext );
    1155                 :            :     }
    1156                 :            :     else
    1157                 :            :     {
    1158                 :            :         pContext = m_bPersistent
    1159                 :            :                         ? XMLPersElemContentTContext::CreateChildContext(
    1160                 :        100 :                                 nPrefix, rLocalName, rQName, rAttrList )
    1161                 :            :                         : XMLTransformerContext::CreateChildContext(
    1162         [ +  + ]:        262 :                                 nPrefix, rLocalName, rQName, rAttrList );
    1163                 :            :     }
    1164                 :            : 
    1165                 :        872 :     return pContext;
    1166                 :            : }
    1167                 :            : 
    1168                 :        769 : void XMLStyleOOoTContext::StartElement(
    1169                 :            :         const Reference< XAttributeList >& rAttrList )
    1170                 :            : {
    1171                 :            :     XMLTransformerActions *pActions =
    1172         [ +  - ]:        769 :         GetTransformer().GetUserDefinedActions( OOO_STYLE_ACTIONS );
    1173                 :            :     OSL_ENSURE( pActions, "go no actions" );
    1174                 :            : 
    1175                 :        769 :     Reference< XAttributeList > xAttrList( rAttrList );
    1176                 :        769 :     XMLMutableAttributeList *pMutableAttrList = 0;
    1177 [ +  - ][ +  - ]:        769 :     sal_Int16 nAttrCount = xAttrList.is() ? xAttrList->getLength() : 0;
                 [ +  - ]
    1178         [ +  + ]:       2610 :     for( sal_Int16 i=0; i < nAttrCount; i++ )
    1179                 :            :     {
    1180 [ +  - ][ +  - ]:       1841 :         const OUString sAttrName = xAttrList->getNameByIndex( i );
    1181                 :       1841 :         OUString aLocalName;
    1182                 :            :         sal_uInt16 nPrefix =
    1183                 :       1841 :             GetTransformer().GetNamespaceMap().GetKeyByAttrName( sAttrName,
    1184         [ +  - ]:       1841 :                                                                  &aLocalName );
    1185                 :       1841 :         XMLTransformerActions::key_type aKey( nPrefix, aLocalName );
    1186                 :            :         XMLTransformerActions::const_iterator aIter =
    1187         [ +  - ]:       1841 :             pActions->find( aKey );
    1188 [ +  + ][ +  - ]:       1841 :         if( !(aIter == pActions->end() ) )
    1189                 :            :         {
    1190         [ +  + ]:       1125 :             if( !pMutableAttrList )
    1191                 :            :             {
    1192                 :            :                 pMutableAttrList =
    1193         [ +  - ]:        521 :                     new XMLMutableAttributeList( xAttrList );
    1194 [ +  - ][ +  - ]:        521 :                 xAttrList = pMutableAttrList;
    1195                 :            :             }
    1196 [ +  - ][ +  - ]:       1125 :             const OUString sAttrValue = xAttrList->getValueByIndex( i );
    1197 [ +  - ][ +  +  :       1125 :             switch( (*aIter).second.m_nActionType )
             +  +  +  +  
                      - ]
    1198                 :            :             {
    1199                 :            :             case XML_ATACTION_STYLE_FAMILY:
    1200                 :            :                 {
    1201                 :        403 :                     sal_Bool bControl = sal_False;
    1202         [ +  + ]:        403 :                     if( XML_FAMILY_TYPE_END == m_eFamily )
    1203                 :            :                     {
    1204 [ +  - ][ +  + ]:        382 :                         if( IsXMLToken( sAttrValue, XML_GRAPHICS ) )
    1205                 :         96 :                             m_eFamily = XML_FAMILY_TYPE_GRAPHIC;
    1206 [ +  - ][ +  + ]:        286 :                         else if( IsXMLToken( sAttrValue, XML_PRESENTATION ) )
    1207                 :         40 :                             m_eFamily = XML_FAMILY_TYPE_PRESENTATION;
    1208 [ +  - ][ +  + ]:        246 :                         else if( IsXMLToken( sAttrValue, XML_DRAWING_PAGE ) )
    1209                 :         12 :                             m_eFamily = XML_FAMILY_TYPE_DRAWING_PAGE;
    1210 [ +  - ][ +  + ]:        234 :                         else if( IsXMLToken( sAttrValue, XML_TEXT) )
    1211                 :          4 :                             m_eFamily = XML_FAMILY_TYPE_TEXT;
    1212 [ +  - ][ +  + ]:        230 :                         else if( IsXMLToken( sAttrValue, XML_PARAGRAPH) )
    1213                 :         67 :                             m_eFamily = XML_FAMILY_TYPE_PARAGRAPH;
    1214 [ +  - ][ -  + ]:        163 :                         else if( IsXMLToken( sAttrValue, XML_RUBY) )
    1215                 :          0 :                             m_eFamily = XML_FAMILY_TYPE_RUBY;
    1216 [ +  - ][ -  + ]:        163 :                         else if( IsXMLToken( sAttrValue, XML_SECTION) )
    1217                 :          0 :                             m_eFamily = XML_FAMILY_TYPE_SECTION;
    1218 [ +  - ][ +  + ]:        163 :                         else if( IsXMLToken( sAttrValue, XML_TABLE) )
    1219                 :         14 :                             m_eFamily = XML_FAMILY_TYPE_TABLE;
    1220 [ +  - ][ +  + ]:        149 :                         else if( IsXMLToken( sAttrValue, XML_TABLE_COLUMN) )
    1221                 :          8 :                             m_eFamily = XML_FAMILY_TYPE_TABLE_COLUMN;
    1222 [ +  - ][ +  + ]:        141 :                         else if( IsXMLToken( sAttrValue, XML_TABLE_ROW) )
    1223                 :         14 :                             m_eFamily = XML_FAMILY_TYPE_TABLE_ROW;
    1224 [ +  - ][ +  + ]:        127 :                         else if( IsXMLToken( sAttrValue, XML_TABLE_CELL) )
    1225                 :         49 :                             m_eFamily = XML_FAMILY_TYPE_TABLE_CELL;
    1226 [ +  - ][ +  - ]:         78 :                         else if( IsXMLToken( sAttrValue, XML_CHART) )
    1227                 :         78 :                             m_eFamily = XML_FAMILY_TYPE_CHART;
    1228 [ #  # ][ #  # ]:          0 :                         else if( IsXMLToken( sAttrValue, XML_CONTROL) )
    1229                 :            :                         {
    1230                 :          0 :                             m_eFamily = XML_FAMILY_TYPE_PARAGRAPH;
    1231                 :          0 :                             bControl = sal_True;
    1232                 :            :                         }
    1233                 :            :                     }
    1234         [ +  + ]:        403 :                     if( XML_FAMILY_TYPE_GRAPHIC == m_eFamily )
    1235                 :            :                     {
    1236                 :            :                         pMutableAttrList->SetValueByIndex( i,
    1237 [ +  - ][ +  - ]:         96 :                                                 GetXMLToken( XML_GRAPHIC ) );
    1238                 :            :                     }
    1239         [ -  + ]:        307 :                     else if( bControl )
    1240                 :            :                     {
    1241                 :            :                         pMutableAttrList->SetValueByIndex( i,
    1242 [ #  # ][ #  # ]:          0 :                                                 GetXMLToken( XML_PARAGRAPH ) );
    1243                 :            :                     }
    1244                 :            :                 }
    1245                 :        403 :                 break;
    1246                 :            :             case XML_ATACTION_INCH2IN:
    1247                 :            :                 {
    1248                 :         12 :                     OUString aAttrValue( sAttrValue );
    1249         [ -  + ]:         12 :                     if( XMLTransformerBase::ReplaceSingleInchWithIn(
    1250         [ +  - ]:         12 :                                 aAttrValue ) )
    1251         [ #  # ]:         12 :                         pMutableAttrList->SetValueByIndex( i, aAttrValue );
    1252                 :            :                 }
    1253                 :         12 :                 break;
    1254                 :            :             case XML_ATACTION_ENCODE_STYLE_NAME:
    1255                 :            :                 {
    1256                 :        479 :                     OUString aAttrValue( sAttrValue );
    1257 [ +  + ][ +  - ]:        479 :                     if( GetTransformer().EncodeStyleName(aAttrValue) )
    1258                 :            :                     {
    1259         [ +  - ]:         63 :                         pMutableAttrList->SetValueByIndex( i, aAttrValue );
    1260                 :            :                         OUString aNewAttrQName(
    1261                 :         63 :                             GetTransformer().GetNamespaceMap().
    1262                 :            :                                 GetQNameByKey(
    1263                 :            :                                     nPrefix, ::xmloff::token::GetXMLToken(
    1264   [ +  -  +  - ]:        126 :                                         XML_DISPLAY_NAME ) ) );
    1265                 :            :                         pMutableAttrList->AddAttribute( aNewAttrQName,
    1266         [ +  - ]:         63 :                                                         sAttrValue );
    1267                 :        479 :                     }
    1268                 :            :                 }
    1269                 :        479 :                 break;
    1270                 :            :             case XML_ATACTION_ENCODE_STYLE_NAME_REF:
    1271                 :            :                 {
    1272                 :        191 :                     OUString aAttrValue( sAttrValue );
    1273 [ +  + ][ +  - ]:        191 :                     if( GetTransformer().EncodeStyleName(aAttrValue) )
    1274         [ +  - ]:        191 :                         pMutableAttrList->SetValueByIndex( i, aAttrValue );
    1275                 :            :                 }
    1276                 :        191 :                 break;
    1277                 :            :             case XML_ATACTION_NEG_PERCENT:
    1278                 :            :                 {
    1279                 :         28 :                     OUString aAttrValue( sAttrValue );
    1280 [ +  - ][ +  - ]:         28 :                     if( GetTransformer().NegPercent(aAttrValue) )
    1281         [ +  - ]:         28 :                         pMutableAttrList->SetValueByIndex( i, aAttrValue );
    1282                 :            :                 }
    1283                 :         28 :                 break;
    1284                 :            :             case XML_ATACTION_URI_OOO:
    1285                 :            :                 {
    1286                 :         12 :                     OUString aAttrValue( sAttrValue );
    1287         [ +  - ]:         24 :                     if( GetTransformer().ConvertURIToOASIS( aAttrValue,
    1288   [ +  -  +  - ]:         24 :                             static_cast< sal_Bool >((*aIter).second.m_nParam1)))
    1289         [ +  - ]:         12 :                         pMutableAttrList->SetValueByIndex( i, aAttrValue );
    1290                 :            :                 }
    1291                 :         12 :                 break;
    1292                 :            :             default:
    1293                 :            :                 OSL_ENSURE( !this, "unknown action" );
    1294                 :          0 :                 break;
    1295                 :       1125 :             }
    1296                 :            :         }
    1297                 :       1841 :     }
    1298         [ -  + ]:        769 :     if( XML_FAMILY_TYPE_END == m_eFamily )
    1299                 :          0 :         m_eFamily = XML_FAMILY_TYPE_TEXT;
    1300         [ +  + ]:        769 :     if( m_bPersistent )
    1301         [ +  - ]:        110 :         XMLPersElemContentTContext::StartElement( xAttrList );
    1302                 :            :     else
    1303         [ +  - ]:        659 :         GetTransformer().GetDocHandler()->startElement( GetExportQName(),
    1304         [ +  - ]:        769 :                                                         xAttrList );
    1305                 :        769 : }
    1306                 :            : 
    1307                 :        769 : void XMLStyleOOoTContext::EndElement()
    1308                 :            : {
    1309         [ +  + ]:        769 :     if( m_bPersistent )
    1310                 :        110 :         XMLPersElemContentTContext::EndElement();
    1311                 :            :     else
    1312                 :        659 :         GetTransformer().GetDocHandler()->endElement( GetExportQName() );
    1313                 :        769 : }
    1314                 :            : 
    1315                 :         16 : void XMLStyleOOoTContext::Characters( const OUString& )
    1316                 :            : {
    1317                 :            :     // element content only:
    1318                 :         16 : }
    1319                 :            : 
    1320                 :        110 : sal_Bool XMLStyleOOoTContext::IsPersistent() const
    1321                 :            : {
    1322                 :        110 :     return m_bPersistent;
    1323                 :            : }
    1324                 :            : 
    1325                 :        218 : XMLTransformerActions *XMLStyleOOoTContext::CreateTransformerActions(
    1326                 :            :         sal_uInt16 nType )
    1327                 :            : {
    1328                 :        218 :     XMLTransformerActionInit *pInit = 0;
    1329                 :            : 
    1330   [ +  +  +  +  :        218 :     switch( nType )
          +  +  -  +  +  
          -  +  +  +  +  
             -  +  +  -  
                      - ]
    1331                 :            :     {
    1332                 :            :     case PROP_OOO_GRAPHIC_ATTR_ACTIONS:
    1333                 :         32 :         pInit = aGraphicPropertyOOoAttrActionTable;
    1334                 :         32 :         break;
    1335                 :            :     case PROP_OOO_GRAPHIC_ELEM_ACTIONS:
    1336                 :         16 :         pInit = aGraphicPropertyOOoElemActionTable;
    1337                 :         16 :         break;
    1338                 :            :     case PROP_OOO_DRAWING_PAGE_ATTR_ACTIONS:
    1339                 :          6 :         pInit = aDrawingPagePropertyOOoAttrActionTable;
    1340                 :          6 :         break;
    1341                 :            :     case PROP_OOO_PAGE_LAYOUT_ATTR_ACTIONS:
    1342                 :         18 :         pInit = aPageLayoutPropertyOOoAttrActionTable;
    1343                 :         18 :         break;
    1344                 :            :     case PROP_OOO_HEADER_FOOTER_ATTR_ACTIONS:
    1345                 :          8 :         pInit = aHeaderFooterPropertyOOoAttrActionTable;
    1346                 :          8 :         break;
    1347                 :            :     case PROP_OOO_TEXT_ATTR_ACTIONS:
    1348                 :         28 :         pInit = aTextPropertyOOoAttrActionTable;
    1349                 :         28 :         break;
    1350                 :            :     case PROP_OOO_TEXT_ELEM_ACTIONS:
    1351                 :          0 :         pInit = aTextPropertyOOoElemActionTable;
    1352                 :          0 :         break;
    1353                 :            :     case PROP_OOO_PARAGRAPH_ATTR_ACTIONS:
    1354                 :         35 :         pInit = aParagraphPropertyOOoAttrActionTable;
    1355                 :         35 :         break;
    1356                 :            :     case PROP_OOO_PARAGRAPH_ELEM_ACTIONS:
    1357                 :         16 :         pInit = aParagraphPropertyOOoElemActionTable;
    1358                 :         16 :         break;
    1359                 :            :     case PROP_OOO_SECTION_ATTR_ACTIONS:
    1360                 :          0 :         pInit = aSectionPropertyOOoAttrActionTable;
    1361                 :          0 :         break;
    1362                 :            :     case PROP_OOO_TABLE_ATTR_ACTIONS:
    1363                 :         14 :         pInit = aTablePropertyOOoAttrActionTable;
    1364                 :         14 :         break;
    1365                 :            :     case PROP_OOO_TABLE_COLUMN_ATTR_ACTIONS:
    1366                 :          8 :         pInit = aTableColumnPropertyOOoAttrActionTable;
    1367                 :          8 :         break;
    1368                 :            :     case PROP_OOO_TABLE_ROW_ATTR_ACTIONS:
    1369                 :         14 :         pInit = aTableRowPropertyOOoAttrActionTable;
    1370                 :         14 :         break;
    1371                 :            :     case PROP_OOO_TABLE_CELL_ATTR_ACTIONS:
    1372                 :          9 :         pInit = aTableCellPropertyOOoAttrActionTable;
    1373                 :          9 :         break;
    1374                 :            :     case PROP_OOO_TABLE_CELL_ELEM_ACTIONS:
    1375                 :          0 :         pInit = aTableCellPropertyOOoElemActionTable;
    1376                 :          0 :         break;
    1377                 :            :     case PROP_OOO_LIST_LEVEL_ATTR_ACTIONS:
    1378                 :          8 :         pInit = aListLevelPropertyOOoAttrActionTable;
    1379                 :          8 :         break;
    1380                 :            :     case PROP_OOO_CHART_ATTR_ACTIONS:
    1381                 :          6 :         pInit = aChartPropertyOOoAttrActionTable;
    1382                 :          6 :         break;
    1383                 :            :     case PROP_OOO_CHART_ELEM_ACTIONS:
    1384                 :          0 :         pInit = aChartPropertyOOoElemActionTable;
    1385                 :          0 :         break;
    1386                 :            :     }
    1387                 :            : 
    1388                 :        218 :     XMLTransformerActions *pActions = 0;
    1389         [ +  - ]:        218 :     if( pInit )
    1390         [ +  - ]:        218 :         pActions = new XMLTransformerActions( pInit );
    1391                 :            : 
    1392                 :        218 :     return pActions;
    1393                 :            : }
    1394                 :            : 
    1395                 :            : /* vim:set shiftwidth=4 softtabstop=4 expandtab: */

Generated by: LCOV version 1.10