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_FXFA_PARSER_CXFA_LOCALEVALUE_H_
8 #define XFA_FXFA_PARSER_CXFA_LOCALEVALUE_H_
9 
10 #include "core/fxcrt/fx_string.h"
11 #include "core/fxcrt/fx_system.h"
12 #include "xfa/fxfa/cxfa_widgetacc.h"
13 
14 class IFX_Locale;
15 class CFX_DateTime;
16 class CXFA_LocaleMgr;
17 
18 #define XFA_VT_NULL 0
19 #define XFA_VT_BOOLEAN 1
20 #define XFA_VT_INTEGER 2
21 #define XFA_VT_DECIMAL 4
22 #define XFA_VT_FLOAT 8
23 #define XFA_VT_TEXT 16
24 #define XFA_VT_DATE 32
25 #define XFA_VT_TIME 64
26 #define XFA_VT_DATETIME 128
27 
28 class CXFA_LocaleValue {
29  public:
30   CXFA_LocaleValue();
31   CXFA_LocaleValue(const CXFA_LocaleValue& value);
32   CXFA_LocaleValue(uint32_t dwType, CXFA_LocaleMgr* pLocaleMgr);
33   CXFA_LocaleValue(uint32_t dwType,
34                    const WideString& wsValue,
35                    CXFA_LocaleMgr* pLocaleMgr);
36   CXFA_LocaleValue(uint32_t dwType,
37                    const WideString& wsValue,
38                    const WideString& wsFormat,
39                    IFX_Locale* pLocale,
40                    CXFA_LocaleMgr* pLocaleMgr);
41   ~CXFA_LocaleValue();
42   CXFA_LocaleValue& operator=(const CXFA_LocaleValue& value);
43 
44   bool ValidateValue(const WideString& wsValue,
45                      const WideString& wsPattern,
46                      IFX_Locale* pLocale,
47                      WideString* pMatchFormat);
48 
49   bool FormatPatterns(WideString& wsResult,
50                       const WideString& wsFormat,
51                       IFX_Locale* pLocale,
52                       XFA_VALUEPICTURE eValueType) const;
53 
54   void GetNumericFormat(WideString& wsFormat, int32_t nIntLen, int32_t nDecLen);
55   bool ValidateNumericTemp(const WideString& wsNumeric,
56                            const WideString& wsFormat,
57                            IFX_Locale* pLocale);
58 
GetValue()59   WideString GetValue() const { return m_wsValue; }
GetType()60   uint32_t GetType() const { return m_dwType; }
61   double GetDoubleNum() const;
62   bool SetDate(const CFX_DateTime& d);
63   CFX_DateTime GetDate() const;
64   CFX_DateTime GetTime() const;
65 
IsValid()66   bool IsValid() const { return m_bValid; }
67 
68  private:
69   bool FormatSinglePattern(WideString& wsResult,
70                            const WideString& wsFormat,
71                            IFX_Locale* pLocale,
72                            XFA_VALUEPICTURE eValueType) const;
73   bool ValidateCanonicalValue(const WideString& wsValue, uint32_t dwVType);
74   bool ValidateCanonicalDate(const WideString& wsDate, CFX_DateTime* unDate);
75   bool ValidateCanonicalTime(const WideString& wsTime);
76 
77   bool SetTime(const CFX_DateTime& t);
78   bool SetDateTime(const CFX_DateTime& dt);
79 
80   bool ParsePatternValue(const WideString& wsValue,
81                          const WideString& wsPattern,
82                          IFX_Locale* pLocale);
83 
84   CXFA_LocaleMgr* m_pLocaleMgr;
85   WideString m_wsValue;
86   uint32_t m_dwType;
87   bool m_bValid;
88 };
89 
90 #endif  // XFA_FXFA_PARSER_CXFA_LOCALEVALUE_H_
91