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