LCOV - code coverage report
Current view: top level - xmloff/source/draw - XMLNumberStyles.cxx (source / functions) Hit Total Coverage
Test: libreoffice_filtered.info Lines: 1 176 0.6 %
Date: 2012-08-25 Functions: 1 30 3.3 %
Legend: Lines: hit not hit | Branches: + taken - not taken # not executed Branches: 0 230 0.0 %

           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 <tools/debug.hxx>
      30                 :            : #include <XMLNumberStylesExport.hxx>
      31                 :            : #include <XMLNumberStylesImport.hxx>
      32                 :            : #include "xmloff/xmlnmspe.hxx"
      33                 :            : #include <xmloff/xmlimp.hxx>
      34                 :            : #include <xmloff/nmspmap.hxx>
      35                 :            : #include <xmloff/xmltoken.hxx>
      36                 :            : 
      37                 :            : #include "sdxmlexp_impl.hxx"
      38                 :            : #include "sdxmlimp_impl.hxx"
      39                 :            : 
      40                 :            : using namespace ::xmloff::token;
      41                 :            : 
      42                 :            : using ::rtl::OUString;
      43                 :            : 
      44                 :            : struct SdXMLDataStyleNumber
      45                 :            : {
      46                 :            :     enum XMLTokenEnum meNumberStyle;
      47                 :            :     sal_Bool    mbLong;
      48                 :            :     sal_Bool    mbTextual;
      49                 :            :     sal_Bool    mbDecimal02;
      50                 :            :     const char* mpText;
      51                 :            : }
      52                 :            :     aSdXMLDataStyleNumbers[] =
      53                 :            : {
      54                 :            :     { XML_DAY,          sal_False,      sal_False,      sal_False,      NULL },
      55                 :            :     { XML_DAY,          sal_True,       sal_False,      sal_False,      NULL },
      56                 :            :     { XML_MONTH,        sal_True,       sal_False,      sal_False,      NULL },
      57                 :            :     { XML_MONTH,        sal_False,      sal_True,       sal_False,      NULL },
      58                 :            :     { XML_MONTH,        sal_True,       sal_True,       sal_False,      NULL },
      59                 :            :     { XML_YEAR,         sal_False,      sal_False,      sal_False,      NULL },
      60                 :            :     { XML_YEAR,         sal_True,       sal_False,      sal_False,      NULL },
      61                 :            :     { XML_DAY_OF_WEEK,  sal_False,      sal_False,      sal_False,      NULL },
      62                 :            :     { XML_DAY_OF_WEEK,  sal_True,       sal_False,      sal_False,      NULL },
      63                 :            :     { XML_TEXT,         sal_False,      sal_False,      sal_False,      "."  },
      64                 :            :     { XML_TEXT,         sal_False,      sal_False,      sal_False,      " "  },
      65                 :            :     { XML_TEXT,         sal_False,      sal_False,      sal_False,      ", " },
      66                 :            :     { XML_TEXT,         sal_False,      sal_False,      sal_False,      ". " },
      67                 :            :     { XML_HOURS,        sal_False,      sal_False,      sal_False,      NULL },
      68                 :            :     { XML_MINUTES,      sal_False,      sal_False,      sal_False,      NULL },
      69                 :            :     { XML_TEXT,         sal_False,      sal_False,      sal_False,      ":"  },
      70                 :            :     { XML_AM_PM,        sal_False,      sal_False,      sal_False,      NULL },
      71                 :            :     { XML_SECONDS,      sal_False,      sal_False,      sal_False,      NULL },
      72                 :            :     { XML_SECONDS,      sal_False,      sal_False,      sal_True,       NULL },
      73                 :            :     { XML_TOKEN_INVALID,        0,              0,             0,       NULL  }
      74                 :            : };
      75                 :            : 
      76                 :            : // date
      77                 :            : 
      78                 :            : #define DATA_STYLE_NUMBER_END               0
      79                 :            : #define DATA_STYLE_NUMBER_DAY               1   // <number:day/>
      80                 :            : #define DATA_STYLE_NUMBER_DAY_LONG          2   // <number:day number:style="long"/>
      81                 :            : #define DATA_STYLE_NUMBER_MONTH_LONG        3   // <number:month number:style="long"/>
      82                 :            : #define DATA_STYLE_NUMBER_MONTH_TEXT        4   // <number:month number:textual="true"/>
      83                 :            : #define DATA_STYLE_NUMBER_MONTH_LONG_TEXT   5   // <number:month number:style="long" number:textual="true"/>
      84                 :            : #define DATA_STYLE_NUMBER_YEAR              6   // <number:year/>
      85                 :            : #define DATA_STYLE_NUMBER_YEAR_LONG         7   // <number:year number:style="long"/>
      86                 :            : #define DATA_STYLE_NUMBER_DAYOFWEEK         8   // <number:day-of-week/>
      87                 :            : #define DATA_STYLE_NUMBER_DAYOFWEEK_LONG    9   // <number:day-of-week number:style="long"/>
      88                 :            : #define DATA_STYLE_NUMBER_TEXT_POINT        10  // <number:text>.</number:text>
      89                 :            : #define DATA_STYLE_NUMBER_TEXT_SPACE        11  // <number:text> </number:text>
      90                 :            : #define DATA_STYLE_NUMBER_TEXT_COMMASPACE   12  // <number:text>, </number:text>
      91                 :            : #define DATA_STYLE_NUMBER_TEXT_POINTSPACE   13  // <number:text>. </number:text>
      92                 :            : #define DATA_STYLE_NUMBER_HOURS             14  // <number:hours/>
      93                 :            : #define DATA_STYLE_NUMBER_MINUTES           15  // <number:minutes/>
      94                 :            : #define DATA_STYLE_NUMBER_TEXT_COLON        16  // <number:text>:</number:text>
      95                 :            : #define DATA_STYLE_NUMBER_AMPM              17  // <number:am-pm/>
      96                 :            : #define DATA_STYLE_NUMBER_SECONDS           18  // <number:seconds/>
      97                 :            : #define DATA_STYLE_NUMBER_SECONDS_02        19  // <number:seconds number:/>
      98                 :            : 
      99                 :            : 
     100                 :            : struct SdXMLFixedDataStyle
     101                 :            : {
     102                 :            :     const char* mpName;
     103                 :            :     sal_Bool    mbAutomatic;
     104                 :            :     sal_Bool    mbDateStyle;
     105                 :            :     sal_uInt8   mpFormat[8];
     106                 :            : };
     107                 :            : 
     108                 :            : const SdXMLFixedDataStyle aSdXML_Standard_Short =
     109                 :            : {
     110                 :            :     "D1", sal_True, sal_True,
     111                 :            :     {
     112                 :            :         DATA_STYLE_NUMBER_DAY_LONG,
     113                 :            :         DATA_STYLE_NUMBER_TEXT_POINT,
     114                 :            :         DATA_STYLE_NUMBER_MONTH_LONG,
     115                 :            :         DATA_STYLE_NUMBER_TEXT_POINT,
     116                 :            :         DATA_STYLE_NUMBER_YEAR_LONG,
     117                 :            :         0, 0, 0
     118                 :            :     }
     119                 :            : };
     120                 :            : 
     121                 :            : const SdXMLFixedDataStyle aSdXML_Standard_Long =
     122                 :            : {
     123                 :            :     "D2", sal_True, sal_True,
     124                 :            :     {
     125                 :            :         DATA_STYLE_NUMBER_DAYOFWEEK_LONG,
     126                 :            :         DATA_STYLE_NUMBER_TEXT_COMMASPACE,
     127                 :            :         DATA_STYLE_NUMBER_DAY,
     128                 :            :         DATA_STYLE_NUMBER_TEXT_POINTSPACE,
     129                 :            :         DATA_STYLE_NUMBER_MONTH_LONG_TEXT,
     130                 :            :         DATA_STYLE_NUMBER_TEXT_SPACE,
     131                 :            :         DATA_STYLE_NUMBER_YEAR_LONG,
     132                 :            :         0
     133                 :            :     }
     134                 :            : };
     135                 :            : 
     136                 :            : const SdXMLFixedDataStyle aSdXML_DateStyle_1 =
     137                 :            : {
     138                 :            :     "D3", sal_False, sal_True,
     139                 :            :     {
     140                 :            :         DATA_STYLE_NUMBER_DAY_LONG,
     141                 :            :         DATA_STYLE_NUMBER_TEXT_POINT,
     142                 :            :         DATA_STYLE_NUMBER_MONTH_LONG,
     143                 :            :         DATA_STYLE_NUMBER_TEXT_POINT,
     144                 :            :         DATA_STYLE_NUMBER_YEAR,
     145                 :            :         0, 0, 0
     146                 :            :     }
     147                 :            : };
     148                 :            : 
     149                 :            : const SdXMLFixedDataStyle aSdXML_DateStyle_2 =
     150                 :            : {
     151                 :            :     "D4", sal_False, sal_True,
     152                 :            :     {
     153                 :            :         DATA_STYLE_NUMBER_DAY_LONG,
     154                 :            :         DATA_STYLE_NUMBER_TEXT_POINT,
     155                 :            :         DATA_STYLE_NUMBER_MONTH_LONG,
     156                 :            :         DATA_STYLE_NUMBER_TEXT_POINT,
     157                 :            :         DATA_STYLE_NUMBER_YEAR_LONG,
     158                 :            :         0, 0, 0
     159                 :            :     }
     160                 :            : };
     161                 :            : 
     162                 :            : const SdXMLFixedDataStyle aSdXML_DateStyle_3 =
     163                 :            : {
     164                 :            :     "D5", sal_False, sal_True,
     165                 :            :     {
     166                 :            :         DATA_STYLE_NUMBER_DAY,
     167                 :            :         DATA_STYLE_NUMBER_TEXT_POINTSPACE,
     168                 :            :         DATA_STYLE_NUMBER_MONTH_TEXT,
     169                 :            :         DATA_STYLE_NUMBER_TEXT_SPACE,
     170                 :            :         DATA_STYLE_NUMBER_YEAR_LONG,
     171                 :            :         0, 0, 0
     172                 :            :     }
     173                 :            : };
     174                 :            : 
     175                 :            : const SdXMLFixedDataStyle aSdXML_DateStyle_4 =
     176                 :            : {
     177                 :            :     "D6", sal_False, sal_True,
     178                 :            :     {
     179                 :            :         DATA_STYLE_NUMBER_DAY,
     180                 :            :         DATA_STYLE_NUMBER_TEXT_POINTSPACE,
     181                 :            :         DATA_STYLE_NUMBER_MONTH_LONG_TEXT,
     182                 :            :         DATA_STYLE_NUMBER_TEXT_SPACE,
     183                 :            :         DATA_STYLE_NUMBER_YEAR_LONG,
     184                 :            :         0, 0, 0
     185                 :            :     }
     186                 :            : };
     187                 :            : 
     188                 :            : const SdXMLFixedDataStyle aSdXML_DateStyle_5 =
     189                 :            : {
     190                 :            :     "D7", sal_False, sal_True,
     191                 :            :     {
     192                 :            :         DATA_STYLE_NUMBER_DAYOFWEEK,
     193                 :            :         DATA_STYLE_NUMBER_TEXT_COMMASPACE,
     194                 :            :         DATA_STYLE_NUMBER_DAY,
     195                 :            :         DATA_STYLE_NUMBER_TEXT_POINTSPACE,
     196                 :            :         DATA_STYLE_NUMBER_MONTH_LONG_TEXT,
     197                 :            :         DATA_STYLE_NUMBER_TEXT_SPACE,
     198                 :            :         DATA_STYLE_NUMBER_YEAR_LONG,
     199                 :            :         0
     200                 :            :     }
     201                 :            : };
     202                 :            : 
     203                 :            : const SdXMLFixedDataStyle aSdXML_DateStyle_6 =
     204                 :            : {
     205                 :            :     "D8", sal_False, sal_True,
     206                 :            :     {
     207                 :            :         DATA_STYLE_NUMBER_DAYOFWEEK_LONG,
     208                 :            :         DATA_STYLE_NUMBER_TEXT_COMMASPACE,
     209                 :            :         DATA_STYLE_NUMBER_DAY,
     210                 :            :         DATA_STYLE_NUMBER_TEXT_POINTSPACE,
     211                 :            :         DATA_STYLE_NUMBER_MONTH_LONG_TEXT,
     212                 :            :         DATA_STYLE_NUMBER_TEXT_SPACE,
     213                 :            :         DATA_STYLE_NUMBER_YEAR_LONG,
     214                 :            :         0
     215                 :            :     }
     216                 :            : };
     217                 :            : 
     218                 :            : const SdXMLFixedDataStyle aSdXML_TimeStyle_1 =
     219                 :            : {   "T1", sal_True, sal_False,
     220                 :            :     {
     221                 :            :         DATA_STYLE_NUMBER_HOURS,
     222                 :            :         DATA_STYLE_NUMBER_TEXT_COLON,
     223                 :            :         DATA_STYLE_NUMBER_MINUTES,
     224                 :            :         DATA_STYLE_NUMBER_TEXT_COLON,
     225                 :            :         DATA_STYLE_NUMBER_SECONDS,
     226                 :            :         DATA_STYLE_NUMBER_AMPM,
     227                 :            :         0, 0,
     228                 :            :     }
     229                 :            : };
     230                 :            : 
     231                 :            : const SdXMLFixedDataStyle aSdXML_TimeStyle_2 =
     232                 :            : {   "T2", sal_False, sal_False,
     233                 :            :     {
     234                 :            :         DATA_STYLE_NUMBER_HOURS,
     235                 :            :         DATA_STYLE_NUMBER_TEXT_COLON,
     236                 :            :         DATA_STYLE_NUMBER_MINUTES,
     237                 :            :         0, 0, 0, 0, 0
     238                 :            :     }
     239                 :            : };
     240                 :            : 
     241                 :            : const SdXMLFixedDataStyle aSdXML_TimeStyle_3 =
     242                 :            : {   "T3", sal_False, sal_False,
     243                 :            :     {
     244                 :            :         DATA_STYLE_NUMBER_HOURS,
     245                 :            :         DATA_STYLE_NUMBER_TEXT_COLON,
     246                 :            :         DATA_STYLE_NUMBER_MINUTES,
     247                 :            :         DATA_STYLE_NUMBER_TEXT_COLON,
     248                 :            :         DATA_STYLE_NUMBER_SECONDS,
     249                 :            :         0, 0, 0
     250                 :            :     }
     251                 :            : };
     252                 :            : 
     253                 :            : const SdXMLFixedDataStyle aSdXML_TimeStyle_4 =
     254                 :            : {   "T4", sal_False, sal_False,
     255                 :            :     {
     256                 :            :         DATA_STYLE_NUMBER_HOURS,
     257                 :            :         DATA_STYLE_NUMBER_TEXT_COLON,
     258                 :            :         DATA_STYLE_NUMBER_MINUTES,
     259                 :            :         DATA_STYLE_NUMBER_TEXT_COLON,
     260                 :            :         DATA_STYLE_NUMBER_SECONDS_02,
     261                 :            :         0, 0, 0
     262                 :            :     }
     263                 :            : };
     264                 :            : 
     265                 :            : const SdXMLFixedDataStyle aSdXML_TimeStyle_5 =
     266                 :            : {   "T5", sal_False, sal_False,
     267                 :            :     {
     268                 :            :         DATA_STYLE_NUMBER_HOURS,
     269                 :            :         DATA_STYLE_NUMBER_TEXT_COLON,
     270                 :            :         DATA_STYLE_NUMBER_MINUTES,
     271                 :            :         DATA_STYLE_NUMBER_AMPM,
     272                 :            :         0, 0, 0, 0
     273                 :            :     }
     274                 :            : };
     275                 :            : 
     276                 :            : const SdXMLFixedDataStyle aSdXML_TimeStyle_6 =
     277                 :            : {   "T6", sal_False, sal_False,
     278                 :            :     {
     279                 :            :         DATA_STYLE_NUMBER_HOURS,
     280                 :            :         DATA_STYLE_NUMBER_TEXT_COLON,
     281                 :            :         DATA_STYLE_NUMBER_MINUTES,
     282                 :            :         DATA_STYLE_NUMBER_TEXT_COLON,
     283                 :            :         DATA_STYLE_NUMBER_SECONDS,
     284                 :            :         DATA_STYLE_NUMBER_AMPM,
     285                 :            :         0, 0
     286                 :            :     }
     287                 :            : };
     288                 :            : 
     289                 :            : const SdXMLFixedDataStyle aSdXML_TimeStyle_7 =
     290                 :            : {   "T7", sal_False, sal_False,
     291                 :            :     {
     292                 :            :         DATA_STYLE_NUMBER_HOURS,
     293                 :            :         DATA_STYLE_NUMBER_TEXT_COLON,
     294                 :            :         DATA_STYLE_NUMBER_MINUTES,
     295                 :            :         DATA_STYLE_NUMBER_TEXT_COLON,
     296                 :            :         DATA_STYLE_NUMBER_SECONDS_02,
     297                 :            :         DATA_STYLE_NUMBER_AMPM,
     298                 :            :         0, 0
     299                 :            :     }
     300                 :            : };
     301                 :            : 
     302                 :            : const SdXMLFixedDataStyle* aSdXMLFixedDateFormats[SdXMLDateFormatCount] =
     303                 :            : {
     304                 :            :     &aSdXML_Standard_Short,
     305                 :            :     &aSdXML_Standard_Long,
     306                 :            :     &aSdXML_DateStyle_1,
     307                 :            :     &aSdXML_DateStyle_2,
     308                 :            :     &aSdXML_DateStyle_3,
     309                 :            :     &aSdXML_DateStyle_4,
     310                 :            :     &aSdXML_DateStyle_5,
     311                 :            :     &aSdXML_DateStyle_6,
     312                 :            : };
     313                 :            : 
     314                 :            : const SdXMLFixedDataStyle* aSdXMLFixedTimeFormats[SdXMLTimeFormatCount] =
     315                 :            : {
     316                 :            :     &aSdXML_TimeStyle_1,
     317                 :            :     &aSdXML_TimeStyle_2,
     318                 :            :     &aSdXML_TimeStyle_3,
     319                 :            :     &aSdXML_TimeStyle_4,
     320                 :            :     &aSdXML_TimeStyle_5,
     321                 :            :     &aSdXML_TimeStyle_6,
     322                 :            :     &aSdXML_TimeStyle_7
     323                 :            : };
     324                 :            : 
     325                 :            : 
     326                 :            : ///////////////////////////////////////////////////////////////////////
     327                 :            : // export
     328                 :            : 
     329                 :          0 : static void SdXMLExportDataStyleNumber( SdXMLExport& rExport, SdXMLDataStyleNumber& rElement )
     330                 :            : {
     331         [ #  # ]:          0 :     if( rElement.mbDecimal02 )
     332                 :            :     {
     333         [ #  # ]:          0 :         rExport.AddAttribute( XML_NAMESPACE_NUMBER, XML_DECIMAL_PLACES, XML_2 );
     334                 :            :     }
     335                 :            : 
     336         [ #  # ]:          0 :     if( rElement.mbLong )
     337                 :            :     {
     338         [ #  # ]:          0 :         rExport.AddAttribute( XML_NAMESPACE_NUMBER, XML_STYLE, XML_LONG );
     339                 :            :     }
     340                 :            : 
     341         [ #  # ]:          0 :     if( rElement.mbTextual )
     342                 :            :     {
     343         [ #  # ]:          0 :         rExport.AddAttribute( XML_NAMESPACE_NUMBER, XML_TEXTUAL, XML_TRUE );
     344                 :            :     }
     345                 :            : 
     346         [ #  # ]:          0 :     SvXMLElementExport aNumberStyle( rExport, XML_NAMESPACE_NUMBER, rElement.meNumberStyle, sal_True, sal_False );
     347         [ #  # ]:          0 :     if( rElement.mpText )
     348                 :            :     {
     349                 :          0 :         OUString sAttrValue( OUString::createFromAscii( rElement.mpText ) );
     350 [ #  # ][ #  # ]:          0 :         rExport.GetDocHandler()->characters( sAttrValue );
     351         [ #  # ]:          0 :     }
     352                 :          0 : }
     353                 :            : 
     354                 :          0 : static void SdXMLExportStyle( SdXMLExport& rExport, const SdXMLFixedDataStyle* pStyle, const SdXMLFixedDataStyle* pStyle2 = NULL )
     355                 :            : {
     356                 :          0 :     OUString sAttrValue;
     357                 :            : 
     358                 :            :     // name
     359                 :          0 :     sAttrValue = OUString::createFromAscii( pStyle->mpName );
     360         [ #  # ]:          0 :     if( pStyle2 )
     361                 :          0 :         sAttrValue += OUString::createFromAscii( pStyle2->mpName );
     362                 :            : 
     363         [ #  # ]:          0 :     rExport.AddAttribute( XML_NAMESPACE_STYLE, XML_NAME, sAttrValue );
     364                 :            : 
     365         [ #  # ]:          0 :     if( pStyle->mbAutomatic )
     366                 :            :     {
     367         [ #  # ]:          0 :         rExport.AddAttribute( XML_NAMESPACE_NUMBER, XML_AUTOMATIC_ORDER, XML_TRUE );
     368                 :            :     }
     369                 :            : 
     370 [ #  # ][ #  # ]:          0 :     SvXMLElementExport aElement( rExport, XML_NAMESPACE_NUMBER, pStyle->mbDateStyle ? XML_DATE_STYLE : XML_TIME_STYLE, sal_True, sal_True );
     371                 :            : 
     372         [ #  # ]:          0 :     do
     373                 :            :     {
     374                 :            : 
     375                 :          0 :         const sal_uInt8* pElements = (const sal_uInt8*)&pStyle->mpFormat[0];
     376                 :            : 
     377         [ #  # ]:          0 :         while( *pElements )
     378                 :            :         {
     379                 :          0 :             SdXMLDataStyleNumber& rElement = aSdXMLDataStyleNumbers[ (*pElements++) - 1 ];
     380         [ #  # ]:          0 :             SdXMLExportDataStyleNumber( rExport, rElement );
     381                 :            :         }
     382                 :            : 
     383         [ #  # ]:          0 :         if( pStyle2 )
     384                 :            :         {
     385                 :          0 :             SdXMLDataStyleNumber& rElement = aSdXMLDataStyleNumbers[ DATA_STYLE_NUMBER_TEXT_SPACE - 1 ];
     386         [ #  # ]:          0 :             SdXMLExportDataStyleNumber( rExport, rElement );
     387                 :            :         }
     388                 :            : 
     389                 :          0 :         pStyle = pStyle2;
     390                 :          0 :         pStyle2 = NULL;
     391                 :            :     }
     392         [ #  # ]:          0 :     while( pStyle );
     393                 :          0 : }
     394                 :            : 
     395                 :          0 : void SdXMLNumberStylesExporter::exportTimeStyle( SdXMLExport& rExport, sal_Int32 nStyle )
     396                 :            : {
     397                 :            :     DBG_ASSERT( (nStyle >= 0) && (nStyle < SdXMLTimeFormatCount), "Unknown time style!" );
     398 [ #  # ][ #  # ]:          0 :     if( (nStyle >= 0) && (nStyle < SdXMLTimeFormatCount) )
     399                 :          0 :         SdXMLExportStyle( rExport, aSdXMLFixedTimeFormats[ nStyle ] );
     400                 :          0 : }
     401                 :            : 
     402                 :          0 : void SdXMLNumberStylesExporter::exportDateStyle( SdXMLExport& rExport, sal_Int32 nStyle )
     403                 :            : {
     404         [ #  # ]:          0 :     if( nStyle > 0x0f )
     405                 :            :     {
     406                 :          0 :         int nDateStyle = nStyle & 0x0f;
     407                 :          0 :         bool bHasDate = nDateStyle != 0;
     408                 :            : 
     409         [ #  # ]:          0 :         if( nDateStyle > 1 )
     410                 :          0 :             nDateStyle -= 2;
     411                 :            : 
     412                 :            :         DBG_ASSERT( (nDateStyle >= 0) && (nDateStyle < SdXMLDateFormatCount), "unknown date style!" );
     413                 :            : 
     414                 :          0 :         int nTimeStyle = (nStyle >> 4) & 0x0f;
     415                 :          0 :         bool bHasTime = nTimeStyle != 0;
     416                 :            : 
     417         [ #  # ]:          0 :         if( nTimeStyle > 1 )
     418                 :          0 :             nTimeStyle -= 2;
     419                 :            : 
     420                 :            :         DBG_ASSERT( (nTimeStyle >= 0) && (nTimeStyle < SdXMLTimeFormatCount), "Unknown time style!" );
     421                 :            : 
     422 [ #  # ][ #  # ]:          0 :         if( (nDateStyle >= 0) && (nDateStyle < SdXMLDateFormatCount) && (nTimeStyle >= 0) && (nTimeStyle < SdXMLTimeFormatCount) )
         [ #  # ][ #  # ]
     423                 :            :         {
     424         [ #  # ]:          0 :             if( bHasDate )
     425                 :            :             {
     426         [ #  # ]:          0 :                 if( bHasTime )
     427                 :            :                 {
     428                 :          0 :                     SdXMLExportStyle( rExport, aSdXMLFixedDateFormats[ nDateStyle ], aSdXMLFixedTimeFormats[ nTimeStyle ] );
     429                 :            :                 }
     430                 :            :                 else
     431                 :            :                 {
     432                 :          0 :                     SdXMLExportStyle( rExport, aSdXMLFixedDateFormats[ nDateStyle ] );
     433                 :            :                 }
     434                 :            :             }
     435         [ #  # ]:          0 :             else if( bHasTime )
     436                 :            :             {
     437                 :          0 :                 SdXMLExportStyle( rExport, aSdXMLFixedTimeFormats[ nTimeStyle ] );
     438                 :            :             }
     439                 :            :         }
     440                 :            :     }
     441                 :            :     else
     442                 :            :     {
     443                 :            :         DBG_ASSERT( (nStyle >= 0) && (nStyle < SdXMLDateFormatCount), "unknown date style!" );
     444 [ #  # ][ #  # ]:          0 :         if( (nStyle >= 0) && (nStyle < SdXMLDateFormatCount) )
     445                 :          0 :             SdXMLExportStyle( rExport, aSdXMLFixedDateFormats[ nStyle ] );
     446                 :            :     }
     447                 :          0 : }
     448                 :            : 
     449                 :          0 : OUString SdXMLNumberStylesExporter::getTimeStyleName(const sal_Int32 nTimeFormat )
     450                 :            : {
     451                 :          0 :     sal_Int32 nFormat = nTimeFormat;
     452         [ #  # ]:          0 :     if( nFormat > 1 )
     453                 :          0 :         nFormat -= 2;
     454                 :            : 
     455 [ #  # ][ #  # ]:          0 :     if( (nFormat >= 0) && (nFormat < SdXMLTimeFormatCount) )
     456                 :            :     {
     457                 :          0 :         return OUString::createFromAscii(aSdXMLFixedTimeFormats[nFormat]->mpName );
     458                 :            :     }
     459                 :            :     else
     460                 :            :     {
     461                 :          0 :         return OUString();
     462                 :            :     }
     463                 :            : }
     464                 :            : 
     465                 :          0 : OUString SdXMLNumberStylesExporter::getDateStyleName(const sal_Int32 nDateFormat )
     466                 :            : {
     467                 :          0 :     sal_Int32 nFormat = nDateFormat;
     468                 :            : 
     469         [ #  # ]:          0 :     if( nFormat > 0x0f )
     470                 :            :     {
     471                 :          0 :         OUString aStr;
     472         [ #  # ]:          0 :         if( nFormat & 0x0f )
     473         [ #  # ]:          0 :             aStr = getDateStyleName( nFormat & 0x0f );
     474                 :          0 :         aStr += getTimeStyleName( (nFormat >> 4) & 0x0f );
     475                 :          0 :         return aStr;
     476                 :            :     }
     477                 :            : 
     478         [ #  # ]:          0 :     if( nFormat > 1 )
     479                 :          0 :         nFormat -= 2;
     480                 :            : 
     481 [ #  # ][ #  # ]:          0 :     if( (nFormat >= 0) && (nFormat < SdXMLDateFormatCount) )
     482                 :            :     {
     483                 :          0 :         return OUString::createFromAscii(aSdXMLFixedDateFormats[nFormat]->mpName );
     484                 :            :     }
     485                 :            :     else
     486                 :            :     {
     487                 :          0 :         return OUString();
     488                 :            :     }
     489                 :            : }
     490                 :            : 
     491                 :            : 
     492                 :            : ///////////////////////////////////////////////////////////////////////
     493                 :            : // import
     494                 :            : 
     495                 :            : class SdXMLNumberFormatMemberImportContext : public SvXMLImportContext
     496                 :            : {
     497                 :            : private:
     498                 :            :     SdXMLNumberFormatImportContext* mpParent;
     499                 :            : 
     500                 :            :     OUString maNumberStyle;
     501                 :            :     sal_Bool mbLong;
     502                 :            :     sal_Bool mbTextual;
     503                 :            :     sal_Bool mbDecimal02;
     504                 :            :     OUString maText;
     505                 :            :     SvXMLImportContext* mpSlaveContext;
     506                 :            : 
     507                 :            : public:
     508                 :            :     TYPEINFO();
     509                 :            : 
     510                 :            :     SdXMLNumberFormatMemberImportContext( SvXMLImport& rImport,
     511                 :            :         sal_uInt16 nPrfx,
     512                 :            :         const rtl::OUString& rLocalName,
     513                 :            :         const com::sun::star::uno::Reference< com::sun::star::xml::sax::XAttributeList>& xAttrList,
     514                 :            :         SdXMLNumberFormatImportContext* pParent,
     515                 :            :         SvXMLImportContext* pSlaveContext );
     516                 :            :     virtual ~SdXMLNumberFormatMemberImportContext();
     517                 :            : 
     518                 :            :     virtual SvXMLImportContext *CreateChildContext( sal_uInt16 nPrefix,
     519                 :            :                                    const ::rtl::OUString& rLocalName,
     520                 :            :                                    const ::com::sun::star::uno::Reference< ::com::sun::star::xml::sax::XAttributeList >& xAttrList );
     521                 :            : 
     522                 :            :     virtual void StartElement( const ::com::sun::star::uno::Reference< ::com::sun::star::xml::sax::XAttributeList >& xAttrList );
     523                 :            : 
     524                 :            :     virtual void EndElement();
     525                 :            : 
     526                 :            :     virtual void Characters( const ::rtl::OUString& rChars );
     527                 :            : };
     528                 :            : 
     529 [ #  # ][ #  # ]:          0 : TYPEINIT1( SdXMLNumberFormatMemberImportContext, SvXMLImportContext );
     530                 :            : 
     531                 :          0 : SdXMLNumberFormatMemberImportContext::SdXMLNumberFormatMemberImportContext( SvXMLImport& rImport, sal_uInt16 nPrfx, const rtl::OUString& rLocalName, const com::sun::star::uno::Reference< com::sun::star::xml::sax::XAttributeList>& xAttrList, SdXMLNumberFormatImportContext* pParent, SvXMLImportContext* pSlaveContext )
     532                 :            : :   SvXMLImportContext(rImport, nPrfx, rLocalName),
     533                 :            :     mpParent( pParent ),
     534                 :            :     maNumberStyle( rLocalName ),
     535                 :          0 :     mpSlaveContext( pSlaveContext )
     536                 :            : {
     537                 :          0 :     mbLong = sal_False;
     538                 :          0 :     mbTextual = sal_False;
     539                 :          0 :     mbDecimal02 = sal_False;
     540                 :            : 
     541 [ #  # ][ #  # ]:          0 :     const sal_Int16 nAttrCount = xAttrList.is() ? xAttrList->getLength() : 0;
                 [ #  # ]
     542         [ #  # ]:          0 :     for(sal_Int16 i=0; i < nAttrCount; i++)
     543                 :            :     {
     544 [ #  # ][ #  # ]:          0 :         OUString sAttrName = xAttrList->getNameByIndex( i );
     545                 :          0 :         OUString aLocalName;
     546         [ #  # ]:          0 :         sal_uInt16 nPrefix = GetImport().GetNamespaceMap().GetKeyByAttrName( sAttrName, &aLocalName );
     547 [ #  # ][ #  # ]:          0 :         OUString sValue = xAttrList->getValueByIndex( i );
     548                 :            : 
     549         [ #  # ]:          0 :         if( nPrefix == XML_NAMESPACE_NUMBER )
     550                 :            :         {
     551 [ #  # ][ #  # ]:          0 :             if( IsXMLToken( aLocalName, XML_DECIMAL_PLACES ) )
     552                 :            :             {
     553         [ #  # ]:          0 :                 mbDecimal02 =  IsXMLToken( sValue, XML_2 );
     554                 :            :             }
     555 [ #  # ][ #  # ]:          0 :             else if( IsXMLToken( aLocalName, XML_STYLE ) )
     556                 :            :             {
     557         [ #  # ]:          0 :                 mbLong = IsXMLToken( sValue, XML_LONG );
     558                 :            :             }
     559 [ #  # ][ #  # ]:          0 :             else if( IsXMLToken( aLocalName, XML_TEXTUAL ) )
     560                 :            :             {
     561         [ #  # ]:          0 :                 mbTextual = IsXMLToken( sValue, XML_TRUE );
     562                 :            :             }
     563                 :            :         }
     564                 :          0 :     }
     565                 :            : 
     566                 :          0 : }
     567                 :            : 
     568                 :          0 : SdXMLNumberFormatMemberImportContext::~SdXMLNumberFormatMemberImportContext()
     569                 :            : {
     570         [ #  # ]:          0 : }
     571                 :            : 
     572                 :          0 : SvXMLImportContext *SdXMLNumberFormatMemberImportContext::CreateChildContext( sal_uInt16 nPrefix,
     573                 :            :                            const ::rtl::OUString& rLocalName,
     574                 :            :                            const ::com::sun::star::uno::Reference< ::com::sun::star::xml::sax::XAttributeList >& xAttrList )
     575                 :            : {
     576                 :          0 :     return mpSlaveContext->CreateChildContext( nPrefix, rLocalName, xAttrList );
     577                 :            : }
     578                 :            : 
     579                 :          0 : void SdXMLNumberFormatMemberImportContext::StartElement( const ::com::sun::star::uno::Reference< ::com::sun::star::xml::sax::XAttributeList >& xAttrList )
     580                 :            : {
     581                 :          0 :     mpSlaveContext->StartElement( xAttrList );
     582                 :          0 : }
     583                 :            : 
     584                 :          0 : void SdXMLNumberFormatMemberImportContext::EndElement()
     585                 :            : {
     586                 :          0 :     mpSlaveContext->EndElement();
     587                 :            : 
     588         [ #  # ]:          0 :     if( mpParent )
     589                 :          0 :         mpParent->add( maNumberStyle, mbLong, mbTextual, mbDecimal02, maText );
     590                 :          0 : }
     591                 :            : 
     592                 :          0 : void SdXMLNumberFormatMemberImportContext::Characters( const ::rtl::OUString& rChars )
     593                 :            : {
     594                 :          0 :     mpSlaveContext->Characters( rChars );
     595                 :          0 :     maText += rChars;
     596                 :          0 : }
     597                 :            : 
     598 [ #  # ][ #  # ]:         12 : TYPEINIT1( SdXMLNumberFormatImportContext, SvXMLImportContext );
     599                 :            : 
     600                 :            : 
     601                 :          0 : SdXMLNumberFormatImportContext::SdXMLNumberFormatImportContext( SdXMLImport& rImport, sal_uInt16 nPrfx, const rtl::OUString& rLocalName, SvXMLNumImpData* pNewData, sal_uInt16 nNewType, const com::sun::star::uno::Reference< com::sun::star::xml::sax::XAttributeList>& xAttrList, SvXMLStylesContext& rStyles)
     602                 :            : :   SvXMLNumFormatContext(rImport, nPrfx, rLocalName, pNewData, nNewType, xAttrList, rStyles),
     603                 :            :     mbAutomatic( sal_False ),
     604                 :            :     mnIndex(0),
     605                 :          0 :     mnKey( -1 )
     606                 :            : {
     607         [ #  # ]:          0 :     mbTimeStyle = IsXMLToken( rLocalName, XML_TIME_STYLE );
     608                 :            : 
     609 [ #  # ][ #  # ]:          0 :     const sal_Int16 nAttrCount = xAttrList.is() ? xAttrList->getLength() : 0;
                 [ #  # ]
     610         [ #  # ]:          0 :     for(sal_Int16 i=0; i < nAttrCount; i++)
     611                 :            :     {
     612 [ #  # ][ #  # ]:          0 :         OUString sAttrName = xAttrList->getNameByIndex( i );
     613                 :          0 :         OUString aLocalName;
     614         [ #  # ]:          0 :         sal_uInt16 nPrefix = GetImport().GetNamespaceMap().GetKeyByAttrName( sAttrName, &aLocalName );
     615 [ #  # ][ #  # ]:          0 :         OUString sValue = xAttrList->getValueByIndex( i );
     616                 :            : 
     617         [ #  # ]:          0 :         if( nPrefix == XML_NAMESPACE_NUMBER )
     618                 :            :         {
     619 [ #  # ][ #  # ]:          0 :             if( IsXMLToken( aLocalName, XML_AUTOMATIC_ORDER ) )
     620                 :            :             {
     621         [ #  # ]:          0 :                 mbAutomatic = IsXMLToken( sValue, XML_TRUE );
     622                 :            :             }
     623                 :            :         }
     624                 :          0 :     }
     625                 :          0 : }
     626                 :            : 
     627                 :          0 : SdXMLNumberFormatImportContext::~SdXMLNumberFormatImportContext()
     628                 :            : {
     629         [ #  # ]:          0 : }
     630                 :            : 
     631                 :          0 : void SdXMLNumberFormatImportContext::add( OUString& rNumberStyle, sal_Bool bLong, sal_Bool bTextual, sal_Bool   bDecimal02, OUString& rText )
     632                 :            : {
     633 [ #  # ][ #  # ]:          0 :     if( mnIndex == -1 || mnIndex == 16 )
     634                 :            :     {
     635                 :          0 :         mnIndex = -1;
     636                 :          0 :         return;
     637                 :            :     }
     638                 :            : 
     639                 :          0 :     const SdXMLDataStyleNumber* pStyleMember = aSdXMLDataStyleNumbers;
     640         [ #  # ]:          0 :     for( sal_uInt8 nIndex = 0; pStyleMember->meNumberStyle != XML_TOKEN_INVALID; nIndex++, pStyleMember++ )
     641                 :            :     {
     642 [ #  # ][ #  # ]:          0 :         if( (IsXMLToken(rNumberStyle, pStyleMember->meNumberStyle) &&
         [ #  # ][ #  # ]
           [ #  #  #  # ]
           [ #  #  #  # ]
                 [ #  # ]
     643                 :            :             (pStyleMember->mbLong == bLong) &&
     644                 :            :             (pStyleMember->mbTextual == bTextual) &&
     645                 :            :             (pStyleMember->mbDecimal02 == bDecimal02) &&
     646                 :          0 :             ( ( (pStyleMember->mpText == NULL) && (rText.isEmpty()) ) ||
     647                 :          0 :               ( pStyleMember->mpText && (rText.compareToAscii( pStyleMember->mpText )  == 0 )) ) ) )
     648                 :            :         {
     649                 :          0 :             mnElements[mnIndex++] = nIndex + 1;
     650                 :          0 :             return;
     651                 :            :         }
     652                 :            :     }
     653                 :            : }
     654                 :            : 
     655                 :          0 : bool SdXMLNumberFormatImportContext::compareStyle( const SdXMLFixedDataStyle* pStyle, sal_Int16& nIndex ) const
     656                 :            : {
     657 [ #  # ][ #  # ]:          0 :     if( (pStyle->mbAutomatic != mbAutomatic) && (nIndex == 0))
     658                 :          0 :         return sal_False;
     659                 :            : 
     660                 :            :     sal_Int16 nCompareIndex;
     661         [ #  # ]:          0 :     for( nCompareIndex = 0; nCompareIndex < 8; nIndex++, nCompareIndex++ )
     662                 :            :     {
     663         [ #  # ]:          0 :         if( pStyle->mpFormat[nCompareIndex] != mnElements[nIndex] )
     664                 :          0 :             return sal_False;
     665                 :            :     }
     666                 :            : 
     667                 :          0 :     return sal_True;
     668                 :            : }
     669                 :            : 
     670                 :          0 : void SdXMLNumberFormatImportContext::EndElement()
     671                 :            : {
     672                 :          0 :     SvXMLNumFormatContext::EndElement();
     673                 :            : 
     674         [ #  # ]:          0 :     for( ; mnIndex < 16; mnIndex++ )
     675                 :            :     {
     676                 :          0 :         mnElements[mnIndex] = 0;
     677                 :            :     }
     678                 :            : 
     679         [ #  # ]:          0 :     if( mbTimeStyle )
     680                 :            :     {
     681                 :            :         // compare import with all time styles
     682         [ #  # ]:          0 :         for( sal_Int16 nFormat = 0; nFormat < SdXMLTimeFormatCount; nFormat++ )
     683                 :            :         {
     684                 :          0 :             sal_Int16 nIndex = 0;
     685         [ #  # ]:          0 :             if( compareStyle( aSdXMLFixedTimeFormats[nFormat], nIndex ) )
     686                 :            :             {
     687                 :          0 :                 mnKey = nFormat + 2;
     688                 :            :                 break;
     689                 :            :             }
     690                 :            :         }
     691                 :            :     }
     692                 :            :     else
     693                 :            :     {
     694                 :            :         // compare import with all date styles
     695         [ #  # ]:          0 :         for( sal_Int16 nFormat = 0; nFormat < SdXMLDateFormatCount; nFormat++ )
     696                 :            :         {
     697                 :          0 :             sal_Int16 nIndex = 0;
     698         [ #  # ]:          0 :             if( compareStyle( aSdXMLFixedDateFormats[nFormat], nIndex ) )
     699                 :            :             {
     700                 :          0 :                 mnKey = nFormat + 2;
     701                 :            :                 break;
     702                 :            :             }
     703         [ #  # ]:          0 :             else if( mnElements[nIndex] == DATA_STYLE_NUMBER_TEXT_SPACE )
     704                 :            :             {
     705                 :            :                 // if its a valid date ending with a space, see if a time style follows
     706         [ #  # ]:          0 :                 for( sal_Int16 nTimeFormat = 0; nTimeFormat < SdXMLTimeFormatCount; nTimeFormat++ )
     707                 :            :                 {
     708                 :          0 :                     sal_Int16 nIndex2 = nIndex + 1;
     709         [ #  # ]:          0 :                     if( compareStyle( aSdXMLFixedTimeFormats[nTimeFormat], nIndex2 ) )
     710                 :            :                     {
     711                 :          0 :                         mnKey = (nFormat + 2) | ((nTimeFormat + 2) << 4);
     712                 :            :                         break;
     713                 :            :                     }
     714                 :            :                 }
     715                 :            :             }
     716                 :            :         }
     717                 :            : 
     718                 :            :         // no date style found? maybe its an extended time style
     719         [ #  # ]:          0 :         if( mnKey == -1 )
     720                 :            :         {
     721                 :            :             // compare import with all time styles
     722         [ #  # ]:          0 :             for( sal_Int16 nFormat = 0; nFormat < SdXMLTimeFormatCount; nFormat++ )
     723                 :            :             {
     724                 :          0 :                 sal_Int16 nIndex = 0;
     725         [ #  # ]:          0 :                 if( compareStyle( aSdXMLFixedTimeFormats[nFormat], nIndex ) )
     726                 :            :                 {
     727                 :          0 :                     mnKey = (nFormat + 2) << 4;
     728                 :            :                     break;
     729                 :            :                 }
     730                 :            :             }
     731                 :            :         }
     732                 :            :     }
     733                 :          0 : }
     734                 :            : 
     735                 :          0 : SvXMLImportContext * SdXMLNumberFormatImportContext::CreateChildContext( sal_uInt16 nPrefix, const ::rtl::OUString& rLocalName, const com::sun::star::uno::Reference< com::sun::star::xml::sax::XAttributeList>& xAttrList )
     736                 :            : {
     737         [ #  # ]:          0 :     return new SdXMLNumberFormatMemberImportContext( GetImport(), nPrefix, rLocalName, xAttrList, this, SvXMLNumFormatContext::CreateChildContext( nPrefix, rLocalName, xAttrList ) );
     738                 :            : }
     739                 :            : 
     740                 :            : /* vim:set shiftwidth=4 softtabstop=4 expandtab: */

Generated by: LCOV version 1.10