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
177XclFontData::XclFontData(const vcl::Font& rFont, model::ComplexColor const& rComplexColor)
178{
179 Clear();
180 FillFromVclFont(rFont, rComplexColor);
181}
182
183XclFontData::XclFontData(const SvxFont& rFont, model::ComplexColor const& rComplexColor)
184{
185 FillFromSvxFont(rFont, rComplexColor);
186}
187
189{
190 maName.clear();
191 maStyle.clear();
193 mnHeight = 0;
200}
201
202void XclFontData::FillFromVclFont(const vcl::Font& rFont, model::ComplexColor const& rComplexColor)
203{
204 maName = XclTools::GetXclFontName( rFont.GetFamilyName() ); // substitute with MS fonts
205 maStyle.clear();
206 SetScUnderline( rFont.GetUnderline() );
208 SetScHeight( rFont.GetFontSize().Height() );
209 SetScWeight( rFont.GetWeight() );
210 SetScFamily( rFont.GetFamilyType() );
211 SetFontEncoding( rFont.GetCharSet() );
212 SetScPosture( rFont.GetItalic() );
213 SetScStrikeout( rFont.GetStrikeout() );
214 mbOutline = rFont.IsOutline();
215 mbShadow = rFont.IsShadow();
216
217 maComplexColor = rComplexColor;
218}
219
220void XclFontData::FillFromSvxFont(const SvxFont& rFont, model::ComplexColor const& rComplexColor)
221{
222 FillFromVclFont(rFont, rComplexColor);
224}
225
226// *** conversion of VCL/SVX constants *** ------------------------------------
227
228FontFamily XclFontData::GetScFamily( rtl_TextEncoding eDefTextEnc ) const
229{
230 FontFamily eScFamily;
231 // ! format differs from Windows documentation: family is in lower nibble, pitch unknown
232 switch( mnFamily & 0x0F )
233 {
234 case EXC_FONTFAM_ROMAN: eScFamily = FAMILY_ROMAN; break;
235 case EXC_FONTFAM_SWISS: eScFamily = FAMILY_SWISS; break;
236 case EXC_FONTFAM_MODERN: eScFamily = FAMILY_MODERN; break;
237 case EXC_FONTFAM_SCRIPT: eScFamily = FAMILY_SCRIPT; break;
238 case EXC_FONTFAM_DECORATIVE: eScFamily = FAMILY_DECORATIVE; break;
239 default:
240 eScFamily =
241 ((eDefTextEnc == RTL_TEXTENCODING_APPLE_ROMAN) &&
242 (maName.equalsIgnoreAsciiCase( "Geneva" ) || maName.equalsIgnoreAsciiCase( "Chicago" ))) ?
244 }
245 return eScFamily;
246}
247
248rtl_TextEncoding XclFontData::GetFontEncoding() const
249{
250 // convert Windows character set to text encoding identifier
251 return rtl_getTextEncodingFromWindowsCharset( mnCharSet );
252}
253
255{
257}
258
260{
261 FontWeight eScWeight;
262
263 if( !mnWeight ) eScWeight = WEIGHT_DONTKNOW;
264 else if( mnWeight < 150 ) eScWeight = WEIGHT_THIN;
265 else if( mnWeight < 250 ) eScWeight = WEIGHT_ULTRALIGHT;
266 else if( mnWeight < 325 ) eScWeight = WEIGHT_LIGHT;
267 else if( mnWeight < 375 ) eScWeight = WEIGHT_SEMILIGHT;
268 else if( mnWeight < 450 ) eScWeight = WEIGHT_NORMAL;
269 else if( mnWeight < 550 ) eScWeight = WEIGHT_MEDIUM;
270 else if( mnWeight < 650 ) eScWeight = WEIGHT_SEMIBOLD;
271 else if( mnWeight < 750 ) eScWeight = WEIGHT_BOLD;
272 else if( mnWeight < 850 ) eScWeight = WEIGHT_ULTRABOLD;
273 else eScWeight = WEIGHT_BLACK;
274
275 return eScWeight;
276}
277
279{
280 FontLineStyle eScUnderl = LINESTYLE_NONE;
281 switch( mnUnderline )
282 {
284 case EXC_FONTUNDERL_SINGLE_ACC: eScUnderl = LINESTYLE_SINGLE; break;
286 case EXC_FONTUNDERL_DOUBLE_ACC: eScUnderl = LINESTYLE_DOUBLE; break;
287 }
288 return eScUnderl;
289}
290
292{
293 SvxEscapement eScEscapem = SvxEscapement::Off;
294 switch( mnEscapem )
295 {
296 case EXC_FONTESC_SUPER: eScEscapem = SvxEscapement::Superscript; break;
297 case EXC_FONTESC_SUB: eScEscapem = SvxEscapement::Subscript; break;
298 }
299 return eScEscapem;
300}
301
303{
305}
306
307void XclFontData::SetScHeight( sal_Int32 nTwips )
308{
309 mnHeight = static_cast< sal_uInt16 >( ::std::min( nTwips, static_cast<sal_Int32>(0x7FFFL) ) );
310}
311
313{
314 switch( eScFamily )
315 {
323 default:
324 OSL_FAIL( "XclFontData::SetScFamily - unknown font family" );
326 }
327}
328
329void XclFontData::SetFontEncoding( rtl_TextEncoding eFontEnc )
330{
331 // convert text encoding identifier to Windows character set
332 mnCharSet = rtl_getBestWindowsCharsetFromTextEncoding( eFontEnc );
333}
334
336{
337 mbItalic = (eScPosture == ITALIC_OBLIQUE) || (eScPosture == ITALIC_NORMAL);
338}
339
341{
342 switch( eScWeight )
343 {
355 default: mnWeight = EXC_FONTWGHT_NORMAL;
356 }
357}
358
360{
361 switch( eScUnderl )
362 {
363 case LINESTYLE_NONE:
365 case LINESTYLE_DOUBLE:
368 }
369}
370
371void XclFontData::SetScEscapement( short nScEscapem )
372{
373 if( nScEscapem > 0 )
375 else if( nScEscapem < 0 )
377 else
379}
380
382{
384 (eScStrikeout == STRIKEOUT_SINGLE) || (eScStrikeout == STRIKEOUT_DOUBLE) ||
385 (eScStrikeout == STRIKEOUT_BOLD) || (eScStrikeout == STRIKEOUT_SLASH) ||
386 (eScStrikeout == STRIKEOUT_X);
387}
388
389// *** conversion of API constants *** ----------------------------------------
390
392{
393 return o3tl::convert<double>(mnHeight, o3tl::Length::twip, o3tl::Length::pt);
394}
395
397{
398 sal_Int16 nApiFamily = AwtFontFamily::DONTKNOW;
399 switch( mnFamily )
400 {
401 case FAMILY_DECORATIVE: nApiFamily = AwtFontFamily::DECORATIVE; break;
402 case FAMILY_MODERN: nApiFamily = AwtFontFamily::MODERN; break;
403 case FAMILY_ROMAN: nApiFamily = AwtFontFamily::ROMAN; break;
404 case FAMILY_SCRIPT: nApiFamily = AwtFontFamily::SCRIPT; break;
405 case FAMILY_SWISS: nApiFamily = AwtFontFamily::SWISS; break;
406 case FAMILY_SYSTEM: nApiFamily = AwtFontFamily::SYSTEM; break;
407 }
408 return nApiFamily;
409}
410
412{
413 // API constants are equal to rtl_TextEncoding constants
414 return static_cast< sal_Int16 >( GetFontEncoding() );
415}
416
417Awt::FontSlant XclFontData::GetApiPosture() const
418{
419 return mbItalic ? Awt::FontSlant_ITALIC : Awt::FontSlant_NONE;
420}
421
423{
425}
426
428{
429 sal_Int16 nApiUnderl = AwtFontLineStyle::NONE;
430 switch( mnUnderline )
431 {
433 case EXC_FONTUNDERL_SINGLE_ACC: nApiUnderl = AwtFontLineStyle::SINGLE; break;
435 case EXC_FONTUNDERL_DOUBLE_ACC: nApiUnderl = AwtFontLineStyle::DOUBLE; break;
436 }
437 return nApiUnderl;
438}
439
441{
442 sal_Int16 nApiEscapem = 0;
443 switch( mnEscapem )
444 {
445 case EXC_FONTESC_SUPER: nApiEscapem = 33; break;
446 case EXC_FONTESC_SUB: nApiEscapem = -33; break;
447 }
448 return nApiEscapem;
449}
450
452{
453 return mbStrikeout ? AwtFontStrikeout::SINGLE : AwtFontStrikeout::NONE;
454}
455
456void XclFontData::SetApiHeight( float fPoint )
457{
458 mnHeight = std::min(o3tl::convert(fPoint, o3tl::Length::pt, o3tl::Length::twip) + 0.5, 32767.0);
459}
460
461void XclFontData::SetApiFamily( sal_Int16 nApiFamily )
462{
463 switch( nApiFamily )
464 {
465 case AwtFontFamily::DECORATIVE: mnFamily = FAMILY_DECORATIVE; break;
466 case AwtFontFamily::MODERN: mnFamily = FAMILY_MODERN; break;
467 case AwtFontFamily::ROMAN: mnFamily = FAMILY_ROMAN; break;
468 case AwtFontFamily::SCRIPT: mnFamily = FAMILY_SCRIPT; break;
469 case AwtFontFamily::SWISS: mnFamily = FAMILY_SWISS; break;
470 case AwtFontFamily::SYSTEM: mnFamily = FAMILY_SYSTEM; break;
471 default: mnFamily = FAMILY_DONTKNOW;
472 }
473}
474
475void XclFontData::SetApiPosture( Awt::FontSlant eApiPosture )
476{
477 mbItalic =
478 (eApiPosture == Awt::FontSlant_OBLIQUE) ||
479 (eApiPosture == Awt::FontSlant_ITALIC) ||
480 (eApiPosture == Awt::FontSlant_REVERSE_OBLIQUE) ||
481 (eApiPosture == Awt::FontSlant_REVERSE_ITALIC);
482}
483
484void XclFontData::SetApiWeight( float fApiWeight )
485{
487}
488
489void XclFontData::SetApiUnderline( sal_Int16 nApiUnderl )
490{
491 switch( nApiUnderl )
492 {
494 case AwtFontLineStyle::DONTKNOW: mnUnderline = EXC_FONTUNDERL_NONE; break;
495 case AwtFontLineStyle::DOUBLE:
496 case AwtFontLineStyle::DOUBLEWAVE: mnUnderline = EXC_FONTUNDERL_DOUBLE; break;
498 }
499}
500
501void XclFontData::SetApiEscapement( sal_Int16 nApiEscapem )
502{
503 if( nApiEscapem > 0 )
505 else if( nApiEscapem < 0 )
507 else
509}
510
511void XclFontData::SetApiStrikeout( sal_Int16 nApiStrikeout )
512{
514 (nApiStrikeout != AwtFontStrikeout::NONE) &&
515 (nApiStrikeout != AwtFontStrikeout::DONTKNOW);
516}
517
518bool operator==( const XclFontData& rLeft, const XclFontData& rRight )
519{
520 return
521 (rLeft.mnHeight == rRight.mnHeight) &&
522 (rLeft.mnWeight == rRight.mnWeight) &&
523 (rLeft.mnUnderline == rRight.mnUnderline) &&
524 (rLeft.maComplexColor == rRight.maComplexColor) &&
525 (rLeft.mnEscapem == rRight.mnEscapem) &&
526 (rLeft.mnFamily == rRight.mnFamily) &&
527 (rLeft.mnCharSet == rRight.mnCharSet) &&
528 (rLeft.mbItalic == rRight.mbItalic) &&
529 (rLeft.mbStrikeout == rRight.mbStrikeout) &&
530 (rLeft.mbOutline == rRight.mbOutline) &&
531 (rLeft.mbShadow == rRight.mbShadow) &&
532 (rLeft.maName == rRight.maName);
533}
534
535namespace {
536
538const char *const sppcPropNamesChCommon[] =
539{
540 "CharUnderline", "CharStrikeout", "CharColor", "CharContoured", "CharShadowed", nullptr
541};
543const char *const sppcPropNamesChWstrn[] =
544{
545 "CharFontName", "CharHeight", "CharPosture", "CharWeight", nullptr
546};
548const char *const sppcPropNamesChAsian[] =
549{
550 "CharFontNameAsian", "CharHeightAsian", "CharPostureAsian", "CharWeightAsian", nullptr
551};
553const char *const sppcPropNamesChCmplx[] =
554{
555 "CharFontNameComplex", "CharHeightComplex", "CharPostureComplex", "CharWeightComplex", nullptr
556};
558const char *const sppcPropNamesChEscapement[] =
559{
560 "CharEscapement", "CharEscapementHeight", nullptr
561};
562const sal_Int8 EXC_API_ESC_HEIGHT = 58;
563
565const char *const *const sppcPropNamesChWstrnNoName = sppcPropNamesChWstrn + 1;
567const char *const *const sppcPropNamesChAsianNoName = sppcPropNamesChAsian + 1;
569const char *const *const sppcPropNamesChCmplxNoName = sppcPropNamesChCmplx + 1;
570
572const char *const sppcPropNamesControl[] =
573{
574 "FontName", "FontFamily", "FontCharset", "FontHeight", "FontSlant",
575 "FontWeight", "FontLineStyle", "FontStrikeout", "TextColor", nullptr
576};
577
579void lclSetApiFontSettings( XclFontData& rFontData,
580 const OUString& rApiFontName, float fApiHeight, float fApiWeight,
581 Awt::FontSlant eApiPosture, sal_Int16 nApiUnderl, sal_Int16 nApiStrikeout )
582{
583 rFontData.maName = XclTools::GetXclFontName( rApiFontName );
584 rFontData.SetApiHeight( fApiHeight );
585 rFontData.SetApiWeight( fApiWeight );
586 rFontData.SetApiPosture( eApiPosture );
587 rFontData.SetApiUnderline( nApiUnderl );
588 rFontData.SetApiStrikeout( nApiStrikeout );
589}
590
592void lclWriteChartFont( ScfPropertySet& rPropSet,
593 ScfPropSetHelper& rHlpName, ScfPropSetHelper& rHlpNoName,
594 const XclFontData& rFontData, bool bHasFontName )
595{
596 // select the font helper
597 ScfPropSetHelper& rPropSetHlp = bHasFontName ? rHlpName : rHlpNoName;
598 // initialize the font helper (must be called before writing any properties)
599 rPropSetHlp.InitializeWrite();
600 // write font name
601 if( bHasFontName )
602 rPropSetHlp << rFontData.maName;
603 // write remaining properties
604 rPropSetHlp << rFontData.GetApiHeight() << rFontData.GetApiPosture() << rFontData.GetApiWeight();
605 // write properties to property set
606 rPropSetHlp.WriteToPropertySet( rPropSet );
607}
608
609} // namespace
610
612 maHlpChCommon( sppcPropNamesChCommon ),
613 maHlpChWstrn( sppcPropNamesChWstrn ),
614 maHlpChAsian( sppcPropNamesChAsian ),
615 maHlpChCmplx( sppcPropNamesChCmplx ),
616 maHlpChWstrnNoName( sppcPropNamesChWstrnNoName ),
617 maHlpChAsianNoName( sppcPropNamesChAsianNoName ),
618 maHlpChCmplxNoName( sppcPropNamesChCmplxNoName ),
619 maHlpChEscapement( sppcPropNamesChEscapement ),
620 maHlpControl( sppcPropNamesControl )
621{
622}
623
625 const ScfPropertySet& rPropSet, XclFontPropSetType eType, sal_Int16 nScript )
626{
627 switch( eType )
628 {
630 {
631 OUString aApiFontName;
632 float fApiHeight, fApiWeight;
633 sal_Int16 nApiUnderl = 0, nApiStrikeout = 0;
634 Awt::FontSlant eApiPosture;
635
636 // read script type dependent properties
637 ScfPropSetHelper& rPropSetHlp = GetChartHelper( nScript );
638 rPropSetHlp.ReadFromPropertySet( rPropSet );
639 rPropSetHlp >> aApiFontName >> fApiHeight >> eApiPosture >> fApiWeight;
640 // read common properties
642 maHlpChCommon >> nApiUnderl;
643 maHlpChCommon >> nApiStrikeout;
644 Color aColor;
645 maHlpChCommon >> aColor;
646 rFontData.maComplexColor.setColor(aColor);
647 maHlpChCommon >> rFontData.mbOutline;
648 maHlpChCommon >> rFontData.mbShadow;
649
650 // convert API property values to Excel settings
651 lclSetApiFontSettings( rFontData, aApiFontName,
652 fApiHeight, fApiWeight, eApiPosture, nApiUnderl, nApiStrikeout );
653
654 // font escapement
655 sal_Int16 nApiEscapement = 0;
656 sal_Int8 nApiEscHeight = 0;
660 maHlpChEscapement >> nApiEscapement >> nApiEscHeight;
661 rFontData.SetApiEscapement( nApiEscapement );
662 }
663 break;
664
666 {
667 OUString aApiFontName;
668 float fApiHeight(0.0), fApiWeight(0.0);
669 sal_Int16 nApiFamily(0), nApiCharSet(0), nApiPosture(0), nApiUnderl(0), nApiStrikeout(0);
670
671 // read font properties
673 maHlpControl >> aApiFontName;
674 maHlpControl >> nApiFamily;
675 maHlpControl >> nApiCharSet;
676 maHlpControl >> fApiHeight;
677 maHlpControl >> nApiPosture;
678 maHlpControl >> fApiWeight;
679 maHlpControl >> nApiUnderl;
680 maHlpControl >> nApiStrikeout;
681 Color aColor;
682 maHlpControl >> aColor;
683 rFontData.maComplexColor.setColor(aColor);
684
685 // convert API property values to Excel settings
686 Awt::FontSlant eApiPosture = static_cast< Awt::FontSlant >( nApiPosture );
687 lclSetApiFontSettings( rFontData, aApiFontName,
688 fApiHeight, fApiWeight, eApiPosture, nApiUnderl, nApiStrikeout );
689 rFontData.SetApiFamily( nApiFamily );
690 rFontData.SetFontEncoding( nApiCharSet );
691 }
692 break;
693 }
694}
695
697 ScfPropertySet& rPropSet, XclFontPropSetType eType,
698 const XclFontData& rFontData, bool bHasWstrn, bool bHasAsian, bool bHasCmplx,
699 const Color* pFontColor )
700{
701 switch( eType )
702 {
704 {
705 // write common properties
707 Color aColor = pFontColor ? *pFontColor : rFontData.maComplexColor.getFinalColor();
708 maHlpChCommon << rFontData.GetApiUnderline()
709 << rFontData.GetApiStrikeout()
710 << aColor
711 << rFontData.mbOutline
712 << rFontData.mbShadow;
714
715 // write script type dependent properties
716 lclWriteChartFont( rPropSet, maHlpChWstrn, maHlpChWstrnNoName, rFontData, bHasWstrn );
717 lclWriteChartFont( rPropSet, maHlpChAsian, maHlpChAsianNoName, rFontData, bHasAsian );
718 lclWriteChartFont( rPropSet, maHlpChCmplx, maHlpChCmplxNoName, rFontData, bHasCmplx );
719
720 // font escapement
721 if( rFontData.GetScEscapement() != SvxEscapement::Off )
722 {
724 maHlpChEscapement << rFontData.GetApiEscapement() << EXC_API_ESC_HEIGHT;
726 }
727 }
728 break;
729
731 {
733 maHlpControl << rFontData.maName
734 << rFontData.GetApiFamily()
735 << rFontData.GetApiFontEncoding()
736 << static_cast< sal_Int16 >( rFontData.GetApiHeight() + 0.5 )
737 << rFontData.GetApiPosture()
738 << rFontData.GetApiWeight()
739 << rFontData.GetApiUnderline()
740 << rFontData.GetApiStrikeout()
741 << rFontData.maComplexColor.getFinalColor();
743 }
744 break;
745 }
746}
747
749{
750 namespace ApiScriptType = ::com::sun::star::i18n::ScriptType;
751 switch( nScript )
752 {
753 case ApiScriptType::LATIN: return maHlpChWstrn;
754 case ApiScriptType::ASIAN: return maHlpChAsian;
755 case ApiScriptType::COMPLEX: return maHlpChCmplx;
756 default: OSL_FAIL( "XclFontPropSetHelper::GetChartHelper - unknown script type" );
757 }
758 return maHlpChWstrn;
759}
760
761// Number formats =============================================================
762
763namespace {
764
766const NfIndexTableOffset PRV_NF_INDEX_REUSE = NF_INDEX_TABLE_ENTRIES;
767
769constexpr LanguageType PRV_LANGUAGE_GERMAN_PRIM = primary(LANGUAGE_GERMAN);
771constexpr LanguageType PRV_LANGUAGE_FRENCH_PRIM = primary(LANGUAGE_FRENCH);
773constexpr LanguageType PRV_LANGUAGE_ASIAN_PRIM = primary(LANGUAGE_CHINESE);
774
776struct XclBuiltInFormat
777{
778 sal_uInt16 mnXclNumFmt;
779 const char* mpFormat;
780 NfIndexTableOffset meOffset;
781 sal_uInt16 mnXclReuseFmt;
782};
783
785#define EXC_NUMFMT_STRING( nXclNumFmt, pcUtf8 ) \
786 { nXclNumFmt, pcUtf8, NF_NUMBER_STANDARD, 0 }
787
789#define EXC_NUMFMT_OFFSET( nXclNumFmt, eOffset ) \
790 { nXclNumFmt, nullptr, eOffset, 0 }
791
793#define EXC_NUMFMT_REUSE( nXclNumFmt, nXclReuse ) \
794 { nXclNumFmt, nullptr, PRV_NF_INDEX_REUSE, nXclReuse }
795
797#define EXC_NUMFMT_ENDTABLE() \
798 { EXC_FORMAT_NOTFOUND, nullptr, NF_NUMBER_STANDARD, 0 }
799
800// Currency unit characters
801#define UTF8_BAHT "\340\270\277"
802#define UTF8_EURO "\342\202\254"
803#define UTF8_POUND_UK "\302\243"
804#define UTF8_SHEQEL "\342\202\252"
805#define UTF8_WON "\357\277\246"
806#define UTF8_YEN_CS "\357\277\245"
807#define UTF8_YEN_JP "\302\245"
808
809// Japanese/Chinese date/time characters
810#define UTF8_CJ_YEAR "\345\271\264"
811#define UTF8_CJ_MON "\346\234\210"
812#define UTF8_CJ_DAY "\346\227\245"
813#define UTF8_CJ_HOUR "\346\231\202"
814#define UTF8_CJ_MIN "\345\210\206"
815#define UTF8_CJ_SEC "\347\247\222"
816
817// Chinese Simplified date/time characters
818#define UTF8_CS_HOUR "\346\227\266"
819
820// Korean date/time characters
821#define UTF8_KO_YEAR "\353\205\204"
822#define UTF8_KO_MON "\354\233\224"
823#define UTF8_KO_DAY "\354\235\274"
824#define UTF8_KO_HOUR "\354\213\234"
825#define UTF8_KO_MIN "\353\266\204"
826#define UTF8_KO_SEC "\354\264\210"
827
829const XclBuiltInFormat spBuiltInFormats_DONTKNOW[] =
830{
831 EXC_NUMFMT_OFFSET( 0, NF_NUMBER_STANDARD ), // General
833 EXC_NUMFMT_OFFSET( 2, NF_NUMBER_DEC2 ), // 0.00
835 EXC_NUMFMT_OFFSET( 4, NF_NUMBER_1000DEC2 ), // #,##0.00
836 // 5...8 contained in file
838 EXC_NUMFMT_OFFSET( 10, NF_PERCENT_DEC2 ), // 0.00%
839 EXC_NUMFMT_OFFSET( 11, NF_SCIENTIFIC_000E00 ), // 0.00E+00
840 EXC_NUMFMT_OFFSET( 12, NF_FRACTION_1D ), // # ?/?
841 EXC_NUMFMT_OFFSET( 13, NF_FRACTION_2D ), // # ??/??
842
843 // 14...22 date and time formats
853
854 // 23...36 international formats
855 EXC_NUMFMT_REUSE( 23, 0 ),
856 EXC_NUMFMT_REUSE( 24, 0 ),
857 EXC_NUMFMT_REUSE( 25, 0 ),
858 EXC_NUMFMT_REUSE( 26, 0 ),
859 EXC_NUMFMT_REUSE( 27, 14 ),
860 EXC_NUMFMT_REUSE( 28, 14 ),
861 EXC_NUMFMT_REUSE( 29, 14 ),
862 EXC_NUMFMT_REUSE( 30, 14 ),
863 EXC_NUMFMT_REUSE( 31, 14 ),
864 EXC_NUMFMT_REUSE( 32, 21 ),
865 EXC_NUMFMT_REUSE( 33, 21 ),
866 EXC_NUMFMT_REUSE( 34, 21 ),
867 EXC_NUMFMT_REUSE( 35, 21 ),
868 EXC_NUMFMT_REUSE( 36, 14 ),
869
870 // 37...44 accounting formats
871 // 41...44 contained in file
872 EXC_NUMFMT_STRING( 37, "#,##0;-#,##0" ),
873 EXC_NUMFMT_STRING( 38, "#,##0;[RED]-#,##0" ),
874 EXC_NUMFMT_STRING( 39, "#,##0.00;-#,##0.00" ),
875 EXC_NUMFMT_STRING( 40, "#,##0.00;[RED]-#,##0.00" ),
876
877 // 45...49 more special formats
878 EXC_NUMFMT_STRING( 45, "mm:ss" ),
879 EXC_NUMFMT_STRING( 46, "[h]:mm:ss" ),
880 EXC_NUMFMT_STRING( 47, "mm:ss.0" ),
881 EXC_NUMFMT_STRING( 48, "##0.0E+0" ),
883
884 // 50...81 international formats
885 EXC_NUMFMT_REUSE( 50, 14 ),
886 EXC_NUMFMT_REUSE( 51, 14 ),
887 EXC_NUMFMT_REUSE( 52, 14 ),
888 EXC_NUMFMT_REUSE( 53, 14 ),
889 EXC_NUMFMT_REUSE( 54, 14 ),
890 EXC_NUMFMT_REUSE( 55, 14 ),
891 EXC_NUMFMT_REUSE( 56, 14 ),
892 EXC_NUMFMT_REUSE( 57, 14 ),
893 EXC_NUMFMT_REUSE( 58, 14 ),
894 EXC_NUMFMT_REUSE( 59, 1 ),
895 EXC_NUMFMT_REUSE( 60, 2 ),
896 EXC_NUMFMT_REUSE( 61, 3 ),
897 EXC_NUMFMT_REUSE( 62, 4 ),
898 EXC_NUMFMT_REUSE( 67, 9 ),
899 EXC_NUMFMT_REUSE( 68, 10 ),
900 EXC_NUMFMT_REUSE( 69, 12 ),
901 EXC_NUMFMT_REUSE( 70, 13 ),
902 EXC_NUMFMT_REUSE( 71, 14 ),
903 EXC_NUMFMT_REUSE( 72, 14 ),
904 EXC_NUMFMT_REUSE( 73, 15 ),
905 EXC_NUMFMT_REUSE( 74, 16 ),
906 EXC_NUMFMT_REUSE( 75, 17 ),
907 EXC_NUMFMT_REUSE( 76, 20 ),
908 EXC_NUMFMT_REUSE( 77, 21 ),
909 EXC_NUMFMT_REUSE( 78, 22 ),
910 EXC_NUMFMT_REUSE( 79, 45 ),
911 EXC_NUMFMT_REUSE( 80, 46 ),
912 EXC_NUMFMT_REUSE( 81, 47 ),
913
914 // 82...163 not used, must not occur in a file (Excel may crash)
915
917};
918
919// ENGLISH --------------------------------------------------------------------
920
922const XclBuiltInFormat spBuiltInFormats_ENGLISH[] =
923{
924 EXC_NUMFMT_STRING( 15, "DD-MMM-YY" ),
925 EXC_NUMFMT_STRING( 16, "DD-MMM" ),
926 EXC_NUMFMT_STRING( 17, "MMM-YY" ),
927 EXC_NUMFMT_STRING( 18, "h:mm AM/PM" ),
928 EXC_NUMFMT_STRING( 19, "h:mm:ss AM/PM" ),
929 EXC_NUMFMT_STRING( 22, "DD/MM/YYYY hh:mm" ),
931};
932
933const XclBuiltInFormat spBuiltInFormats_ENGLISH_UK[] =
934{
935 EXC_NUMFMT_STRING( 63, UTF8_POUND_UK "#,##0;-" UTF8_POUND_UK "#,##0" ),
936 EXC_NUMFMT_STRING( 64, UTF8_POUND_UK "#,##0;[RED]-" UTF8_POUND_UK "#,##0" ),
937 EXC_NUMFMT_STRING( 65, UTF8_POUND_UK "#,##0.00;-" UTF8_POUND_UK "#,##0.00" ),
938 EXC_NUMFMT_STRING( 66, UTF8_POUND_UK "#,##0.00;[RED]-" UTF8_POUND_UK "#,##0.00" ),
940};
941
942const XclBuiltInFormat spBuiltInFormats_ENGLISH_EIRE[] =
943{
944 EXC_NUMFMT_STRING( 63, UTF8_EURO "#,##0;-" UTF8_EURO "#,##0" ),
945 EXC_NUMFMT_STRING( 64, UTF8_EURO "#,##0;[RED]-" UTF8_EURO "#,##0" ),
946 EXC_NUMFMT_STRING( 65, UTF8_EURO "#,##0.00;-" UTF8_EURO "#,##0.00" ),
947 EXC_NUMFMT_STRING( 66, UTF8_EURO "#,##0.00;[RED]-" UTF8_EURO "#,##0.00" ),
949};
950
951const XclBuiltInFormat spBuiltInFormats_ENGLISH_US[] =
952{
953 EXC_NUMFMT_STRING( 14, "M/D/YYYY" ),
954 EXC_NUMFMT_STRING( 15, "D-MMM-YY" ),
955 EXC_NUMFMT_STRING( 16, "D-MMM" ),
956 EXC_NUMFMT_STRING( 20, "h:mm" ),
957 EXC_NUMFMT_STRING( 21, "h:mm:ss" ),
958 EXC_NUMFMT_STRING( 22, "M/D/YYYY h:mm" ),
959 EXC_NUMFMT_STRING( 37, "#,##0_);(#,##0)" ),
960 EXC_NUMFMT_STRING( 38, "#,##0_);[RED](#,##0)" ),
961 EXC_NUMFMT_STRING( 39, "#,##0.00_);(#,##0.00)" ),
962 EXC_NUMFMT_STRING( 40, "#,##0.00_);[RED](#,##0.00)" ),
963 EXC_NUMFMT_STRING( 63, "$#,##0_);($#,##0)" ),
964 EXC_NUMFMT_STRING( 64, "$#,##0_);[RED]($#,##0)" ),
965 EXC_NUMFMT_STRING( 65, "$#,##0.00_);($#,##0.00)" ),
966 EXC_NUMFMT_STRING( 66, "$#,##0.00_);[RED]($#,##0.00)" ),
968};
969
970const XclBuiltInFormat spBuiltInFormats_ENGLISH_CAN[] =
971{
972 EXC_NUMFMT_STRING( 20, "h:mm" ),
973 EXC_NUMFMT_STRING( 21, "h:mm:ss" ),
974 EXC_NUMFMT_STRING( 22, "DD/MM/YYYY h:mm" ),
975 EXC_NUMFMT_STRING( 63, "$#,##0;-$#,##0" ),
976 EXC_NUMFMT_STRING( 64, "$#,##0;[RED]-$#,##0" ),
977 EXC_NUMFMT_STRING( 65, "$#,##0.00;-$#,##0.00" ),
978 EXC_NUMFMT_STRING( 66, "$#,##0.00;[RED]-$#,##0.00" ),
980};
981
982const XclBuiltInFormat spBuiltInFormats_ENGLISH_AUS[] =
983{
984 EXC_NUMFMT_STRING( 14, "D/MM/YYYY" ),
985 EXC_NUMFMT_STRING( 15, "D-MMM-YY" ),
986 EXC_NUMFMT_STRING( 16, "D-MMM" ),
987 EXC_NUMFMT_STRING( 20, "h:mm" ),
988 EXC_NUMFMT_STRING( 21, "h:mm:ss" ),
989 EXC_NUMFMT_STRING( 22, "D/MM/YYYY h:mm" ),
990 EXC_NUMFMT_STRING( 63, "$#,##0;-$#,##0" ),
991 EXC_NUMFMT_STRING( 64, "$#,##0;[RED]-$#,##0" ),
992 EXC_NUMFMT_STRING( 65, "$#,##0.00;-$#,##0.00" ),
993 EXC_NUMFMT_STRING( 66, "$#,##0.00;[RED]-$#,##0.00" ),
995};
996
997const XclBuiltInFormat spBuiltInFormats_ENGLISH_SAFRICA[] =
998{
999 EXC_NUMFMT_STRING( 14, "YYYY/MM/DD" ),
1000 EXC_NUMFMT_OFFSET( 18, NF_TIME_HHMMAMPM ),
1001 EXC_NUMFMT_OFFSET( 19, NF_TIME_HHMMSSAMPM ),
1002 EXC_NUMFMT_STRING( 22, "YYYY/MM/DD hh:mm" ),
1003 EXC_NUMFMT_STRING( 63, "\\R #,##0;\\R -#,##0" ),
1004 EXC_NUMFMT_STRING( 64, "\\R #,##0;[RED]\\R -#,##0" ),
1005 EXC_NUMFMT_STRING( 65, "\\R #,##0.00;\\R -#,##0.00" ),
1006 EXC_NUMFMT_STRING( 66, "\\R #,##0.00;[RED]\\R -#,##0.00" ),
1008};
1009
1010// FRENCH ---------------------------------------------------------------------
1011
1013const XclBuiltInFormat spBuiltInFormats_FRENCH[] =
1014{
1015 EXC_NUMFMT_STRING( 15, "DD-MMM-YY" ),
1016 EXC_NUMFMT_STRING( 16, "DD-MMM" ),
1017 EXC_NUMFMT_STRING( 17, "MMM-YY" ),
1018 EXC_NUMFMT_STRING( 18, "h:mm AM/PM" ),
1019 EXC_NUMFMT_STRING( 19, "h:mm:ss AM/PM" ),
1021};
1022
1023const XclBuiltInFormat spBuiltInFormats_FRENCH_FRANCE[] =
1024{
1025 EXC_NUMFMT_STRING( 22, "DD/MM/YYYY hh:mm" ),
1026 EXC_NUMFMT_STRING( 37, "#,##0\\ _" UTF8_EURO ";-#,##0\\ _" UTF8_EURO ),
1027 EXC_NUMFMT_STRING( 38, "#,##0\\ _" UTF8_EURO ";[RED]-#,##0\\ _" UTF8_EURO ),
1028 EXC_NUMFMT_STRING( 39, "#,##0.00\\ _" UTF8_EURO ";-#,##0.00\\ _" UTF8_EURO ),
1029 EXC_NUMFMT_STRING( 40, "#,##0.00\\ _" UTF8_EURO ";[RED]-#,##0.00\\ _" UTF8_EURO ),
1030 EXC_NUMFMT_STRING( 63, "#,##0\\ " UTF8_EURO ";-#,##0\\ " UTF8_EURO ),
1031 EXC_NUMFMT_STRING( 64, "#,##0\\ " UTF8_EURO ";[RED]-#,##0\\ " UTF8_EURO ),
1032 EXC_NUMFMT_STRING( 65, "#,##0.00\\ " UTF8_EURO ";-#,##0.00\\ " UTF8_EURO ),
1033 EXC_NUMFMT_STRING( 66, "#,##0.00\\ " UTF8_EURO ";[RED]-#,##0.00\\ " UTF8_EURO ),
1035};
1036
1037const XclBuiltInFormat spBuiltInFormats_FRENCH_CANADIAN[] =
1038{
1039 EXC_NUMFMT_STRING( 22, "YYYY-MM-DD hh:mm" ),
1040 EXC_NUMFMT_STRING( 37, "#,##0\\ _$_-;#,##0\\ _$-" ),
1041 EXC_NUMFMT_STRING( 38, "#,##0\\ _$_-;[RED]#,##0\\ _$-" ),
1042 EXC_NUMFMT_STRING( 39, "#,##0.00\\ _$_-;#,##0.00\\ _$-" ),
1043 EXC_NUMFMT_STRING( 40, "#,##0.00\\ _$_-;[RED]#,##0.00\\ _$-" ),
1044 EXC_NUMFMT_STRING( 63, "#,##0\\ $_-;#,##0\\ $-" ),
1045 EXC_NUMFMT_STRING( 64, "#,##0\\ $_-;[RED]#,##0\\ $-" ),
1046 EXC_NUMFMT_STRING( 65, "#,##0.00\\ $_-;#,##0.00\\ $-" ),
1047 EXC_NUMFMT_STRING( 66, "#,##0.00\\ $_-;[RED]#,##0.00\\ $-" ),
1049};
1050
1051const XclBuiltInFormat spBuiltInFormats_FRENCH_SWISS[] =
1052{
1053 EXC_NUMFMT_STRING( 15, "DD.MMM.YY" ),
1054 EXC_NUMFMT_STRING( 16, "DD.MMM" ),
1055 EXC_NUMFMT_STRING( 17, "MMM.YY" ),
1056 EXC_NUMFMT_STRING( 22, "DD.MM.YYYY hh:mm" ),
1057 EXC_NUMFMT_STRING( 63, "\"SFr. \"#,##0;\"SFr. \"-#,##0" ),
1058 EXC_NUMFMT_STRING( 64, "\"SFr. \"#,##0;[RED]\"SFr. \"-#,##0" ),
1059 EXC_NUMFMT_STRING( 65, "\"SFr. \"#,##0.00;\"SFr. \"-#,##0.00" ),
1060 EXC_NUMFMT_STRING( 66, "\"SFr. \"#,##0.00;[RED]\"SFr. \"-#,##0.00" ),
1062};
1063
1064const XclBuiltInFormat spBuiltInFormats_FRENCH_BELGIAN[] =
1065{
1066 EXC_NUMFMT_STRING( 14, "D/MM/YYYY" ),
1067 EXC_NUMFMT_STRING( 15, "D-MMM-YY" ),
1068 EXC_NUMFMT_STRING( 16, "D-MMM" ),
1069 EXC_NUMFMT_STRING( 20, "h:mm" ),
1070 EXC_NUMFMT_STRING( 21, "h:mm:ss" ),
1071 EXC_NUMFMT_STRING( 22, "D/MM/YYYY h:mm" ),
1073};
1074
1075// GERMAN ---------------------------------------------------------------------
1076
1078const XclBuiltInFormat spBuiltInFormats_GERMAN[] =
1079{
1080 EXC_NUMFMT_STRING( 15, "DD. MMM YY" ),
1081 EXC_NUMFMT_STRING( 16, "DD. MMM" ),
1082 EXC_NUMFMT_STRING( 17, "MMM YY" ),
1083 EXC_NUMFMT_STRING( 18, "h:mm AM/PM" ),
1084 EXC_NUMFMT_STRING( 19, "h:mm:ss AM/PM" ),
1085 EXC_NUMFMT_STRING( 22, "DD.MM.YYYY hh:mm" ),
1087};
1088
1089const XclBuiltInFormat spBuiltInFormats_GERMAN_GERMANY[] =
1090{
1091 EXC_NUMFMT_STRING( 37, "#,##0 _" UTF8_EURO ";-#,##0 _" UTF8_EURO ),
1092 EXC_NUMFMT_STRING( 38, "#,##0 _" UTF8_EURO ";[RED]-#,##0 _" UTF8_EURO ),
1093 EXC_NUMFMT_STRING( 39, "#,##0.00 _" UTF8_EURO ";-#,##0.00 _" UTF8_EURO ),
1094 EXC_NUMFMT_STRING( 40, "#,##0.00 _" UTF8_EURO ";[RED]-#,##0.00 _" UTF8_EURO ),
1095 EXC_NUMFMT_STRING( 63, "#,##0 " UTF8_EURO ";-#,##0 " UTF8_EURO ),
1096 EXC_NUMFMT_STRING( 64, "#,##0 " UTF8_EURO ";[RED]-#,##0 " UTF8_EURO ),
1097 EXC_NUMFMT_STRING( 65, "#,##0.00 " UTF8_EURO ";-#,##0.00 " UTF8_EURO ),
1098 EXC_NUMFMT_STRING( 66, "#,##0.00 " UTF8_EURO ";[RED]-#,##0.00 " UTF8_EURO ),
1100};
1101
1102const XclBuiltInFormat spBuiltInFormats_GERMAN_AUSTRIAN[] =
1103{
1104 EXC_NUMFMT_STRING( 15, "DD.MMM.YY" ),
1105 EXC_NUMFMT_STRING( 16, "DD.MMM" ),
1106 EXC_NUMFMT_STRING( 17, "MMM.YY" ),
1107 EXC_NUMFMT_STRING( 63, UTF8_EURO " #,##0;-" UTF8_EURO " #,##0" ),
1108 EXC_NUMFMT_STRING( 64, UTF8_EURO " #,##0;[RED]-" UTF8_EURO " #,##0" ),
1109 EXC_NUMFMT_STRING( 65, UTF8_EURO " #,##0.00;-" UTF8_EURO " #,##0.00" ),
1110 EXC_NUMFMT_STRING( 66, UTF8_EURO " #,##0.00;[RED]-" UTF8_EURO " #,##0.00" ),
1112};
1113
1114const XclBuiltInFormat spBuiltInFormats_GERMAN_SWISS[] =
1115{
1116 EXC_NUMFMT_STRING( 63, "\"SFr. \"#,##0;\"SFr. \"-#,##0" ),
1117 EXC_NUMFMT_STRING( 64, "\"SFr. \"#,##0;[RED]\"SFr. \"-#,##0" ),
1118 EXC_NUMFMT_STRING( 65, "\"SFr. \"#,##0.00;\"SFr. \"-#,##0.00" ),
1119 EXC_NUMFMT_STRING( 66, "\"SFr. \"#,##0.00;[RED]\"SFr. \"-#,##0.00" ),
1121};
1122
1123const XclBuiltInFormat spBuiltInFormats_GERMAN_LUXEMBOURG[] =
1124{
1125 EXC_NUMFMT_STRING( 15, "DD.MMM.YY" ),
1126 EXC_NUMFMT_STRING( 16, "DD.MMM" ),
1127 EXC_NUMFMT_STRING( 17, "MMM.YY" ),
1128 EXC_NUMFMT_STRING( 37, "#,##0 _" UTF8_EURO ";-#,##0 _" UTF8_EURO ),
1129 EXC_NUMFMT_STRING( 38, "#,##0 _" UTF8_EURO ";[RED]-#,##0 _" UTF8_EURO ),
1130 EXC_NUMFMT_STRING( 39, "#,##0.00 _" UTF8_EURO ";-#,##0.00 _" UTF8_EURO ),
1131 EXC_NUMFMT_STRING( 40, "#,##0.00 _" UTF8_EURO ";[RED]-#,##0.00 _" UTF8_EURO ),
1132 EXC_NUMFMT_STRING( 63, "#,##0 " UTF8_EURO ";-#,##0 " UTF8_EURO ),
1133 EXC_NUMFMT_STRING( 64, "#,##0 " UTF8_EURO ";[RED]-#,##0 " UTF8_EURO ),
1134 EXC_NUMFMT_STRING( 65, "#,##0.00 " UTF8_EURO ";-#,##0.00 " UTF8_EURO ),
1135 EXC_NUMFMT_STRING( 66, "#,##0.00 " UTF8_EURO ";[RED]-#,##0.00 " UTF8_EURO ),
1137};
1138
1139const XclBuiltInFormat spBuiltInFormats_GERMAN_LIECHTENSTEIN[] =
1140{
1141 EXC_NUMFMT_STRING( 63, "\"CHF \"#,##0;\"CHF \"-#,##0" ),
1142 EXC_NUMFMT_STRING( 64, "\"CHF \"#,##0;[RED]\"CHF \"-#,##0" ),
1143 EXC_NUMFMT_STRING( 65, "\"CHF \"#,##0.00;\"CHF \"-#,##0.00" ),
1144 EXC_NUMFMT_STRING( 66, "\"CHF \"#,##0.00;[RED]\"CHF \"-#,##0.00" ),
1146};
1147
1148// ITALIAN --------------------------------------------------------------------
1149
1150const XclBuiltInFormat spBuiltInFormats_ITALIAN_ITALY[] =
1151{
1152 EXC_NUMFMT_STRING( 15, "DD-MMM-YY" ),
1153 EXC_NUMFMT_STRING( 16, "DD-MMM" ),
1154 EXC_NUMFMT_STRING( 17, "MMM-YY" ),
1155 EXC_NUMFMT_STRING( 18, "h:mm AM/PM" ),
1156 EXC_NUMFMT_STRING( 19, "h:mm:ss AM/PM" ),
1157 EXC_NUMFMT_STRING( 20, "h:mm" ),
1158 EXC_NUMFMT_STRING( 21, "h:mm:ss" ),
1159 EXC_NUMFMT_STRING( 22, "DD/MM/YYYY h:mm" ),
1160 EXC_NUMFMT_STRING( 63, UTF8_EURO " #,##0;-" UTF8_EURO " #,##0" ),
1161 EXC_NUMFMT_STRING( 64, UTF8_EURO " #,##0;[RED]-" UTF8_EURO " #,##0" ),
1162 EXC_NUMFMT_STRING( 65, UTF8_EURO " #,##0.00;-" UTF8_EURO " #,##0.00" ),
1163 EXC_NUMFMT_STRING( 66, UTF8_EURO " #,##0.00;[RED]-" UTF8_EURO " #,##0.00" ),
1165};
1166
1167const XclBuiltInFormat spBuiltInFormats_ITALIAN_SWISS[] =
1168{
1169 EXC_NUMFMT_STRING( 15, "DD.MMM.YY" ),
1170 EXC_NUMFMT_STRING( 16, "DD.MMM" ),
1171 EXC_NUMFMT_STRING( 17, "MMM.YY" ),
1172 EXC_NUMFMT_STRING( 18, "h:mm AM/PM" ),
1173 EXC_NUMFMT_STRING( 19, "h:mm:ss AM/PM" ),
1174 EXC_NUMFMT_STRING( 22, "DD.MM.YYYY hh:mm" ),
1175 EXC_NUMFMT_STRING( 63, "\"SFr. \"#,##0;\"SFr. \"-#,##0" ),
1176 EXC_NUMFMT_STRING( 64, "\"SFr. \"#,##0;[RED]\"SFr. \"-#,##0" ),
1177 EXC_NUMFMT_STRING( 65, "\"SFr. \"#,##0.00;\"SFr. \"-#,##0.00" ),
1178 EXC_NUMFMT_STRING( 66, "\"SFr. \"#,##0.00;[RED]\"SFr. \"-#,##0.00" ),
1180};
1181
1182// SWEDISH --------------------------------------------------------------------
1183
1184const XclBuiltInFormat spBuiltInFormats_SWEDISH_SWEDEN[] =
1185{
1186 EXC_NUMFMT_STRING( 15, "DD-MMM-YY" ),
1187 EXC_NUMFMT_STRING( 16, "DD-MMM" ),
1188 EXC_NUMFMT_STRING( 17, "MMM-YY" ),
1189 EXC_NUMFMT_STRING( 18, "h:mm AM/PM" ),
1190 EXC_NUMFMT_STRING( 19, "h:mm:ss AM/PM" ),
1191 EXC_NUMFMT_STRING( 22, "YYYY-MM-DD hh:mm" ),
1192 EXC_NUMFMT_STRING( 37, "#,##0 _k_r;-#,##0 _k_r" ),
1193 EXC_NUMFMT_STRING( 38, "#,##0 _k_r;[RED]-#,##0 _k_r" ),
1194 EXC_NUMFMT_STRING( 39, "#,##0.00 _k_r;-#,##0.00 _k_r" ),
1195 EXC_NUMFMT_STRING( 40, "#,##0.00 _k_r;[RED]-#,##0.00 _k_r" ),
1196 EXC_NUMFMT_STRING( 63, "#,##0 \"kr\";-#,##0 \"kr\"" ),
1197 EXC_NUMFMT_STRING( 64, "#,##0 \"kr\";[RED]-#,##0 \"kr\"" ),
1198 EXC_NUMFMT_STRING( 65, "#,##0.00 \"kr\";-#,##0.00 \"kr\"" ),
1199 EXC_NUMFMT_STRING( 66, "#,##0.00 \"kr\";[RED]-#,##0.00 \"kr\"" ),
1201};
1202
1203const XclBuiltInFormat spBuiltInFormats_SWEDISH_FINLAND[] =
1204{
1205 EXC_NUMFMT_STRING( 9, "0 %" ),
1206 EXC_NUMFMT_STRING( 10, "0.00 %" ),
1207 EXC_NUMFMT_STRING( 15, "DD.MMM.YY" ),
1208 EXC_NUMFMT_STRING( 16, "DD.MMM" ),
1209 EXC_NUMFMT_STRING( 17, "MMM.YY" ),
1210 EXC_NUMFMT_STRING( 18, "h:mm AM/PM" ),
1211 EXC_NUMFMT_STRING( 19, "h:mm:ss AM/PM" ),
1212 EXC_NUMFMT_STRING( 22, "D.M.YYYY hh:mm" ),
1213 EXC_NUMFMT_STRING( 37, "#,##0 _" UTF8_EURO ";-#,##0 _" UTF8_EURO ),
1214 EXC_NUMFMT_STRING( 38, "#,##0 _" UTF8_EURO ";[RED]-#,##0 _" UTF8_EURO ),
1215 EXC_NUMFMT_STRING( 39, "#,##0.00 _" UTF8_EURO ";-#,##0.00 _" UTF8_EURO ),
1216 EXC_NUMFMT_STRING( 40, "#,##0.00 _" UTF8_EURO ";[RED]-#,##0.00 _" UTF8_EURO ),
1217 EXC_NUMFMT_STRING( 63, "#,##0 " UTF8_EURO ";-#,##0 " UTF8_EURO ),
1218 EXC_NUMFMT_STRING( 64, "#,##0 " UTF8_EURO ";[RED]-#,##0 " UTF8_EURO ),
1219 EXC_NUMFMT_STRING( 65, "#,##0.00 " UTF8_EURO ";-#,##0.00 " UTF8_EURO ),
1220 EXC_NUMFMT_STRING( 66, "#,##0.00 " UTF8_EURO ";[RED]-#,##0.00 " UTF8_EURO ),
1222};
1223
1224// ASIAN ----------------------------------------------------------------------
1225
1227const XclBuiltInFormat spBuiltInFormats_ASIAN[] =
1228{
1229 EXC_NUMFMT_STRING( 18, "h:mm AM/PM" ),
1230 EXC_NUMFMT_STRING( 19, "h:mm:ss AM/PM" ),
1231 EXC_NUMFMT_STRING( 20, "h:mm" ),
1232 EXC_NUMFMT_STRING( 21, "h:mm:ss" ),
1233 EXC_NUMFMT_STRING( 23, "$#,##0_);($#,##0)" ),
1234 EXC_NUMFMT_STRING( 24, "$#,##0_);[RED]($#,##0)" ),
1235 EXC_NUMFMT_STRING( 25, "$#,##0.00_);($#,##0.00)" ),
1236 EXC_NUMFMT_STRING( 26, "$#,##0.00_);[RED]($#,##0.00)" ),
1237 EXC_NUMFMT_REUSE( 29, 28 ),
1238 EXC_NUMFMT_REUSE( 36, 27 ),
1239 EXC_NUMFMT_REUSE( 50, 27 ),
1240 EXC_NUMFMT_REUSE( 51, 28 ),
1241 EXC_NUMFMT_REUSE( 52, 34 ),
1242 EXC_NUMFMT_REUSE( 53, 35 ),
1243 EXC_NUMFMT_REUSE( 54, 28 ),
1244 EXC_NUMFMT_REUSE( 55, 34 ),
1245 EXC_NUMFMT_REUSE( 56, 35 ),
1246 EXC_NUMFMT_REUSE( 57, 27 ),
1247 EXC_NUMFMT_REUSE( 58, 28 ),
1249};
1250
1251const XclBuiltInFormat spBuiltInFormats_JAPANESE[] =
1252{
1253 EXC_NUMFMT_STRING( 14, "YYYY/M/D" ),
1254 EXC_NUMFMT_STRING( 15, "D-MMM-YY" ),
1255 EXC_NUMFMT_STRING( 16, "D-MMM" ),
1256 EXC_NUMFMT_STRING( 17, "MMM-YY" ),
1257 EXC_NUMFMT_STRING( 22, "YYYY/M/D h:mm" ),
1258 EXC_NUMFMT_STRING( 27, "[$-0411]GE.M.D" ),
1259 EXC_NUMFMT_STRING( 28, "[$-0411]GGGE" UTF8_CJ_YEAR "M" UTF8_CJ_MON "D" UTF8_CJ_DAY ),
1260 EXC_NUMFMT_STRING( 30, "[$-0411]M/D/YY" ),
1261 EXC_NUMFMT_STRING( 31, "[$-0411]YYYY" UTF8_CJ_YEAR "M" UTF8_CJ_MON "D" UTF8_CJ_DAY ),
1262 EXC_NUMFMT_STRING( 32, "[$-0411]h" UTF8_CJ_HOUR "mm" UTF8_CJ_MIN ),
1263 EXC_NUMFMT_STRING( 33, "[$-0411]h" UTF8_CJ_HOUR "mm" UTF8_CJ_MIN "ss" UTF8_CJ_SEC ),
1264 EXC_NUMFMT_STRING( 34, "[$-0411]YYYY" UTF8_CJ_YEAR "M" UTF8_CJ_MON ),
1265 EXC_NUMFMT_STRING( 35, "[$-0411]M" UTF8_CJ_MON "D" UTF8_CJ_DAY ),
1266 EXC_NUMFMT_STRING( 63, UTF8_YEN_JP "#,##0;-" UTF8_YEN_JP "#,##0" ),
1267 EXC_NUMFMT_STRING( 64, UTF8_YEN_JP "#,##0;[RED]-" UTF8_YEN_JP "#,##0" ),
1268 EXC_NUMFMT_STRING( 65, UTF8_YEN_JP "#,##0.00;-" UTF8_YEN_JP "#,##0.00" ),
1269 EXC_NUMFMT_STRING( 66, UTF8_YEN_JP "#,##0.00;[RED]-" UTF8_YEN_JP "#,##0.00" ),
1271};
1272
1273const XclBuiltInFormat spBuiltInFormats_KOREAN[] =
1274{
1275 EXC_NUMFMT_STRING( 14, "YYYY-MM-DD" ),
1276 EXC_NUMFMT_STRING( 15, "DD-MMM-YY" ),
1277 EXC_NUMFMT_STRING( 16, "DD-MMM" ),
1278 EXC_NUMFMT_STRING( 17, "MMM-YY" ),
1279 EXC_NUMFMT_STRING( 22, "YYYY-MM-DD h:mm" ),
1280 EXC_NUMFMT_STRING( 27, "[$-0412]YYYY" UTF8_CJ_YEAR " MM" UTF8_CJ_MON " DD" UTF8_CJ_DAY ),
1281 EXC_NUMFMT_STRING( 28, "[$-0412]MM-DD" ),
1282 EXC_NUMFMT_STRING( 30, "[$-0412]MM-DD-YY" ),
1283 EXC_NUMFMT_STRING( 31, "[$-0412]YYYY" UTF8_KO_YEAR " MM" UTF8_KO_MON " DD" UTF8_KO_DAY ),
1284 EXC_NUMFMT_STRING( 32, "[$-0412]h" UTF8_KO_HOUR " mm" UTF8_KO_MIN ),
1285 EXC_NUMFMT_STRING( 33, "[$-0412]h" UTF8_KO_HOUR " mm" UTF8_KO_MIN " ss" UTF8_KO_SEC ),
1286 EXC_NUMFMT_STRING( 34, "[$-0412]YYYY\"/\"MM\"/\"DD" ),
1287 EXC_NUMFMT_STRING( 35, "[$-0412]YYYY-MM-DD" ),
1288 EXC_NUMFMT_STRING( 63, UTF8_WON "#,##0;-" UTF8_WON "#,##0" ),
1289 EXC_NUMFMT_STRING( 64, UTF8_WON "#,##0;[RED]-" UTF8_WON "#,##0" ),
1290 EXC_NUMFMT_STRING( 65, UTF8_WON "#,##0.00;-" UTF8_WON "#,##0.00" ),
1291 EXC_NUMFMT_STRING( 66, UTF8_WON "#,##0.00;[RED]-" UTF8_WON "#,##0.00" ),
1293};
1294
1295const XclBuiltInFormat spBuiltInFormats_CHINESE_SIMPLIFIED[] =
1296{
1297 EXC_NUMFMT_STRING( 14, "YYYY-M-D" ),
1298 EXC_NUMFMT_STRING( 15, "D-MMM-YY" ),
1299 EXC_NUMFMT_STRING( 16, "D-MMM" ),
1300 EXC_NUMFMT_STRING( 17, "MMM-YY" ),
1301 EXC_NUMFMT_STRING( 22, "YYYY-M-D h:mm" ),
1302 EXC_NUMFMT_STRING( 27, "[$-0804]YYYY" UTF8_CJ_YEAR "M" UTF8_CJ_MON ),
1303 EXC_NUMFMT_STRING( 28, "[$-0804]M" UTF8_CJ_MON "D" UTF8_CJ_DAY ),
1304 EXC_NUMFMT_STRING( 30, "[$-0804]M-D-YY" ),
1305 EXC_NUMFMT_STRING( 31, "[$-0804]YYYY" UTF8_CJ_YEAR "M" UTF8_CJ_MON "D" UTF8_CJ_DAY ),
1306 EXC_NUMFMT_STRING( 32, "[$-0804]h" UTF8_CS_HOUR "mm" UTF8_CJ_MIN ),
1307 EXC_NUMFMT_STRING( 33, "[$-0804]h" UTF8_CS_HOUR "mm" UTF8_CJ_MIN "ss" UTF8_CJ_SEC ),
1308 EXC_NUMFMT_STRING( 34, "[$-0804]AM/PMh" UTF8_CS_HOUR "mm" UTF8_CJ_MIN ),
1309 EXC_NUMFMT_STRING( 35, "[$-0804]AM/PMh" UTF8_CS_HOUR "mm" UTF8_CJ_MIN "ss" UTF8_CJ_SEC ),
1310 EXC_NUMFMT_REUSE( 52, 27 ),
1311 EXC_NUMFMT_REUSE( 53, 28 ),
1312 EXC_NUMFMT_STRING( 63, UTF8_YEN_CS "#,##0;-" UTF8_YEN_CS "#,##0" ),
1313 EXC_NUMFMT_STRING( 64, UTF8_YEN_CS "#,##0;[RED]-" UTF8_YEN_CS "#,##0" ),
1314 EXC_NUMFMT_STRING( 65, UTF8_YEN_CS "#,##0.00;-" UTF8_YEN_CS "#,##0.00" ),
1315 EXC_NUMFMT_STRING( 66, UTF8_YEN_CS "#,##0.00;[RED]-" UTF8_YEN_CS "#,##0.00" ),
1317};
1318
1319const XclBuiltInFormat spBuiltInFormats_CHINESE_TRADITIONAL[] =
1320{
1321 EXC_NUMFMT_STRING( 15, "D-MMM-YY" ),
1322 EXC_NUMFMT_STRING( 16, "D-MMM" ),
1323 EXC_NUMFMT_STRING( 17, "MMM-YY" ),
1324 EXC_NUMFMT_STRING( 18, "hh:mm AM/PM" ),
1325 EXC_NUMFMT_STRING( 19, "hh:mm:ss AM/PM" ),
1326 EXC_NUMFMT_OFFSET( 20, NF_TIME_HHMM ),
1327 EXC_NUMFMT_OFFSET( 21, NF_TIME_HHMMSS ),
1328 EXC_NUMFMT_STRING( 22, "YYYY/M/D hh:mm" ),
1329 EXC_NUMFMT_STRING( 23, "US$#,##0_);(US$#,##0)" ),
1330 EXC_NUMFMT_STRING( 24, "US$#,##0_);[RED](US$#,##0)" ),
1331 EXC_NUMFMT_STRING( 25, "US$#,##0.00_);(US$#,##0.00)" ),
1332 EXC_NUMFMT_STRING( 26, "US$#,##0.00_);[RED](US$#,##0.00)" ),
1333 EXC_NUMFMT_STRING( 27, "[$-0404]E/M/D" ),
1334 EXC_NUMFMT_STRING( 28, "[$-0404]E" UTF8_CJ_YEAR "M" UTF8_CJ_MON "D" UTF8_CJ_DAY ),
1335 EXC_NUMFMT_STRING( 30, "[$-0404]M/D/YY" ),
1336 EXC_NUMFMT_STRING( 31, "[$-0404]YYYY" UTF8_CJ_YEAR "M" UTF8_CJ_MON "D" UTF8_CJ_DAY ),
1337 EXC_NUMFMT_STRING( 32, "[$-0404]hh" UTF8_CJ_HOUR "mm" UTF8_CJ_MIN ),
1338 EXC_NUMFMT_STRING( 33, "[$-0404]hh" UTF8_CJ_HOUR "mm" UTF8_CJ_MIN "ss" UTF8_CJ_SEC ),
1339 EXC_NUMFMT_STRING( 34, "[$-0404]AM/PMhh" UTF8_CJ_HOUR "mm" UTF8_CJ_MIN ),
1340 EXC_NUMFMT_STRING( 35, "[$-0404]AM/PMhh" UTF8_CJ_HOUR "mm" UTF8_CJ_MIN "ss" UTF8_CJ_SEC ),
1341 EXC_NUMFMT_STRING( 63, "$#,##0;-$#,##0" ),
1342 EXC_NUMFMT_STRING( 64, "$#,##0;[RED]-$#,##0" ),
1343 EXC_NUMFMT_STRING( 65, "$#,##0.00;-$#,##0.00" ),
1344 EXC_NUMFMT_STRING( 66, "$#,##0.00;[RED]-$#,##0.00" ),
1346};
1347
1348// OTHER ----------------------------------------------------------------------
1349
1350const XclBuiltInFormat spBuiltInFormats_HEBREW[] =
1351{
1352 EXC_NUMFMT_STRING( 15, "DD-MMMM-YY" ),
1353 EXC_NUMFMT_STRING( 16, "DD-MMMM" ),
1354 EXC_NUMFMT_STRING( 17, "MMMM-YY" ),
1355 EXC_NUMFMT_STRING( 18, "h:mm AM/PM" ),
1356 EXC_NUMFMT_STRING( 19, "h:mm:ss AM/PM" ),
1357 EXC_NUMFMT_STRING( 63, UTF8_SHEQEL " #,##0;" UTF8_SHEQEL " -#,##0" ),
1358 EXC_NUMFMT_STRING( 64, UTF8_SHEQEL " #,##0;[RED]" UTF8_SHEQEL " -#,##0" ),
1359 EXC_NUMFMT_STRING( 65, UTF8_SHEQEL " #,##0.00;" UTF8_SHEQEL " -#,##0.00" ),
1360 EXC_NUMFMT_STRING( 66, UTF8_SHEQEL " #,##0.00;[RED]" UTF8_SHEQEL " -#,##0.00" ),
1362};
1363
1364const XclBuiltInFormat spBuiltInFormats_THAI[] =
1365{
1366 EXC_NUMFMT_STRING( 14, "D/M/YYYY" ),
1367 EXC_NUMFMT_STRING( 15, "D-MMM-YY" ),
1368 EXC_NUMFMT_STRING( 16, "D-MMM" ),
1369 EXC_NUMFMT_STRING( 17, "MMM-YY" ),
1370 EXC_NUMFMT_STRING( 18, "h:mm AM/PM" ),
1371 EXC_NUMFMT_STRING( 19, "h:mm:ss AM/PM" ),
1372 EXC_NUMFMT_STRING( 22, "D/M/YYYY h:mm" ),
1373 EXC_NUMFMT_STRING( 59, "t0" ),
1374 EXC_NUMFMT_STRING( 60, "t0.00" ),
1375 EXC_NUMFMT_STRING( 61, "t#,##0" ),
1376 EXC_NUMFMT_STRING( 62, "t#,##0.00" ),
1377 EXC_NUMFMT_STRING( 63, "t" UTF8_BAHT "#,##0_);t(" UTF8_BAHT "#,##0)" ),
1378 EXC_NUMFMT_STRING( 64, "t" UTF8_BAHT "#,##0_);[RED]t(" UTF8_BAHT "#,##0)" ),
1379 EXC_NUMFMT_STRING( 65, "t" UTF8_BAHT "#,##0.00_);t(" UTF8_BAHT "#,##0.00)" ),
1380 EXC_NUMFMT_STRING( 66, "t" UTF8_BAHT "#,##0.00_);[RED]t(" UTF8_BAHT "#,##0.00)" ),
1381 EXC_NUMFMT_STRING( 67, "t0%" ),
1382 EXC_NUMFMT_STRING( 68, "t0.00%" ),
1383 EXC_NUMFMT_STRING( 69, "t# ?/?" ),
1384 EXC_NUMFMT_STRING( 70, "t# ?\?/?\?" ),
1385 EXC_NUMFMT_STRING( 71, "tD/M/EE" ),
1386 EXC_NUMFMT_STRING( 72, "tD-MMM-E" ),
1387 EXC_NUMFMT_STRING( 73, "tD-MMM" ),
1388 EXC_NUMFMT_STRING( 74, "tMMM-E" ),
1389 EXC_NUMFMT_STRING( 75, "th:mm" ),
1390 EXC_NUMFMT_STRING( 76, "th:mm:ss" ),
1391 EXC_NUMFMT_STRING( 77, "tD/M/EE h:mm" ),
1392 EXC_NUMFMT_STRING( 78, "tmm:ss" ),
1393 EXC_NUMFMT_STRING( 79, "t[h]:mm:ss" ),
1394 EXC_NUMFMT_STRING( 80, "tmm:ss.0" ),
1395 EXC_NUMFMT_STRING( 81, "D/M/E" ),
1397};
1398
1399#undef EXC_NUMFMT_ENDTABLE
1400#undef EXC_NUMFMT_REUSE
1401#undef EXC_NUMFMT_OFFSET
1402#undef EXC_NUMFMT_STRING
1403
1405struct XclBuiltInFormatTable
1406{
1408 LanguageType meParentLang;
1409 const XclBuiltInFormat* mpFormats;
1410};
1411
1412const XclBuiltInFormatTable spBuiltInFormatTables[] =
1413{ // language parent language format table
1414 { LANGUAGE_DONTKNOW, LANGUAGE_NONE, spBuiltInFormats_DONTKNOW },
1415
1416 { LANGUAGE_ENGLISH, LANGUAGE_DONTKNOW, spBuiltInFormats_ENGLISH },
1417 { LANGUAGE_ENGLISH_UK, LANGUAGE_ENGLISH, spBuiltInFormats_ENGLISH_UK },
1418 { LANGUAGE_ENGLISH_EIRE, LANGUAGE_ENGLISH, spBuiltInFormats_ENGLISH_EIRE },
1419 { LANGUAGE_ENGLISH_US, LANGUAGE_ENGLISH, spBuiltInFormats_ENGLISH_US },
1420 { LANGUAGE_ENGLISH_CAN, LANGUAGE_ENGLISH, spBuiltInFormats_ENGLISH_CAN },
1421 { LANGUAGE_ENGLISH_AUS, LANGUAGE_ENGLISH, spBuiltInFormats_ENGLISH_AUS },
1422 { LANGUAGE_ENGLISH_SAFRICA, LANGUAGE_ENGLISH, spBuiltInFormats_ENGLISH_SAFRICA },
1424
1425 { PRV_LANGUAGE_FRENCH_PRIM, LANGUAGE_DONTKNOW, spBuiltInFormats_FRENCH },
1426 { LANGUAGE_FRENCH, PRV_LANGUAGE_FRENCH_PRIM, spBuiltInFormats_FRENCH_FRANCE },
1427 { LANGUAGE_FRENCH_CANADIAN, PRV_LANGUAGE_FRENCH_PRIM, spBuiltInFormats_FRENCH_CANADIAN },
1428 { LANGUAGE_FRENCH_SWISS, PRV_LANGUAGE_FRENCH_PRIM, spBuiltInFormats_FRENCH_SWISS },
1429 { LANGUAGE_FRENCH_BELGIAN, LANGUAGE_FRENCH, spBuiltInFormats_FRENCH_BELGIAN },
1432
1433 { PRV_LANGUAGE_GERMAN_PRIM, LANGUAGE_DONTKNOW, spBuiltInFormats_GERMAN },
1434 { LANGUAGE_GERMAN, PRV_LANGUAGE_GERMAN_PRIM, spBuiltInFormats_GERMAN_GERMANY },
1435 { LANGUAGE_GERMAN_AUSTRIAN, PRV_LANGUAGE_GERMAN_PRIM, spBuiltInFormats_GERMAN_AUSTRIAN },
1436 { LANGUAGE_GERMAN_SWISS, PRV_LANGUAGE_GERMAN_PRIM, spBuiltInFormats_GERMAN_SWISS },
1437 { LANGUAGE_GERMAN_LUXEMBOURG, PRV_LANGUAGE_GERMAN_PRIM, spBuiltInFormats_GERMAN_LUXEMBOURG },
1438 { LANGUAGE_GERMAN_LIECHTENSTEIN, PRV_LANGUAGE_GERMAN_PRIM, spBuiltInFormats_GERMAN_LIECHTENSTEIN },
1439
1440 { LANGUAGE_ITALIAN, LANGUAGE_DONTKNOW, spBuiltInFormats_ITALIAN_ITALY },
1441 { LANGUAGE_ITALIAN_SWISS, LANGUAGE_DONTKNOW, spBuiltInFormats_ITALIAN_SWISS },
1442
1443 { LANGUAGE_SWEDISH, LANGUAGE_DONTKNOW, spBuiltInFormats_SWEDISH_SWEDEN },
1444 { LANGUAGE_SWEDISH_FINLAND, LANGUAGE_DONTKNOW, spBuiltInFormats_SWEDISH_FINLAND },
1445
1446 { PRV_LANGUAGE_ASIAN_PRIM, LANGUAGE_DONTKNOW, spBuiltInFormats_ASIAN },
1447 { LANGUAGE_JAPANESE, PRV_LANGUAGE_ASIAN_PRIM, spBuiltInFormats_JAPANESE },
1448 { LANGUAGE_KOREAN, PRV_LANGUAGE_ASIAN_PRIM, spBuiltInFormats_KOREAN },
1449 { LANGUAGE_CHINESE_SIMPLIFIED, PRV_LANGUAGE_ASIAN_PRIM, spBuiltInFormats_CHINESE_SIMPLIFIED },
1450 { LANGUAGE_CHINESE_TRADITIONAL, PRV_LANGUAGE_ASIAN_PRIM, spBuiltInFormats_CHINESE_TRADITIONAL },
1451
1452 { LANGUAGE_HEBREW, LANGUAGE_DONTKNOW, spBuiltInFormats_HEBREW },
1453 { LANGUAGE_THAI, LANGUAGE_DONTKNOW, spBuiltInFormats_THAI }
1454};
1455
1456} // namespace
1457
1459 meSysLang( rRoot.GetSysLanguage() ),
1460 mnStdScNumFmt( rRoot.GetFormatter().GetStandardIndex( ScGlobal::eLnge ) )
1461{
1462 // *** insert default formats (BIFF5+ only)***
1463
1464 if( rRoot.GetBiff() >= EXC_BIFF5 )
1466}
1467
1469{
1470 maFmtMap.clear();
1471}
1472
1473void XclNumFmtBuffer::InsertFormat( sal_uInt16 nXclNumFmt, const OUString& rFormat )
1474{
1475 XclNumFmt& rNumFmt = maFmtMap[ nXclNumFmt ];
1476 rNumFmt.maFormat = rFormat;
1477 // #i62053# rFormat may be an empty string, meOffset must be initialized
1478 rNumFmt.meOffset = NF_NUMBER_STANDARD;
1479 rNumFmt.meLanguage = LANGUAGE_SYSTEM;
1480}
1481
1483{
1484 // build a map containing tables for all languages
1485 typedef ::std::map< LanguageType, const XclBuiltInFormatTable* > XclBuiltInMap;
1486 XclBuiltInMap aBuiltInMap;
1487 for(const auto &rTable : spBuiltInFormatTables)
1488 aBuiltInMap[ rTable.meLanguage ] = &rTable;
1489
1490 // build a list of table pointers for the current language, with all parent tables
1491 typedef ::std::vector< const XclBuiltInFormatTable* > XclBuiltInVec;
1492 XclBuiltInVec aBuiltInVec;
1493 for( XclBuiltInMap::const_iterator aMIt = aBuiltInMap.find( meSysLang ), aMEnd = aBuiltInMap.end();
1494 aMIt != aMEnd; aMIt = aBuiltInMap.find( aMIt->second->meParentLang ) )
1495 aBuiltInVec.push_back( aMIt->second );
1496 // language not supported
1497 if( aBuiltInVec.empty() )
1498 {
1499 SAL_WARN("sc", "XclNumFmtBuffer::InsertBuiltinFormats - language not supported (#i29949#) 0x" << std::hex << meSysLang );
1500 XclBuiltInMap::const_iterator aMIt = aBuiltInMap.find( LANGUAGE_DONTKNOW );
1501 OSL_ENSURE( aMIt != aBuiltInMap.end(), "XclNumFmtBuffer::InsertBuiltinFormats - default map not found" );
1502 if( aMIt != aBuiltInMap.end() )
1503 aBuiltInVec.push_back( aMIt->second );
1504 }
1505
1506 // insert the default formats in the format map, from root parent to system language
1507 std::map< sal_uInt16, sal_uInt16 > aReuseMap;
1508 for( XclBuiltInVec::reverse_iterator aVIt = aBuiltInVec.rbegin(), aVEnd = aBuiltInVec.rend(); aVIt != aVEnd; ++aVIt )
1509 {
1510 // put LANGUAGE_SYSTEM for all entries in default table
1511 LanguageType eLang = ((*aVIt)->meLanguage == LANGUAGE_DONTKNOW) ? LANGUAGE_SYSTEM : meSysLang;
1512 for( const XclBuiltInFormat* pBuiltIn = (*aVIt)->mpFormats; pBuiltIn && (pBuiltIn->mnXclNumFmt != EXC_FORMAT_NOTFOUND); ++pBuiltIn )
1513 {
1514 XclNumFmt& rNumFmt = maFmtMap[ pBuiltIn->mnXclNumFmt ];
1515
1516 rNumFmt.meOffset = pBuiltIn->meOffset;
1517 rNumFmt.meLanguage = eLang;
1518
1519 if( pBuiltIn->mpFormat )
1520 rNumFmt.maFormat = OUString( pBuiltIn->mpFormat, strlen(pBuiltIn->mpFormat), RTL_TEXTENCODING_UTF8 );
1521 else
1522 rNumFmt.maFormat.clear();
1523
1524 if( pBuiltIn->meOffset == PRV_NF_INDEX_REUSE )
1525 aReuseMap[ pBuiltIn->mnXclNumFmt ] = pBuiltIn->mnXclReuseFmt;
1526 else
1527 aReuseMap.erase( pBuiltIn->mnXclNumFmt );
1528 }
1529 }
1530
1531 // copy reused number formats
1532 for( const auto& [rXclNumFmt, rXclReuseFmt] : aReuseMap )
1533 maFmtMap[ rXclNumFmt ] = maFmtMap[ rXclReuseFmt ];
1534}
1535
1536// Cell formatting data (XF) ==================================================
1537
1539 mbLocked( true ), // default in Excel and Calc
1540 mbHidden( false )
1541{
1542}
1543
1544bool operator==( const XclCellProt& rLeft, const XclCellProt& rRight )
1545{
1546 return (rLeft.mbLocked == rRight.mbLocked) && (rLeft.mbHidden == rRight.mbHidden);
1547}
1548
1550 mnHorAlign( EXC_XF_HOR_GENERAL ),
1551 mnVerAlign( EXC_XF_VER_BOTTOM ),
1552 mnOrient( EXC_ORIENT_NONE ),
1553 mnTextDir( EXC_XF_TEXTDIR_CONTEXT ),
1554 mnRotation( EXC_ROT_NONE ),
1555 mnIndent( 0 ),
1556 mbLineBreak( false ),
1557 mbShrink( false )
1558{
1559}
1560
1562{
1563 SvxCellHorJustify eHorJust = SvxCellHorJustify::Standard;
1564 switch( mnHorAlign )
1565 {
1566 case EXC_XF_HOR_GENERAL: eHorJust = SvxCellHorJustify::Standard; break;
1567 case EXC_XF_HOR_LEFT: eHorJust = SvxCellHorJustify::Left; break;
1569 case EXC_XF_HOR_CENTER: eHorJust = SvxCellHorJustify::Center; break;
1570 case EXC_XF_HOR_RIGHT: eHorJust = SvxCellHorJustify::Right; break;
1571 case EXC_XF_HOR_FILL: eHorJust = SvxCellHorJustify::Repeat; break;
1572 case EXC_XF_HOR_JUSTIFY:
1573 case EXC_XF_HOR_DISTRIB: eHorJust = SvxCellHorJustify::Block; break;
1574 default: OSL_FAIL( "XclCellAlign::GetScHorAlign - unknown horizontal alignment" );
1575 }
1576 return eHorJust;
1577}
1578
1580{
1581 return (mnHorAlign == EXC_XF_HOR_DISTRIB) ? SvxCellJustifyMethod::Distribute : SvxCellJustifyMethod::Auto;
1582}
1583
1585{
1586 SvxCellVerJustify eVerJust = SvxCellVerJustify::Standard;
1587 switch( mnVerAlign )
1588 {
1589 case EXC_XF_VER_TOP: eVerJust = SvxCellVerJustify::Top; break;
1590 case EXC_XF_VER_CENTER: eVerJust = SvxCellVerJustify::Center; break;
1591 case EXC_XF_VER_BOTTOM: eVerJust = SvxCellVerJustify::Standard; break;
1592 case EXC_XF_VER_JUSTIFY:
1593 case EXC_XF_VER_DISTRIB: eVerJust = SvxCellVerJustify::Block; break;
1594 default: OSL_FAIL( "XclCellAlign::GetScVerAlign - unknown vertical alignment" );
1595 }
1596 return eVerJust;
1597}
1598
1600{
1601 return (mnVerAlign == EXC_XF_VER_DISTRIB) ? SvxCellJustifyMethod::Distribute : SvxCellJustifyMethod::Auto;
1602}
1603
1605{
1606 SvxFrameDirection eFrameDir = SvxFrameDirection::Environment;
1607 switch( mnTextDir )
1608 {
1609 case EXC_XF_TEXTDIR_CONTEXT: eFrameDir = SvxFrameDirection::Environment; break;
1610 case EXC_XF_TEXTDIR_LTR: eFrameDir = SvxFrameDirection::Horizontal_LR_TB; break;
1611 case EXC_XF_TEXTDIR_RTL: eFrameDir = SvxFrameDirection::Horizontal_RL_TB; break;
1612 default: OSL_FAIL( "XclCellAlign::GetScFrameDir - unknown CTL text direction" );
1613 }
1614 return eFrameDir;
1615}
1616
1618{
1619 switch( eHorJust )
1620 {
1621 case SvxCellHorJustify::Standard: mnHorAlign = EXC_XF_HOR_GENERAL; break;
1622 case SvxCellHorJustify::Left: mnHorAlign = EXC_XF_HOR_LEFT; break;
1623 case SvxCellHorJustify::Center: mnHorAlign = EXC_XF_HOR_CENTER; break;
1624 case SvxCellHorJustify::Right: mnHorAlign = EXC_XF_HOR_RIGHT; break;
1625 case SvxCellHorJustify::Block: mnHorAlign = EXC_XF_HOR_JUSTIFY; break;
1626 case SvxCellHorJustify::Repeat: mnHorAlign = EXC_XF_HOR_FILL; break;
1627 default: mnHorAlign = EXC_XF_HOR_GENERAL;
1628 OSL_FAIL( "XclCellAlign::SetScHorAlign - unknown horizontal alignment" );
1629 }
1630}
1631
1633{
1634 switch( eVerJust )
1635 {
1636 case SvxCellVerJustify::Standard: mnVerAlign = EXC_XF_VER_BOTTOM; break;
1637 case SvxCellVerJustify::Top: mnVerAlign = EXC_XF_VER_TOP; break;
1638 case SvxCellVerJustify::Center: mnVerAlign = EXC_XF_VER_CENTER; break;
1639 case SvxCellVerJustify::Bottom: mnVerAlign = EXC_XF_VER_BOTTOM; break;
1640 default: mnVerAlign = EXC_XF_VER_BOTTOM;
1641 OSL_FAIL( "XclCellAlign::SetScVerAlign - unknown vertical alignment" );
1642 }
1643}
1644
1646{
1647 switch( eFrameDir )
1648 {
1649 case SvxFrameDirection::Environment: mnTextDir = EXC_XF_TEXTDIR_CONTEXT; break;
1650 case SvxFrameDirection::Horizontal_LR_TB: mnTextDir = EXC_XF_TEXTDIR_LTR; break;
1651 case SvxFrameDirection::Horizontal_RL_TB: mnTextDir = EXC_XF_TEXTDIR_RTL; break;
1653 OSL_FAIL( "XclCellAlign::SetScFrameDir - unknown CTL text direction" );
1654 }
1655}
1656
1657bool operator==( const XclCellAlign& rLeft, const XclCellAlign& rRight )
1658{
1659 return
1660 (rLeft.mnHorAlign == rRight.mnHorAlign) && (rLeft.mnVerAlign == rRight.mnVerAlign) &&
1661 (rLeft.mnTextDir == rRight.mnTextDir) && (rLeft.mnOrient == rRight.mnOrient) &&
1662 (rLeft.mnRotation == rRight.mnRotation) && (rLeft.mnIndent == rRight.mnIndent) &&
1663 (rLeft.mbLineBreak == rRight.mbLineBreak) && (rLeft.mbShrink == rRight.mbShrink);
1664}
1665
1667 mnLeftColor( 0 ),
1668 mnRightColor( 0 ),
1669 mnTopColor( 0 ),
1670 mnBottomColor( 0 ),
1671 mnDiagColor( 0 ),
1672 mnLeftLine( EXC_LINE_NONE ),
1673 mnRightLine( EXC_LINE_NONE ),
1674 mnTopLine( EXC_LINE_NONE ),
1675 mnBottomLine( EXC_LINE_NONE ),
1676 mnDiagLine( EXC_LINE_NONE ),
1677 mbDiagTLtoBR( false ),
1678 mbDiagBLtoTR( false )
1679{
1680}
1681
1682bool operator==( const XclCellBorder& rLeft, const XclCellBorder& rRight )
1683{
1684 return
1685 (rLeft.mnLeftColor == rRight.mnLeftColor) && (rLeft.mnRightColor == rRight.mnRightColor) &&
1686 (rLeft.mnTopColor == rRight.mnTopColor) && (rLeft.mnBottomColor == rRight.mnBottomColor) &&
1687 (rLeft.mnLeftLine == rRight.mnLeftLine) && (rLeft.mnRightLine == rRight.mnRightLine) &&
1688 (rLeft.mnTopLine == rRight.mnTopLine) && (rLeft.mnBottomLine == rRight.mnBottomLine) &&
1689 (rLeft.mnDiagColor == rRight.mnDiagColor) && (rLeft.mnDiagLine == rRight.mnDiagLine) &&
1690 (rLeft.mbDiagTLtoBR == rRight.mbDiagTLtoBR) && (rLeft.mbDiagBLtoTR == rRight.mbDiagBLtoTR);
1691}
1692
1694 mnForeColor( EXC_COLOR_WINDOWTEXT ),
1695 mnBackColor( EXC_COLOR_WINDOWBACK ),
1696 mnPattern( EXC_PATT_NONE )
1697{
1698}
1699
1701 mnForeColor( EXC_COLOR_WINDOWTEXT ),
1702 mnBackColor( EXC_COLOR_WINDOWBACK ),
1703 mnPattern( nPattern )
1704{
1705}
1706
1708{
1710}
1711
1712bool operator==( const XclCellArea& rLeft, const XclCellArea& rRight )
1713{
1714 return
1715 (rLeft.mnForeColor == rRight.mnForeColor) && (rLeft.mnBackColor == rRight.mnBackColor) &&
1716 (rLeft.mnPattern == rRight.mnPattern);
1717}
1718
1719XclXFBase::XclXFBase( bool bCellXF ) :
1720 mnParent( bCellXF ? EXC_XF_DEFAULTSTYLE : EXC_XF_STYLEPARENT ),
1721 mbCellXF( bCellXF )
1722{
1723 SetAllUsedFlags( false );
1724}
1725
1727{
1728}
1729
1731{
1733}
1734
1736{
1738}
1739
1740bool XclXFBase::Equals( const XclXFBase& rCmp ) const
1741{
1742 return
1743 (mbCellXF == rCmp.mbCellXF) && (mnParent == rCmp.mnParent) &&
1744 (mbProtUsed == rCmp.mbProtUsed) && (mbFontUsed == rCmp.mbFontUsed) &&
1745 (mbFmtUsed == rCmp.mbFmtUsed) && (mbAlignUsed == rCmp.mbAlignUsed) &&
1746 (mbBorderUsed == rCmp.mbBorderUsed) && (mbAreaUsed == rCmp.mbAreaUsed);
1747}
1748
1749/* 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:268
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:266
Color mnNoteBack
Note text color.
Definition: xlstyle.hxx:269
sal_uInt32 mnTableSize
Note background color.
Definition: xlstyle.hxx:270
Color mnFaceColor
The table with RGB values.
Definition: xlstyle.hxx:267
ScfPropSetHelper maHlpChAsian
Chart properties for Western script.
Definition: xlstyle.hxx:426
ScfPropSetHelper maHlpChWstrnNoName
Chart properties for Complex script.
Definition: xlstyle.hxx:428
ScfPropSetHelper maHlpChAsianNoName
Chart properties for Western script, no font name.
Definition: xlstyle.hxx:429
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:624
ScfPropSetHelper maHlpControl
Chart properties for font escapement.
Definition: xlstyle.hxx:432
ScfPropSetHelper maHlpChCommon
Definition: xlstyle.hxx:424
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:696
ScfPropSetHelper maHlpChEscapement
Chart properties for Complex script, no font name.
Definition: xlstyle.hxx:431
ScfPropSetHelper maHlpChCmplx
Chart properties for Asian script.
Definition: xlstyle.hxx:427
ScfPropSetHelper maHlpChCmplxNoName
Chart properties for Asian script, no font name.
Definition: xlstyle.hxx:430
ScfPropSetHelper & GetChartHelper(sal_Int16 nScript)
Returns a chart property set helper according to the passed script type.
Definition: xlstyle.cxx:748
ScfPropSetHelper maHlpChWstrn
Chart properties for all scripts.
Definition: xlstyle.hxx:425
void InsertFormat(sal_uInt16 nXclNumFmt, const OUString &rFormat)
Inserts a new number format for the specified Excel format index.
Definition: xlstyle.cxx:1473
void InsertBuiltinFormats()
Inserts built-in number formats for the current system language.
Definition: xlstyle.cxx:1482
void InitializeImport()
Clears all buffered data, used to set up for a new sheet.
Definition: xlstyle.cxx:1468
XclNumFmtBuffer(const XclRoot &rRoot)
Definition: xlstyle.cxx:1458
XclNumFmtMap maFmtMap
Definition: xlstyle.hxx:468
const LanguageType meSysLang
Map containing all default and user-defined formats.
Definition: xlstyle.hxx:469
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:563
bool mbBorderUsed
true = alignment used.
Definition: xlstyle.hxx:594
bool mbAreaUsed
true = border data used.
Definition: xlstyle.hxx:595
bool mbProtUsed
true = cell XF, false = style XF.
Definition: xlstyle.hxx:590
bool HasUsedFlags() const
Returns true, if any "attribute used" flags are ste in this XF.
Definition: xlstyle.cxx:1735
bool mbFmtUsed
true = font index used.
Definition: xlstyle.hxx:592
sal_uInt16 mnParent
Definition: xlstyle.hxx:588
bool mbAlignUsed
true = number format used.
Definition: xlstyle.hxx:593
bool mbCellXF
Index to parent style XF.
Definition: xlstyle.hxx:589
bool Equals(const XclXFBase &rCmp) const
Returns true, if this object is equal to the passed.
Definition: xlstyle.cxx:1740
void SetAllUsedFlags(bool bUsed)
Sets all "attribute used" flags to the passed state.
Definition: xlstyle.cxx:1730
virtual ~XclXFBase()
Definition: xlstyle.cxx:1726
XclXFBase(bool bCellXF)
Definition: xlstyle.cxx:1719
bool mbFontUsed
true = cell protection used.
Definition: xlstyle.hxx:591
void setColor(Color const &rColor)
Color const & getFinalColor() const
static Color GetDefaultColor(ColorConfigEntry eEntry)
FontFamily GetFamilyType()
FontStrikeout GetStrikeout() const
bool IsShadow() const
FontItalic GetItalic()
const OUString & GetFamilyName() const
const Size & GetFontSize() 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:488
sal_uInt8 mnTextDir
Text orientation.
Definition: xlstyle.hxx:492
SvxCellHorJustify GetScHorAlign() const
Returns the Calc horizontal alignment.
Definition: xlstyle.cxx:1561
void SetScFrameDir(SvxFrameDirection eFrameDir)
Sets the Calc frame direction.
Definition: xlstyle.cxx:1645
sal_uInt8 mnOrient
Vertical alignment.
Definition: xlstyle.hxx:491
SvxCellJustifyMethod GetScHorJustifyMethod() const
Returns horizontal justification method as Calc's attribute.
Definition: xlstyle.cxx:1579
sal_uInt8 mnVerAlign
Horizontal alignment.
Definition: xlstyle.hxx:490
XclCellAlign()
true = Shrink to fit cell size.
Definition: xlstyle.cxx:1549
sal_uInt8 mnIndent
Text rotation angle.
Definition: xlstyle.hxx:494
SvxCellVerJustify GetScVerAlign() const
Returns the Calc vertical alignment.
Definition: xlstyle.cxx:1584
SvxCellJustifyMethod GetScVerJustifyMethod() const
Returns vertical justification method as Calc's attribute.
Definition: xlstyle.cxx:1599
void SetScHorAlign(SvxCellHorJustify eHorJust)
Sets the Calc horizontal alignment.
Definition: xlstyle.cxx:1617
void SetScVerAlign(SvxCellVerJustify eVerJust)
Sets the Calc vertical alignment.
Definition: xlstyle.cxx:1632
sal_uInt8 mnRotation
CTL text direction.
Definition: xlstyle.hxx:493
SvxFrameDirection GetScFrameDir() const
Returns the Calc frame direction.
Definition: xlstyle.cxx:1604
sal_uInt8 mnHorAlign
Definition: xlstyle.hxx:489
bool mbLineBreak
Indentation.
Definition: xlstyle.hxx:495
bool mbShrink
true = Multi-line text.
Definition: xlstyle.hxx:496
Contains background colors and pattern for a cell.
Definition: xlstyle.hxx:544
XclCellArea()
Fill pattern.
Definition: xlstyle.cxx:1693
sal_uInt16 mnBackColor
Palette index to foreground color.
Definition: xlstyle.hxx:546
bool IsTransparent() const
Returns true, if the area represents transparent state.
Definition: xlstyle.cxx:1707
sal_uInt8 mnPattern
Palette index to background color.
Definition: xlstyle.hxx:547
sal_uInt16 mnForeColor
Definition: xlstyle.hxx:545
Contains color and line style for each cell border line.
Definition: xlstyle.hxx:523
XclCellBorder()
true = Bottom-left to top-right on.
Definition: xlstyle.cxx:1666
sal_uInt8 mnRightLine
Style of left line.
Definition: xlstyle.hxx:530
sal_uInt8 mnDiagLine
Style of bottom line.
Definition: xlstyle.hxx:533
sal_uInt16 mnDiagColor
Palette index for bottom line.
Definition: xlstyle.hxx:528
bool mbDiagTLtoBR
Style of diagonal line(s).
Definition: xlstyle.hxx:534
sal_uInt8 mnTopLine
Style of right line.
Definition: xlstyle.hxx:531
sal_uInt16 mnLeftColor
Definition: xlstyle.hxx:524
sal_uInt8 mnLeftLine
Palette index for diagonal line(s).
Definition: xlstyle.hxx:529
sal_uInt16 mnTopColor
Palette index for right line.
Definition: xlstyle.hxx:526
sal_uInt16 mnRightColor
Palette index for left line.
Definition: xlstyle.hxx:525
sal_uInt16 mnBottomColor
Palette index for top line.
Definition: xlstyle.hxx:527
bool mbDiagBLtoTR
true = Top-left to bottom-right on.
Definition: xlstyle.hxx:535
sal_uInt8 mnBottomLine
Style of top line.
Definition: xlstyle.hxx:532
Contains all cell protection attributes.
Definition: xlstyle.hxx:477
XclCellProt()
true = Formula is hidden.
Definition: xlstyle.cxx:1538
bool mbLocked
Definition: xlstyle.hxx:478
bool mbHidden
true = Locked against editing.
Definition: xlstyle.hxx:479
This struct helps reading and writing Excel fonts.
Definition: xlstyle.hxx:285
void SetApiEscapement(sal_Int16 nApiEscapem)
Sets the API escapement style.
Definition: xlstyle.cxx:501
void FillFromVclFont(const vcl::Font &rFont, model::ComplexColor const &rComplexColor)
Fills all members (except color and escapement) from the passed font.
Definition: xlstyle.cxx:202
OUString maStyle
Font name.
Definition: xlstyle.hxx:287
sal_Int16 GetApiFontEncoding() const
Returns the API font text encoding.
Definition: xlstyle.cxx:411
css::awt::FontSlant GetApiPosture() const
Returns the API font posture.
Definition: xlstyle.cxx:417
sal_uInt8 mnCharSet
Windows font family.
Definition: xlstyle.hxx:292
sal_Int16 GetApiStrikeout() const
Returns the API font strike-out style.
Definition: xlstyle.cxx:451
sal_Int16 GetApiFamily() const
Returns the API font family.
Definition: xlstyle.cxx:396
void SetScHeight(sal_Int32 nTwips)
Sets the Calc font height (in twips).
Definition: xlstyle.cxx:307
sal_uInt16 mnHeight
String with styles (bold, italic).
Definition: xlstyle.hxx:288
void SetFontEncoding(rtl_TextEncoding eFontEnc)
Sets the font text encoding.
Definition: xlstyle.cxx:329
float GetApiWeight() const
Returns the API font weight.
Definition: xlstyle.cxx:422
bool mbOutline
true = Struck out.
Definition: xlstyle.hxx:296
void SetScFamily(FontFamily eScFamily)
Sets the Calc font family.
Definition: xlstyle.cxx:312
void SetApiStrikeout(sal_Int16 nApiStrikeout)
Sets the API font strike-out style.
Definition: xlstyle.cxx:511
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:259
void SetScStrikeout(FontStrikeout eScStrikeout)
Sets the Calc strike-out style.
Definition: xlstyle.cxx:381
void SetApiWeight(float fApiWeight)
Sets the API font weight.
Definition: xlstyle.cxx:484
XclFontData()
Font color.
Definition: xlstyle.cxx:172
void SetApiPosture(css::awt::FontSlant eApiPosture)
Sets the API font posture.
Definition: xlstyle.cxx:475
void FillFromSvxFont(const SvxFont &rFont, model::ComplexColor const &rComplexColor)
Fills all members (except color) from the passed SVX font.
Definition: xlstyle.cxx:220
float GetApiHeight() const
Returns the API font height.
Definition: xlstyle.cxx:391
void SetScPosture(FontItalic eScPosture)
Sets the Calc font posture.
Definition: xlstyle.cxx:335
FontFamily GetScFamily(rtl_TextEncoding eDefTextEnc) const
Returns the Calc font family.
Definition: xlstyle.cxx:228
sal_Int16 GetApiEscapement() const
Returns the API escapement style.
Definition: xlstyle.cxx:440
FontStrikeout GetScStrikeout() const
Returns the Calc strike-out style.
Definition: xlstyle.cxx:302
void SetApiFamily(sal_Int16 nApiFamily)
Sets the API font family.
Definition: xlstyle.cxx:461
bool mbItalic
Underline style.
Definition: xlstyle.hxx:294
void SetApiUnderline(sal_Int16 nApiUnderl)
Sets the API font underline style.
Definition: xlstyle.cxx:489
sal_uInt8 mnUnderline
Windows character set.
Definition: xlstyle.hxx:293
FontLineStyle GetScUnderline() const
Returns the Calc font underline style.
Definition: xlstyle.cxx:278
void SetScEscapement(short nScEscapem)
Sets the Calc escapement style.
Definition: xlstyle.cxx:371
bool mbStrikeout
true = Italic.
Definition: xlstyle.hxx:295
FontItalic GetScPosture() const
Returns the Calc font posture.
Definition: xlstyle.cxx:254
void SetApiHeight(float fPoint)
Sets the API font height.
Definition: xlstyle.cxx:456
void SetScWeight(FontWeight eScWeight)
Sets the Calc font weight.
Definition: xlstyle.cxx:340
void SetScUnderline(FontLineStyle eScUnderl)
Sets the Calc underline style.
Definition: xlstyle.cxx:359
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:427
rtl_TextEncoding GetFontEncoding() const
Returns the font text encoding.
Definition: xlstyle.cxx:248
model::ComplexColor maComplexColor
true = Shadowed.
Definition: xlstyle.hxx:299
SvxEscapement GetScEscapement() const
Returns the Calc escapement style.
Definition: xlstyle.cxx:291
OUString maName
Definition: xlstyle.hxx:286
OUString maFormat
Definition: xlstyle.hxx:439
NfIndexTableOffset meOffset
Format string, may be empty (meOffset used then).
Definition: xlstyle.hxx:440
LanguageType meLanguage
SvNumberFormatter format index, if maFormat is empty.
Definition: xlstyle.hxx:441
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:818
#define UTF8_CJ_YEAR
Definition: xlstyle.cxx:810
#define UTF8_CJ_MIN
Definition: xlstyle.cxx:814
#define UTF8_EURO
Definition: xlstyle.cxx:802
#define UTF8_KO_HOUR
Definition: xlstyle.cxx:824
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:826
#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:785
#define EXC_NUMFMT_OFFSET(nXclNumFmt, eOffset)
Defines an Excel built-in number format that maps to an own built-in format.
Definition: xlstyle.cxx:789
bool operator==(const XclFontData &rLeft, const XclFontData &rRight)
Definition: xlstyle.cxx:518
#define UTF8_KO_YEAR
Definition: xlstyle.cxx:821
#define UTF8_WON
Definition: xlstyle.cxx:805
#define EXC_NUMFMT_ENDTABLE()
Terminates an Excel built-in number format table.
Definition: xlstyle.cxx:797
#define UTF8_CJ_MON
Definition: xlstyle.cxx:811
#define UTF8_POUND_UK
Definition: xlstyle.cxx:803
#define UTF8_CJ_DAY
Definition: xlstyle.cxx:812
#define UTF8_BAHT
Definition: xlstyle.cxx:801
#define UTF8_CJ_SEC
Definition: xlstyle.cxx:815
#define UTF8_YEN_JP
Definition: xlstyle.cxx:807
const Color spnDefColorTable5[]
Default color table for BIFF5/BIFF7.
Definition: xlstyle.cxx:64
#define UTF8_KO_MIN
Definition: xlstyle.cxx:825
#define UTF8_SHEQEL
Definition: xlstyle.cxx:804
#define EXC_NUMFMT_REUSE(nXclNumFmt, nXclReuse)
Defines an Excel built-in number format that is the same as the specified.
Definition: xlstyle.cxx:793
#define UTF8_KO_MON
Definition: xlstyle.cxx:822
#define UTF8_YEN_CS
Definition: xlstyle.cxx:806
#define UTF8_CJ_HOUR
Definition: xlstyle.cxx:813
const Color spnDefColorTable3[]
Default color table for BIFF3/BIFF4.
Definition: xlstyle.cxx:56
#define UTF8_KO_DAY
Definition: xlstyle.cxx:823
const sal_uInt8 EXC_FONTFAM_MODERN
Definition: xlstyle.hxx:89
const sal_uInt16 EXC_COLOR_NOTEBACK
Automatic frame border for series (BIFF8 charts).
Definition: xlstyle.hxx:214
const sal_uInt16 EXC_FONTWGHT_MEDIUM
Definition: xlstyle.hxx:112
const sal_uInt16 EXC_FONTWGHT_NORMAL
Definition: xlstyle.hxx:111
const sal_uInt16 EXC_XF_DEFAULTSTYLE
Arbitrary maximum number of style XFs.
Definition: xlstyle.hxx:139
const sal_uInt16 EXC_COLOR_WINDOWBACK
System window text color (>=BIFF5).
Definition: xlstyle.hxx:209
const sal_uInt8 EXC_FONTFAM_SCRIPT
Definition: xlstyle.hxx:90
const sal_uInt8 EXC_FONTFAM_SWISS
Definition: xlstyle.hxx:87
const sal_uInt16 EXC_FONTWGHT_SEMIBOLD
Definition: xlstyle.hxx:113
const sal_uInt8 EXC_XF_HOR_GENERAL
Definition: xlstyle.hxx:159
const sal_uInt8 EXC_XF_HOR_DISTRIB
Definition: xlstyle.hxx:166
const sal_uInt8 EXC_XF_TEXTDIR_LTR
Definition: xlstyle.hxx:175
const sal_uInt16 EXC_COLOR_BUTTONBACK
System window background color (>=BIFF5).
Definition: xlstyle.hxx:210
const sal_uInt16 EXC_FONTWGHT_SEMILIGHT
Definition: xlstyle.hxx:110
const sal_uInt16 EXC_FONTWGHT_ULTRABOLD
Definition: xlstyle.hxx:115
const sal_uInt16 EXC_COLOR_NOTETEXT
Note background color.
Definition: xlstyle.hxx:215
const sal_uInt8 EXC_FONTFAM_SYSTEM
Definition: xlstyle.hxx:88
const sal_uInt16 EXC_FONTESC_SUPER
Definition: xlstyle.hxx:127
const sal_uInt16 EXC_COLOR_FONTAUTO
Note text color.
Definition: xlstyle.hxx:216
const sal_uInt16 EXC_FONTWGHT_BLACK
Definition: xlstyle.hxx:116
const sal_uInt8 EXC_XF_HOR_CENTER_AS
Definition: xlstyle.hxx:165
XclFontPropSetType
Enumerates different types for objects with font settings (using different property names).
Definition: xlstyle.hxx:396
@ EXC_FONTPROPSET_CONTROL
All text objects in charts.
Definition: xlstyle.hxx:398
@ EXC_FONTPROPSET_CHART
Definition: xlstyle.hxx:397
const sal_uInt8 EXC_XF_HOR_CENTER
Definition: xlstyle.hxx:161
const sal_uInt8 EXC_FONTFAM_DONTKNOW
Definition: xlstyle.hxx:85
const sal_uInt8 EXC_XF_TEXTDIR_RTL
Definition: xlstyle.hxx:176
const sal_uInt8 EXC_FONTUNDERL_DOUBLE_ACC
Definition: xlstyle.hxx:123
const sal_uInt8 EXC_FONTFAM_DECORATIVE
Definition: xlstyle.hxx:91
const sal_uInt8 EXC_FONTUNDERL_SINGLE
Definition: xlstyle.hxx:120
const sal_uInt16 EXC_COLOR_CHBORDERAUTO
Chart window background color (BIFF8 charts).
Definition: xlstyle.hxx:213
const sal_uInt8 EXC_LINE_NONE
Definition: xlstyle.hxx:38
const sal_uInt16 EXC_COLOR_WINDOWTEXT
System window background color (BIFF3-BIFF4).
Definition: xlstyle.hxx:208
const sal_uInt8 EXC_FONTUNDERL_DOUBLE
Definition: xlstyle.hxx:121
const sal_uInt8 EXC_XF_VER_TOP
Definition: xlstyle.hxx:168
const sal_uInt8 EXC_XF_VER_JUSTIFY
Definition: xlstyle.hxx:171
const sal_uInt16 EXC_XF_STYLEPARENT
Definition: xlstyle.hxx:148
const sal_uInt16 EXC_FONTESC_NONE
Definition: xlstyle.hxx:126
const sal_uInt8 EXC_XF_VER_BOTTOM
Definition: xlstyle.hxx:170
const sal_uInt8 EXC_PATT_NONE
Definition: xlstyle.hxx:55
const sal_uInt8 EXC_XF_VER_CENTER
Definition: xlstyle.hxx:169
const sal_uInt8 EXC_FONTUNDERL_NONE
Definition: xlstyle.hxx:119
const sal_uInt8 EXC_XF_HOR_FILL
Definition: xlstyle.hxx:163
const sal_uInt16 EXC_FONTWGHT_ULTRALIGHT
Definition: xlstyle.hxx:108
const sal_uInt16 EXC_COLOR_WINDOWTEXT3
First user defined color.
Definition: xlstyle.hxx:206
const sal_uInt16 EXC_FONTWGHT_LIGHT
Definition: xlstyle.hxx:109
const sal_uInt16 EXC_COLOR_CHWINDOWBACK
Chart window text color (BIFF8 charts).
Definition: xlstyle.hxx:212
const sal_uInt8 EXC_FONTCSET_ANSI_LATIN
Definition: xlstyle.hxx:94
const sal_uInt8 EXC_XF_HOR_RIGHT
Definition: xlstyle.hxx:162
const sal_uInt16 EXC_FONTWGHT_THIN
Definition: xlstyle.hxx:107
const sal_uInt8 EXC_FONTUNDERL_SINGLE_ACC
Definition: xlstyle.hxx:122
const sal_uInt8 EXC_XF_HOR_JUSTIFY
Definition: xlstyle.hxx:164
const sal_uInt8 EXC_XF_VER_DISTRIB
Definition: xlstyle.hxx:172
const sal_uInt16 EXC_COLOR_WINDOWBACK3
System window text color (BIFF3-BIFF4).
Definition: xlstyle.hxx:207
const sal_uInt16 EXC_FORMAT_NOTFOUND
Definition: xlstyle.hxx:70
const sal_uInt16 EXC_FONTWGHT_BOLD
Definition: xlstyle.hxx:114
const sal_uInt8 EXC_XF_HOR_LEFT
Definition: xlstyle.hxx:160
const sal_uInt8 EXC_FONTFAM_ROMAN
Definition: xlstyle.hxx:86
const sal_uInt16 EXC_COLOR_CHWINDOWTEXT
System button background color (face color).
Definition: xlstyle.hxx:211
const sal_uInt8 EXC_XF_TEXTDIR_CONTEXT
Definition: xlstyle.hxx:174
const sal_uInt16 EXC_FONTESC_SUB
Definition: xlstyle.hxx:128
const sal_uInt16 EXC_FONTWGHT_DONTKNOW
Definition: xlstyle.hxx:106
#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