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