1 /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
3 * This file is part of the LibreOffice project.
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/.
9 * This file incorporates work covered by the following license notice:
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 .
20 #ifndef INCLUDED_XMLOFF_XMLNUMFI_HXX
21 #define INCLUDED_XMLOFF_XMLNUMFI_HXX
23 #include <sal/config.h>
24 #include <xmloff/dllapi.h>
25 #include <sal/types.h>
26 #include <xmloff/xmlstyle.hxx>
27 #include <rtl/ustrbuf.hxx>
28 #include <i18nlangtag/lang.h>
32 namespace com::sun::star::uno
{ class XComponentContext
; }
33 namespace com::sun::star::util
{ class XNumberFormatsSupplier
; }
34 namespace com::sun::star::xml::sax
{ class XAttributeList
; }
36 #define XML_NUMBERSTYLES "NumberStyles"
38 enum class SvXMLStylesTokens
49 enum SvXMLDateElementAttributes
60 class SvXMLNumImpData
;
62 struct SvXMLNumberInfo
;
63 class SvNumberFormatter
;
64 class LocaleDataWrapper
;
67 // use SvXMLNumFmtHelper in the context for <office:styles> to create
68 // child contexts for data styles
70 class SvXMLNumFmtHelper
72 std::unique_ptr
<SvXMLNumImpData
> pData
;
76 const css::uno::Reference
< css::util::XNumberFormatsSupplier
>& rSupp
,
77 const css::uno::Reference
< css::uno::XComponentContext
>& rxContext
);
80 SvNumberFormatter
* pNumberFormatter
,
81 const css::uno::Reference
< css::uno::XComponentContext
>& rxContext
);
85 SvXMLStyleContext
* CreateChildContext( SvXMLImport
& rImport
,
87 const css::uno::Reference
< css::xml::sax::XFastAttributeList
>& xAttrList
,
88 SvXMLStylesContext
& rStyles
);
90 SvXMLNumImpData
* getData() { return pData
.get(); }
92 LanguageType
GetLanguageForKey(sal_Int32 nKey
);
94 // sal_uInt32 GetKeyForName( const OUString& rName );
97 // SvXMLNumFmtDefaults is used in import and export
99 class SvXMLNumFmtDefaults
102 // return value is NfIndexTableOffset
103 static sal_uInt16
GetDefaultDateFormat( SvXMLDateElementAttributes eDOW
,
104 SvXMLDateElementAttributes eDay
, SvXMLDateElementAttributes eMonth
,
105 SvXMLDateElementAttributes eYear
, SvXMLDateElementAttributes eHours
,
106 SvXMLDateElementAttributes eMins
, SvXMLDateElementAttributes eSecs
,
116 class XMLOFF_DLLPUBLIC SvXMLNumFormatContext
: public SvXMLStyleContext
118 SvXMLNumImpData
* pData
;
119 SvXMLStylesContext
* pStyles
;
120 std::vector
<MyCondition
> aMyConditions
;
121 SvXMLStylesTokens nType
;
123 // OUString sFormatName;
124 OUString sFormatTitle
;
125 // OUString sMapName;
127 LanguageType nFormatLang
;
131 bool bAutoDec
; // set in AddNumber
132 bool bAutoInt
; // set in AddNumber
134 OUStringBuffer aFormatCode
{64};
135 OUStringBuffer aConditions
{32};
139 bool bRemoveAfterUse
;
141 // contained date elements, used to recognize default date formats
142 SvXMLDateElementAttributes eDateDOW
;
143 SvXMLDateElementAttributes eDateDay
;
144 SvXMLDateElementAttributes eDateMonth
;
145 SvXMLDateElementAttributes eDateYear
;
146 SvXMLDateElementAttributes eDateHours
;
147 SvXMLDateElementAttributes eDateMins
;
148 SvXMLDateElementAttributes eDateSecs
;
151 SAL_DLLPRIVATE sal_Int32
PrivateGetKey();
154 SvXMLNumFormatContext( SvXMLImport
& rImport
,
156 SvXMLNumImpData
* pNewData
,
157 SvXMLStylesTokens nNewType
,
158 const css::uno::Reference
< css::xml::sax::XFastAttributeList
>& xAttrList
,
159 SvXMLStylesContext
& rStyles
);
160 SvXMLNumFormatContext( SvXMLImport
& rImport
,
161 const OUString
& rName
,
162 const css::uno::Reference
< css::xml::sax::XFastAttributeList
>& xAttrList
,
163 const sal_Int32 nKey
,
165 SvXMLStylesContext
& rStyles
);
166 virtual ~SvXMLNumFormatContext() override
;
168 virtual css::uno::Reference
< css::xml::sax::XFastContextHandler
> SAL_CALL
createFastChildContext(
169 sal_Int32 nElement
, const css::uno::Reference
< css::xml::sax::XFastAttributeList
>& AttrList
) override
;
170 virtual void CreateAndInsert(bool bOverwrite
) override
;
173 sal_Int32
CreateAndInsert( SvNumberFormatter
* pFormatter
);
174 sal_Int32
CreateAndInsert( css::uno::Reference
< css::util::XNumberFormatsSupplier
> const & xFormatsSupplier
);
175 SvXMLStylesTokens
GetType() const { return nType
; } // SvXMLStylesTokens
177 bool HasLongDoW() const { return bHasLongDoW
; }
178 void SetHasLongDoW(bool bSet
) { bHasLongDoW
= bSet
; }
179 bool HasEra() const { return bHasEra
; }
181 void UpdateCalendar( const OUString
& rNewCalendar
, bool bImplicitSecondaryCalendarEC
= false );
183 const LocaleDataWrapper
& GetLocaleData() const;
185 void AddToCode( const OUString
& rString
);
186 void AddToCode( sal_Unicode c
);
187 void AddNumber( const SvXMLNumberInfo
& rInfo
);
188 void AddCurrency( const OUString
& rContent
, LanguageType nLang
);
190 void AddNfKeyword( sal_uInt16 nIndex
);
191 bool ReplaceNfKeyword( sal_uInt16 nOld
, sal_uInt16 nNew
);
192 void AddCondition( const sal_Int32 nIndex
);
193 void AddCondition( const OUString
& rCondition
, const OUString
& rApplyName
);
194 void AddColor( Color nColor
);
196 /// determine whether number format uses the system language
197 bool IsSystemLanguage() const;
202 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */