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 #ifndef INCLUDED_XMLOFF_XMLNUMFI_HXX 21 #define INCLUDED_XMLOFF_XMLNUMFI_HXX 22 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> 29 #include <memory> 30 #include <vector> 31 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; } 35 36 #define XML_NUMBERSTYLES "NumberStyles" 37 38 enum class SvXMLStylesTokens 39 { 40 NUMBER_STYLE, 41 CURRENCY_STYLE, 42 PERCENTAGE_STYLE, 43 DATE_STYLE, 44 TIME_STYLE, 45 BOOLEAN_STYLE, 46 TEXT_STYLE 47 }; 48 49 enum SvXMLDateElementAttributes 50 { 51 XML_DEA_NONE, 52 XML_DEA_ANY, 53 XML_DEA_SHORT, 54 XML_DEA_LONG, 55 XML_DEA_TEXTSHORT, 56 XML_DEA_TEXTLONG 57 }; 58 59 class Color; 60 class SvXMLNumImpData; 61 class SvXMLImport; 62 struct SvXMLNumberInfo; 63 class SvNumberFormatter; 64 class LocaleDataWrapper; 65 66 67 // use SvXMLNumFmtHelper in the context for <office:styles> to create 68 // child contexts for data styles 69 70 class SvXMLNumFmtHelper 71 { 72 std::unique_ptr<SvXMLNumImpData> pData; 73 74 public: 75 SvXMLNumFmtHelper( 76 const css::uno::Reference< css::util::XNumberFormatsSupplier >& rSupp, 77 const css::uno::Reference< css::uno::XComponentContext >& rxContext ); 78 79 SvXMLNumFmtHelper( 80 SvNumberFormatter* pNumberFormatter, 81 const css::uno::Reference< css::uno::XComponentContext >& rxContext ); 82 83 ~SvXMLNumFmtHelper(); 84 85 SvXMLStyleContext* CreateChildContext( SvXMLImport& rImport, 86 sal_Int32 nElement, 87 const css::uno::Reference< css::xml::sax::XFastAttributeList >& xAttrList, 88 SvXMLStylesContext& rStyles); 89 getData()90 SvXMLNumImpData* getData() { return pData.get(); } 91 92 LanguageType GetLanguageForKey(sal_Int32 nKey); 93 94 // sal_uInt32 GetKeyForName( const OUString& rName ); 95 }; 96 97 // SvXMLNumFmtDefaults is used in import and export 98 99 class SvXMLNumFmtDefaults 100 { 101 public: 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, 107 bool bSystem ); 108 }; 109 110 struct MyCondition 111 { 112 OUString sCondition; 113 OUString sMapName; 114 }; 115 116 class XMLOFF_DLLPUBLIC SvXMLNumFormatContext : public SvXMLStyleContext 117 { 118 public: 119 enum ImplicitCalendar 120 { 121 DEFAULT, 122 SECONDARY, 123 OTHER, 124 DEFAULT_FROM_OTHER, 125 SECONDARY_FROM_OTHER 126 }; 127 128 private: 129 130 SvXMLNumImpData* pData; 131 SvXMLStylesContext* pStyles; 132 std::vector <MyCondition> aMyConditions; 133 SvXMLStylesTokens nType; 134 sal_Int32 nKey; 135 // OUString sFormatName; 136 OUString sFormatTitle; 137 // OUString sMapName; 138 OUString sCalendar; 139 OUString aImplicitCalendar[2]; 140 ImplicitCalendar eImplicitCalendar; 141 LanguageType nFormatLang; 142 bool bAutoOrder; 143 bool bFromSystem; 144 bool bTruncate; 145 bool bAutoDec; // set in AddNumber 146 bool bAutoInt; // set in AddNumber 147 bool bHasExtraText; 148 bool bHasTrailingEmptyText; 149 OUStringBuffer aFormatCode{64}; 150 OUStringBuffer aConditions{32}; 151 bool bHasLongDoW; 152 bool bHasDateTime; 153 bool bRemoveAfterUse; 154 155 // contained date elements, used to recognize default date formats 156 SvXMLDateElementAttributes eDateDOW; 157 SvXMLDateElementAttributes eDateDay; 158 SvXMLDateElementAttributes eDateMonth; 159 SvXMLDateElementAttributes eDateYear; 160 SvXMLDateElementAttributes eDateHours; 161 SvXMLDateElementAttributes eDateMins; 162 SvXMLDateElementAttributes eDateSecs; 163 bool bDateNoDefault; 164 165 SAL_DLLPRIVATE sal_Int32 PrivateGetKey(); 166 167 public: 168 SvXMLNumFormatContext( SvXMLImport& rImport, 169 sal_Int32 nElement, 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, 178 LanguageType nLang, 179 SvXMLStylesContext& rStyles ); 180 virtual ~SvXMLNumFormatContext() override; 181 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; 185 186 sal_Int32 GetKey(); 187 sal_Int32 CreateAndInsert( SvNumberFormatter* pFormatter ); 188 sal_Int32 CreateAndInsert( css::uno::Reference< css::util::XNumberFormatsSupplier > const & xFormatsSupplier ); GetType() const189 SvXMLStylesTokens GetType() const { return nType; } // SvXMLStylesTokens 190 HasLongDoW() const191 bool HasLongDoW() const { return bHasLongDoW; } SetHasLongDoW(bool bSet)192 void SetHasLongDoW(bool bSet) { bHasLongDoW = bSet; } SetHasTrailingEmptyText(bool bSet)193 void SetHasTrailingEmptyText(bool bSet) { bHasTrailingEmptyText = bSet; } 194 195 void UpdateCalendar( const OUString& rNewCalendar ); GetImplicitCalendarState() const196 ImplicitCalendar GetImplicitCalendarState() const { return eImplicitCalendar; } 197 198 const LocaleDataWrapper& GetLocaleData() const; 199 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 ); 204 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 ); 210 211 /// determine whether number format uses the system language 212 bool IsSystemLanguage() const; 213 }; 214 215 #endif 216 217 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ 218