1 // Copyright 2014 PDFium Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style license that can be 3 // found in the LICENSE file. 4 5 // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com 6 7 #ifndef XFA_FGAS_LOCALIZATION_FGAS_LOCALE_H_ 8 #define XFA_FGAS_LOCALIZATION_FGAS_LOCALE_H_ 9 10 #include "core/fxcrt/include/fx_xml.h" 11 #include "xfa/fgas/localization/fgas_datetime.h" 12 13 class CFX_Unitime; 14 15 enum FX_LOCALENUMSYMBOL { 16 FX_LOCALENUMSYMBOL_Decimal, 17 FX_LOCALENUMSYMBOL_Grouping, 18 FX_LOCALENUMSYMBOL_Percent, 19 FX_LOCALENUMSYMBOL_Minus, 20 FX_LOCALENUMSYMBOL_Zero, 21 FX_LOCALENUMSYMBOL_CurrencySymbol, 22 FX_LOCALENUMSYMBOL_CurrencyName, 23 }; 24 enum FX_LOCALEDATETIMESUBCATEGORY { 25 FX_LOCALEDATETIMESUBCATEGORY_Default, 26 FX_LOCALEDATETIMESUBCATEGORY_Short, 27 FX_LOCALEDATETIMESUBCATEGORY_Medium, 28 FX_LOCALEDATETIMESUBCATEGORY_Full, 29 FX_LOCALEDATETIMESUBCATEGORY_Long, 30 }; 31 enum FX_LOCALENUMSUBCATEGORY { 32 FX_LOCALENUMPATTERN_Percent, 33 FX_LOCALENUMPATTERN_Currency, 34 FX_LOCALENUMPATTERN_Decimal, 35 FX_LOCALENUMPATTERN_Integer, 36 }; 37 enum FX_LOCALECATEGORY { 38 FX_LOCALECATEGORY_Unknown, 39 FX_LOCALECATEGORY_Date, 40 FX_LOCALECATEGORY_Time, 41 FX_LOCALECATEGORY_DateTime, 42 FX_LOCALECATEGORY_Num, 43 FX_LOCALECATEGORY_Text, 44 FX_LOCALECATEGORY_Zero, 45 FX_LOCALECATEGORY_Null, 46 }; 47 enum FX_DATETIMETYPE { 48 FX_DATETIMETYPE_Unknown, 49 FX_DATETIMETYPE_Date, 50 FX_DATETIMETYPE_Time, 51 FX_DATETIMETYPE_DateTime, 52 FX_DATETIMETYPE_TimeDate, 53 }; 54 55 class IFX_Locale { 56 public: 57 ~IFX_Locale()58 virtual ~IFX_Locale() {} 59 virtual void Release() = 0; 60 61 virtual CFX_WideString GetName() = 0; 62 63 virtual void GetNumbericSymbol(FX_LOCALENUMSYMBOL eType, 64 CFX_WideString& wsNumSymbol) const = 0; 65 virtual void GetDateTimeSymbols(CFX_WideString& wsDtSymbol) const = 0; 66 virtual void GetMonthName(int32_t nMonth, 67 CFX_WideString& wsMonthName, 68 FX_BOOL bAbbr = TRUE) const = 0; 69 virtual void GetDayName(int32_t nWeek, 70 CFX_WideString& wsDayName, 71 FX_BOOL bAbbr = TRUE) const = 0; 72 virtual void GetMeridiemName(CFX_WideString& wsMeridiemName, 73 FX_BOOL bAM = TRUE) const = 0; 74 virtual void GetTimeZone(FX_TIMEZONE& tz) const = 0; 75 virtual void GetEraName(CFX_WideString& wsEraName, 76 FX_BOOL bAD = TRUE) const = 0; 77 virtual void GetDatePattern(FX_LOCALEDATETIMESUBCATEGORY eType, 78 CFX_WideString& wsPattern) const = 0; 79 virtual void GetTimePattern(FX_LOCALEDATETIMESUBCATEGORY eType, 80 CFX_WideString& wsPattern) const = 0; 81 virtual void GetNumPattern(FX_LOCALENUMSUBCATEGORY eType, 82 CFX_WideString& wsPattern) const = 0; 83 }; 84 85 class IFX_LocaleMgr { 86 public: ~IFX_LocaleMgr()87 virtual ~IFX_LocaleMgr() {} 88 virtual void Release() = 0; 89 virtual uint16_t GetDefLocaleID() = 0; 90 virtual IFX_Locale* GetDefLocale() = 0; 91 virtual IFX_Locale* GetLocale(uint16_t lcid) = 0; 92 virtual IFX_Locale* GetLocaleByName(const CFX_WideString& wsLocaleName) = 0; 93 }; 94 95 FX_BOOL FX_DateFromCanonical(const CFX_WideString& wsDate, 96 CFX_Unitime& datetime); 97 FX_BOOL FX_TimeFromCanonical(const CFX_WideStringC& wsTime, 98 CFX_Unitime& datetime, 99 IFX_Locale* pLocale); 100 class CFX_Decimal { 101 public: 102 CFX_Decimal(); 103 CFX_Decimal(uint32_t val); 104 CFX_Decimal(uint64_t val); 105 CFX_Decimal(int32_t val); 106 CFX_Decimal(int64_t val); 107 CFX_Decimal(FX_FLOAT val, uint8_t scale = 3); 108 CFX_Decimal(const CFX_WideStringC& str); 109 CFX_Decimal(const CFX_ByteStringC& str); 110 operator CFX_WideString() const; 111 operator double() const; 112 bool operator==(const CFX_Decimal& val) const; 113 bool operator<=(const CFX_Decimal& val) const; 114 bool operator>=(const CFX_Decimal& val) const; 115 bool operator!=(const CFX_Decimal& val) const; 116 bool operator<(const CFX_Decimal& val) const; 117 bool operator>(const CFX_Decimal& val) const; 118 CFX_Decimal operator+(const CFX_Decimal& val) const; 119 CFX_Decimal operator-(const CFX_Decimal& val) const; 120 CFX_Decimal operator*(const CFX_Decimal& val) const; 121 CFX_Decimal operator/(const CFX_Decimal& val) const; 122 CFX_Decimal operator%(const CFX_Decimal& val) const; 123 void SetScale(uint8_t newScale); 124 uint8_t GetScale(); 125 void SetAbs(); 126 void SetNegate(); 127 void SetFloor(); 128 void SetCeiling(); 129 void SetTruncate(); 130 131 protected: 132 CFX_Decimal(uint32_t hi, 133 uint32_t mid, 134 uint32_t lo, 135 FX_BOOL neg, 136 uint8_t scale); IsNotZero()137 inline FX_BOOL IsNotZero() const { return m_uHi || m_uMid || m_uLo; } 138 inline int8_t Compare(const CFX_Decimal& val) const; 139 inline void Swap(CFX_Decimal& val); 140 inline void FloorOrCeil(FX_BOOL bFloor); 141 CFX_Decimal AddOrMinus(const CFX_Decimal& val, FX_BOOL isAdding) const; 142 CFX_Decimal Multiply(const CFX_Decimal& val) const; 143 CFX_Decimal Divide(const CFX_Decimal& val) const; 144 CFX_Decimal Modulus(const CFX_Decimal& val) const; 145 uint32_t m_uFlags; 146 uint32_t m_uHi; 147 uint32_t m_uLo; 148 uint32_t m_uMid; 149 }; 150 151 #endif // XFA_FGAS_LOCALIZATION_FGAS_LOCALE_H_ 152