xref: /AOO41X/main/xmloff/inc/xmloff/xmlnumfi.hxx (revision ecfe53c5d1886e1e0d215b0d140d05282ab1c477)
1 /**************************************************************
2  *
3  * Licensed to the Apache Software Foundation (ASF) under one
4  * or more contributor license agreements.  See the NOTICE file
5  * distributed with this work for additional information
6  * regarding copyright ownership.  The ASF licenses this file
7  * to you under the Apache License, Version 2.0 (the
8  * "License"); you may not use this file except in compliance
9  * with the License.  You may obtain a copy of the License at
10  *
11  *   http://www.apache.org/licenses/LICENSE-2.0
12  *
13  * Unless required by applicable law or agreed to in writing,
14  * software distributed under the License is distributed on an
15  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16  * KIND, either express or implied.  See the License for the
17  * specific language governing permissions and limitations
18  * under the License.
19  *
20  *************************************************************/
21 
22 
23 
24 #ifndef _XMLOFF_XMLNUMFI_HXX
25 #define _XMLOFF_XMLNUMFI_HXX
26 
27 #include "sal/config.h"
28 #include "xmloff/dllapi.h"
29 #include "sal/types.h"
30 #include <com/sun/star/util/XNumberFormatsSupplier.hpp>
31 #include <com/sun/star/xml/sax/XAttributeList.hpp>
32 #include <xmloff/xmlstyle.hxx>
33 #include <rtl/ustrbuf.hxx>
34 #include <i18npool/lang.h>
35 #ifndef __SGI_STL_VECTOR
36 #include <vector>
37 #endif
38 #include <unotools/localedatawrapper.hxx>
39 
40 #define XML_NUMBERSTYLES "NumberStyles"
41 
42 enum SvXMLStylesTokens
43 {
44     XML_TOK_STYLES_NUMBER_STYLE,
45     XML_TOK_STYLES_CURRENCY_STYLE,
46     XML_TOK_STYLES_PERCENTAGE_STYLE,
47     XML_TOK_STYLES_DATE_STYLE,
48     XML_TOK_STYLES_TIME_STYLE,
49     XML_TOK_STYLES_BOOLEAN_STYLE,
50     XML_TOK_STYLES_TEXT_STYLE
51 };
52 
53 enum SvXMLDateElementAttributes
54 {
55     XML_DEA_NONE,
56     XML_DEA_ANY,
57     XML_DEA_SHORT,
58     XML_DEA_LONG,
59     XML_DEA_TEXTSHORT,
60     XML_DEA_TEXTLONG
61 };
62 
63 class Color;
64 class SvXMLNumImpData;
65 class SvXMLImport;
66 class SvXMLStyleContext;
67 class SvXMLStylesContext;
68 struct SvXMLNumberInfo;
69 class SvNumberFormatter;
70 class SvtSysLocale;
71 
72 //  use SvXMLNumFmtHelper in the context for <office:styles> to create
73 //  child contexts for data styles
74 
75 class SvXMLNumFmtHelper
76 {
77     SvXMLNumImpData* pData;
78 
79     // #110680#
80     ::com::sun::star::uno::Reference< ::com::sun::star::lang::XMultiServiceFactory > mxServiceFactory;
81 
82 public:
83     // #110680#
84     //SvXMLNumFmtHelper( const ::com::sun::star::uno::Reference<
85     //      ::com::sun::star::util::XNumberFormatsSupplier >& rSupp );
86     //SvXMLNumFmtHelper( SvNumberFormatter* pNumberFormatter );
87     SvXMLNumFmtHelper(
88         const ::com::sun::star::uno::Reference< ::com::sun::star::util::XNumberFormatsSupplier >& rSupp,
89         const ::com::sun::star::uno::Reference< ::com::sun::star::lang::XMultiServiceFactory >& xServiceFactory );
90 
91     SvXMLNumFmtHelper(
92         SvNumberFormatter* pNumberFormatter,
93         const ::com::sun::star::uno::Reference< ::com::sun::star::lang::XMultiServiceFactory >& xServiceFactory );
94 
95     ~SvXMLNumFmtHelper();
96 
97     SvXMLStyleContext*  CreateChildContext( SvXMLImport& rImport,
98                 sal_uInt16 nPrefix, const rtl::OUString& rLocalName,
99                 const ::com::sun::star::uno::Reference<
100                     ::com::sun::star::xml::sax::XAttributeList>& xAttrList,
101                     SvXMLStylesContext& rStyles);
102 
getData()103     SvXMLNumImpData* getData() { return pData; }
104 
105     const SvXMLTokenMap&    GetStylesElemTokenMap();
106 
107 //  sal_uInt32  GetKeyForName( const rtl::OUString& rName );
108 };
109 
110 //  SvXMLNumFmtDefaults is used in import and export
111 
112 class SvXMLNumFmtDefaults
113 {
114 public:
115     static sal_Bool IsSystemLongDay( const SvtSysLocale& rSysLoc, sal_Bool bLong );
116     static sal_Bool IsSystemLongMonth( const SvtSysLocale& rSysLoc, sal_Bool bLong );
117     static sal_Bool IsSystemTextualMonth( const SvtSysLocale& rSysLoc, sal_Bool bLong );
118     static sal_Bool IsSystemLongYear( const SvtSysLocale& rSysLoc, sal_Bool bLong );
119     static sal_Bool IsSystemLongEra( const SvtSysLocale& rSysLoc, sal_Bool bLong );
120     static sal_Bool IsSystemLongDayOfWeek( const SvtSysLocale& rSysLoc, sal_Bool bLong );
121 
122     // return value is NfIndexTableOffset
123     static sal_uInt16 GetDefaultDateFormat( SvXMLDateElementAttributes eDOW,
124                 SvXMLDateElementAttributes eDay, SvXMLDateElementAttributes eMonth,
125                 SvXMLDateElementAttributes eYear, SvXMLDateElementAttributes eHours,
126                 SvXMLDateElementAttributes eMins, SvXMLDateElementAttributes eSecs,
127                 sal_Bool bSystem );
128 };
129 
130 struct MyCondition
131 {
132     rtl::OUString   sCondition;
133     rtl::OUString   sMapName;
134 };
135 
136 class XMLOFF_DLLPUBLIC SvXMLNumFormatContext : public SvXMLStyleContext
137 {
138     SvXMLNumImpData*    pData;
139     SvXMLStylesContext*             pStyles;
140     std::vector <MyCondition>   aMyConditions;
141     sal_uInt16          nType;
142     sal_Int32           nKey;
143 //  rtl::OUString       sFormatName;
144     rtl::OUString       sFormatTitle;
145 //  rtl::OUString       sMapName;
146     rtl::OUString       sCalendar;
147     rtl::OUString       sFormatString;
148     LanguageType        nFormatLang;
149     com::sun::star::lang::Locale    aLocale;
150     sal_Bool            bAutoOrder;
151     sal_Bool            bFromSystem;
152     sal_Bool            bTruncate;
153     sal_Bool            bAutoDec;       // set in AddNumber
154     sal_Bool            bAutoInt;       // set in AddNumber
155     sal_Bool            bHasExtraText;
156     rtl::OUStringBuffer aFormatCode;
157     rtl::OUStringBuffer aConditions;
158     sal_Bool            bHasLongDoW;
159     sal_Bool            bHasEra;
160     sal_Bool            bHasDateTime;
161     sal_Bool            bRemoveAfterUse;
162 
163     //  contained date elements, used to recognize default date formats
164     SvXMLDateElementAttributes  eDateDOW;
165     SvXMLDateElementAttributes  eDateDay;
166     SvXMLDateElementAttributes  eDateMonth;
167     SvXMLDateElementAttributes  eDateYear;
168     SvXMLDateElementAttributes  eDateHours;
169     SvXMLDateElementAttributes  eDateMins;
170     SvXMLDateElementAttributes  eDateSecs;
171     sal_Bool                    bDateNoDefault;
172 
173     SAL_DLLPRIVATE sal_Int32 PrivateGetKey();
174 
175 public:
176                 SvXMLNumFormatContext( SvXMLImport& rImport, sal_uInt16 nPrfx,
177                                     const rtl::OUString& rLName,
178                                     SvXMLNumImpData* pNewData, sal_uInt16 nNewType,
179                                     const ::com::sun::star::uno::Reference<
180                                         ::com::sun::star::xml::sax::XAttributeList>& xAttrList,
181                                     SvXMLStylesContext& rStyles );
182                 SvXMLNumFormatContext( SvXMLImport& rImport, sal_uInt16 nPrfx,
183                                     const rtl::OUString& rLName,
184                                     const ::com::sun::star::uno::Reference<
185                                         ::com::sun::star::xml::sax::XAttributeList>& xAttrList,
186                                     const sal_Int32 nKey,
187                                     SvXMLStylesContext& rStyles );
188     virtual     ~SvXMLNumFormatContext();
189 
190     virtual SvXMLImportContext *CreateChildContext( sal_uInt16 nPrefix,
191                                     const rtl::OUString& rLocalName,
192                                     const ::com::sun::star::uno::Reference<
193                                         ::com::sun::star::xml::sax::XAttributeList>& xAttrList );
194     virtual void CreateAndInsert(sal_Bool bOverwrite);
195     virtual void Finish(sal_Bool bOverwrite);
196 
GetData() const197     SvXMLNumImpData* GetData() const                { return pData; }
198     sal_Int32 GetKey();
199     sal_Int32 CreateAndInsert( SvNumberFormatter* pFormatter );
200     sal_Int32 CreateAndInsert( com::sun::star::uno::Reference< com::sun::star::util::XNumberFormatsSupplier >& xFormatsSupplier );
GetType() const201     sal_uInt16 GetType() const                      { return nType; }   // SvXMLStylesTokens
202 
IsFromSystem() const203     sal_Bool IsFromSystem() const                   { return bFromSystem; }
HasLongDoW() const204     sal_Bool HasLongDoW() const                     { return bHasLongDoW; }
SetHasLongDoW(sal_Bool bSet)205     void SetHasLongDoW(sal_Bool bSet)               { bHasLongDoW = bSet; }
HasEra() const206     sal_Bool HasEra() const                         { return bHasEra; }
SetHasEra(sal_Bool bSet)207     void SetHasEra(sal_Bool bSet)                   { bHasEra = bSet; }
208 
209     void UpdateCalendar( const rtl::OUString& rNewCalendar );
210 
211     const LocaleDataWrapper& GetLocaleData() const;
212 
213     void AddToCode( const rtl::OUString& rString );
214     void AddNumber( const SvXMLNumberInfo& rInfo );
215     void AddCurrency( const rtl::OUString& rContent, LanguageType nLang );
216 
217     void AddNfKeyword( sal_uInt16 nIndex );
218     sal_Bool ReplaceNfKeyword( sal_uInt16 nOld, sal_uInt16 nNew );
219     void AddCondition( const sal_Int32 nIndex );
220     void AddCondition( const sal_Int32 nIndex, const rtl::OUString& rFormat, const LocaleDataWrapper& rData );
221     void AddCondition( const rtl::OUString& rCondition, const rtl::OUString& rApplyName );
222     void AddColor( const Color& rColor );
223 
224     /// determine whether number format uses the system language
225     sal_Bool IsSystemLanguage();
226 };
227 
228 #endif
229 
230