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 inline constexpr OUStringLiteral XML_NUMBERSTYLES
= u
"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
> m_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 m_pData
.get(); }
92 LanguageType
GetLanguageForKey(sal_Int32 nKey
) const;
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
119 enum ImplicitCalendar
130 SvXMLNumImpData
* m_pData
;
131 SvXMLStylesContext
* m_pStyles
;
132 std::vector
<MyCondition
> m_aMyConditions
;
133 SvXMLStylesTokens m_nType
;
135 // OUString sFormatName;
136 OUString m_sFormatTitle
;
137 // OUString sMapName;
138 OUString m_sCalendar
;
139 OUString m_aImplicitCalendar
[2];
140 ImplicitCalendar m_eImplicitCalendar
;
141 LanguageType m_nFormatLang
;
145 bool m_bAutoDec
; // set in AddNumber
146 bool m_bAutoInt
; // set in AddNumber
147 bool m_bHasExtraText
;
148 bool m_bHasTrailingEmptyText
;
149 OUStringBuffer m_aFormatCode
{64};
150 OUStringBuffer m_aConditions
{32};
153 bool m_bRemoveAfterUse
;
155 // contained date elements, used to recognize default date formats
156 SvXMLDateElementAttributes m_eDateDOW
;
157 SvXMLDateElementAttributes m_eDateDay
;
158 SvXMLDateElementAttributes m_eDateMonth
;
159 SvXMLDateElementAttributes m_eDateYear
;
160 SvXMLDateElementAttributes m_eDateHours
;
161 SvXMLDateElementAttributes m_eDateMins
;
162 SvXMLDateElementAttributes m_eDateSecs
;
163 bool m_bDateNoDefault
;
165 SAL_DLLPRIVATE sal_Int32
PrivateGetKey();
168 SvXMLNumFormatContext( SvXMLImport
& rImport
,
170 SvXMLNumImpData
* pNewData
,
171 SvXMLStylesTokens nNewType
,
172 const css::uno::Reference
< css::xml::sax::XFastAttributeList
>& xAttrList
,
173 SvXMLStylesContext
& rStyles
);
174 SvXMLNumFormatContext( SvXMLImport
& rImport
,
175 const OUString
& rName
,
176 const css::uno::Reference
< css::xml::sax::XFastAttributeList
>& xAttrList
,
177 const sal_Int32 nKey
,
179 SvXMLStylesContext
& rStyles
);
180 virtual ~SvXMLNumFormatContext() override
;
182 virtual css::uno::Reference
< css::xml::sax::XFastContextHandler
> SAL_CALL
createFastChildContext(
183 sal_Int32 nElement
, const css::uno::Reference
< css::xml::sax::XFastAttributeList
>& AttrList
) override
;
184 virtual void CreateAndInsert(bool bOverwrite
) override
;
187 sal_Int32
CreateAndInsert( SvNumberFormatter
* pFormatter
);
188 sal_Int32
CreateAndInsert( css::uno::Reference
< css::util::XNumberFormatsSupplier
> const & xFormatsSupplier
);
189 SvXMLStylesTokens
GetType() const { return m_nType
; } // SvXMLStylesTokens
191 bool HasLongDoW() const { return m_bHasLongDoW
; }
192 void SetHasLongDoW(bool bSet
) { m_bHasLongDoW
= bSet
; }
193 void SetHasTrailingEmptyText(bool bSet
) { m_bHasTrailingEmptyText
= bSet
; }
195 void UpdateCalendar( const OUString
& rNewCalendar
);
196 ImplicitCalendar
GetImplicitCalendarState() const { return m_eImplicitCalendar
; }
198 const LocaleDataWrapper
& GetLocaleData() const;
200 void AddToCode( std::u16string_view rString
);
201 void AddToCode( sal_Unicode c
);
202 void AddNumber( const SvXMLNumberInfo
& rInfo
);
203 void AddCurrency( const OUString
& rContent
, LanguageType nLang
);
205 void AddNfKeyword( sal_uInt16 nIndex
);
206 bool ReplaceNfKeyword( sal_uInt16 nOld
, sal_uInt16 nNew
);
207 void AddCondition( const sal_Int32 nIndex
);
208 void AddCondition( const OUString
& rCondition
, const OUString
& rApplyName
);
209 void AddColor( Color nColor
);
211 /// determine whether number format uses the system language
212 bool IsSystemLanguage() const;
217 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */