blob: b6a6997b6d7c451cdb225e23add98bad1b32dcc1 [file] [log] [blame]
/**************************************************************
*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*
*************************************************************/
#ifndef _XMLOFF_XMLNUMFI_HXX
#define _XMLOFF_XMLNUMFI_HXX
#include "sal/config.h"
#include "xmloff/dllapi.h"
#include "sal/types.h"
#include <com/sun/star/util/XNumberFormatsSupplier.hpp>
#include <com/sun/star/xml/sax/XAttributeList.hpp>
#include <xmloff/xmlstyle.hxx>
#include <rtl/ustrbuf.hxx>
#include <i18npool/lang.h>
#ifndef __SGI_STL_VECTOR
#include <vector>
#endif
#include <unotools/localedatawrapper.hxx>
#define XML_NUMBERSTYLES "NumberStyles"
enum SvXMLStylesTokens
{
XML_TOK_STYLES_NUMBER_STYLE,
XML_TOK_STYLES_CURRENCY_STYLE,
XML_TOK_STYLES_PERCENTAGE_STYLE,
XML_TOK_STYLES_DATE_STYLE,
XML_TOK_STYLES_TIME_STYLE,
XML_TOK_STYLES_BOOLEAN_STYLE,
XML_TOK_STYLES_TEXT_STYLE
};
enum SvXMLDateElementAttributes
{
XML_DEA_NONE,
XML_DEA_ANY,
XML_DEA_SHORT,
XML_DEA_LONG,
XML_DEA_TEXTSHORT,
XML_DEA_TEXTLONG
};
class Color;
class SvXMLNumImpData;
class SvXMLImport;
class SvXMLStyleContext;
class SvXMLStylesContext;
struct SvXMLNumberInfo;
class SvNumberFormatter;
class SvtSysLocale;
// use SvXMLNumFmtHelper in the context for <office:styles> to create
// child contexts for data styles
class SvXMLNumFmtHelper
{
SvXMLNumImpData* pData;
// #110680#
::com::sun::star::uno::Reference< ::com::sun::star::lang::XMultiServiceFactory > mxServiceFactory;
public:
// #110680#
//SvXMLNumFmtHelper( const ::com::sun::star::uno::Reference<
// ::com::sun::star::util::XNumberFormatsSupplier >& rSupp );
//SvXMLNumFmtHelper( SvNumberFormatter* pNumberFormatter );
SvXMLNumFmtHelper(
const ::com::sun::star::uno::Reference< ::com::sun::star::util::XNumberFormatsSupplier >& rSupp,
const ::com::sun::star::uno::Reference< ::com::sun::star::lang::XMultiServiceFactory >& xServiceFactory );
SvXMLNumFmtHelper(
SvNumberFormatter* pNumberFormatter,
const ::com::sun::star::uno::Reference< ::com::sun::star::lang::XMultiServiceFactory >& xServiceFactory );
~SvXMLNumFmtHelper();
SvXMLStyleContext* CreateChildContext( SvXMLImport& rImport,
sal_uInt16 nPrefix, const rtl::OUString& rLocalName,
const ::com::sun::star::uno::Reference<
::com::sun::star::xml::sax::XAttributeList>& xAttrList,
SvXMLStylesContext& rStyles);
SvXMLNumImpData* getData() { return pData; }
const SvXMLTokenMap& GetStylesElemTokenMap();
// sal_uInt32 GetKeyForName( const rtl::OUString& rName );
};
// SvXMLNumFmtDefaults is used in import and export
class SvXMLNumFmtDefaults
{
public:
static sal_Bool IsSystemLongDay( const SvtSysLocale& rSysLoc, sal_Bool bLong );
static sal_Bool IsSystemLongMonth( const SvtSysLocale& rSysLoc, sal_Bool bLong );
static sal_Bool IsSystemTextualMonth( const SvtSysLocale& rSysLoc, sal_Bool bLong );
static sal_Bool IsSystemLongYear( const SvtSysLocale& rSysLoc, sal_Bool bLong );
static sal_Bool IsSystemLongEra( const SvtSysLocale& rSysLoc, sal_Bool bLong );
static sal_Bool IsSystemLongDayOfWeek( const SvtSysLocale& rSysLoc, sal_Bool bLong );
// return value is NfIndexTableOffset
static sal_uInt16 GetDefaultDateFormat( SvXMLDateElementAttributes eDOW,
SvXMLDateElementAttributes eDay, SvXMLDateElementAttributes eMonth,
SvXMLDateElementAttributes eYear, SvXMLDateElementAttributes eHours,
SvXMLDateElementAttributes eMins, SvXMLDateElementAttributes eSecs,
sal_Bool bSystem );
};
struct MyCondition
{
rtl::OUString sCondition;
rtl::OUString sMapName;
};
class XMLOFF_DLLPUBLIC SvXMLNumFormatContext : public SvXMLStyleContext
{
SvXMLNumImpData* pData;
SvXMLStylesContext* pStyles;
std::vector <MyCondition> aMyConditions;
sal_uInt16 nType;
sal_Int32 nKey;
// rtl::OUString sFormatName;
rtl::OUString sFormatTitle;
// rtl::OUString sMapName;
rtl::OUString sCalendar;
rtl::OUString sFormatString;
LanguageType nFormatLang;
com::sun::star::lang::Locale aLocale;
sal_Bool bAutoOrder;
sal_Bool bFromSystem;
sal_Bool bTruncate;
sal_Bool bAutoDec; // set in AddNumber
sal_Bool bAutoInt; // set in AddNumber
sal_Bool bHasExtraText;
rtl::OUStringBuffer aFormatCode;
rtl::OUStringBuffer aConditions;
sal_Bool bHasLongDoW;
sal_Bool bHasEra;
sal_Bool bHasDateTime;
sal_Bool bRemoveAfterUse;
// contained date elements, used to recognize default date formats
SvXMLDateElementAttributes eDateDOW;
SvXMLDateElementAttributes eDateDay;
SvXMLDateElementAttributes eDateMonth;
SvXMLDateElementAttributes eDateYear;
SvXMLDateElementAttributes eDateHours;
SvXMLDateElementAttributes eDateMins;
SvXMLDateElementAttributes eDateSecs;
sal_Bool bDateNoDefault;
SAL_DLLPRIVATE sal_Int32 PrivateGetKey();
public:
SvXMLNumFormatContext( SvXMLImport& rImport, sal_uInt16 nPrfx,
const rtl::OUString& rLName,
SvXMLNumImpData* pNewData, sal_uInt16 nNewType,
const ::com::sun::star::uno::Reference<
::com::sun::star::xml::sax::XAttributeList>& xAttrList,
SvXMLStylesContext& rStyles );
SvXMLNumFormatContext( SvXMLImport& rImport, sal_uInt16 nPrfx,
const rtl::OUString& rLName,
const ::com::sun::star::uno::Reference<
::com::sun::star::xml::sax::XAttributeList>& xAttrList,
const sal_Int32 nKey,
SvXMLStylesContext& rStyles );
virtual ~SvXMLNumFormatContext();
virtual SvXMLImportContext *CreateChildContext( sal_uInt16 nPrefix,
const rtl::OUString& rLocalName,
const ::com::sun::star::uno::Reference<
::com::sun::star::xml::sax::XAttributeList>& xAttrList );
virtual void CreateAndInsert(sal_Bool bOverwrite);
virtual void Finish(sal_Bool bOverwrite);
SvXMLNumImpData* GetData() const { return pData; }
sal_Int32 GetKey();
sal_Int32 CreateAndInsert( SvNumberFormatter* pFormatter );
sal_Int32 CreateAndInsert( com::sun::star::uno::Reference< com::sun::star::util::XNumberFormatsSupplier >& xFormatsSupplier );
sal_uInt16 GetType() const { return nType; } // SvXMLStylesTokens
sal_Bool IsFromSystem() const { return bFromSystem; }
sal_Bool HasLongDoW() const { return bHasLongDoW; }
void SetHasLongDoW(sal_Bool bSet) { bHasLongDoW = bSet; }
sal_Bool HasEra() const { return bHasEra; }
void SetHasEra(sal_Bool bSet) { bHasEra = bSet; }
void UpdateCalendar( const rtl::OUString& rNewCalendar );
const LocaleDataWrapper& GetLocaleData() const;
void AddToCode( const rtl::OUString& rString );
void AddNumber( const SvXMLNumberInfo& rInfo );
void AddCurrency( const rtl::OUString& rContent, LanguageType nLang );
void AddNfKeyword( sal_uInt16 nIndex );
sal_Bool ReplaceNfKeyword( sal_uInt16 nOld, sal_uInt16 nNew );
void AddCondition( const sal_Int32 nIndex );
void AddCondition( const sal_Int32 nIndex, const rtl::OUString& rFormat, const LocaleDataWrapper& rData );
void AddCondition( const rtl::OUString& rCondition, const rtl::OUString& rApplyName );
void AddColor( const Color& rColor );
/// determine whether number format uses the system language
sal_Bool IsSystemLanguage();
};
#endif