LCOV - code coverage report
Current view: top level - sc/source/filter/excel - xlstyle.cxx (source / functions) Hit Total Coverage
Test: commit e02a6cb2c3e2b23b203b422e4e0680877f232636 Lines: 0 495 0.0 %
Date: 2014-04-14 Functions: 0 72 0.0 %
Legend: Lines: hit not hit

          Line data    Source code
       1             : /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
       2             : /*
       3             :  * This file is part of the LibreOffice project.
       4             :  *
       5             :  * This Source Code Form is subject to the terms of the Mozilla Public
       6             :  * License, v. 2.0. If a copy of the MPL was not distributed with this
       7             :  * file, You can obtain one at http://mozilla.org/MPL/2.0/.
       8             :  *
       9             :  * This file incorporates work covered by the following license notice:
      10             :  *
      11             :  *   Licensed to the Apache Software Foundation (ASF) under one or more
      12             :  *   contributor license agreements. See the NOTICE file distributed
      13             :  *   with this work for additional information regarding copyright
      14             :  *   ownership. The ASF licenses this file to you under the Apache
      15             :  *   License, Version 2.0 (the "License"); you may not use this file
      16             :  *   except in compliance with the License. You may obtain a copy of
      17             :  *   the License at http://www.apache.org/licenses/LICENSE-2.0 .
      18             :  */
      19             : 
      20             : 
      21             : #include "xlstyle.hxx"
      22             : #include <com/sun/star/awt/FontFamily.hpp>
      23             : #include <com/sun/star/awt/FontSlant.hpp>
      24             : #include <com/sun/star/awt/FontUnderline.hpp>
      25             : #include <com/sun/star/i18n/ScriptType.hpp>
      26             : #include <vcl/svapp.hxx>
      27             : #include <vcl/settings.hxx>
      28             : #include <vcl/font.hxx>
      29             : #include <sal/macros.h>
      30             : #include <rtl/tencinfo.h>
      31             : #include <svtools/colorcfg.hxx>
      32             : #include <toolkit/helper/vclunohelper.hxx>
      33             : #include <editeng/svxfont.hxx>
      34             : #include "global.hxx"
      35             : #include "xlroot.hxx"
      36             : // Color data =================================================================
      37             : 
      38             : /** Standard EGA colors, bright. */
      39             : #define EXC_PALETTE_EGA_COLORS_LIGHT \
      40             :             0x000000, 0xFFFFFF, 0xFF0000, 0x00FF00, 0x0000FF, 0xFFFF00, 0xFF00FF, 0x00FFFF
      41             : /** Standard EGA colors, dark. */
      42             : #define EXC_PALETTE_EGA_COLORS_DARK \
      43             :             0x800000, 0x008000, 0x000080, 0x808000, 0x800080, 0x008080, 0xC0C0C0, 0x808080
      44             : 
      45             : /** Default color table for BIFF2. */
      46             : static const ColorData spnDefColorTable2[] =
      47             : {
      48             : /*  0 */    EXC_PALETTE_EGA_COLORS_LIGHT
      49             : };
      50             : 
      51             : /** Default color table for BIFF3/BIFF4. */
      52             : static const ColorData spnDefColorTable3[] =
      53             : {
      54             : /*  0 */    EXC_PALETTE_EGA_COLORS_LIGHT,
      55             : /*  8 */    EXC_PALETTE_EGA_COLORS_LIGHT,
      56             : /* 16 */    EXC_PALETTE_EGA_COLORS_DARK
      57             : };
      58             : 
      59             : /** Default color table for BIFF5/BIFF7. */
      60             : static const ColorData spnDefColorTable5[] =
      61             : {
      62             : /*  0 */    EXC_PALETTE_EGA_COLORS_LIGHT,
      63             : /*  8 */    EXC_PALETTE_EGA_COLORS_LIGHT,
      64             : /* 16 */    EXC_PALETTE_EGA_COLORS_DARK,
      65             : /* 24 */    0x8080FF, 0x802060, 0xFFFFC0, 0xA0E0E0, 0x600080, 0xFF8080, 0x0080C0, 0xC0C0FF,
      66             : /* 32 */    0x000080, 0xFF00FF, 0xFFFF00, 0x00FFFF, 0x800080, 0x800000, 0x008080, 0x0000FF,
      67             : /* 40 */    0x00CFFF, 0x69FFFF, 0xE0FFE0, 0xFFFF80, 0xA6CAF0, 0xDD9CB3, 0xB38FEE, 0xE3E3E3,
      68             : /* 48 */    0x2A6FF9, 0x3FB8CD, 0x488436, 0x958C41, 0x8E5E42, 0xA0627A, 0x624FAC, 0x969696,
      69             : /* 56 */    0x1D2FBE, 0x286676, 0x004500, 0x453E01, 0x6A2813, 0x85396A, 0x4A3285, 0x424242
      70             : };
      71             : 
      72             : /** Default color table for BIFF8. */
      73             : static const ColorData spnDefColorTable8[] =
      74             : {
      75             : /*  0 */    EXC_PALETTE_EGA_COLORS_LIGHT,
      76             : /*  8 */    EXC_PALETTE_EGA_COLORS_LIGHT,
      77             : /* 16 */    EXC_PALETTE_EGA_COLORS_DARK,
      78             : /* 24 */    0x9999FF, 0x993366, 0xFFFFCC, 0xCCFFFF, 0x660066, 0xFF8080, 0x0066CC, 0xCCCCFF,
      79             : /* 32 */    0x000080, 0xFF00FF, 0xFFFF00, 0x00FFFF, 0x800080, 0x800000, 0x008080, 0x0000FF,
      80             : /* 40 */    0x00CCFF, 0xCCFFFF, 0xCCFFCC, 0xFFFF99, 0x99CCFF, 0xFF99CC, 0xCC99FF, 0xFFCC99,
      81             : /* 48 */    0x3366FF, 0x33CCCC, 0x99CC00, 0xFFCC00, 0xFF9900, 0xFF6600, 0x666699, 0x969696,
      82             : /* 56 */    0x003366, 0x339966, 0x003300, 0x333300, 0x993300, 0x993366, 0x333399, 0x333333
      83             : };
      84             : 
      85             : #undef EXC_PALETTE_EGA_COLORS_LIGHT
      86             : #undef EXC_PALETTE_EGA_COLORS_DARK
      87             : 
      88           0 : XclDefaultPalette::XclDefaultPalette( const XclRoot& rRoot ) :
      89             :     mpnColorTable( 0 ),
      90           0 :     mnTableSize( 0 )
      91             : {
      92           0 :     const StyleSettings& rSett = Application::GetSettings().GetStyleSettings();
      93           0 :     mnWindowText = rSett.GetWindowTextColor().GetColor();
      94           0 :     mnWindowBack = rSett.GetWindowColor().GetColor();
      95           0 :     mnFaceColor = rSett.GetFaceColor().GetColor();
      96             :     // Don't use the system HelpBack and HelpText colours as it causes problems
      97             :     // with modern gnome. This is because mnNoteText and mnNoteBack are used
      98             :     // when colour indices ( instead of real colours ) are specified.
      99             :     // Note: That this it is not an unusual scenario that we get the Note
     100             :     // background specified as a real colour and the text specified as a
     101             :     // colour index. That means the text colour would be picked from
     102             :     // the system where the note background would be picked from a real colour.
     103             :     // Previously the the note text colour was picked from the system tooltip
     104             :     // text colour, on modern gnome(e.g. 3) that tends to be 'white' with the
     105             :     // default theme.
     106             :     // Using the the Libreoffice defaults ( instead of system specific colours
     107             :     // ) lessens the chance of the one colour being an unsuitable combination
     108             :     // because by default the note text is black and the note background is
     109             :     // a light yellow colour ( very similar to Excel's normal defaults )
     110           0 :     mnNoteText =  svtools::ColorConfig::GetDefaultColor( svtools::FONTCOLOR ).GetColor();
     111           0 :     mnNoteBack =  svtools::ColorConfig::GetDefaultColor( svtools::CALCNOTESBACKGROUND ).GetColor();
     112             : 
     113             :     // default colors
     114           0 :     switch( rRoot.GetBiff() )
     115             :     {
     116             :         case EXC_BIFF2:
     117           0 :             mpnColorTable = spnDefColorTable2;
     118           0 :             mnTableSize = SAL_N_ELEMENTS( spnDefColorTable2 );
     119           0 :         break;
     120             :         case EXC_BIFF3:
     121             :         case EXC_BIFF4:
     122           0 :             mpnColorTable = spnDefColorTable3;
     123           0 :             mnTableSize = SAL_N_ELEMENTS( spnDefColorTable3 );
     124           0 :         break;
     125             :         case EXC_BIFF5:
     126           0 :             mpnColorTable = spnDefColorTable5;
     127           0 :             mnTableSize = SAL_N_ELEMENTS( spnDefColorTable5 );
     128           0 :         break;
     129             :         case EXC_BIFF8:
     130           0 :             mpnColorTable = spnDefColorTable8;
     131           0 :             mnTableSize = SAL_N_ELEMENTS( spnDefColorTable8 );
     132           0 :         break;
     133             :         default:
     134             :             DBG_ERROR_BIFF();
     135             :     }
     136           0 : }
     137             : 
     138           0 : ColorData XclDefaultPalette::GetDefColorData( sal_uInt16 nXclIndex ) const
     139             : {
     140             :     ColorData nColor;
     141           0 :     if( nXclIndex < mnTableSize )
     142           0 :         nColor = mpnColorTable[ nXclIndex ];
     143           0 :     else switch( nXclIndex )
     144             :     {
     145             :         case EXC_COLOR_WINDOWTEXT3:
     146             :         case EXC_COLOR_WINDOWTEXT:
     147           0 :         case EXC_COLOR_CHWINDOWTEXT:    nColor = mnWindowText;  break;
     148             :         case EXC_COLOR_WINDOWBACK3:
     149             :         case EXC_COLOR_WINDOWBACK:
     150           0 :         case EXC_COLOR_CHWINDOWBACK:    nColor = mnWindowBack;  break;
     151           0 :         case EXC_COLOR_BUTTONBACK:      nColor = mnFaceColor;   break;
     152           0 :         case EXC_COLOR_CHBORDERAUTO:    nColor = COL_BLACK;     break;  // TODO: really always black?
     153           0 :         case EXC_COLOR_NOTEBACK:        nColor = mnNoteBack;    break;
     154           0 :         case EXC_COLOR_NOTETEXT:        nColor = mnNoteText;    break;
     155           0 :         case EXC_COLOR_FONTAUTO:        nColor = COL_AUTO;      break;
     156             :         default:
     157             :             OSL_TRACE( "XclDefaultPalette::GetDefColorData - unknown default color index: %d", nXclIndex );
     158           0 :             nColor = COL_AUTO;
     159             :     }
     160           0 :     return nColor;
     161             : }
     162             : 
     163             : // Font Data ==================================================================
     164             : 
     165             : namespace Awt              = ::com::sun::star::awt;
     166             : namespace AwtFontFamily    = Awt::FontFamily;
     167             : namespace AwtFontUnderline = Awt::FontUnderline;
     168             : namespace AwtFontStrikeout = Awt::FontStrikeout;
     169             : 
     170           0 : XclFontData::XclFontData()
     171             : {
     172           0 :     Clear();
     173           0 : }
     174             : 
     175           0 : XclFontData::XclFontData( const Font& rFont )
     176             : {
     177           0 :     Clear();
     178           0 :     FillFromVclFont( rFont );
     179           0 : }
     180             : 
     181           0 : XclFontData::XclFontData( const SvxFont& rFont )
     182             : {
     183           0 :     FillFromSvxFont( rFont );
     184           0 : }
     185             : 
     186           0 : void XclFontData::Clear()
     187             : {
     188           0 :     maName = "";
     189           0 :     maStyle = "";
     190           0 :     maColor.SetColor( COL_AUTO );
     191           0 :     mnHeight = 0;
     192           0 :     mnWeight = EXC_FONTWGHT_DONTKNOW;
     193           0 :     mnEscapem = EXC_FONTESC_NONE;
     194           0 :     mnFamily = EXC_FONTFAM_SYSTEM;
     195           0 :     mnCharSet = EXC_FONTCSET_ANSI_LATIN;
     196           0 :     mnUnderline = EXC_FONTUNDERL_NONE;
     197           0 :     mbItalic = mbStrikeout = mbOutline = mbShadow = false;
     198           0 : }
     199             : 
     200           0 : void XclFontData::FillFromVclFont( const Font& rFont )
     201             : {
     202           0 :     maName = XclTools::GetXclFontName( rFont.GetName() );   // substitute with MS fonts
     203           0 :     maStyle = "";
     204           0 :     maColor = rFont.GetColor();
     205           0 :     SetScUnderline( rFont.GetUnderline() );
     206           0 :     mnEscapem = EXC_FONTESC_NONE;
     207           0 :     SetScHeight( rFont.GetSize().Height() );
     208           0 :     SetScWeight( rFont.GetWeight() );
     209           0 :     SetScFamily( rFont.GetFamily() );
     210           0 :     SetFontEncoding( rFont.GetCharSet() );
     211           0 :     SetScPosture( rFont.GetItalic() );
     212           0 :     SetScStrikeout( rFont.GetStrikeout() );
     213           0 :     mbOutline = rFont.IsOutline();
     214           0 :     mbShadow = rFont.IsShadow();
     215           0 : }
     216             : 
     217           0 : void XclFontData::FillFromSvxFont( const SvxFont& rFont )
     218             : {
     219           0 :     FillFromVclFont( rFont );
     220           0 :     SetScEscapement( rFont.GetEscapement() );
     221           0 : }
     222             : 
     223             : // *** conversion of VCL/SVX constants *** ------------------------------------
     224             : 
     225           0 : FontFamily XclFontData::GetScFamily( rtl_TextEncoding eDefTextEnc ) const
     226             : {
     227             :     FontFamily eScFamily;
     228             :     // ! format differs from Windows documentation: family is in lower nibble, pitch unknown
     229           0 :     switch( mnFamily & 0x0F )
     230             :     {
     231           0 :         case EXC_FONTFAM_ROMAN:         eScFamily = FAMILY_ROMAN;       break;
     232           0 :         case EXC_FONTFAM_SWISS:         eScFamily = FAMILY_SWISS;       break;
     233           0 :         case EXC_FONTFAM_MODERN:        eScFamily = FAMILY_MODERN;      break;
     234           0 :         case EXC_FONTFAM_SCRIPT:        eScFamily = FAMILY_SCRIPT;      break;
     235           0 :         case EXC_FONTFAM_DECORATIVE:    eScFamily = FAMILY_DECORATIVE;  break;
     236             :         default:
     237             :             eScFamily =
     238           0 :                 ((eDefTextEnc == RTL_TEXTENCODING_APPLE_ROMAN) &&
     239           0 :                 (maName.equalsIgnoreAsciiCase( "Geneva" ) || maName.equalsIgnoreAsciiCase( "Chicago" ))) ?
     240           0 :                 FAMILY_SWISS : FAMILY_DONTKNOW;
     241             :     }
     242           0 :     return eScFamily;
     243             : }
     244             : 
     245           0 : rtl_TextEncoding XclFontData::GetFontEncoding() const
     246             : {
     247             :     // convert Windows character set to text encoding identifier
     248           0 :     return rtl_getTextEncodingFromWindowsCharset( mnCharSet );
     249             : }
     250             : 
     251           0 : FontItalic XclFontData::GetScPosture() const
     252             : {
     253           0 :     return mbItalic ? ITALIC_NORMAL : ITALIC_NONE;
     254             : }
     255             : 
     256           0 : FontWeight XclFontData::GetScWeight() const
     257             : {
     258             :     FontWeight eScWeight;
     259             : 
     260           0 :     if( !mnWeight )             eScWeight = WEIGHT_DONTKNOW;
     261           0 :     else if( mnWeight < 150 )   eScWeight = WEIGHT_THIN;
     262           0 :     else if( mnWeight < 250 )   eScWeight = WEIGHT_ULTRALIGHT;
     263           0 :     else if( mnWeight < 325 )   eScWeight = WEIGHT_LIGHT;
     264           0 :     else if( mnWeight < 375 )   eScWeight = WEIGHT_SEMILIGHT;
     265           0 :     else if( mnWeight < 450 )   eScWeight = WEIGHT_NORMAL;
     266           0 :     else if( mnWeight < 550 )   eScWeight = WEIGHT_MEDIUM;
     267           0 :     else if( mnWeight < 650 )   eScWeight = WEIGHT_SEMIBOLD;
     268           0 :     else if( mnWeight < 750 )   eScWeight = WEIGHT_BOLD;
     269           0 :     else if( mnWeight < 850 )   eScWeight = WEIGHT_ULTRABOLD;
     270           0 :     else                        eScWeight = WEIGHT_BLACK;
     271             : 
     272           0 :     return eScWeight;
     273             : }
     274             : 
     275           0 : FontUnderline XclFontData::GetScUnderline() const
     276             : {
     277           0 :     FontUnderline eScUnderl = UNDERLINE_NONE;
     278           0 :     switch( mnUnderline )
     279             :     {
     280             :         case EXC_FONTUNDERL_SINGLE:
     281           0 :         case EXC_FONTUNDERL_SINGLE_ACC: eScUnderl = UNDERLINE_SINGLE;  break;
     282             :         case EXC_FONTUNDERL_DOUBLE:
     283           0 :         case EXC_FONTUNDERL_DOUBLE_ACC: eScUnderl = UNDERLINE_DOUBLE;  break;
     284             :     }
     285           0 :     return eScUnderl;
     286             : }
     287             : 
     288           0 : SvxEscapement XclFontData::GetScEscapement() const
     289             : {
     290           0 :     SvxEscapement eScEscapem = SVX_ESCAPEMENT_OFF;
     291           0 :     switch( mnEscapem )
     292             :     {
     293           0 :         case EXC_FONTESC_SUPER: eScEscapem = SVX_ESCAPEMENT_SUPERSCRIPT;    break;
     294           0 :         case EXC_FONTESC_SUB:   eScEscapem = SVX_ESCAPEMENT_SUBSCRIPT;      break;
     295             :     }
     296           0 :     return eScEscapem;
     297             : }
     298             : 
     299           0 : FontStrikeout XclFontData::GetScStrikeout() const
     300             : {
     301           0 :     return mbStrikeout ? STRIKEOUT_SINGLE : STRIKEOUT_NONE;
     302             : }
     303             : 
     304           0 : void XclFontData::SetScHeight( sal_Int32 nTwips )
     305             : {
     306           0 :     mnHeight = static_cast< sal_uInt16 >( ::std::min( nTwips, static_cast<sal_Int32>(0x7FFFL) ) );
     307           0 : }
     308             : 
     309           0 : void XclFontData::SetScFamily( FontFamily eScFamily )
     310             : {
     311           0 :     switch( eScFamily )
     312             :     {
     313           0 :         case FAMILY_DONTKNOW:   mnFamily = EXC_FONTFAM_DONTKNOW;    break;
     314           0 :         case FAMILY_DECORATIVE: mnFamily = EXC_FONTFAM_DECORATIVE;  break;
     315           0 :         case FAMILY_MODERN:     mnFamily = EXC_FONTFAM_MODERN;      break;
     316           0 :         case FAMILY_ROMAN:      mnFamily = EXC_FONTFAM_ROMAN;       break;
     317           0 :         case FAMILY_SCRIPT:     mnFamily = EXC_FONTFAM_SCRIPT;      break;
     318           0 :         case FAMILY_SWISS:      mnFamily = EXC_FONTFAM_SWISS;       break;
     319           0 :         case FAMILY_SYSTEM:     mnFamily = EXC_FONTFAM_SYSTEM;      break;
     320             :         default:
     321             :             OSL_FAIL( "XclFontData::SetScFamily - unknown font family" );
     322           0 :             mnFamily = EXC_FONTFAM_DONTKNOW;
     323             :     }
     324           0 : }
     325             : 
     326           0 : void XclFontData::SetFontEncoding( rtl_TextEncoding eFontEnc )
     327             : {
     328             :     // convert text encoding identifier to Windows character set
     329           0 :     mnCharSet = rtl_getBestWindowsCharsetFromTextEncoding( eFontEnc );
     330           0 : }
     331             : 
     332             : 
     333           0 : void XclFontData::SetScPosture( FontItalic eScPosture )
     334             : {
     335           0 :     mbItalic = (eScPosture == ITALIC_OBLIQUE) || (eScPosture == ITALIC_NORMAL);
     336           0 : }
     337             : 
     338           0 : void XclFontData::SetScWeight( FontWeight eScWeight )
     339             : {
     340           0 :     switch( eScWeight )
     341             :     {
     342           0 :         case WEIGHT_DONTKNOW:   mnWeight = EXC_FONTWGHT_DONTKNOW;   break;
     343           0 :         case WEIGHT_THIN:       mnWeight = EXC_FONTWGHT_THIN;       break;
     344           0 :         case WEIGHT_ULTRALIGHT: mnWeight = EXC_FONTWGHT_ULTRALIGHT; break;
     345           0 :         case WEIGHT_LIGHT:      mnWeight = EXC_FONTWGHT_LIGHT;      break;
     346           0 :         case WEIGHT_SEMILIGHT:  mnWeight = EXC_FONTWGHT_SEMILIGHT;  break;
     347           0 :         case WEIGHT_NORMAL:     mnWeight = EXC_FONTWGHT_NORMAL;     break;
     348           0 :         case WEIGHT_MEDIUM:     mnWeight = EXC_FONTWGHT_MEDIUM;     break;
     349           0 :         case WEIGHT_SEMIBOLD:   mnWeight = EXC_FONTWGHT_SEMIBOLD;   break;
     350           0 :         case WEIGHT_BOLD:       mnWeight = EXC_FONTWGHT_BOLD;       break;
     351           0 :         case WEIGHT_ULTRABOLD:  mnWeight = EXC_FONTWGHT_ULTRABOLD;  break;
     352           0 :         case WEIGHT_BLACK:      mnWeight = EXC_FONTWGHT_BLACK;      break;
     353           0 :         default:                mnWeight = EXC_FONTWGHT_NORMAL;
     354             :     }
     355           0 : }
     356             : 
     357           0 : void XclFontData::SetScUnderline( FontUnderline eScUnderl )
     358             : {
     359           0 :     switch( eScUnderl )
     360             :     {
     361             :         case UNDERLINE_NONE:
     362           0 :         case UNDERLINE_DONTKNOW:    mnUnderline = EXC_FONTUNDERL_NONE;      break;
     363             :         case UNDERLINE_DOUBLE:
     364           0 :         case UNDERLINE_DOUBLEWAVE:  mnUnderline = EXC_FONTUNDERL_DOUBLE;    break;
     365           0 :         default:                    mnUnderline = EXC_FONTUNDERL_SINGLE;
     366             :     }
     367           0 : }
     368             : 
     369           0 : void XclFontData::SetScEscapement( short nScEscapem )
     370             : {
     371           0 :     if( nScEscapem > 0 )
     372           0 :         mnEscapem = EXC_FONTESC_SUPER;
     373           0 :     else if( nScEscapem < 0 )
     374           0 :         mnEscapem = EXC_FONTESC_SUB;
     375             :     else
     376           0 :         mnEscapem = EXC_FONTESC_NONE;
     377           0 : }
     378             : 
     379           0 : void XclFontData::SetScStrikeout( FontStrikeout eScStrikeout )
     380             : {
     381             :     mbStrikeout =
     382           0 :         (eScStrikeout == STRIKEOUT_SINGLE) || (eScStrikeout == STRIKEOUT_DOUBLE) ||
     383           0 :         (eScStrikeout == STRIKEOUT_BOLD)   || (eScStrikeout == STRIKEOUT_SLASH)  ||
     384           0 :         (eScStrikeout == STRIKEOUT_X);
     385           0 : }
     386             : 
     387             : // *** conversion of API constants *** ----------------------------------------
     388             : 
     389           0 : float XclFontData::GetApiHeight() const
     390             : {
     391           0 :     return static_cast< float >( mnHeight / TWIPS_PER_POINT );
     392             : }
     393             : 
     394           0 : sal_Int16 XclFontData::GetApiFamily() const
     395             : {
     396           0 :     sal_Int16 nApiFamily = AwtFontFamily::DONTKNOW;
     397           0 :     switch( mnFamily )
     398             :     {
     399           0 :         case FAMILY_DECORATIVE: nApiFamily = AwtFontFamily::DECORATIVE; break;
     400           0 :         case FAMILY_MODERN:     nApiFamily = AwtFontFamily::MODERN;     break;
     401           0 :         case FAMILY_ROMAN:      nApiFamily = AwtFontFamily::ROMAN;      break;
     402           0 :         case FAMILY_SCRIPT:     nApiFamily = AwtFontFamily::SCRIPT;     break;
     403           0 :         case FAMILY_SWISS:      nApiFamily = AwtFontFamily::SWISS;      break;
     404           0 :         case FAMILY_SYSTEM:     nApiFamily = AwtFontFamily::SYSTEM;     break;
     405             :     }
     406           0 :     return nApiFamily;
     407             : }
     408             : 
     409           0 : sal_Int16 XclFontData::GetApiFontEncoding() const
     410             : {
     411             :     // API constants are equal to rtl_TextEncoding constants
     412           0 :     return static_cast< sal_Int16 >( GetFontEncoding() );
     413             : }
     414             : 
     415           0 : Awt::FontSlant XclFontData::GetApiPosture() const
     416             : {
     417           0 :     return mbItalic ? Awt::FontSlant_ITALIC : Awt::FontSlant_NONE;
     418             : }
     419             : 
     420           0 : float XclFontData::GetApiWeight() const
     421             : {
     422           0 :     return VCLUnoHelper::ConvertFontWeight( GetScWeight() );
     423             : }
     424             : 
     425           0 : sal_Int16 XclFontData::GetApiUnderline() const
     426             : {
     427           0 :     sal_Int16 nApiUnderl = AwtFontUnderline::NONE;
     428           0 :     switch( mnUnderline )
     429             :     {
     430             :         case EXC_FONTUNDERL_SINGLE:
     431           0 :         case EXC_FONTUNDERL_SINGLE_ACC: nApiUnderl = AwtFontUnderline::SINGLE;  break;
     432             :         case EXC_FONTUNDERL_DOUBLE:
     433           0 :         case EXC_FONTUNDERL_DOUBLE_ACC: nApiUnderl = AwtFontUnderline::DOUBLE;  break;
     434             :     }
     435           0 :     return nApiUnderl;
     436             : }
     437             : 
     438           0 : sal_Int16 XclFontData::GetApiEscapement() const
     439             : {
     440           0 :     sal_Int16 nApiEscapem = 0;
     441           0 :     switch( mnEscapem )
     442             :     {
     443           0 :         case EXC_FONTESC_SUPER: nApiEscapem = 33;   break;
     444           0 :         case EXC_FONTESC_SUB:   nApiEscapem = -33;  break;
     445             :     }
     446           0 :     return nApiEscapem;
     447             : }
     448             : 
     449           0 : sal_Int16 XclFontData::GetApiStrikeout() const
     450             : {
     451           0 :     return mbStrikeout ? AwtFontStrikeout::SINGLE : AwtFontStrikeout::NONE;
     452             : }
     453             : 
     454           0 : void XclFontData::SetApiHeight( float fPoint )
     455             : {
     456           0 :     mnHeight = static_cast< sal_uInt16 >( ::std::min( fPoint * TWIPS_PER_POINT + 0.5, 32767.0 ) );
     457           0 : }
     458             : 
     459           0 : void XclFontData::SetApiFamily( sal_Int16 nApiFamily )
     460             : {
     461           0 :     switch( nApiFamily )
     462             :     {
     463           0 :         case AwtFontFamily::DECORATIVE: mnFamily = FAMILY_DECORATIVE;   break;
     464           0 :         case AwtFontFamily::MODERN:     mnFamily = FAMILY_MODERN;       break;
     465           0 :         case AwtFontFamily::ROMAN:      mnFamily = FAMILY_ROMAN;        break;
     466           0 :         case AwtFontFamily::SCRIPT:     mnFamily = FAMILY_SCRIPT;       break;
     467           0 :         case AwtFontFamily::SWISS:      mnFamily = FAMILY_SWISS;        break;
     468           0 :         case AwtFontFamily::SYSTEM:     mnFamily = FAMILY_SYSTEM;       break;
     469           0 :         default:                        mnFamily = FAMILY_DONTKNOW;
     470             :     }
     471           0 : }
     472             : 
     473           0 : void XclFontData::SetApiPosture( Awt::FontSlant eApiPosture )
     474             : {
     475             :     mbItalic =
     476           0 :         (eApiPosture == Awt::FontSlant_OBLIQUE) ||
     477           0 :         (eApiPosture == Awt::FontSlant_ITALIC) ||
     478           0 :         (eApiPosture == Awt::FontSlant_REVERSE_OBLIQUE) ||
     479           0 :         (eApiPosture == Awt::FontSlant_REVERSE_ITALIC);
     480           0 : }
     481             : 
     482           0 : void XclFontData::SetApiWeight( float fApiWeight )
     483             : {
     484           0 :     SetScWeight( VCLUnoHelper::ConvertFontWeight( fApiWeight ) );
     485           0 : }
     486             : 
     487           0 : void XclFontData::SetApiUnderline( sal_Int16 nApiUnderl )
     488             : {
     489           0 :     switch( nApiUnderl )
     490             :     {
     491             :         case AwtFontUnderline::NONE:
     492           0 :         case AwtFontUnderline::DONTKNOW:    mnUnderline = EXC_FONTUNDERL_NONE;      break;
     493             :         case AwtFontUnderline::DOUBLE:
     494           0 :         case AwtFontUnderline::DOUBLEWAVE:  mnUnderline = EXC_FONTUNDERL_DOUBLE;    break;
     495           0 :         default:                            mnUnderline = EXC_FONTUNDERL_SINGLE;
     496             :     }
     497           0 : }
     498             : 
     499           0 : void XclFontData::SetApiEscapement( sal_Int16 nApiEscapem )
     500             : {
     501           0 :     if( nApiEscapem > 0 )
     502           0 :         mnEscapem = EXC_FONTESC_SUPER;
     503           0 :     else if( nApiEscapem < 0 )
     504           0 :         mnEscapem = EXC_FONTESC_SUB;
     505             :     else
     506           0 :         mnEscapem = EXC_FONTESC_NONE;
     507           0 : }
     508             : 
     509           0 : void XclFontData::SetApiStrikeout( sal_Int16 nApiStrikeout )
     510             : {
     511             :     mbStrikeout =
     512           0 :         (nApiStrikeout != AwtFontStrikeout::NONE) &&
     513           0 :         (nApiStrikeout != AwtFontStrikeout::DONTKNOW);
     514           0 : }
     515             : 
     516           0 : bool operator==( const XclFontData& rLeft, const XclFontData& rRight )
     517             : {
     518             :     return
     519           0 :         (rLeft.mnHeight    == rRight.mnHeight)    &&
     520           0 :         (rLeft.mnWeight    == rRight.mnWeight)    &&
     521           0 :         (rLeft.mnUnderline == rRight.mnUnderline) &&
     522           0 :         (rLeft.maColor     == rRight.maColor)     &&
     523           0 :         (rLeft.mnEscapem   == rRight.mnEscapem)   &&
     524           0 :         (rLeft.mnFamily    == rRight.mnFamily)    &&
     525           0 :         (rLeft.mnCharSet   == rRight.mnCharSet)   &&
     526           0 :         (rLeft.mbItalic    == rRight.mbItalic)    &&
     527           0 :         (rLeft.mbStrikeout == rRight.mbStrikeout) &&
     528           0 :         (rLeft.mbOutline   == rRight.mbOutline)   &&
     529           0 :         (rLeft.mbShadow    == rRight.mbShadow)    &&
     530           0 :         (rLeft.maName      == rRight.maName);
     531             : }
     532             : 
     533             : namespace {
     534             : 
     535             : /** Property names for common font settings. */
     536             : const sal_Char *const sppcPropNamesChCommon[] =
     537             : {
     538             :     "CharUnderline", "CharStrikeout", "CharColor", "CharContoured", "CharShadowed", 0
     539             : };
     540             : /** Property names for Western font settings. */
     541             : const sal_Char *const sppcPropNamesChWstrn[] =
     542             : {
     543             :     "CharFontName", "CharHeight", "CharPosture", "CharWeight", 0
     544             : };
     545             : /** Property names for Asian font settings. */
     546             : const sal_Char *const sppcPropNamesChAsian[] =
     547             : {
     548             :     "CharFontNameAsian", "CharHeightAsian", "CharPostureAsian", "CharWeightAsian", 0
     549             : };
     550             : /** Property names for Complex font settings. */
     551             : const sal_Char *const sppcPropNamesChCmplx[] =
     552             : {
     553             :     "CharFontNameComplex", "CharHeightComplex", "CharPostureComplex", "CharWeightComplex", 0
     554             : };
     555             : /** Property names for escapement. */
     556             : const sal_Char *const sppcPropNamesChEscapement[] =
     557             : {
     558             :     "CharEscapement", "CharEscapementHeight", 0
     559             : };
     560             : const sal_Int8 EXC_API_ESC_HEIGHT           = 58;   /// Default escapement font height.
     561             : 
     562             : /** Property names for Western font settings without font name. */
     563             : const sal_Char *const *const sppcPropNamesChWstrnNoName = sppcPropNamesChWstrn + 1;
     564             : /** Property names for Asian font settings without font name. */
     565             : const sal_Char *const *const sppcPropNamesChAsianNoName = sppcPropNamesChAsian + 1;
     566             : /** Property names for Complex font settings without font name. */
     567             : const sal_Char *const *const sppcPropNamesChCmplxNoName = sppcPropNamesChCmplx + 1;
     568             : 
     569             : /** Property names for font settings in form controls. */
     570             : const sal_Char *const sppcPropNamesControl[] =
     571             : {
     572             :     "FontName", "FontFamily", "FontCharset", "FontHeight", "FontSlant",
     573             :     "FontWeight", "FontUnderline", "FontStrikeout", "TextColor", 0
     574             : };
     575             : 
     576             : /** Inserts all passed API font settings into the font data object. */
     577           0 : void lclSetApiFontSettings( XclFontData& rFontData,
     578             :         const OUString& rApiFontName, float fApiHeight, float fApiWeight,
     579             :         Awt::FontSlant eApiPosture, sal_Int16 nApiUnderl, sal_Int16 nApiStrikeout )
     580             : {
     581           0 :     rFontData.maName = XclTools::GetXclFontName( rApiFontName );
     582           0 :     rFontData.SetApiHeight( fApiHeight );
     583           0 :     rFontData.SetApiWeight( fApiWeight );
     584           0 :     rFontData.SetApiPosture( eApiPosture );
     585           0 :     rFontData.SetApiUnderline( nApiUnderl );
     586           0 :     rFontData.SetApiStrikeout( nApiStrikeout );
     587           0 : }
     588             : 
     589             : /** Writes script dependent properties to a font property set helper. */
     590           0 : void lclWriteChartFont( ScfPropertySet& rPropSet,
     591             :         ScfPropSetHelper& rHlpName, ScfPropSetHelper& rHlpNoName,
     592             :         const XclFontData& rFontData, bool bHasFontName )
     593             : {
     594             :     // select the font helper
     595           0 :     ScfPropSetHelper& rPropSetHlp = bHasFontName ? rHlpName : rHlpNoName;
     596             :     // initialize the font helper (must be called before writing any properties)
     597           0 :     rPropSetHlp.InitializeWrite();
     598             :     // write font name
     599           0 :     if( bHasFontName )
     600           0 :         rPropSetHlp << rFontData.maName;
     601             :     // write remaining properties
     602           0 :     rPropSetHlp << rFontData.GetApiHeight() << rFontData.GetApiPosture() << rFontData.GetApiWeight();
     603             :     // write properties to property set
     604           0 :     rPropSetHlp.WriteToPropertySet( rPropSet );
     605           0 : }
     606             : 
     607             : } // namespace
     608             : 
     609           0 : XclFontPropSetHelper::XclFontPropSetHelper() :
     610             :     maHlpChCommon( sppcPropNamesChCommon ),
     611             :     maHlpChWstrn( sppcPropNamesChWstrn ),
     612             :     maHlpChAsian( sppcPropNamesChAsian ),
     613             :     maHlpChCmplx( sppcPropNamesChCmplx ),
     614             :     maHlpChWstrnNoName( sppcPropNamesChWstrnNoName ),
     615             :     maHlpChAsianNoName( sppcPropNamesChAsianNoName ),
     616             :     maHlpChCmplxNoName( sppcPropNamesChCmplxNoName ),
     617             :     maHlpChEscapement( sppcPropNamesChEscapement ),
     618           0 :     maHlpControl( sppcPropNamesControl )
     619             : {
     620           0 : }
     621             : 
     622           0 : void XclFontPropSetHelper::ReadFontProperties( XclFontData& rFontData,
     623             :         const ScfPropertySet& rPropSet, XclFontPropSetType eType, sal_Int16 nScript )
     624             : {
     625           0 :     switch( eType )
     626             :     {
     627             :         case EXC_FONTPROPSET_CHART:
     628             :         {
     629           0 :             OUString aApiFontName;
     630             :             float fApiHeight, fApiWeight;
     631           0 :             sal_Int16 nApiUnderl = 0, nApiStrikeout = 0;
     632             :             Awt::FontSlant eApiPosture;
     633             : 
     634             :             // read script type dependent properties
     635           0 :             ScfPropSetHelper& rPropSetHlp = GetChartHelper( nScript );
     636           0 :             rPropSetHlp.ReadFromPropertySet( rPropSet );
     637           0 :             rPropSetHlp >> aApiFontName >> fApiHeight >> eApiPosture >> fApiWeight;
     638             :             // read common properties
     639           0 :             maHlpChCommon.ReadFromPropertySet( rPropSet );
     640           0 :             maHlpChCommon   >> nApiUnderl
     641           0 :                             >> nApiStrikeout
     642           0 :                             >> rFontData.maColor
     643           0 :                             >> rFontData.mbOutline
     644           0 :                             >> rFontData.mbShadow;
     645             : 
     646             :             // convert API property values to Excel settings
     647             :             lclSetApiFontSettings( rFontData, aApiFontName,
     648           0 :                 fApiHeight, fApiWeight, eApiPosture, nApiUnderl, nApiStrikeout );
     649             : 
     650             :             // font escapement
     651           0 :             sal_Int16 nApiEscapement = 0;
     652           0 :             sal_Int8 nApiEscHeight = 0;
     653           0 :             maHlpChEscapement.ReadFromPropertySet( rPropSet );
     654           0 :             maHlpChEscapement.ReadFromPropertySet( rPropSet );
     655           0 :             maHlpChEscapement.ReadFromPropertySet( rPropSet );
     656           0 :             maHlpChEscapement >> nApiEscapement >> nApiEscHeight;
     657           0 :             rFontData.SetApiEscapement( nApiEscapement );
     658             :         }
     659           0 :         break;
     660             : 
     661             :         case EXC_FONTPROPSET_CONTROL:
     662             :         {
     663           0 :             OUString aApiFontName;
     664             :             float fApiHeight, fApiWeight;
     665             :             sal_Int16 nApiFamily, nApiCharSet, nApiPosture, nApiUnderl, nApiStrikeout;
     666             : 
     667             :             // read font properties
     668           0 :             maHlpControl.ReadFromPropertySet( rPropSet );
     669           0 :             maHlpControl    >> aApiFontName
     670           0 :                             >> nApiFamily
     671           0 :                             >> nApiCharSet
     672           0 :                             >> fApiHeight
     673           0 :                             >> nApiPosture
     674           0 :                             >> fApiWeight
     675           0 :                             >> nApiUnderl
     676           0 :                             >> nApiStrikeout
     677           0 :                             >> rFontData.maColor;
     678             : 
     679             :             // convert API property values to Excel settings
     680           0 :             Awt::FontSlant eApiPosture = static_cast< Awt::FontSlant >( nApiPosture );
     681             :             lclSetApiFontSettings( rFontData, aApiFontName,
     682           0 :                 fApiHeight, fApiWeight, eApiPosture, nApiUnderl, nApiStrikeout );
     683           0 :             rFontData.SetApiFamily( nApiFamily );
     684           0 :             rFontData.SetFontEncoding( nApiCharSet );
     685             :         }
     686           0 :         break;
     687             :     }
     688           0 : }
     689             : 
     690           0 : void XclFontPropSetHelper::WriteFontProperties(
     691             :         ScfPropertySet& rPropSet, XclFontPropSetType eType,
     692             :         const XclFontData& rFontData, bool bHasWstrn, bool bHasAsian, bool bHasCmplx,
     693             :         const Color* pFontColor )
     694             : {
     695           0 :     switch( eType )
     696             :     {
     697             :         case EXC_FONTPROPSET_CHART:
     698             :         {
     699             :             // write common properties
     700           0 :             maHlpChCommon.InitializeWrite();
     701           0 :             const Color& rColor = pFontColor ? *pFontColor : rFontData.maColor;
     702           0 :             maHlpChCommon   << rFontData.GetApiUnderline()
     703           0 :                             << rFontData.GetApiStrikeout()
     704           0 :                             << rColor
     705           0 :                             << rFontData.mbOutline
     706           0 :                             << rFontData.mbShadow;
     707           0 :             maHlpChCommon.WriteToPropertySet( rPropSet );
     708             : 
     709             :             // write script type dependent properties
     710           0 :             lclWriteChartFont( rPropSet, maHlpChWstrn, maHlpChWstrnNoName, rFontData, bHasWstrn );
     711           0 :             lclWriteChartFont( rPropSet, maHlpChAsian, maHlpChAsianNoName, rFontData, bHasAsian );
     712           0 :             lclWriteChartFont( rPropSet, maHlpChCmplx, maHlpChCmplxNoName, rFontData, bHasCmplx );
     713             : 
     714             :             // font escapement
     715           0 :             if( rFontData.GetScEscapement() != SVX_ESCAPEMENT_OFF )
     716             :             {
     717           0 :                 maHlpChEscapement.InitializeWrite();
     718           0 :                 maHlpChEscapement << rFontData.GetApiEscapement() << EXC_API_ESC_HEIGHT;
     719           0 :                 maHlpChEscapement.WriteToPropertySet( rPropSet );
     720             :             }
     721             :         }
     722           0 :         break;
     723             : 
     724             :         case EXC_FONTPROPSET_CONTROL:
     725             :         {
     726           0 :             maHlpControl.InitializeWrite();
     727           0 :             maHlpControl    << rFontData.maName
     728           0 :                             << rFontData.GetApiFamily()
     729           0 :                             << rFontData.GetApiFontEncoding()
     730           0 :                             << static_cast< sal_Int16 >( rFontData.GetApiHeight() + 0.5 )
     731           0 :                             << rFontData.GetApiPosture()
     732           0 :                             << rFontData.GetApiWeight()
     733           0 :                             << rFontData.GetApiUnderline()
     734           0 :                             << rFontData.GetApiStrikeout()
     735           0 :                             << rFontData.maColor;
     736           0 :             maHlpControl.WriteToPropertySet( rPropSet );
     737             :         }
     738           0 :         break;
     739             :     }
     740           0 : }
     741             : 
     742           0 : ScfPropSetHelper& XclFontPropSetHelper::GetChartHelper( sal_Int16 nScript )
     743             : {
     744             :     namespace ApiScriptType = ::com::sun::star::i18n::ScriptType;
     745           0 :     switch( nScript )
     746             :     {
     747           0 :         case ApiScriptType::LATIN:      return maHlpChWstrn;
     748           0 :         case ApiScriptType::ASIAN:      return maHlpChAsian;
     749           0 :         case ApiScriptType::COMPLEX:    return maHlpChCmplx;
     750             :         default:    OSL_FAIL( "XclFontPropSetHelper::GetChartHelper - unknown script type" );
     751             :     }
     752           0 :     return maHlpChWstrn;
     753             : }
     754             : 
     755             : // Number formats =============================================================
     756             : 
     757             : namespace {
     758             : 
     759             : /** Special number format index describing a reused format. */
     760             : const NfIndexTableOffset PRV_NF_INDEX_REUSE = NF_INDEX_TABLE_ENTRIES;
     761             : 
     762             : /** German primary language not defined, LANGUAGE_GERMAN belongs to Germany. */
     763             : const LanguageType PRV_LANGUAGE_GERMAN_PRIM = LANGUAGE_GERMAN & LANGUAGE_MASK_PRIMARY;
     764             : /** French primary language not defined, LANGUAGE_FRENCH belongs to France. */
     765             : const LanguageType PRV_LANGUAGE_FRENCH_PRIM = LANGUAGE_FRENCH & LANGUAGE_MASK_PRIMARY;
     766             : /** Parent language identifier for Asian languages. */
     767             : const LanguageType PRV_LANGUAGE_ASIAN_PRIM = LANGUAGE_CHINESE & LANGUAGE_MASK_PRIMARY;
     768             : 
     769             : /** Stores the number format used in Calc for an Excel built-in number format. */
     770             : struct XclBuiltInFormat
     771             : {
     772             :     sal_uInt16          mnXclNumFmt;    /// Excel built-in index.
     773             :     const sal_Char*     mpFormat;       /// Format string, may be 0 (meOffset used then).
     774             :     NfIndexTableOffset  meOffset;       /// SvNumberFormatter format index, if mpFormat==0.
     775             :     sal_uInt16          mnXclReuseFmt;  /// Use this Excel format, if meOffset==PRV_NF_INDEX_REUSE.
     776             : };
     777             : 
     778             : /** Defines a literal Excel built-in number format. */
     779             : #define EXC_NUMFMT_STRING( nXclNumFmt, pcUtf8 ) \
     780             :     { nXclNumFmt, pcUtf8, NF_NUMBER_STANDARD, 0 }
     781             : 
     782             : /** Defines an Excel built-in number format that maps to an own built-in format. */
     783             : #define EXC_NUMFMT_OFFSET( nXclNumFmt, eOffset ) \
     784             :     { nXclNumFmt, 0, eOffset, 0 }
     785             : 
     786             : /** Defines an Excel built-in number format that is the same as the specified. */
     787             : #define EXC_NUMFMT_REUSE( nXclNumFmt, nXclReuse ) \
     788             :     { nXclNumFmt, 0, PRV_NF_INDEX_REUSE, nXclReuse }
     789             : 
     790             : /** Terminates an Excel built-in number format table. */
     791             : #define EXC_NUMFMT_ENDTABLE() \
     792             :     { EXC_FORMAT_NOTFOUND, 0, NF_NUMBER_STANDARD, 0 }
     793             : 
     794             : // Currency unit characters
     795             : #define UTF8_BAHT       "\340\270\277"
     796             : #define UTF8_EURO       "\342\202\254"
     797             : #define UTF8_POUND_UK   "\302\243"
     798             : #define UTF8_SHEQEL     "\342\202\252"
     799             : #define UTF8_WON        "\357\277\246"
     800             : #define UTF8_YEN_CS     "\357\277\245"
     801             : #define UTF8_YEN_JP     "\302\245"
     802             : 
     803             : // Japanese/Chinese date/time characters
     804             : #define UTF8_CJ_YEAR    "\345\271\264"
     805             : #define UTF8_CJ_MON     "\346\234\210"
     806             : #define UTF8_CJ_DAY     "\346\227\245"
     807             : #define UTF8_CJ_HOUR    "\346\231\202"
     808             : #define UTF8_CJ_MIN     "\345\210\206"
     809             : #define UTF8_CJ_SEC     "\347\247\222"
     810             : 
     811             : // Chinese Simplified date/time characters
     812             : #define UTF8_CS_HOUR    "\346\227\266"
     813             : 
     814             : // Korean date/time characters
     815             : #define UTF8_KO_YEAR    "\353\205\204"
     816             : #define UTF8_KO_MON     "\354\233\224"
     817             : #define UTF8_KO_DAY     "\354\235\274"
     818             : #define UTF8_KO_HOUR    "\354\213\234"
     819             : #define UTF8_KO_MIN     "\353\266\204"
     820             : #define UTF8_KO_SEC     "\354\264\210"
     821             : 
     822             : /** Default number format table. Last parent of all other tables, used for unknown languages. */
     823             : static const XclBuiltInFormat spBuiltInFormats_DONTKNOW[] =
     824             : {
     825             :     EXC_NUMFMT_OFFSET(   0, NF_NUMBER_STANDARD ),       // General
     826             :     EXC_NUMFMT_OFFSET(   1, NF_NUMBER_INT ),            // 0
     827             :     EXC_NUMFMT_OFFSET(   2, NF_NUMBER_DEC2 ),           // 0.00
     828             :     EXC_NUMFMT_OFFSET(   3, NF_NUMBER_1000INT ),        // #,##0
     829             :     EXC_NUMFMT_OFFSET(   4, NF_NUMBER_1000DEC2 ),       // #,##0.00
     830             :     // 5...8 contained in file
     831             :     EXC_NUMFMT_OFFSET(   9, NF_PERCENT_INT ),           // 0%
     832             :     EXC_NUMFMT_OFFSET(  10, NF_PERCENT_DEC2 ),          // 0.00%
     833             :     EXC_NUMFMT_OFFSET(  11, NF_SCIENTIFIC_000E00 ),     // 0.00E+00
     834             :     EXC_NUMFMT_OFFSET(  12, NF_FRACTION_1 ),            // # ?/?
     835             :     EXC_NUMFMT_OFFSET(  13, NF_FRACTION_2 ),            // # ??/??
     836             : 
     837             :     // 14...22 date and time formats
     838             :     EXC_NUMFMT_OFFSET(  14, NF_DATE_SYS_DDMMYYYY ),
     839             :     EXC_NUMFMT_OFFSET(  15, NF_DATE_SYS_DMMMYY ),
     840             :     EXC_NUMFMT_OFFSET(  16, NF_DATE_SYS_DDMMM ),
     841             :     EXC_NUMFMT_OFFSET(  17, NF_DATE_SYS_MMYY ),
     842             :     EXC_NUMFMT_OFFSET(  18, NF_TIME_HHMMAMPM ),
     843             :     EXC_NUMFMT_OFFSET(  19, NF_TIME_HHMMSSAMPM ),
     844             :     EXC_NUMFMT_OFFSET(  20, NF_TIME_HHMM ),
     845             :     EXC_NUMFMT_OFFSET(  21, NF_TIME_HHMMSS ),
     846             :     EXC_NUMFMT_OFFSET(  22, NF_DATETIME_SYSTEM_SHORT_HHMM ),
     847             : 
     848             :     // 23...36 international formats
     849             :     EXC_NUMFMT_REUSE(   23, 0 ),
     850             :     EXC_NUMFMT_REUSE(   24, 0 ),
     851             :     EXC_NUMFMT_REUSE(   25, 0 ),
     852             :     EXC_NUMFMT_REUSE(   26, 0 ),
     853             :     EXC_NUMFMT_REUSE(   27, 14 ),
     854             :     EXC_NUMFMT_REUSE(   28, 14 ),
     855             :     EXC_NUMFMT_REUSE(   29, 14 ),
     856             :     EXC_NUMFMT_REUSE(   30, 14 ),
     857             :     EXC_NUMFMT_REUSE(   31, 14 ),
     858             :     EXC_NUMFMT_REUSE(   32, 21 ),
     859             :     EXC_NUMFMT_REUSE(   33, 21 ),
     860             :     EXC_NUMFMT_REUSE(   34, 21 ),
     861             :     EXC_NUMFMT_REUSE(   35, 21 ),
     862             :     EXC_NUMFMT_REUSE(   36, 14 ),
     863             : 
     864             :     // 37...44 accounting formats
     865             :     // 41...44 contained in file
     866             :     EXC_NUMFMT_STRING(  37, "#,##0;-#,##0" ),
     867             :     EXC_NUMFMT_STRING(  38, "#,##0;[RED]-#,##0" ),
     868             :     EXC_NUMFMT_STRING(  39, "#,##0.00;-#,##0.00" ),
     869             :     EXC_NUMFMT_STRING(  40, "#,##0.00;[RED]-#,##0.00" ),
     870             : 
     871             :     // 45...49 more special formats
     872             :     EXC_NUMFMT_STRING(  45, "mm:ss" ),
     873             :     EXC_NUMFMT_STRING(  46, "[h]:mm:ss" ),
     874             :     EXC_NUMFMT_STRING(  47, "mm:ss.0" ),
     875             :     EXC_NUMFMT_STRING(  48, "##0.0E+0" ),
     876             :     EXC_NUMFMT_OFFSET(  49, NF_TEXT ),
     877             : 
     878             :     // 50...81 international formats
     879             :     EXC_NUMFMT_REUSE(   50, 14 ),
     880             :     EXC_NUMFMT_REUSE(   51, 14 ),
     881             :     EXC_NUMFMT_REUSE(   52, 14 ),
     882             :     EXC_NUMFMT_REUSE(   53, 14 ),
     883             :     EXC_NUMFMT_REUSE(   54, 14 ),
     884             :     EXC_NUMFMT_REUSE(   55, 14 ),
     885             :     EXC_NUMFMT_REUSE(   56, 14 ),
     886             :     EXC_NUMFMT_REUSE(   57, 14 ),
     887             :     EXC_NUMFMT_REUSE(   58, 14 ),
     888             :     EXC_NUMFMT_REUSE(   59, 1 ),
     889             :     EXC_NUMFMT_REUSE(   60, 2 ),
     890             :     EXC_NUMFMT_REUSE(   61, 3 ),
     891             :     EXC_NUMFMT_REUSE(   62, 4 ),
     892             :     EXC_NUMFMT_REUSE(   67, 9 ),
     893             :     EXC_NUMFMT_REUSE(   68, 10 ),
     894             :     EXC_NUMFMT_REUSE(   69, 12 ),
     895             :     EXC_NUMFMT_REUSE(   70, 13 ),
     896             :     EXC_NUMFMT_REUSE(   71, 14 ),
     897             :     EXC_NUMFMT_REUSE(   72, 14 ),
     898             :     EXC_NUMFMT_REUSE(   73, 15 ),
     899             :     EXC_NUMFMT_REUSE(   74, 16 ),
     900             :     EXC_NUMFMT_REUSE(   75, 17 ),
     901             :     EXC_NUMFMT_REUSE(   76, 20 ),
     902             :     EXC_NUMFMT_REUSE(   77, 21 ),
     903             :     EXC_NUMFMT_REUSE(   78, 22 ),
     904             :     EXC_NUMFMT_REUSE(   79, 45 ),
     905             :     EXC_NUMFMT_REUSE(   80, 46 ),
     906             :     EXC_NUMFMT_REUSE(   81, 47 ),
     907             : 
     908             :     // 82...163 not used, must not occur in a file (Excel may crash)
     909             : 
     910             :     EXC_NUMFMT_ENDTABLE()
     911             : };
     912             : 
     913             : // ENGLISH --------------------------------------------------------------------
     914             : 
     915             : /** Base table for English locales. */
     916             : static const XclBuiltInFormat spBuiltInFormats_ENGLISH[] =
     917             : {
     918             :     EXC_NUMFMT_STRING(  15, "DD-MMM-YY" ),
     919             :     EXC_NUMFMT_STRING(  16, "DD-MMM" ),
     920             :     EXC_NUMFMT_STRING(  17, "MMM-YY" ),
     921             :     EXC_NUMFMT_STRING(  18, "h:mm AM/PM" ),
     922             :     EXC_NUMFMT_STRING(  19, "h:mm:ss AM/PM" ),
     923             :     EXC_NUMFMT_STRING(  22, "DD/MM/YYYY hh:mm" ),
     924             :     EXC_NUMFMT_ENDTABLE()
     925             : };
     926             : 
     927             : static const XclBuiltInFormat spBuiltInFormats_ENGLISH_UK[] =
     928             : {
     929             :     EXC_NUMFMT_STRING(  63, UTF8_POUND_UK "#,##0;-" UTF8_POUND_UK "#,##0" ),
     930             :     EXC_NUMFMT_STRING(  64, UTF8_POUND_UK "#,##0;[RED]-" UTF8_POUND_UK "#,##0" ),
     931             :     EXC_NUMFMT_STRING(  65, UTF8_POUND_UK "#,##0.00;-" UTF8_POUND_UK "#,##0.00" ),
     932             :     EXC_NUMFMT_STRING(  66, UTF8_POUND_UK "#,##0.00;[RED]-" UTF8_POUND_UK "#,##0.00" ),
     933             :     EXC_NUMFMT_ENDTABLE()
     934             : };
     935             : 
     936             : static const XclBuiltInFormat spBuiltInFormats_ENGLISH_EIRE[] =
     937             : {
     938             :     EXC_NUMFMT_STRING(  63, UTF8_EURO "#,##0;-" UTF8_EURO "#,##0" ),
     939             :     EXC_NUMFMT_STRING(  64, UTF8_EURO "#,##0;[RED]-" UTF8_EURO "#,##0" ),
     940             :     EXC_NUMFMT_STRING(  65, UTF8_EURO "#,##0.00;-" UTF8_EURO "#,##0.00" ),
     941             :     EXC_NUMFMT_STRING(  66, UTF8_EURO "#,##0.00;[RED]-" UTF8_EURO "#,##0.00" ),
     942             :     EXC_NUMFMT_ENDTABLE()
     943             : };
     944             : 
     945             : static const XclBuiltInFormat spBuiltInFormats_ENGLISH_US[] =
     946             : {
     947             :     EXC_NUMFMT_STRING(  14, "M/D/YYYY" ),
     948             :     EXC_NUMFMT_STRING(  15, "D-MMM-YY" ),
     949             :     EXC_NUMFMT_STRING(  16, "D-MMM" ),
     950             :     EXC_NUMFMT_STRING(  20, "h:mm" ),
     951             :     EXC_NUMFMT_STRING(  21, "h:mm:ss" ),
     952             :     EXC_NUMFMT_STRING(  22, "M/D/YYYY h:mm" ),
     953             :     EXC_NUMFMT_STRING(  37, "#,##0_);(#,##0)" ),
     954             :     EXC_NUMFMT_STRING(  38, "#,##0_);[RED](#,##0)" ),
     955             :     EXC_NUMFMT_STRING(  39, "#,##0.00_);(#,##0.00)" ),
     956             :     EXC_NUMFMT_STRING(  40, "#,##0.00_);[RED](#,##0.00)" ),
     957             :     EXC_NUMFMT_STRING(  63, "$#,##0_);($#,##0)" ),
     958             :     EXC_NUMFMT_STRING(  64, "$#,##0_);[RED]($#,##0)" ),
     959             :     EXC_NUMFMT_STRING(  65, "$#,##0.00_);($#,##0.00)" ),
     960             :     EXC_NUMFMT_STRING(  66, "$#,##0.00_);[RED]($#,##0.00)" ),
     961             :     EXC_NUMFMT_ENDTABLE()
     962             : };
     963             : 
     964             : static const XclBuiltInFormat spBuiltInFormats_ENGLISH_CAN[] =
     965             : {
     966             :     EXC_NUMFMT_STRING(  20, "h:mm" ),
     967             :     EXC_NUMFMT_STRING(  21, "h:mm:ss" ),
     968             :     EXC_NUMFMT_STRING(  22, "DD/MM/YYYY h:mm" ),
     969             :     EXC_NUMFMT_STRING(  63, "$#,##0;-$#,##0" ),
     970             :     EXC_NUMFMT_STRING(  64, "$#,##0;[RED]-$#,##0" ),
     971             :     EXC_NUMFMT_STRING(  65, "$#,##0.00;-$#,##0.00" ),
     972             :     EXC_NUMFMT_STRING(  66, "$#,##0.00;[RED]-$#,##0.00" ),
     973             :     EXC_NUMFMT_ENDTABLE()
     974             : };
     975             : 
     976             : static const XclBuiltInFormat spBuiltInFormats_ENGLISH_AUS[] =
     977             : {
     978             :     EXC_NUMFMT_STRING(  14, "D/MM/YYYY" ),
     979             :     EXC_NUMFMT_STRING(  15, "D-MMM-YY" ),
     980             :     EXC_NUMFMT_STRING(  16, "D-MMM" ),
     981             :     EXC_NUMFMT_STRING(  20, "h:mm" ),
     982             :     EXC_NUMFMT_STRING(  21, "h:mm:ss" ),
     983             :     EXC_NUMFMT_STRING(  22, "D/MM/YYYY h:mm" ),
     984             :     EXC_NUMFMT_STRING(  63, "$#,##0;-$#,##0" ),
     985             :     EXC_NUMFMT_STRING(  64, "$#,##0;[RED]-$#,##0" ),
     986             :     EXC_NUMFMT_STRING(  65, "$#,##0.00;-$#,##0.00" ),
     987             :     EXC_NUMFMT_STRING(  66, "$#,##0.00;[RED]-$#,##0.00" ),
     988             :     EXC_NUMFMT_ENDTABLE()
     989             : };
     990             : 
     991             : static const XclBuiltInFormat spBuiltInFormats_ENGLISH_SAFRICA[] =
     992             : {
     993             :     EXC_NUMFMT_STRING(  14, "YYYY/MM/DD" ),
     994             :     EXC_NUMFMT_OFFSET(  18, NF_TIME_HHMMAMPM ),
     995             :     EXC_NUMFMT_OFFSET(  19, NF_TIME_HHMMSSAMPM ),
     996             :     EXC_NUMFMT_STRING(  22, "YYYY/MM/DD hh:mm" ),
     997             :     EXC_NUMFMT_STRING(  63, "\\R #,##0;\\R -#,##0" ),
     998             :     EXC_NUMFMT_STRING(  64, "\\R #,##0;[RED]\\R -#,##0" ),
     999             :     EXC_NUMFMT_STRING(  65, "\\R #,##0.00;\\R -#,##0.00" ),
    1000             :     EXC_NUMFMT_STRING(  66, "\\R #,##0.00;[RED]\\R -#,##0.00" ),
    1001             :     EXC_NUMFMT_ENDTABLE()
    1002             : };
    1003             : 
    1004             : // FRENCH ---------------------------------------------------------------------
    1005             : 
    1006             : /** Base table for French locales. */
    1007             : static const XclBuiltInFormat spBuiltInFormats_FRENCH[] =
    1008             : {
    1009             :     EXC_NUMFMT_STRING(  15, "DD-MMM-YY" ),
    1010             :     EXC_NUMFMT_STRING(  16, "DD-MMM" ),
    1011             :     EXC_NUMFMT_STRING(  17, "MMM-YY" ),
    1012             :     EXC_NUMFMT_STRING(  18, "h:mm AM/PM" ),
    1013             :     EXC_NUMFMT_STRING(  19, "h:mm:ss AM/PM" ),
    1014             :     EXC_NUMFMT_ENDTABLE()
    1015             : };
    1016             : 
    1017             : static const XclBuiltInFormat spBuiltInFormats_FRENCH_FRANCE[] =
    1018             : {
    1019             :     EXC_NUMFMT_STRING(  22, "DD/MM/YYYY hh:mm" ),
    1020             :     EXC_NUMFMT_STRING(  37, "#,##0\\ _" UTF8_EURO ";-#,##0\\ _" UTF8_EURO ),
    1021             :     EXC_NUMFMT_STRING(  38, "#,##0\\ _" UTF8_EURO ";[RED]-#,##0\\ _" UTF8_EURO ),
    1022             :     EXC_NUMFMT_STRING(  39, "#,##0.00\\ _" UTF8_EURO ";-#,##0.00\\ _" UTF8_EURO ),
    1023             :     EXC_NUMFMT_STRING(  40, "#,##0.00\\ _" UTF8_EURO ";[RED]-#,##0.00\\ _" UTF8_EURO ),
    1024             :     EXC_NUMFMT_STRING(  63, "#,##0\\ " UTF8_EURO ";-#,##0\\ " UTF8_EURO ),
    1025             :     EXC_NUMFMT_STRING(  64, "#,##0\\ " UTF8_EURO ";[RED]-#,##0\\ " UTF8_EURO ),
    1026             :     EXC_NUMFMT_STRING(  65, "#,##0.00\\ " UTF8_EURO ";-#,##0.00\\ " UTF8_EURO ),
    1027             :     EXC_NUMFMT_STRING(  66, "#,##0.00\\ " UTF8_EURO ";[RED]-#,##0.00\\ " UTF8_EURO ),
    1028             :     EXC_NUMFMT_ENDTABLE()
    1029             : };
    1030             : 
    1031             : static const XclBuiltInFormat spBuiltInFormats_FRENCH_CANADIAN[] =
    1032             : {
    1033             :     EXC_NUMFMT_STRING(  22, "YYYY-MM-DD hh:mm" ),
    1034             :     EXC_NUMFMT_STRING(  37, "#,##0\\ _$_-;#,##0\\ _$-" ),
    1035             :     EXC_NUMFMT_STRING(  38, "#,##0\\ _$_-;[RED]#,##0\\ _$-" ),
    1036             :     EXC_NUMFMT_STRING(  39, "#,##0.00\\ _$_-;#,##0.00\\ _$-" ),
    1037             :     EXC_NUMFMT_STRING(  40, "#,##0.00\\ _$_-;[RED]#,##0.00\\ _$-" ),
    1038             :     EXC_NUMFMT_STRING(  63, "#,##0\\ $_-;#,##0\\ $-" ),
    1039             :     EXC_NUMFMT_STRING(  64, "#,##0\\ $_-;[RED]#,##0\\ $-" ),
    1040             :     EXC_NUMFMT_STRING(  65, "#,##0.00\\ $_-;#,##0.00\\ $-" ),
    1041             :     EXC_NUMFMT_STRING(  66, "#,##0.00\\ $_-;[RED]#,##0.00\\ $-" ),
    1042             :     EXC_NUMFMT_ENDTABLE()
    1043             : };
    1044             : 
    1045             : static const XclBuiltInFormat spBuiltInFormats_FRENCH_SWISS[] =
    1046             : {
    1047             :     EXC_NUMFMT_STRING(  15, "DD.MMM.YY" ),
    1048             :     EXC_NUMFMT_STRING(  16, "DD.MMM" ),
    1049             :     EXC_NUMFMT_STRING(  17, "MMM.YY" ),
    1050             :     EXC_NUMFMT_STRING(  22, "DD.MM.YYYY hh:mm" ),
    1051             :     EXC_NUMFMT_STRING(  63, "\"SFr. \"#,##0;\"SFr. \"-#,##0" ),
    1052             :     EXC_NUMFMT_STRING(  64, "\"SFr. \"#,##0;[RED]\"SFr. \"-#,##0" ),
    1053             :     EXC_NUMFMT_STRING(  65, "\"SFr. \"#,##0.00;\"SFr. \"-#,##0.00" ),
    1054             :     EXC_NUMFMT_STRING(  66, "\"SFr. \"#,##0.00;[RED]\"SFr. \"-#,##0.00" ),
    1055             :     EXC_NUMFMT_ENDTABLE()
    1056             : };
    1057             : 
    1058             : static const XclBuiltInFormat spBuiltInFormats_FRENCH_BELGIAN[] =
    1059             : {
    1060             :     EXC_NUMFMT_STRING(  14, "D/MM/YYYY" ),
    1061             :     EXC_NUMFMT_STRING(  15, "D-MMM-YY" ),
    1062             :     EXC_NUMFMT_STRING(  16, "D-MMM" ),
    1063             :     EXC_NUMFMT_STRING(  20, "h:mm" ),
    1064             :     EXC_NUMFMT_STRING(  21, "h:mm:ss" ),
    1065             :     EXC_NUMFMT_STRING(  22, "D/MM/YYYY h:mm" ),
    1066             :     EXC_NUMFMT_ENDTABLE()
    1067             : };
    1068             : 
    1069             : // GERMAN ---------------------------------------------------------------------
    1070             : 
    1071             : /** Base table for German locales. */
    1072             : static const XclBuiltInFormat spBuiltInFormats_GERMAN[] =
    1073             : {
    1074             :     EXC_NUMFMT_STRING(  15, "DD. MMM YY" ),
    1075             :     EXC_NUMFMT_STRING(  16, "DD. MMM" ),
    1076             :     EXC_NUMFMT_STRING(  17, "MMM YY" ),
    1077             :     EXC_NUMFMT_STRING(  18, "h:mm AM/PM" ),
    1078             :     EXC_NUMFMT_STRING(  19, "h:mm:ss AM/PM" ),
    1079             :     EXC_NUMFMT_STRING(  22, "DD.MM.YYYY hh:mm" ),
    1080             :     EXC_NUMFMT_ENDTABLE()
    1081             : };
    1082             : 
    1083             : static const XclBuiltInFormat spBuiltInFormats_GERMAN_GERMANY[] =
    1084             : {
    1085             :     EXC_NUMFMT_STRING(  37, "#,##0 _" UTF8_EURO ";-#,##0 _" UTF8_EURO ),
    1086             :     EXC_NUMFMT_STRING(  38, "#,##0 _" UTF8_EURO ";[RED]-#,##0 _" UTF8_EURO ),
    1087             :     EXC_NUMFMT_STRING(  39, "#,##0.00 _" UTF8_EURO ";-#,##0.00 _" UTF8_EURO ),
    1088             :     EXC_NUMFMT_STRING(  40, "#,##0.00 _" UTF8_EURO ";[RED]-#,##0.00 _" UTF8_EURO ),
    1089             :     EXC_NUMFMT_STRING(  63, "#,##0 " UTF8_EURO ";-#,##0 " UTF8_EURO ),
    1090             :     EXC_NUMFMT_STRING(  64, "#,##0 " UTF8_EURO ";[RED]-#,##0 " UTF8_EURO ),
    1091             :     EXC_NUMFMT_STRING(  65, "#,##0.00 " UTF8_EURO ";-#,##0.00 " UTF8_EURO ),
    1092             :     EXC_NUMFMT_STRING(  66, "#,##0.00 " UTF8_EURO ";[RED]-#,##0.00 " UTF8_EURO ),
    1093             :     EXC_NUMFMT_ENDTABLE()
    1094             : };
    1095             : 
    1096             : static const XclBuiltInFormat spBuiltInFormats_GERMAN_AUSTRIAN[] =
    1097             : {
    1098             :     EXC_NUMFMT_STRING(  15, "DD.MMM.YY" ),
    1099             :     EXC_NUMFMT_STRING(  16, "DD.MMM" ),
    1100             :     EXC_NUMFMT_STRING(  17, "MMM.YY" ),
    1101             :     EXC_NUMFMT_STRING(  63, UTF8_EURO " #,##0;-" UTF8_EURO " #,##0" ),
    1102             :     EXC_NUMFMT_STRING(  64, UTF8_EURO " #,##0;[RED]-" UTF8_EURO " #,##0" ),
    1103             :     EXC_NUMFMT_STRING(  65, UTF8_EURO " #,##0.00;-" UTF8_EURO " #,##0.00" ),
    1104             :     EXC_NUMFMT_STRING(  66, UTF8_EURO " #,##0.00;[RED]-" UTF8_EURO " #,##0.00" ),
    1105             :     EXC_NUMFMT_ENDTABLE()
    1106             : };
    1107             : 
    1108             : static const XclBuiltInFormat spBuiltInFormats_GERMAN_SWISS[] =
    1109             : {
    1110             :     EXC_NUMFMT_STRING(  63, "\"SFr. \"#,##0;\"SFr. \"-#,##0" ),
    1111             :     EXC_NUMFMT_STRING(  64, "\"SFr. \"#,##0;[RED]\"SFr. \"-#,##0" ),
    1112             :     EXC_NUMFMT_STRING(  65, "\"SFr. \"#,##0.00;\"SFr. \"-#,##0.00" ),
    1113             :     EXC_NUMFMT_STRING(  66, "\"SFr. \"#,##0.00;[RED]\"SFr. \"-#,##0.00" ),
    1114             :     EXC_NUMFMT_ENDTABLE()
    1115             : };
    1116             : 
    1117             : static const XclBuiltInFormat spBuiltInFormats_GERMAN_LUXEMBOURG[] =
    1118             : {
    1119             :     EXC_NUMFMT_STRING(  15, "DD.MMM.YY" ),
    1120             :     EXC_NUMFMT_STRING(  16, "DD.MMM" ),
    1121             :     EXC_NUMFMT_STRING(  17, "MMM.YY" ),
    1122             :     EXC_NUMFMT_STRING(  37, "#,##0 _" UTF8_EURO ";-#,##0 _" UTF8_EURO ),
    1123             :     EXC_NUMFMT_STRING(  38, "#,##0 _" UTF8_EURO ";[RED]-#,##0 _" UTF8_EURO ),
    1124             :     EXC_NUMFMT_STRING(  39, "#,##0.00 _" UTF8_EURO ";-#,##0.00 _" UTF8_EURO ),
    1125             :     EXC_NUMFMT_STRING(  40, "#,##0.00 _" UTF8_EURO ";[RED]-#,##0.00 _" UTF8_EURO ),
    1126             :     EXC_NUMFMT_STRING(  63, "#,##0 " UTF8_EURO ";-#,##0 " UTF8_EURO ),
    1127             :     EXC_NUMFMT_STRING(  64, "#,##0 " UTF8_EURO ";[RED]-#,##0 " UTF8_EURO ),
    1128             :     EXC_NUMFMT_STRING(  65, "#,##0.00 " UTF8_EURO ";-#,##0.00 " UTF8_EURO ),
    1129             :     EXC_NUMFMT_STRING(  66, "#,##0.00 " UTF8_EURO ";[RED]-#,##0.00 " UTF8_EURO ),
    1130             :     EXC_NUMFMT_ENDTABLE()
    1131             : };
    1132             : 
    1133             : static const XclBuiltInFormat spBuiltInFormats_GERMAN_LIECHTENSTEIN[] =
    1134             : {
    1135             :     EXC_NUMFMT_STRING(  63, "\"CHF \"#,##0;\"CHF \"-#,##0" ),
    1136             :     EXC_NUMFMT_STRING(  64, "\"CHF \"#,##0;[RED]\"CHF \"-#,##0" ),
    1137             :     EXC_NUMFMT_STRING(  65, "\"CHF \"#,##0.00;\"CHF \"-#,##0.00" ),
    1138             :     EXC_NUMFMT_STRING(  66, "\"CHF \"#,##0.00;[RED]\"CHF \"-#,##0.00" ),
    1139             :     EXC_NUMFMT_ENDTABLE()
    1140             : };
    1141             : 
    1142             : // ITALIAN --------------------------------------------------------------------
    1143             : 
    1144             : static const XclBuiltInFormat spBuiltInFormats_ITALIAN_ITALY[] =
    1145             : {
    1146             :     EXC_NUMFMT_STRING(  15, "DD-MMM-YY" ),
    1147             :     EXC_NUMFMT_STRING(  16, "DD-MMM" ),
    1148             :     EXC_NUMFMT_STRING(  17, "MMM-YY" ),
    1149             :     EXC_NUMFMT_STRING(  18, "h:mm AM/PM" ),
    1150             :     EXC_NUMFMT_STRING(  19, "h:mm:ss AM/PM" ),
    1151             :     EXC_NUMFMT_STRING(  20, "h:mm" ),
    1152             :     EXC_NUMFMT_STRING(  21, "h:mm:ss" ),
    1153             :     EXC_NUMFMT_STRING(  22, "DD/MM/YYYY h:mm" ),
    1154             :     EXC_NUMFMT_STRING(  63, UTF8_EURO " #,##0;-" UTF8_EURO " #,##0" ),
    1155             :     EXC_NUMFMT_STRING(  64, UTF8_EURO " #,##0;[RED]-" UTF8_EURO " #,##0" ),
    1156             :     EXC_NUMFMT_STRING(  65, UTF8_EURO " #,##0.00;-" UTF8_EURO " #,##0.00" ),
    1157             :     EXC_NUMFMT_STRING(  66, UTF8_EURO " #,##0.00;[RED]-" UTF8_EURO " #,##0.00" ),
    1158             :     EXC_NUMFMT_ENDTABLE()
    1159             : };
    1160             : 
    1161             : static const XclBuiltInFormat spBuiltInFormats_ITALIAN_SWISS[] =
    1162             : {
    1163             :     EXC_NUMFMT_STRING(  15, "DD.MMM.YY" ),
    1164             :     EXC_NUMFMT_STRING(  16, "DD.MMM" ),
    1165             :     EXC_NUMFMT_STRING(  17, "MMM.YY" ),
    1166             :     EXC_NUMFMT_STRING(  18, "h:mm AM/PM" ),
    1167             :     EXC_NUMFMT_STRING(  19, "h:mm:ss AM/PM" ),
    1168             :     EXC_NUMFMT_STRING(  22, "DD.MM.YYYY hh:mm" ),
    1169             :     EXC_NUMFMT_STRING(  63, "\"SFr. \"#,##0;\"SFr. \"-#,##0" ),
    1170             :     EXC_NUMFMT_STRING(  64, "\"SFr. \"#,##0;[RED]\"SFr. \"-#,##0" ),
    1171             :     EXC_NUMFMT_STRING(  65, "\"SFr. \"#,##0.00;\"SFr. \"-#,##0.00" ),
    1172             :     EXC_NUMFMT_STRING(  66, "\"SFr. \"#,##0.00;[RED]\"SFr. \"-#,##0.00" ),
    1173             :     EXC_NUMFMT_ENDTABLE()
    1174             : };
    1175             : 
    1176             : // SWEDISH --------------------------------------------------------------------
    1177             : 
    1178             : static const XclBuiltInFormat spBuiltInFormats_SWEDISH_SWEDEN[] =
    1179             : {
    1180             :     EXC_NUMFMT_STRING(  15, "DD-MMM-YY" ),
    1181             :     EXC_NUMFMT_STRING(  16, "DD-MMM" ),
    1182             :     EXC_NUMFMT_STRING(  17, "MMM-YY" ),
    1183             :     EXC_NUMFMT_STRING(  18, "h:mm AM/PM" ),
    1184             :     EXC_NUMFMT_STRING(  19, "h:mm:ss AM/PM" ),
    1185             :     EXC_NUMFMT_STRING(  22, "YYYY-MM-DD hh:mm" ),
    1186             :     EXC_NUMFMT_STRING(  37, "#,##0 _k_r;-#,##0 _k_r" ),
    1187             :     EXC_NUMFMT_STRING(  38, "#,##0 _k_r;[RED]-#,##0 _k_r" ),
    1188             :     EXC_NUMFMT_STRING(  39, "#,##0.00 _k_r;-#,##0.00 _k_r" ),
    1189             :     EXC_NUMFMT_STRING(  40, "#,##0.00 _k_r;[RED]-#,##0.00 _k_r" ),
    1190             :     EXC_NUMFMT_STRING(  63, "#,##0 \"kr\";-#,##0 \"kr\"" ),
    1191             :     EXC_NUMFMT_STRING(  64, "#,##0 \"kr\";[RED]-#,##0 \"kr\"" ),
    1192             :     EXC_NUMFMT_STRING(  65, "#,##0.00 \"kr\";-#,##0.00 \"kr\"" ),
    1193             :     EXC_NUMFMT_STRING(  66, "#,##0.00 \"kr\";[RED]-#,##0.00 \"kr\"" ),
    1194             :     EXC_NUMFMT_ENDTABLE()
    1195             : };
    1196             : 
    1197             : static const XclBuiltInFormat spBuiltInFormats_SWEDISH_FINLAND[] =
    1198             : {
    1199             :     EXC_NUMFMT_STRING(   9, "0 %" ),
    1200             :     EXC_NUMFMT_STRING(  10, "0.00 %" ),
    1201             :     EXC_NUMFMT_STRING(  15, "DD.MMM.YY" ),
    1202             :     EXC_NUMFMT_STRING(  16, "DD.MMM" ),
    1203             :     EXC_NUMFMT_STRING(  17, "MMM.YY" ),
    1204             :     EXC_NUMFMT_STRING(  18, "h:mm AM/PM" ),
    1205             :     EXC_NUMFMT_STRING(  19, "h:mm:ss AM/PM" ),
    1206             :     EXC_NUMFMT_STRING(  22, "D.M.YYYY hh:mm" ),
    1207             :     EXC_NUMFMT_STRING(  37, "#,##0 _" UTF8_EURO ";-#,##0 _" UTF8_EURO ),
    1208             :     EXC_NUMFMT_STRING(  38, "#,##0 _" UTF8_EURO ";[RED]-#,##0 _" UTF8_EURO ),
    1209             :     EXC_NUMFMT_STRING(  39, "#,##0.00 _" UTF8_EURO ";-#,##0.00 _" UTF8_EURO ),
    1210             :     EXC_NUMFMT_STRING(  40, "#,##0.00 _" UTF8_EURO ";[RED]-#,##0.00 _" UTF8_EURO ),
    1211             :     EXC_NUMFMT_STRING(  63, "#,##0 " UTF8_EURO ";-#,##0 " UTF8_EURO ),
    1212             :     EXC_NUMFMT_STRING(  64, "#,##0 " UTF8_EURO ";[RED]-#,##0 " UTF8_EURO ),
    1213             :     EXC_NUMFMT_STRING(  65, "#,##0.00 " UTF8_EURO ";-#,##0.00 " UTF8_EURO ),
    1214             :     EXC_NUMFMT_STRING(  66, "#,##0.00 " UTF8_EURO ";[RED]-#,##0.00 " UTF8_EURO ),
    1215             :     EXC_NUMFMT_ENDTABLE()
    1216             : };
    1217             : 
    1218             : // ASIAN ----------------------------------------------------------------------
    1219             : 
    1220             : /** Base table for Asian locales. */
    1221             : static const XclBuiltInFormat spBuiltInFormats_ASIAN[] =
    1222             : {
    1223             :     EXC_NUMFMT_STRING(  18, "h:mm AM/PM" ),
    1224             :     EXC_NUMFMT_STRING(  19, "h:mm:ss AM/PM" ),
    1225             :     EXC_NUMFMT_STRING(  20, "h:mm" ),
    1226             :     EXC_NUMFMT_STRING(  21, "h:mm:ss" ),
    1227             :     EXC_NUMFMT_STRING(  23, "$#,##0_);($#,##0)" ),
    1228             :     EXC_NUMFMT_STRING(  24, "$#,##0_);[RED]($#,##0)" ),
    1229             :     EXC_NUMFMT_STRING(  25, "$#,##0.00_);($#,##0.00)" ),
    1230             :     EXC_NUMFMT_STRING(  26, "$#,##0.00_);[RED]($#,##0.00)" ),
    1231             :     EXC_NUMFMT_REUSE(   29, 28 ),
    1232             :     EXC_NUMFMT_REUSE(   36, 27 ),
    1233             :     EXC_NUMFMT_REUSE(   50, 27 ),
    1234             :     EXC_NUMFMT_REUSE(   51, 28 ),
    1235             :     EXC_NUMFMT_REUSE(   52, 34 ),
    1236             :     EXC_NUMFMT_REUSE(   53, 35 ),
    1237             :     EXC_NUMFMT_REUSE(   54, 28 ),
    1238             :     EXC_NUMFMT_REUSE(   55, 34 ),
    1239             :     EXC_NUMFMT_REUSE(   56, 35 ),
    1240             :     EXC_NUMFMT_REUSE(   57, 27 ),
    1241             :     EXC_NUMFMT_REUSE(   58, 28 ),
    1242             :     EXC_NUMFMT_ENDTABLE()
    1243             : };
    1244             : 
    1245             : static const XclBuiltInFormat spBuiltInFormats_JAPANESE[] =
    1246             : {
    1247             :     EXC_NUMFMT_STRING(  14, "YYYY/M/D" ),
    1248             :     EXC_NUMFMT_STRING(  15, "D-MMM-YY" ),
    1249             :     EXC_NUMFMT_STRING(  16, "D-MMM" ),
    1250             :     EXC_NUMFMT_STRING(  17, "MMM-YY" ),
    1251             :     EXC_NUMFMT_STRING(  22, "YYYY/M/D h:mm" ),
    1252             :     EXC_NUMFMT_STRING(  27, "[$-0411]GE.M.D" ),
    1253             :     EXC_NUMFMT_STRING(  28, "[$-0411]GGGE" UTF8_CJ_YEAR "M" UTF8_CJ_MON "D" UTF8_CJ_DAY ),
    1254             :     EXC_NUMFMT_STRING(  30, "[$-0411]M/D/YY" ),
    1255             :     EXC_NUMFMT_STRING(  31, "[$-0411]YYYY" UTF8_CJ_YEAR "M" UTF8_CJ_MON "D" UTF8_CJ_DAY ),
    1256             :     EXC_NUMFMT_STRING(  32, "[$-0411]h" UTF8_CJ_HOUR "mm" UTF8_CJ_MIN ),
    1257             :     EXC_NUMFMT_STRING(  33, "[$-0411]h" UTF8_CJ_HOUR "mm" UTF8_CJ_MIN "ss" UTF8_CJ_SEC ),
    1258             :     EXC_NUMFMT_STRING(  34, "[$-0411]YYYY" UTF8_CJ_YEAR "M" UTF8_CJ_MON ),
    1259             :     EXC_NUMFMT_STRING(  35, "[$-0411]M" UTF8_CJ_MON "D" UTF8_CJ_DAY ),
    1260             :     EXC_NUMFMT_STRING(  63, UTF8_YEN_JP "#,##0;-" UTF8_YEN_JP "#,##0" ),
    1261             :     EXC_NUMFMT_STRING(  64, UTF8_YEN_JP "#,##0;[RED]-" UTF8_YEN_JP "#,##0" ),
    1262             :     EXC_NUMFMT_STRING(  65, UTF8_YEN_JP "#,##0.00;-" UTF8_YEN_JP "#,##0.00" ),
    1263             :     EXC_NUMFMT_STRING(  66, UTF8_YEN_JP "#,##0.00;[RED]-" UTF8_YEN_JP "#,##0.00" ),
    1264             :     EXC_NUMFMT_ENDTABLE()
    1265             : };
    1266             : 
    1267             : static const XclBuiltInFormat spBuiltInFormats_KOREAN[] =
    1268             : {
    1269             :     EXC_NUMFMT_STRING(  14, "YYYY-MM-DD" ),
    1270             :     EXC_NUMFMT_STRING(  15, "DD-MMM-YY" ),
    1271             :     EXC_NUMFMT_STRING(  16, "DD-MMM" ),
    1272             :     EXC_NUMFMT_STRING(  17, "MMM-YY" ),
    1273             :     EXC_NUMFMT_STRING(  22, "YYYY-MM-DD h:mm" ),
    1274             :     EXC_NUMFMT_STRING(  27, "[$-0412]YYYY" UTF8_CJ_YEAR " MM" UTF8_CJ_MON " DD" UTF8_CJ_DAY ),
    1275             :     EXC_NUMFMT_STRING(  28, "[$-0412]MM-DD" ),
    1276             :     EXC_NUMFMT_STRING(  30, "[$-0412]MM-DD-YY" ),
    1277             :     EXC_NUMFMT_STRING(  31, "[$-0412]YYYY" UTF8_KO_YEAR " MM" UTF8_KO_MON " DD" UTF8_KO_DAY ),
    1278             :     EXC_NUMFMT_STRING(  32, "[$-0412]h" UTF8_KO_HOUR " mm" UTF8_KO_MIN ),
    1279             :     EXC_NUMFMT_STRING(  33, "[$-0412]h" UTF8_KO_HOUR " mm" UTF8_KO_MIN " ss" UTF8_KO_SEC ),
    1280             :     EXC_NUMFMT_STRING(  34, "[$-0412]YYYY\"/\"MM\"/\"DD" ),
    1281             :     EXC_NUMFMT_STRING(  35, "[$-0412]YYYY-MM-DD" ),
    1282             :     EXC_NUMFMT_STRING(  63, UTF8_WON "#,##0;-" UTF8_WON "#,##0" ),
    1283             :     EXC_NUMFMT_STRING(  64, UTF8_WON "#,##0;[RED]-" UTF8_WON "#,##0" ),
    1284             :     EXC_NUMFMT_STRING(  65, UTF8_WON "#,##0.00;-" UTF8_WON "#,##0.00" ),
    1285             :     EXC_NUMFMT_STRING(  66, UTF8_WON "#,##0.00;[RED]-" UTF8_WON "#,##0.00" ),
    1286             :     EXC_NUMFMT_ENDTABLE()
    1287             : };
    1288             : 
    1289             : static const XclBuiltInFormat spBuiltInFormats_CHINESE_SIMPLIFIED[] =
    1290             : {
    1291             :     EXC_NUMFMT_STRING(  14, "YYYY-M-D" ),
    1292             :     EXC_NUMFMT_STRING(  15, "D-MMM-YY" ),
    1293             :     EXC_NUMFMT_STRING(  16, "D-MMM" ),
    1294             :     EXC_NUMFMT_STRING(  17, "MMM-YY" ),
    1295             :     EXC_NUMFMT_STRING(  22, "YYYY-M-D h:mm" ),
    1296             :     EXC_NUMFMT_STRING(  27, "[$-0804]YYYY" UTF8_CJ_YEAR "M" UTF8_CJ_MON ),
    1297             :     EXC_NUMFMT_STRING(  28, "[$-0804]M" UTF8_CJ_MON "D" UTF8_CJ_DAY ),
    1298             :     EXC_NUMFMT_STRING(  30, "[$-0804]M-D-YY" ),
    1299             :     EXC_NUMFMT_STRING(  31, "[$-0804]YYYY" UTF8_CJ_YEAR "M" UTF8_CJ_MON "D" UTF8_CJ_DAY ),
    1300             :     EXC_NUMFMT_STRING(  32, "[$-0804]h" UTF8_CS_HOUR "mm" UTF8_CJ_MIN ),
    1301             :     EXC_NUMFMT_STRING(  33, "[$-0804]h" UTF8_CS_HOUR "mm" UTF8_CJ_MIN "ss" UTF8_CJ_SEC ),
    1302             :     EXC_NUMFMT_STRING(  34, "[$-0804]AM/PMh" UTF8_CS_HOUR "mm" UTF8_CJ_MIN ),
    1303             :     EXC_NUMFMT_STRING(  35, "[$-0804]AM/PMh" UTF8_CS_HOUR "mm" UTF8_CJ_MIN "ss" UTF8_CJ_SEC ),
    1304             :     EXC_NUMFMT_REUSE(   52, 27 ),
    1305             :     EXC_NUMFMT_REUSE(   53, 28 ),
    1306             :     EXC_NUMFMT_STRING(  63, UTF8_YEN_CS "#,##0;-" UTF8_YEN_CS "#,##0" ),
    1307             :     EXC_NUMFMT_STRING(  64, UTF8_YEN_CS "#,##0;[RED]-" UTF8_YEN_CS "#,##0" ),
    1308             :     EXC_NUMFMT_STRING(  65, UTF8_YEN_CS "#,##0.00;-" UTF8_YEN_CS "#,##0.00" ),
    1309             :     EXC_NUMFMT_STRING(  66, UTF8_YEN_CS "#,##0.00;[RED]-" UTF8_YEN_CS "#,##0.00" ),
    1310             :     EXC_NUMFMT_ENDTABLE()
    1311             : };
    1312             : 
    1313             : static const XclBuiltInFormat spBuiltInFormats_CHINESE_TRADITIONAL[] =
    1314             : {
    1315             :     EXC_NUMFMT_STRING(  15, "D-MMM-YY" ),
    1316             :     EXC_NUMFMT_STRING(  16, "D-MMM" ),
    1317             :     EXC_NUMFMT_STRING(  17, "MMM-YY" ),
    1318             :     EXC_NUMFMT_STRING(  18, "hh:mm AM/PM" ),
    1319             :     EXC_NUMFMT_STRING(  19, "hh:mm:ss AM/PM" ),
    1320             :     EXC_NUMFMT_OFFSET(  20, NF_TIME_HHMM ),
    1321             :     EXC_NUMFMT_OFFSET(  21, NF_TIME_HHMMSS ),
    1322             :     EXC_NUMFMT_STRING(  22, "YYYY/M/D hh:mm" ),
    1323             :     EXC_NUMFMT_STRING(  23, "US$#,##0_);(US$#,##0)" ),
    1324             :     EXC_NUMFMT_STRING(  24, "US$#,##0_);[RED](US$#,##0)" ),
    1325             :     EXC_NUMFMT_STRING(  25, "US$#,##0.00_);(US$#,##0.00)" ),
    1326             :     EXC_NUMFMT_STRING(  26, "US$#,##0.00_);[RED](US$#,##0.00)" ),
    1327             :     EXC_NUMFMT_STRING(  27, "[$-0404]E/M/D" ),
    1328             :     EXC_NUMFMT_STRING(  28, "[$-0404]E" UTF8_CJ_YEAR "M" UTF8_CJ_MON "D" UTF8_CJ_DAY ),
    1329             :     EXC_NUMFMT_STRING(  30, "[$-0404]M/D/YY" ),
    1330             :     EXC_NUMFMT_STRING(  31, "[$-0404]YYYY" UTF8_CJ_YEAR "M" UTF8_CJ_MON "D" UTF8_CJ_DAY ),
    1331             :     EXC_NUMFMT_STRING(  32, "[$-0404]hh" UTF8_CJ_HOUR "mm" UTF8_CJ_MIN ),
    1332             :     EXC_NUMFMT_STRING(  33, "[$-0404]hh" UTF8_CJ_HOUR "mm" UTF8_CJ_MIN "ss" UTF8_CJ_SEC ),
    1333             :     EXC_NUMFMT_STRING(  34, "[$-0404]AM/PMhh" UTF8_CJ_HOUR "mm" UTF8_CJ_MIN ),
    1334             :     EXC_NUMFMT_STRING(  35, "[$-0404]AM/PMhh" UTF8_CJ_HOUR "mm" UTF8_CJ_MIN "ss" UTF8_CJ_SEC ),
    1335             :     EXC_NUMFMT_STRING(  63, "$#,##0;-$#,##0" ),
    1336             :     EXC_NUMFMT_STRING(  64, "$#,##0;[RED]-$#,##0" ),
    1337             :     EXC_NUMFMT_STRING(  65, "$#,##0.00;-$#,##0.00" ),
    1338             :     EXC_NUMFMT_STRING(  66, "$#,##0.00;[RED]-$#,##0.00" ),
    1339             :     EXC_NUMFMT_ENDTABLE()
    1340             : };
    1341             : 
    1342             : // OTHER ----------------------------------------------------------------------
    1343             : 
    1344             : static const XclBuiltInFormat spBuiltInFormats_HEBREW[] =
    1345             : {
    1346             :     EXC_NUMFMT_STRING(  15, "DD-MMMM-YY" ),
    1347             :     EXC_NUMFMT_STRING(  16, "DD-MMMM" ),
    1348             :     EXC_NUMFMT_STRING(  17, "MMMM-YY" ),
    1349             :     EXC_NUMFMT_STRING(  18, "h:mm AM/PM" ),
    1350             :     EXC_NUMFMT_STRING(  19, "h:mm:ss AM/PM" ),
    1351             :     EXC_NUMFMT_STRING(  63, UTF8_SHEQEL " #,##0;" UTF8_SHEQEL " -#,##0" ),
    1352             :     EXC_NUMFMT_STRING(  64, UTF8_SHEQEL " #,##0;[RED]" UTF8_SHEQEL " -#,##0" ),
    1353             :     EXC_NUMFMT_STRING(  65, UTF8_SHEQEL " #,##0.00;" UTF8_SHEQEL " -#,##0.00" ),
    1354             :     EXC_NUMFMT_STRING(  66, UTF8_SHEQEL " #,##0.00;[RED]" UTF8_SHEQEL " -#,##0.00" ),
    1355             :     EXC_NUMFMT_ENDTABLE()
    1356             : };
    1357             : 
    1358             : static const XclBuiltInFormat spBuiltInFormats_THAI[] =
    1359             : {
    1360             :     EXC_NUMFMT_STRING(  14, "D/M/YYYY" ),
    1361             :     EXC_NUMFMT_STRING(  15, "D-MMM-YY" ),
    1362             :     EXC_NUMFMT_STRING(  16, "D-MMM" ),
    1363             :     EXC_NUMFMT_STRING(  17, "MMM-YY" ),
    1364             :     EXC_NUMFMT_STRING(  18, "h:mm AM/PM" ),
    1365             :     EXC_NUMFMT_STRING(  19, "h:mm:ss AM/PM" ),
    1366             :     EXC_NUMFMT_STRING(  22, "D/M/YYYY h:mm" ),
    1367             :     EXC_NUMFMT_STRING(  59, "t0" ),
    1368             :     EXC_NUMFMT_STRING(  60, "t0.00" ),
    1369             :     EXC_NUMFMT_STRING(  61, "t#,##0" ),
    1370             :     EXC_NUMFMT_STRING(  62, "t#,##0.00" ),
    1371             :     EXC_NUMFMT_STRING(  63, "t" UTF8_BAHT "#,##0_);t(" UTF8_BAHT "#,##0)" ),
    1372             :     EXC_NUMFMT_STRING(  64, "t" UTF8_BAHT "#,##0_);[RED]t(" UTF8_BAHT "#,##0)" ),
    1373             :     EXC_NUMFMT_STRING(  65, "t" UTF8_BAHT "#,##0.00_);t(" UTF8_BAHT "#,##0.00)" ),
    1374             :     EXC_NUMFMT_STRING(  66, "t" UTF8_BAHT "#,##0.00_);[RED]t(" UTF8_BAHT "#,##0.00)" ),
    1375             :     EXC_NUMFMT_STRING(  67, "t0%" ),
    1376             :     EXC_NUMFMT_STRING(  68, "t0.00%" ),
    1377             :     EXC_NUMFMT_STRING(  69, "t# ?/?" ),
    1378             :     EXC_NUMFMT_STRING(  70, "t# ?\?/?\?" ),
    1379             :     EXC_NUMFMT_STRING(  71, "tD/M/EE" ),
    1380             :     EXC_NUMFMT_STRING(  72, "tD-MMM-E" ),
    1381             :     EXC_NUMFMT_STRING(  73, "tD-MMM" ),
    1382             :     EXC_NUMFMT_STRING(  74, "tMMM-E" ),
    1383             :     EXC_NUMFMT_STRING(  75, "th:mm" ),
    1384             :     EXC_NUMFMT_STRING(  76, "th:mm:ss" ),
    1385             :     EXC_NUMFMT_STRING(  77, "tD/M/EE h:mm" ),
    1386             :     EXC_NUMFMT_STRING(  78, "tmm:ss" ),
    1387             :     EXC_NUMFMT_STRING(  79, "t[h]:mm:ss" ),
    1388             :     EXC_NUMFMT_STRING(  80, "tmm:ss.0" ),
    1389             :     EXC_NUMFMT_STRING(  81, "D/M/E" ),
    1390             :     EXC_NUMFMT_ENDTABLE()
    1391             : };
    1392             : 
    1393             : #undef EXC_NUMFMT_ENDTABLE
    1394             : #undef EXC_NUMFMT_REUSE
    1395             : #undef EXC_NUMFMT_OFFSET
    1396             : #undef EXC_NUMFMT_STRING
    1397             : 
    1398             : /** Specifies a number format table for a specific language. */
    1399             : struct XclBuiltInFormatTable
    1400             : {
    1401             :     LanguageType        meLanguage;         /// The language of this table.
    1402             :     LanguageType        meParentLang;       /// The language of the parent table.
    1403             :     const XclBuiltInFormat* mpFormats;      /// The number format table.
    1404             : };
    1405             : 
    1406             : static const XclBuiltInFormatTable spBuiltInFormatTables[] =
    1407             : {   //  language                        parent language             format table
    1408             :     {   LANGUAGE_DONTKNOW,              LANGUAGE_NONE,              spBuiltInFormats_DONTKNOW               },
    1409             : 
    1410             :     {   LANGUAGE_ENGLISH,               LANGUAGE_DONTKNOW,          spBuiltInFormats_ENGLISH                },
    1411             :     {   LANGUAGE_ENGLISH_UK,            LANGUAGE_ENGLISH,           spBuiltInFormats_ENGLISH_UK             },
    1412             :     {   LANGUAGE_ENGLISH_EIRE,          LANGUAGE_ENGLISH,           spBuiltInFormats_ENGLISH_EIRE           },
    1413             :     {   LANGUAGE_ENGLISH_US,            LANGUAGE_ENGLISH,           spBuiltInFormats_ENGLISH_US             },
    1414             :     {   LANGUAGE_ENGLISH_CAN,           LANGUAGE_ENGLISH,           spBuiltInFormats_ENGLISH_CAN            },
    1415             :     {   LANGUAGE_ENGLISH_AUS,           LANGUAGE_ENGLISH,           spBuiltInFormats_ENGLISH_AUS            },
    1416             :     {   LANGUAGE_ENGLISH_SAFRICA,       LANGUAGE_ENGLISH,           spBuiltInFormats_ENGLISH_SAFRICA        },
    1417             :     {   LANGUAGE_ENGLISH_NZ,            LANGUAGE_ENGLISH_AUS,       0                                       },
    1418             : 
    1419             :     {   PRV_LANGUAGE_FRENCH_PRIM,       LANGUAGE_DONTKNOW,          spBuiltInFormats_FRENCH                 },
    1420             :     {   LANGUAGE_FRENCH,                PRV_LANGUAGE_FRENCH_PRIM,   spBuiltInFormats_FRENCH_FRANCE          },
    1421             :     {   LANGUAGE_FRENCH_CANADIAN,       PRV_LANGUAGE_FRENCH_PRIM,   spBuiltInFormats_FRENCH_CANADIAN        },
    1422             :     {   LANGUAGE_FRENCH_SWISS,          PRV_LANGUAGE_FRENCH_PRIM,   spBuiltInFormats_FRENCH_SWISS           },
    1423             :     {   LANGUAGE_FRENCH_BELGIAN,        LANGUAGE_FRENCH,            spBuiltInFormats_FRENCH_BELGIAN         },
    1424             :     {   LANGUAGE_FRENCH_LUXEMBOURG,     LANGUAGE_FRENCH,            0                                       },
    1425             :     {   LANGUAGE_FRENCH_MONACO,         LANGUAGE_FRENCH,            0                                       },
    1426             : 
    1427             :     {   PRV_LANGUAGE_GERMAN_PRIM,       LANGUAGE_DONTKNOW,          spBuiltInFormats_GERMAN                 },
    1428             :     {   LANGUAGE_GERMAN,                PRV_LANGUAGE_GERMAN_PRIM,   spBuiltInFormats_GERMAN_GERMANY         },
    1429             :     {   LANGUAGE_GERMAN_AUSTRIAN,       PRV_LANGUAGE_GERMAN_PRIM,   spBuiltInFormats_GERMAN_AUSTRIAN        },
    1430             :     {   LANGUAGE_GERMAN_SWISS,          PRV_LANGUAGE_GERMAN_PRIM,   spBuiltInFormats_GERMAN_SWISS           },
    1431             :     {   LANGUAGE_GERMAN_LUXEMBOURG,     PRV_LANGUAGE_GERMAN_PRIM,   spBuiltInFormats_GERMAN_LUXEMBOURG      },
    1432             :     {   LANGUAGE_GERMAN_LIECHTENSTEIN,  PRV_LANGUAGE_GERMAN_PRIM,   spBuiltInFormats_GERMAN_LIECHTENSTEIN   },
    1433             : 
    1434             :     {   LANGUAGE_ITALIAN,               LANGUAGE_DONTKNOW,          spBuiltInFormats_ITALIAN_ITALY          },
    1435             :     {   LANGUAGE_ITALIAN_SWISS,         LANGUAGE_DONTKNOW,          spBuiltInFormats_ITALIAN_SWISS          },
    1436             : 
    1437             :     {   LANGUAGE_SWEDISH,               LANGUAGE_DONTKNOW,          spBuiltInFormats_SWEDISH_SWEDEN         },
    1438             :     {   LANGUAGE_SWEDISH_FINLAND,       LANGUAGE_DONTKNOW,          spBuiltInFormats_SWEDISH_FINLAND        },
    1439             : 
    1440             :     {   PRV_LANGUAGE_ASIAN_PRIM,        LANGUAGE_DONTKNOW,          spBuiltInFormats_ASIAN                  },
    1441             :     {   LANGUAGE_JAPANESE,              PRV_LANGUAGE_ASIAN_PRIM,    spBuiltInFormats_JAPANESE               },
    1442             :     {   LANGUAGE_KOREAN,                PRV_LANGUAGE_ASIAN_PRIM,    spBuiltInFormats_KOREAN                 },
    1443             :     {   LANGUAGE_CHINESE_SIMPLIFIED,    PRV_LANGUAGE_ASIAN_PRIM,    spBuiltInFormats_CHINESE_SIMPLIFIED     },
    1444             :     {   LANGUAGE_CHINESE_TRADITIONAL,   PRV_LANGUAGE_ASIAN_PRIM,    spBuiltInFormats_CHINESE_TRADITIONAL    },
    1445             : 
    1446             :     {   LANGUAGE_HEBREW,                LANGUAGE_DONTKNOW,          spBuiltInFormats_HEBREW                 },
    1447             :     {   LANGUAGE_THAI,                  LANGUAGE_DONTKNOW,          spBuiltInFormats_THAI                   }
    1448             : };
    1449             : 
    1450             : } // namespace
    1451             : 
    1452           0 : XclNumFmtBuffer::XclNumFmtBuffer( const XclRoot& rRoot ) :
    1453           0 :     meSysLang( rRoot.GetSysLanguage() ),
    1454           0 :     mnStdScNumFmt( rRoot.GetFormatter().GetStandardFormat( ScGlobal::eLnge ) )
    1455             : {
    1456             :     // *** insert default formats (BIFF5+ only)***
    1457             : 
    1458           0 :     if( rRoot.GetBiff() >= EXC_BIFF5 )
    1459           0 :         InsertBuiltinFormats();
    1460           0 : }
    1461             : 
    1462           0 : void XclNumFmtBuffer::InitializeImport()
    1463             : {
    1464           0 :     maFmtMap.clear();
    1465           0 : }
    1466             : 
    1467           0 : void XclNumFmtBuffer::InsertFormat( sal_uInt16 nXclNumFmt, const OUString& rFormat )
    1468             : {
    1469           0 :     XclNumFmt& rNumFmt = maFmtMap[ nXclNumFmt ];
    1470           0 :     rNumFmt.maFormat = rFormat;
    1471             :     // #i62053# rFormat may be an empty string, meOffset must be initialized
    1472           0 :     rNumFmt.meOffset = NF_NUMBER_STANDARD;
    1473           0 :     rNumFmt.meLanguage = LANGUAGE_SYSTEM;
    1474           0 : }
    1475             : 
    1476           0 : void XclNumFmtBuffer::InsertBuiltinFormats()
    1477             : {
    1478             :     // build a map containing tables for all languages
    1479             :     typedef ::std::map< LanguageType, const XclBuiltInFormatTable* > XclBuiltInMap;
    1480           0 :     XclBuiltInMap aBuiltInMap;
    1481           0 :     for( const XclBuiltInFormatTable* pTable = spBuiltInFormatTables;
    1482           0 :             pTable != STATIC_ARRAY_END( spBuiltInFormatTables ); ++pTable )
    1483           0 :         aBuiltInMap[ pTable->meLanguage ] = pTable;
    1484             : 
    1485             :     // build a list of table pointers for the current language, with all parent tables
    1486             :     typedef ::std::vector< const XclBuiltInFormatTable* > XclBuiltInVec;
    1487           0 :     XclBuiltInVec aBuiltInVec;
    1488           0 :     for( XclBuiltInMap::const_iterator aMIt = aBuiltInMap.find( meSysLang ), aMEnd = aBuiltInMap.end();
    1489           0 :             aMIt != aMEnd; aMIt = aBuiltInMap.find( aMIt->second->meParentLang ) )
    1490           0 :         aBuiltInVec.push_back( aMIt->second );
    1491             :     // language not supported
    1492           0 :     if( aBuiltInVec.empty() )
    1493             :     {
    1494             :         OSL_TRACE( "XclNumFmtBuffer::InsertBuiltinFormats - language 0x%04hX not supported (#i29949#)", meSysLang );
    1495           0 :         XclBuiltInMap::const_iterator aMIt = aBuiltInMap.find( LANGUAGE_DONTKNOW );
    1496             :         OSL_ENSURE( aMIt != aBuiltInMap.end(), "XclNumFmtBuffer::InsertBuiltinFormats - default map not found" );
    1497           0 :         if( aMIt != aBuiltInMap.end() )
    1498           0 :             aBuiltInVec.push_back( aMIt->second );
    1499             :     }
    1500             : 
    1501             :     // insert the default formats in the format map, from root parent to system language
    1502             :     typedef ::std::map< sal_uInt16, sal_uInt16 > XclReuseMap;
    1503           0 :     XclReuseMap aReuseMap;
    1504           0 :     for( XclBuiltInVec::reverse_iterator aVIt = aBuiltInVec.rbegin(), aVEnd = aBuiltInVec.rend(); aVIt != aVEnd; ++aVIt )
    1505             :     {
    1506             :         // put LANGUAGE_SYSTEM for all entries in default table
    1507           0 :         LanguageType eLang = ((*aVIt)->meLanguage == LANGUAGE_DONTKNOW) ? LANGUAGE_SYSTEM : meSysLang;
    1508           0 :         for( const XclBuiltInFormat* pBuiltIn = (*aVIt)->mpFormats; pBuiltIn && (pBuiltIn->mnXclNumFmt != EXC_FORMAT_NOTFOUND); ++pBuiltIn )
    1509             :         {
    1510           0 :             XclNumFmt& rNumFmt = maFmtMap[ pBuiltIn->mnXclNumFmt ];
    1511             : 
    1512           0 :             rNumFmt.meOffset = pBuiltIn->meOffset;
    1513           0 :             rNumFmt.meLanguage = eLang;
    1514             : 
    1515           0 :             if( pBuiltIn->mpFormat )
    1516           0 :                 rNumFmt.maFormat = OUString( pBuiltIn->mpFormat, strlen(pBuiltIn->mpFormat), RTL_TEXTENCODING_UTF8 );
    1517             :             else
    1518           0 :                 rNumFmt.maFormat = EMPTY_OUSTRING;
    1519             : 
    1520           0 :             if( pBuiltIn->meOffset == PRV_NF_INDEX_REUSE )
    1521           0 :                 aReuseMap[ pBuiltIn->mnXclNumFmt ] = pBuiltIn->mnXclReuseFmt;
    1522             :             else
    1523           0 :                 aReuseMap.erase( pBuiltIn->mnXclNumFmt );
    1524             :         }
    1525             :     }
    1526             : 
    1527             :     // copy reused number formats
    1528           0 :     for( XclReuseMap::const_iterator aRIt = aReuseMap.begin(), aREnd = aReuseMap.end(); aRIt != aREnd; ++aRIt )
    1529           0 :         maFmtMap[ aRIt->first ] = maFmtMap[ aRIt->second ];
    1530           0 : }
    1531             : 
    1532             : // Cell formatting data (XF) ==================================================
    1533             : 
    1534           0 : XclCellProt::XclCellProt() :
    1535             :     mbLocked( true ),       // default in Excel and Calc
    1536           0 :     mbHidden( false )
    1537             : {
    1538           0 : }
    1539             : 
    1540           0 : bool operator==( const XclCellProt& rLeft, const XclCellProt& rRight )
    1541             : {
    1542           0 :     return (rLeft.mbLocked == rRight.mbLocked) && (rLeft.mbHidden == rRight.mbHidden);
    1543             : }
    1544             : 
    1545           0 : XclCellAlign::XclCellAlign() :
    1546             :     mnHorAlign( EXC_XF_HOR_GENERAL ),
    1547             :     mnVerAlign( EXC_XF_VER_BOTTOM ),
    1548             :     mnOrient( EXC_ORIENT_NONE ),
    1549             :     mnTextDir( EXC_XF_TEXTDIR_CONTEXT ),
    1550             :     mnRotation( EXC_ROT_NONE ),
    1551             :     mnIndent( 0 ),
    1552             :     mbLineBreak( false ),
    1553           0 :     mbShrink( false )
    1554             : {
    1555           0 : }
    1556             : 
    1557           0 : SvxCellHorJustify XclCellAlign::GetScHorAlign() const
    1558             : {
    1559           0 :     SvxCellHorJustify eHorJust = SVX_HOR_JUSTIFY_STANDARD;
    1560           0 :     switch( mnHorAlign )
    1561             :     {
    1562           0 :         case EXC_XF_HOR_GENERAL:    eHorJust = SVX_HOR_JUSTIFY_STANDARD;    break;
    1563           0 :         case EXC_XF_HOR_LEFT:       eHorJust = SVX_HOR_JUSTIFY_LEFT;        break;
    1564             :         case EXC_XF_HOR_CENTER_AS:
    1565           0 :         case EXC_XF_HOR_CENTER:     eHorJust = SVX_HOR_JUSTIFY_CENTER;      break;
    1566           0 :         case EXC_XF_HOR_RIGHT:      eHorJust = SVX_HOR_JUSTIFY_RIGHT;       break;
    1567           0 :         case EXC_XF_HOR_FILL:       eHorJust = SVX_HOR_JUSTIFY_REPEAT;      break;
    1568             :         case EXC_XF_HOR_JUSTIFY:
    1569           0 :         case EXC_XF_HOR_DISTRIB:    eHorJust = SVX_HOR_JUSTIFY_BLOCK;       break;
    1570             :         default:    OSL_FAIL( "XclCellAlign::GetScHorAlign - unknown horizontal alignment" );
    1571             :     }
    1572           0 :     return eHorJust;
    1573             : }
    1574             : 
    1575           0 : SvxCellJustifyMethod XclCellAlign::GetScHorJustifyMethod() const
    1576             : {
    1577           0 :     return (mnHorAlign == EXC_XF_HOR_DISTRIB) ? SVX_JUSTIFY_METHOD_DISTRIBUTE : SVX_JUSTIFY_METHOD_AUTO;
    1578             : }
    1579             : 
    1580           0 : SvxCellVerJustify XclCellAlign::GetScVerAlign() const
    1581             : {
    1582           0 :     SvxCellVerJustify eVerJust = SVX_VER_JUSTIFY_STANDARD;
    1583           0 :     switch( mnVerAlign )
    1584             :     {
    1585           0 :         case EXC_XF_VER_TOP:        eVerJust = SVX_VER_JUSTIFY_TOP;         break;
    1586           0 :         case EXC_XF_VER_CENTER:     eVerJust = SVX_VER_JUSTIFY_CENTER;      break;
    1587           0 :         case EXC_XF_VER_BOTTOM:     eVerJust = SVX_VER_JUSTIFY_STANDARD;    break;
    1588             :         case EXC_XF_VER_JUSTIFY:
    1589           0 :         case EXC_XF_VER_DISTRIB:    eVerJust = SVX_VER_JUSTIFY_BLOCK;       break;
    1590             :         default:    OSL_FAIL( "XclCellAlign::GetScVerAlign - unknown vertical alignment" );
    1591             :     }
    1592           0 :     return eVerJust;
    1593             : }
    1594             : 
    1595           0 : SvxCellJustifyMethod XclCellAlign::GetScVerJustifyMethod() const
    1596             : {
    1597           0 :     return (mnVerAlign == EXC_XF_VER_DISTRIB) ? SVX_JUSTIFY_METHOD_DISTRIBUTE : SVX_JUSTIFY_METHOD_AUTO;
    1598             : }
    1599             : 
    1600           0 : SvxFrameDirection XclCellAlign::GetScFrameDir() const
    1601             : {
    1602           0 :     SvxFrameDirection eFrameDir = FRMDIR_ENVIRONMENT;
    1603           0 :     switch( mnTextDir )
    1604             :     {
    1605           0 :         case EXC_XF_TEXTDIR_CONTEXT:    eFrameDir = FRMDIR_ENVIRONMENT;     break;
    1606           0 :         case EXC_XF_TEXTDIR_LTR:        eFrameDir = FRMDIR_HORI_LEFT_TOP;   break;
    1607           0 :         case EXC_XF_TEXTDIR_RTL:        eFrameDir = FRMDIR_HORI_RIGHT_TOP;  break;
    1608             :         default:    OSL_FAIL( "XclCellAlign::GetScFrameDir - unknown CTL text direction" );
    1609             :     }
    1610           0 :     return eFrameDir;
    1611             : }
    1612             : 
    1613           0 : void XclCellAlign::SetScHorAlign( SvxCellHorJustify eHorJust )
    1614             : {
    1615           0 :     switch( eHorJust )
    1616             :     {
    1617           0 :         case SVX_HOR_JUSTIFY_STANDARD:  mnHorAlign = EXC_XF_HOR_GENERAL;    break;
    1618           0 :         case SVX_HOR_JUSTIFY_LEFT:      mnHorAlign = EXC_XF_HOR_LEFT;       break;
    1619           0 :         case SVX_HOR_JUSTIFY_CENTER:    mnHorAlign = EXC_XF_HOR_CENTER;     break;
    1620           0 :         case SVX_HOR_JUSTIFY_RIGHT:     mnHorAlign = EXC_XF_HOR_RIGHT;      break;
    1621           0 :         case SVX_HOR_JUSTIFY_BLOCK:     mnHorAlign = EXC_XF_HOR_JUSTIFY;    break;
    1622           0 :         case SVX_HOR_JUSTIFY_REPEAT:    mnHorAlign = EXC_XF_HOR_FILL;       break;
    1623           0 :         default:                        mnHorAlign = EXC_XF_HOR_GENERAL;
    1624             :             OSL_FAIL( "XclCellAlign::SetScHorAlign - unknown horizontal alignment" );
    1625             :     }
    1626           0 : }
    1627             : 
    1628           0 : void XclCellAlign::SetScVerAlign( SvxCellVerJustify eVerJust )
    1629             : {
    1630           0 :     switch( eVerJust )
    1631             :     {
    1632           0 :         case SVX_VER_JUSTIFY_STANDARD:  mnVerAlign = EXC_XF_VER_BOTTOM; break;
    1633           0 :         case SVX_VER_JUSTIFY_TOP:       mnVerAlign = EXC_XF_VER_TOP;    break;
    1634           0 :         case SVX_VER_JUSTIFY_CENTER:    mnVerAlign = EXC_XF_VER_CENTER; break;
    1635           0 :         case SVX_VER_JUSTIFY_BOTTOM:    mnVerAlign = EXC_XF_VER_BOTTOM; break;
    1636           0 :         default:                        mnVerAlign = EXC_XF_VER_BOTTOM;
    1637             :             OSL_FAIL( "XclCellAlign::SetScVerAlign - unknown vertical alignment" );
    1638             :     }
    1639           0 : }
    1640             : 
    1641           0 : void XclCellAlign::SetScFrameDir( SvxFrameDirection eFrameDir )
    1642             : {
    1643           0 :     switch( eFrameDir )
    1644             :     {
    1645           0 :         case FRMDIR_ENVIRONMENT:    mnTextDir = EXC_XF_TEXTDIR_CONTEXT; break;
    1646           0 :         case FRMDIR_HORI_LEFT_TOP:  mnTextDir = EXC_XF_TEXTDIR_LTR;     break;
    1647           0 :         case FRMDIR_HORI_RIGHT_TOP: mnTextDir = EXC_XF_TEXTDIR_RTL;     break;
    1648           0 :         default:                    mnTextDir = EXC_XF_TEXTDIR_CONTEXT;
    1649             :             OSL_FAIL( "XclCellAlign::SetScFrameDir - unknown CTL text direction" );
    1650             :     }
    1651           0 : }
    1652             : 
    1653           0 : bool operator==( const XclCellAlign& rLeft, const XclCellAlign& rRight )
    1654             : {
    1655             :     return
    1656           0 :         (rLeft.mnHorAlign  == rRight.mnHorAlign)  && (rLeft.mnVerAlign == rRight.mnVerAlign) &&
    1657           0 :         (rLeft.mnTextDir   == rRight.mnTextDir)   && (rLeft.mnOrient   == rRight.mnOrient)   &&
    1658           0 :         (rLeft.mnRotation  == rRight.mnRotation)  && (rLeft.mnIndent   == rRight.mnIndent)   &&
    1659           0 :         (rLeft.mbLineBreak == rRight.mbLineBreak) && (rLeft.mbShrink   == rRight.mbShrink);
    1660             : }
    1661             : 
    1662           0 : XclCellBorder::XclCellBorder() :
    1663             :     mnLeftColor( 0 ),
    1664             :     mnRightColor( 0 ),
    1665             :     mnTopColor( 0 ),
    1666             :     mnBottomColor( 0 ),
    1667             :     mnDiagColor( 0 ),
    1668             :     mnLeftLine( EXC_LINE_NONE ),
    1669             :     mnRightLine( EXC_LINE_NONE ),
    1670             :     mnTopLine( EXC_LINE_NONE ),
    1671             :     mnBottomLine( EXC_LINE_NONE ),
    1672             :     mnDiagLine( EXC_LINE_NONE ),
    1673             :     mbDiagTLtoBR( false ),
    1674           0 :     mbDiagBLtoTR( false )
    1675             : {
    1676           0 : }
    1677             : 
    1678           0 : bool operator==( const XclCellBorder& rLeft, const XclCellBorder& rRight )
    1679             : {
    1680             :     return
    1681           0 :         (rLeft.mnLeftColor  == rRight.mnLeftColor)  && (rLeft.mnRightColor  == rRight.mnRightColor)  &&
    1682           0 :         (rLeft.mnTopColor   == rRight.mnTopColor)   && (rLeft.mnBottomColor == rRight.mnBottomColor) &&
    1683           0 :         (rLeft.mnLeftLine   == rRight.mnLeftLine)   && (rLeft.mnRightLine   == rRight.mnRightLine)   &&
    1684           0 :         (rLeft.mnTopLine    == rRight.mnTopLine)    && (rLeft.mnBottomLine  == rRight.mnBottomLine)  &&
    1685           0 :         (rLeft.mnDiagColor  == rRight.mnDiagColor)  && (rLeft.mnDiagLine    == rRight.mnDiagLine)    &&
    1686           0 :         (rLeft.mbDiagTLtoBR == rRight.mbDiagTLtoBR) && (rLeft.mbDiagBLtoTR  == rRight.mbDiagBLtoTR);
    1687             : }
    1688             : 
    1689           0 : XclCellArea::XclCellArea() :
    1690             :     mnForeColor( EXC_COLOR_WINDOWTEXT ),
    1691             :     mnBackColor( EXC_COLOR_WINDOWBACK ),
    1692           0 :     mnPattern( EXC_PATT_NONE )
    1693             : {
    1694           0 : }
    1695             : 
    1696           0 : bool XclCellArea::IsTransparent() const
    1697             : {
    1698           0 :     return (mnPattern == EXC_PATT_NONE) && (mnBackColor == EXC_COLOR_WINDOWBACK);
    1699             : }
    1700             : 
    1701           0 : bool operator==( const XclCellArea& rLeft, const XclCellArea& rRight )
    1702             : {
    1703             :     return
    1704           0 :         (rLeft.mnForeColor == rRight.mnForeColor) && (rLeft.mnBackColor == rRight.mnBackColor) &&
    1705           0 :         (rLeft.mnPattern == rRight.mnPattern);
    1706             : }
    1707             : 
    1708           0 : XclXFBase::XclXFBase( bool bCellXF ) :
    1709             :     mnParent( bCellXF ? EXC_XF_DEFAULTSTYLE : EXC_XF_STYLEPARENT ),
    1710           0 :     mbCellXF( bCellXF )
    1711             : {
    1712           0 :     SetAllUsedFlags( false );
    1713           0 : }
    1714             : 
    1715           0 : XclXFBase::~XclXFBase()
    1716             : {
    1717           0 : }
    1718             : 
    1719           0 : void XclXFBase::SetAllUsedFlags( bool bUsed )
    1720             : {
    1721           0 :     mbProtUsed = mbFontUsed = mbFmtUsed = mbAlignUsed = mbBorderUsed = mbAreaUsed = bUsed;
    1722           0 : }
    1723             : 
    1724           0 : bool XclXFBase::HasUsedFlags() const
    1725             : {
    1726           0 :     return mbProtUsed || mbFontUsed || mbFmtUsed || mbAlignUsed || mbBorderUsed || mbAreaUsed;
    1727             : }
    1728             : 
    1729           0 : bool XclXFBase::Equals( const XclXFBase& rCmp ) const
    1730             : {
    1731             :     return
    1732           0 :         (mbCellXF     == rCmp.mbCellXF)     && (mnParent    == rCmp.mnParent)    &&
    1733           0 :         (mbProtUsed   == rCmp.mbProtUsed)   && (mbFontUsed  == rCmp.mbFontUsed)  &&
    1734           0 :         (mbFmtUsed    == rCmp.mbFmtUsed)    && (mbAlignUsed == rCmp.mbAlignUsed) &&
    1735           0 :         (mbBorderUsed == rCmp.mbBorderUsed) && (mbAreaUsed  == rCmp.mbAreaUsed);
    1736             : }
    1737             : 
    1738             : /* vim:set shiftwidth=4 softtabstop=4 expandtab: */

Generated by: LCOV version 1.10