OLD | NEW |
1 // Copyright 2014 PDFium Authors. All rights reserved. | 1 // Copyright 2014 PDFium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com | 5 // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com |
6 | 6 |
7 #include "xfa/fxfa/parser/xfa_localevalue.h" | 7 #include "xfa/fxfa/parser/xfa_localevalue.h" |
8 | 8 |
9 #include "xfa/fxfa/fm2js/xfa_fm2jsapi.h" | 9 #include "xfa/fxfa/fm2js/xfa_fm2jsapi.h" |
10 #include "xfa/fxfa/parser/xfa_docdata.h" | 10 #include "xfa/fxfa/parser/xfa_docdata.h" |
(...skipping 25 matching lines...) Expand all Loading... |
36 m_dwType = XFA_VT_NULL; | 36 m_dwType = XFA_VT_NULL; |
37 m_bValid = TRUE; | 37 m_bValid = TRUE; |
38 m_pLocaleMgr = NULL; | 38 m_pLocaleMgr = NULL; |
39 } | 39 } |
40 CXFA_LocaleValue::CXFA_LocaleValue(const CXFA_LocaleValue& value) { | 40 CXFA_LocaleValue::CXFA_LocaleValue(const CXFA_LocaleValue& value) { |
41 m_dwType = XFA_VT_NULL; | 41 m_dwType = XFA_VT_NULL; |
42 m_bValid = TRUE; | 42 m_bValid = TRUE; |
43 m_pLocaleMgr = NULL; | 43 m_pLocaleMgr = NULL; |
44 *this = value; | 44 *this = value; |
45 } | 45 } |
46 CXFA_LocaleValue::CXFA_LocaleValue(FX_DWORD dwType, | 46 CXFA_LocaleValue::CXFA_LocaleValue(uint32_t dwType, |
47 CXFA_LocaleMgr* pLocaleMgr) { | 47 CXFA_LocaleMgr* pLocaleMgr) { |
48 m_dwType = dwType; | 48 m_dwType = dwType; |
49 m_bValid = (m_dwType != XFA_VT_NULL); | 49 m_bValid = (m_dwType != XFA_VT_NULL); |
50 m_pLocaleMgr = pLocaleMgr; | 50 m_pLocaleMgr = pLocaleMgr; |
51 } | 51 } |
52 CXFA_LocaleValue::CXFA_LocaleValue(FX_DWORD dwType, | 52 CXFA_LocaleValue::CXFA_LocaleValue(uint32_t dwType, |
53 const CFX_WideString& wsValue, | 53 const CFX_WideString& wsValue, |
54 CXFA_LocaleMgr* pLocaleMgr) { | 54 CXFA_LocaleMgr* pLocaleMgr) { |
55 m_wsValue = wsValue; | 55 m_wsValue = wsValue; |
56 m_dwType = dwType; | 56 m_dwType = dwType; |
57 m_pLocaleMgr = pLocaleMgr; | 57 m_pLocaleMgr = pLocaleMgr; |
58 m_bValid = ValidateCanonicalValue(wsValue, dwType); | 58 m_bValid = ValidateCanonicalValue(wsValue, dwType); |
59 } | 59 } |
60 CXFA_LocaleValue::CXFA_LocaleValue(FX_DWORD dwType, | 60 CXFA_LocaleValue::CXFA_LocaleValue(uint32_t dwType, |
61 const CFX_WideString& wsValue, | 61 const CFX_WideString& wsValue, |
62 const CFX_WideString& wsFormat, | 62 const CFX_WideString& wsFormat, |
63 IFX_Locale* pLocale, | 63 IFX_Locale* pLocale, |
64 CXFA_LocaleMgr* pLocaleMgr) { | 64 CXFA_LocaleMgr* pLocaleMgr) { |
65 m_pLocaleMgr = pLocaleMgr; | 65 m_pLocaleMgr = pLocaleMgr; |
66 m_bValid = TRUE; | 66 m_bValid = TRUE; |
67 m_dwType = dwType; | 67 m_dwType = dwType; |
68 m_bValid = ParsePatternValue(wsValue, wsFormat, pLocale); | 68 m_bValid = ParsePatternValue(wsValue, wsFormat, pLocale); |
69 } | 69 } |
70 CXFA_LocaleValue& CXFA_LocaleValue::operator=(const CXFA_LocaleValue& value) { | 70 CXFA_LocaleValue& CXFA_LocaleValue::operator=(const CXFA_LocaleValue& value) { |
71 m_wsValue = value.m_wsValue; | 71 m_wsValue = value.m_wsValue; |
72 m_dwType = value.m_dwType; | 72 m_dwType = value.m_dwType; |
73 m_bValid = value.m_bValid; | 73 m_bValid = value.m_bValid; |
74 m_pLocaleMgr = value.m_pLocaleMgr; | 74 m_pLocaleMgr = value.m_pLocaleMgr; |
75 return *this; | 75 return *this; |
76 } | 76 } |
77 CXFA_LocaleValue::~CXFA_LocaleValue() {} | 77 CXFA_LocaleValue::~CXFA_LocaleValue() {} |
78 static FX_LOCALECATEGORY XFA_ValugeCategory(FX_LOCALECATEGORY eCategory, | 78 static FX_LOCALECATEGORY XFA_ValugeCategory(FX_LOCALECATEGORY eCategory, |
79 FX_DWORD dwValueType) { | 79 uint32_t dwValueType) { |
80 if (eCategory == FX_LOCALECATEGORY_Unknown) { | 80 if (eCategory == FX_LOCALECATEGORY_Unknown) { |
81 switch (dwValueType) { | 81 switch (dwValueType) { |
82 case XFA_VT_BOOLEAN: | 82 case XFA_VT_BOOLEAN: |
83 case XFA_VT_INTEGER: | 83 case XFA_VT_INTEGER: |
84 case XFA_VT_DECIMAL: | 84 case XFA_VT_DECIMAL: |
85 case XFA_VT_FLOAT: | 85 case XFA_VT_FLOAT: |
86 return FX_LOCALECATEGORY_Num; | 86 return FX_LOCALECATEGORY_Num; |
87 case XFA_VT_TEXT: | 87 case XFA_VT_TEXT: |
88 return FX_LOCALECATEGORY_Text; | 88 return FX_LOCALECATEGORY_Text; |
89 case XFA_VT_DATE: | 89 case XFA_VT_DATE: |
(...skipping 96 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
186 } | 186 } |
187 pFormat->Release(); | 187 pFormat->Release(); |
188 if (pLocale) { | 188 if (pLocale) { |
189 m_pLocaleMgr->SetDefLocale(locale); | 189 m_pLocaleMgr->SetDefLocale(locale); |
190 } | 190 } |
191 return bRet; | 191 return bRet; |
192 } | 192 } |
193 CFX_WideString CXFA_LocaleValue::GetValue() const { | 193 CFX_WideString CXFA_LocaleValue::GetValue() const { |
194 return m_wsValue; | 194 return m_wsValue; |
195 } | 195 } |
196 FX_DWORD CXFA_LocaleValue::GetType() const { | 196 uint32_t CXFA_LocaleValue::GetType() const { |
197 return m_dwType; | 197 return m_dwType; |
198 } | 198 } |
199 void CXFA_LocaleValue::SetValue(const CFX_WideString& wsValue, | 199 void CXFA_LocaleValue::SetValue(const CFX_WideString& wsValue, |
200 FX_DWORD dwType) { | 200 uint32_t dwType) { |
201 m_wsValue = wsValue; | 201 m_wsValue = wsValue; |
202 m_dwType = dwType; | 202 m_dwType = dwType; |
203 } | 203 } |
204 CFX_WideString CXFA_LocaleValue::GetText() const { | 204 CFX_WideString CXFA_LocaleValue::GetText() const { |
205 if (m_bValid && m_dwType == XFA_VT_TEXT) { | 205 if (m_bValid && m_dwType == XFA_VT_TEXT) { |
206 return m_wsValue; | 206 return m_wsValue; |
207 } | 207 } |
208 return CFX_WideString(); | 208 return CFX_WideString(); |
209 } | 209 } |
210 FX_FLOAT CXFA_LocaleValue::GetNum() const { | 210 FX_FLOAT CXFA_LocaleValue::GetNum() const { |
211 if (m_bValid && (m_dwType == XFA_VT_BOOLEAN || m_dwType == XFA_VT_INTEGER || | 211 if (m_bValid && (m_dwType == XFA_VT_BOOLEAN || m_dwType == XFA_VT_INTEGER || |
212 m_dwType == XFA_VT_DECIMAL || m_dwType == XFA_VT_FLOAT)) { | 212 m_dwType == XFA_VT_DECIMAL || m_dwType == XFA_VT_FLOAT)) { |
213 int64_t nIntegral = 0; | 213 int64_t nIntegral = 0; |
214 FX_DWORD dwFractional = 0; | 214 uint32_t dwFractional = 0; |
215 int32_t nExponent = 0; | 215 int32_t nExponent = 0; |
216 int cc = 0; | 216 int cc = 0; |
217 FX_BOOL bNegative = FALSE, bExpSign = FALSE; | 217 FX_BOOL bNegative = FALSE, bExpSign = FALSE; |
218 const FX_WCHAR* str = (const FX_WCHAR*)m_wsValue; | 218 const FX_WCHAR* str = (const FX_WCHAR*)m_wsValue; |
219 int len = m_wsValue.GetLength(); | 219 int len = m_wsValue.GetLength(); |
220 while (XFA_IsSpace(str[cc]) && cc < len) { | 220 while (XFA_IsSpace(str[cc]) && cc < len) { |
221 cc++; | 221 cc++; |
222 } | 222 } |
223 if (cc >= len) { | 223 if (cc >= len) { |
224 return 0; | 224 return 0; |
(...skipping 20 matching lines...) Expand all Loading... |
245 cc++; | 245 cc++; |
246 while (cc < len) { | 246 while (cc < len) { |
247 fraction += fraction_scales[scale] * (str[cc] - '0'); | 247 fraction += fraction_scales[scale] * (str[cc] - '0'); |
248 scale++; | 248 scale++; |
249 cc++; | 249 cc++; |
250 if (scale == sizeof fraction_scales / sizeof(double) || | 250 if (scale == sizeof fraction_scales / sizeof(double) || |
251 !XFA_IsDigit(str[cc])) { | 251 !XFA_IsDigit(str[cc])) { |
252 break; | 252 break; |
253 } | 253 } |
254 } | 254 } |
255 dwFractional = (FX_DWORD)(fraction * 4294967296.0); | 255 dwFractional = (uint32_t)(fraction * 4294967296.0); |
256 } | 256 } |
257 if (cc < len && (str[cc] == 'E' || str[cc] == 'e')) { | 257 if (cc < len && (str[cc] == 'E' || str[cc] == 'e')) { |
258 cc++; | 258 cc++; |
259 if (cc < len) { | 259 if (cc < len) { |
260 if (str[cc] == '+') { | 260 if (str[cc] == '+') { |
261 cc++; | 261 cc++; |
262 } else if (str[cc] == '-') { | 262 } else if (str[cc] == '-') { |
263 bExpSign = TRUE; | 263 bExpSign = TRUE; |
264 cc++; | 264 cc++; |
265 } | 265 } |
(...skipping 13 matching lines...) Expand all Loading... |
279 fValue *= FXSYS_pow(10, (FX_FLOAT)nExponent); | 279 fValue *= FXSYS_pow(10, (FX_FLOAT)nExponent); |
280 } | 280 } |
281 return fValue; | 281 return fValue; |
282 } | 282 } |
283 return 0; | 283 return 0; |
284 } | 284 } |
285 FX_DOUBLE CXFA_LocaleValue::GetDoubleNum() const { | 285 FX_DOUBLE CXFA_LocaleValue::GetDoubleNum() const { |
286 if (m_bValid && (m_dwType == XFA_VT_BOOLEAN || m_dwType == XFA_VT_INTEGER || | 286 if (m_bValid && (m_dwType == XFA_VT_BOOLEAN || m_dwType == XFA_VT_INTEGER || |
287 m_dwType == XFA_VT_DECIMAL || m_dwType == XFA_VT_FLOAT)) { | 287 m_dwType == XFA_VT_DECIMAL || m_dwType == XFA_VT_FLOAT)) { |
288 int64_t nIntegral = 0; | 288 int64_t nIntegral = 0; |
289 FX_DWORD dwFractional = 0; | 289 uint32_t dwFractional = 0; |
290 int32_t nExponent = 0; | 290 int32_t nExponent = 0; |
291 int32_t cc = 0; | 291 int32_t cc = 0; |
292 FX_BOOL bNegative = FALSE, bExpSign = FALSE; | 292 FX_BOOL bNegative = FALSE, bExpSign = FALSE; |
293 const FX_WCHAR* str = (const FX_WCHAR*)m_wsValue; | 293 const FX_WCHAR* str = (const FX_WCHAR*)m_wsValue; |
294 int len = m_wsValue.GetLength(); | 294 int len = m_wsValue.GetLength(); |
295 while (XFA_IsSpace(str[cc]) && cc < len) { | 295 while (XFA_IsSpace(str[cc]) && cc < len) { |
296 cc++; | 296 cc++; |
297 } | 297 } |
298 if (cc >= len) { | 298 if (cc >= len) { |
299 return 0; | 299 return 0; |
(...skipping 20 matching lines...) Expand all Loading... |
320 cc++; | 320 cc++; |
321 while (cc < len) { | 321 while (cc < len) { |
322 fraction += fraction_scales[scale] * (str[cc] - '0'); | 322 fraction += fraction_scales[scale] * (str[cc] - '0'); |
323 scale++; | 323 scale++; |
324 cc++; | 324 cc++; |
325 if (scale == sizeof fraction_scales / sizeof(FX_DOUBLE) || | 325 if (scale == sizeof fraction_scales / sizeof(FX_DOUBLE) || |
326 !XFA_IsDigit(str[cc])) { | 326 !XFA_IsDigit(str[cc])) { |
327 break; | 327 break; |
328 } | 328 } |
329 } | 329 } |
330 dwFractional = (FX_DWORD)(fraction * 4294967296.0); | 330 dwFractional = (uint32_t)(fraction * 4294967296.0); |
331 } | 331 } |
332 if (cc < len && (str[cc] == 'E' || str[cc] == 'e')) { | 332 if (cc < len && (str[cc] == 'E' || str[cc] == 'e')) { |
333 cc++; | 333 cc++; |
334 if (cc < len) { | 334 if (cc < len) { |
335 if (str[cc] == '+') { | 335 if (str[cc] == '+') { |
336 cc++; | 336 cc++; |
337 } else if (str[cc] == '-') { | 337 } else if (str[cc] == '-') { |
338 bExpSign = TRUE; | 338 bExpSign = TRUE; |
339 cc++; | 339 cc++; |
340 } | 340 } |
(...skipping 203 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
544 nSplitIndex = wsDateTime.Find(' '); | 544 nSplitIndex = wsDateTime.Find(' '); |
545 } | 545 } |
546 if (nSplitIndex < 0) { | 546 if (nSplitIndex < 0) { |
547 return FALSE; | 547 return FALSE; |
548 } | 548 } |
549 wsDate = wsDateTime.Left(nSplitIndex); | 549 wsDate = wsDateTime.Left(nSplitIndex); |
550 wsTime = wsDateTime.Right(wsDateTime.GetLength() - nSplitIndex - 1); | 550 wsTime = wsDateTime.Right(wsDateTime.GetLength() - nSplitIndex - 1); |
551 return TRUE; | 551 return TRUE; |
552 } | 552 } |
553 FX_BOOL CXFA_LocaleValue::ValidateCanonicalValue(const CFX_WideString& wsValue, | 553 FX_BOOL CXFA_LocaleValue::ValidateCanonicalValue(const CFX_WideString& wsValue, |
554 FX_DWORD dwVType) { | 554 uint32_t dwVType) { |
555 if (wsValue.IsEmpty()) { | 555 if (wsValue.IsEmpty()) { |
556 return TRUE; | 556 return TRUE; |
557 } | 557 } |
558 CFX_Unitime dt; | 558 CFX_Unitime dt; |
559 switch (dwVType) { | 559 switch (dwVType) { |
560 case XFA_VT_DATE: { | 560 case XFA_VT_DATE: { |
561 if (ValidateCanonicalDate(wsValue, dt)) { | 561 if (ValidateCanonicalDate(wsValue, dt)) { |
562 return TRUE; | 562 return TRUE; |
563 } | 563 } |
564 CFX_WideString wsDate, wsTime; | 564 CFX_WideString wsDate, wsTime; |
(...skipping 407 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
972 } else if (cf == L'z') { | 972 } else if (cf == L'z') { |
973 nf++; | 973 nf++; |
974 } else { | 974 } else { |
975 return FALSE; | 975 return FALSE; |
976 } | 976 } |
977 } | 977 } |
978 n++; | 978 n++; |
979 } | 979 } |
980 return n == nCount; | 980 return n == nCount; |
981 } | 981 } |
OLD | NEW |