Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(188)

Side by Side Diff: xfa/fxfa/parser/xfa_localevalue.cpp

Issue 2467203003: Remove FX_BOOL from xfa. (Closed)
Patch Set: Created 4 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « xfa/fxfa/parser/xfa_localevalue.h ('k') | xfa/fxfa/parser/xfa_object.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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 "core/fxcrt/fx_ext.h" 9 #include "core/fxcrt/fx_ext.h"
10 #include "xfa/fgas/localization/fgas_localeimp.h" 10 #include "xfa/fgas/localization/fgas_localeimp.h"
(...skipping 13 matching lines...) Expand all
24 0.000000001, 24 0.000000001,
25 0.0000000001, 25 0.0000000001,
26 0.00000000001, 26 0.00000000001,
27 0.000000000001, 27 0.000000000001,
28 0.0000000000001, 28 0.0000000000001,
29 0.00000000000001, 29 0.00000000000001,
30 0.000000000000001, 30 0.000000000000001,
31 0.0000000000000001}; 31 0.0000000000000001};
32 CXFA_LocaleValue::CXFA_LocaleValue() { 32 CXFA_LocaleValue::CXFA_LocaleValue() {
33 m_dwType = XFA_VT_NULL; 33 m_dwType = XFA_VT_NULL;
34 m_bValid = TRUE; 34 m_bValid = true;
35 m_pLocaleMgr = nullptr; 35 m_pLocaleMgr = nullptr;
36 } 36 }
37 CXFA_LocaleValue::CXFA_LocaleValue(const CXFA_LocaleValue& value) { 37 CXFA_LocaleValue::CXFA_LocaleValue(const CXFA_LocaleValue& value) {
38 m_dwType = XFA_VT_NULL; 38 m_dwType = XFA_VT_NULL;
39 m_bValid = TRUE; 39 m_bValid = true;
40 m_pLocaleMgr = nullptr; 40 m_pLocaleMgr = nullptr;
41 *this = value; 41 *this = value;
42 } 42 }
43 CXFA_LocaleValue::CXFA_LocaleValue(uint32_t dwType, 43 CXFA_LocaleValue::CXFA_LocaleValue(uint32_t dwType,
44 CXFA_LocaleMgr* pLocaleMgr) { 44 CXFA_LocaleMgr* pLocaleMgr) {
45 m_dwType = dwType; 45 m_dwType = dwType;
46 m_bValid = (m_dwType != XFA_VT_NULL); 46 m_bValid = (m_dwType != XFA_VT_NULL);
47 m_pLocaleMgr = pLocaleMgr; 47 m_pLocaleMgr = pLocaleMgr;
48 } 48 }
49 CXFA_LocaleValue::CXFA_LocaleValue(uint32_t dwType, 49 CXFA_LocaleValue::CXFA_LocaleValue(uint32_t dwType,
50 const CFX_WideString& wsValue, 50 const CFX_WideString& wsValue,
51 CXFA_LocaleMgr* pLocaleMgr) { 51 CXFA_LocaleMgr* pLocaleMgr) {
52 m_wsValue = wsValue; 52 m_wsValue = wsValue;
53 m_dwType = dwType; 53 m_dwType = dwType;
54 m_pLocaleMgr = pLocaleMgr; 54 m_pLocaleMgr = pLocaleMgr;
55 m_bValid = ValidateCanonicalValue(wsValue, dwType); 55 m_bValid = ValidateCanonicalValue(wsValue, dwType);
56 } 56 }
57 CXFA_LocaleValue::CXFA_LocaleValue(uint32_t dwType, 57 CXFA_LocaleValue::CXFA_LocaleValue(uint32_t dwType,
58 const CFX_WideString& wsValue, 58 const CFX_WideString& wsValue,
59 const CFX_WideString& wsFormat, 59 const CFX_WideString& wsFormat,
60 IFX_Locale* pLocale, 60 IFX_Locale* pLocale,
61 CXFA_LocaleMgr* pLocaleMgr) { 61 CXFA_LocaleMgr* pLocaleMgr) {
62 m_pLocaleMgr = pLocaleMgr; 62 m_pLocaleMgr = pLocaleMgr;
63 m_bValid = TRUE; 63 m_bValid = true;
64 m_dwType = dwType; 64 m_dwType = dwType;
65 m_bValid = ParsePatternValue(wsValue, wsFormat, pLocale); 65 m_bValid = ParsePatternValue(wsValue, wsFormat, pLocale);
66 } 66 }
67 CXFA_LocaleValue& CXFA_LocaleValue::operator=(const CXFA_LocaleValue& value) { 67 CXFA_LocaleValue& CXFA_LocaleValue::operator=(const CXFA_LocaleValue& value) {
68 m_wsValue = value.m_wsValue; 68 m_wsValue = value.m_wsValue;
69 m_dwType = value.m_dwType; 69 m_dwType = value.m_dwType;
70 m_bValid = value.m_bValid; 70 m_bValid = value.m_bValid;
71 m_pLocaleMgr = value.m_pLocaleMgr; 71 m_pLocaleMgr = value.m_pLocaleMgr;
72 return *this; 72 return *this;
73 } 73 }
(...skipping 12 matching lines...) Expand all
86 case XFA_VT_DATE: 86 case XFA_VT_DATE:
87 return FX_LOCALECATEGORY_Date; 87 return FX_LOCALECATEGORY_Date;
88 case XFA_VT_TIME: 88 case XFA_VT_TIME:
89 return FX_LOCALECATEGORY_Time; 89 return FX_LOCALECATEGORY_Time;
90 case XFA_VT_DATETIME: 90 case XFA_VT_DATETIME:
91 return FX_LOCALECATEGORY_DateTime; 91 return FX_LOCALECATEGORY_DateTime;
92 } 92 }
93 } 93 }
94 return eCategory; 94 return eCategory;
95 } 95 }
96 FX_BOOL CXFA_LocaleValue::ValidateValue(const CFX_WideString& wsValue, 96 bool CXFA_LocaleValue::ValidateValue(const CFX_WideString& wsValue,
97 const CFX_WideString& wsPattern, 97 const CFX_WideString& wsPattern,
98 IFX_Locale* pLocale, 98 IFX_Locale* pLocale,
99 CFX_WideString* pMatchFormat) { 99 CFX_WideString* pMatchFormat) {
100 CFX_WideString wsOutput; 100 CFX_WideString wsOutput;
101 IFX_Locale* locale = m_pLocaleMgr->GetDefLocale(); 101 IFX_Locale* locale = m_pLocaleMgr->GetDefLocale();
102 if (pLocale) { 102 if (pLocale) {
103 m_pLocaleMgr->SetDefLocale(pLocale); 103 m_pLocaleMgr->SetDefLocale(pLocale);
104 } 104 }
105 CFX_FormatString* pFormat = nullptr; 105 CFX_FormatString* pFormat = nullptr;
106 if (m_pLocaleMgr) 106 if (m_pLocaleMgr)
107 pFormat = new CFX_FormatString(m_pLocaleMgr, FALSE); 107 pFormat = new CFX_FormatString(m_pLocaleMgr, false);
108 108
109 CFX_WideStringArray wsPatterns; 109 CFX_WideStringArray wsPatterns;
110 pFormat->SplitFormatString(wsPattern, wsPatterns); 110 pFormat->SplitFormatString(wsPattern, wsPatterns);
111 FX_BOOL bRet = FALSE; 111 bool bRet = false;
112 int32_t iCount = wsPatterns.GetSize(); 112 int32_t iCount = wsPatterns.GetSize();
113 int32_t i = 0; 113 int32_t i = 0;
114 for (; i < iCount && !bRet; i++) { 114 for (; i < iCount && !bRet; i++) {
115 CFX_WideString wsFormat = wsPatterns[i]; 115 CFX_WideString wsFormat = wsPatterns[i];
116 FX_LOCALECATEGORY eCategory = pFormat->GetCategory(wsFormat); 116 FX_LOCALECATEGORY eCategory = pFormat->GetCategory(wsFormat);
117 eCategory = XFA_ValugeCategory(eCategory, m_dwType); 117 eCategory = XFA_ValugeCategory(eCategory, m_dwType);
118 switch (eCategory) { 118 switch (eCategory) {
119 case FX_LOCALECATEGORY_Null: 119 case FX_LOCALECATEGORY_Null:
120 bRet = pFormat->ParseNull(wsValue, wsFormat); 120 bRet = pFormat->ParseNull(wsValue, wsFormat);
121 if (!bRet) { 121 if (!bRet) {
(...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after
170 CFX_Unitime dt; 170 CFX_Unitime dt;
171 bRet = pFormat->ParseDateTime(wsValue, wsFormat, 171 bRet = pFormat->ParseDateTime(wsValue, wsFormat,
172 FX_DATETIMETYPE_DateTime, dt); 172 FX_DATETIMETYPE_DateTime, dt);
173 if (!bRet) { 173 if (!bRet) {
174 bRet = pFormat->FormatDateTime(wsValue, wsFormat, wsOutput, 174 bRet = pFormat->FormatDateTime(wsValue, wsFormat, wsOutput,
175 FX_DATETIMETYPE_DateTime); 175 FX_DATETIMETYPE_DateTime);
176 } 176 }
177 break; 177 break;
178 } 178 }
179 default: 179 default:
180 bRet = FALSE; 180 bRet = false;
181 break; 181 break;
182 } 182 }
183 } 183 }
184 if (bRet && pMatchFormat) { 184 if (bRet && pMatchFormat) {
185 *pMatchFormat = wsPatterns[i - 1]; 185 *pMatchFormat = wsPatterns[i - 1];
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 }
(...skipping 16 matching lines...) Expand all
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 uint32_t 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 bool bNegative = false, bExpSign = false;
218 const FX_WCHAR* str = m_wsValue.c_str(); 218 const FX_WCHAR* str = m_wsValue.c_str();
219 int len = m_wsValue.GetLength(); 219 int len = m_wsValue.GetLength();
220 while (FXSYS_iswspace(str[cc]) && cc < len) { 220 while (FXSYS_iswspace(str[cc]) && cc < len) {
221 cc++; 221 cc++;
222 } 222 }
223 if (cc >= len) { 223 if (cc >= len) {
224 return 0; 224 return 0;
225 } 225 }
226 if (str[0] == '+') { 226 if (str[0] == '+') {
227 cc++; 227 cc++;
228 } else if (str[0] == '-') { 228 } else if (str[0] == '-') {
229 bNegative = TRUE; 229 bNegative = true;
230 cc++; 230 cc++;
231 } 231 }
232 int nIntegralLen = 0; 232 int nIntegralLen = 0;
233 while (cc < len) { 233 while (cc < len) {
234 if (str[cc] == '.' || !FXSYS_isDecimalDigit(str[cc]) || 234 if (str[cc] == '.' || !FXSYS_isDecimalDigit(str[cc]) ||
235 nIntegralLen > 17) { 235 nIntegralLen > 17) {
236 break; 236 break;
237 } 237 }
238 nIntegral = nIntegral * 10 + str[cc] - '0'; 238 nIntegral = nIntegral * 10 + str[cc] - '0';
239 cc++; 239 cc++;
(...skipping 14 matching lines...) Expand all
254 } 254 }
255 } 255 }
256 dwFractional = (uint32_t)(fraction * 4294967296.0); 256 dwFractional = (uint32_t)(fraction * 4294967296.0);
257 } 257 }
258 if (cc < len && (str[cc] == 'E' || str[cc] == 'e')) { 258 if (cc < len && (str[cc] == 'E' || str[cc] == 'e')) {
259 cc++; 259 cc++;
260 if (cc < len) { 260 if (cc < len) {
261 if (str[cc] == '+') { 261 if (str[cc] == '+') {
262 cc++; 262 cc++;
263 } else if (str[cc] == '-') { 263 } else if (str[cc] == '-') {
264 bExpSign = TRUE; 264 bExpSign = true;
265 cc++; 265 cc++;
266 } 266 }
267 } 267 }
268 while (cc < len) { 268 while (cc < len) {
269 if (str[cc] == '.' || !FXSYS_isDecimalDigit(str[cc])) { 269 if (str[cc] == '.' || !FXSYS_isDecimalDigit(str[cc])) {
270 break; 270 break;
271 } 271 }
272 nExponent = nExponent * 10 + str[cc] - '0'; 272 nExponent = nExponent * 10 + str[cc] - '0';
273 cc++; 273 cc++;
274 } 274 }
275 nExponent = bExpSign ? -nExponent : nExponent; 275 nExponent = bExpSign ? -nExponent : nExponent;
276 } 276 }
277 FX_FLOAT fValue = (FX_FLOAT)(dwFractional / 4294967296.0); 277 FX_FLOAT fValue = (FX_FLOAT)(dwFractional / 4294967296.0);
278 fValue = nIntegral + (nIntegral >= 0 ? fValue : -fValue); 278 fValue = nIntegral + (nIntegral >= 0 ? fValue : -fValue);
279 if (nExponent != 0) { 279 if (nExponent != 0) {
280 fValue *= FXSYS_pow(10, (FX_FLOAT)nExponent); 280 fValue *= FXSYS_pow(10, (FX_FLOAT)nExponent);
281 } 281 }
282 return fValue; 282 return fValue;
283 } 283 }
284 return 0; 284 return 0;
285 } 285 }
286 FX_DOUBLE CXFA_LocaleValue::GetDoubleNum() const { 286 FX_DOUBLE CXFA_LocaleValue::GetDoubleNum() const {
287 if (m_bValid && (m_dwType == XFA_VT_BOOLEAN || m_dwType == XFA_VT_INTEGER || 287 if (m_bValid && (m_dwType == XFA_VT_BOOLEAN || m_dwType == XFA_VT_INTEGER ||
288 m_dwType == XFA_VT_DECIMAL || m_dwType == XFA_VT_FLOAT)) { 288 m_dwType == XFA_VT_DECIMAL || m_dwType == XFA_VT_FLOAT)) {
289 int64_t nIntegral = 0; 289 int64_t nIntegral = 0;
290 uint32_t dwFractional = 0; 290 uint32_t dwFractional = 0;
291 int32_t nExponent = 0; 291 int32_t nExponent = 0;
292 int32_t cc = 0; 292 int32_t cc = 0;
293 FX_BOOL bNegative = FALSE, bExpSign = FALSE; 293 bool bNegative = false, bExpSign = false;
294 const FX_WCHAR* str = m_wsValue.c_str(); 294 const FX_WCHAR* str = m_wsValue.c_str();
295 int len = m_wsValue.GetLength(); 295 int len = m_wsValue.GetLength();
296 while (FXSYS_iswspace(str[cc]) && cc < len) { 296 while (FXSYS_iswspace(str[cc]) && cc < len) {
297 cc++; 297 cc++;
298 } 298 }
299 if (cc >= len) { 299 if (cc >= len) {
300 return 0; 300 return 0;
301 } 301 }
302 if (str[0] == '+') { 302 if (str[0] == '+') {
303 cc++; 303 cc++;
304 } else if (str[0] == '-') { 304 } else if (str[0] == '-') {
305 bNegative = TRUE; 305 bNegative = true;
306 cc++; 306 cc++;
307 } 307 }
308 int32_t nIntegralLen = 0; 308 int32_t nIntegralLen = 0;
309 while (cc < len) { 309 while (cc < len) {
310 if (str[cc] == '.' || !FXSYS_isDecimalDigit(str[cc]) || 310 if (str[cc] == '.' || !FXSYS_isDecimalDigit(str[cc]) ||
311 nIntegralLen > 17) { 311 nIntegralLen > 17) {
312 break; 312 break;
313 } 313 }
314 nIntegral = nIntegral * 10 + str[cc] - '0'; 314 nIntegral = nIntegral * 10 + str[cc] - '0';
315 cc++; 315 cc++;
(...skipping 14 matching lines...) Expand all
330 } 330 }
331 } 331 }
332 dwFractional = (uint32_t)(fraction * 4294967296.0); 332 dwFractional = (uint32_t)(fraction * 4294967296.0);
333 } 333 }
334 if (cc < len && (str[cc] == 'E' || str[cc] == 'e')) { 334 if (cc < len && (str[cc] == 'E' || str[cc] == 'e')) {
335 cc++; 335 cc++;
336 if (cc < len) { 336 if (cc < len) {
337 if (str[cc] == '+') { 337 if (str[cc] == '+') {
338 cc++; 338 cc++;
339 } else if (str[cc] == '-') { 339 } else if (str[cc] == '-') {
340 bExpSign = TRUE; 340 bExpSign = true;
341 cc++; 341 cc++;
342 } 342 }
343 } 343 }
344 while (cc < len) { 344 while (cc < len) {
345 if (str[cc] == '.' || !FXSYS_isDecimalDigit(str[cc])) { 345 if (str[cc] == '.' || !FXSYS_isDecimalDigit(str[cc])) {
346 break; 346 break;
347 } 347 }
348 nExponent = nExponent * 10 + str[cc] - '0'; 348 nExponent = nExponent * 10 + str[cc] - '0';
349 cc++; 349 cc++;
350 } 350 }
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after
383 CFX_Unitime dt; 383 CFX_Unitime dt;
384 FX_DateFromCanonical(m_wsValue.Left(index), dt); 384 FX_DateFromCanonical(m_wsValue.Left(index), dt);
385 ASSERT(m_pLocaleMgr); 385 ASSERT(m_pLocaleMgr);
386 FX_TimeFromCanonical( 386 FX_TimeFromCanonical(
387 m_wsValue.Right(m_wsValue.GetLength() - index - 1).AsStringC(), dt, 387 m_wsValue.Right(m_wsValue.GetLength() - index - 1).AsStringC(), dt,
388 m_pLocaleMgr->GetDefLocale()); 388 m_pLocaleMgr->GetDefLocale());
389 return dt; 389 return dt;
390 } 390 }
391 return CFX_Unitime(); 391 return CFX_Unitime();
392 } 392 }
393 FX_BOOL CXFA_LocaleValue::SetText(const CFX_WideString& wsText) { 393 bool CXFA_LocaleValue::SetText(const CFX_WideString& wsText) {
394 m_dwType = XFA_VT_TEXT; 394 m_dwType = XFA_VT_TEXT;
395 m_wsValue = wsText; 395 m_wsValue = wsText;
396 return TRUE; 396 return true;
397 } 397 }
398 FX_BOOL CXFA_LocaleValue::SetText(const CFX_WideString& wsText, 398 bool CXFA_LocaleValue::SetText(const CFX_WideString& wsText,
399 const CFX_WideString& wsFormat, 399 const CFX_WideString& wsFormat,
400 IFX_Locale* pLocale) { 400 IFX_Locale* pLocale) {
401 m_dwType = XFA_VT_TEXT; 401 m_dwType = XFA_VT_TEXT;
402 return m_bValid = ParsePatternValue(wsText, wsFormat, pLocale); 402 return m_bValid = ParsePatternValue(wsText, wsFormat, pLocale);
403 } 403 }
404 FX_BOOL CXFA_LocaleValue::SetNum(FX_FLOAT fNum) { 404 bool CXFA_LocaleValue::SetNum(FX_FLOAT fNum) {
405 m_dwType = XFA_VT_FLOAT; 405 m_dwType = XFA_VT_FLOAT;
406 m_wsValue.Format(L"%.8g", (FX_DOUBLE)fNum); 406 m_wsValue.Format(L"%.8g", (FX_DOUBLE)fNum);
407 return TRUE; 407 return true;
408 } 408 }
409 FX_BOOL CXFA_LocaleValue::SetNum(const CFX_WideString& wsNum, 409 bool CXFA_LocaleValue::SetNum(const CFX_WideString& wsNum,
410 const CFX_WideString& wsFormat, 410 const CFX_WideString& wsFormat,
411 IFX_Locale* pLocale) { 411 IFX_Locale* pLocale) {
412 m_dwType = XFA_VT_FLOAT; 412 m_dwType = XFA_VT_FLOAT;
413 return m_bValid = ParsePatternValue(wsNum, wsFormat, pLocale); 413 return m_bValid = ParsePatternValue(wsNum, wsFormat, pLocale);
414 } 414 }
415 FX_BOOL CXFA_LocaleValue::SetDate(const CFX_Unitime& d) { 415 bool CXFA_LocaleValue::SetDate(const CFX_Unitime& d) {
416 m_dwType = XFA_VT_DATE; 416 m_dwType = XFA_VT_DATE;
417 m_wsValue.Format(L"%04d-%02d-%02d", d.GetYear(), d.GetMonth(), d.GetDay()); 417 m_wsValue.Format(L"%04d-%02d-%02d", d.GetYear(), d.GetMonth(), d.GetDay());
418 return TRUE; 418 return true;
419 } 419 }
420 FX_BOOL CXFA_LocaleValue::SetDate(const CFX_WideString& wsDate, 420 bool CXFA_LocaleValue::SetDate(const CFX_WideString& wsDate,
421 const CFX_WideString& wsFormat, 421 const CFX_WideString& wsFormat,
422 IFX_Locale* pLocale) { 422 IFX_Locale* pLocale) {
423 m_dwType = XFA_VT_DATE; 423 m_dwType = XFA_VT_DATE;
424 return m_bValid = ParsePatternValue(wsDate, wsFormat, pLocale); 424 return m_bValid = ParsePatternValue(wsDate, wsFormat, pLocale);
425 } 425 }
426 FX_BOOL CXFA_LocaleValue::SetTime(const CFX_Unitime& t) { 426 bool CXFA_LocaleValue::SetTime(const CFX_Unitime& t) {
427 m_dwType = XFA_VT_TIME; 427 m_dwType = XFA_VT_TIME;
428 m_wsValue.Format(L"%02d:%02d:%02d", t.GetHour(), t.GetMinute(), 428 m_wsValue.Format(L"%02d:%02d:%02d", t.GetHour(), t.GetMinute(),
429 t.GetSecond()); 429 t.GetSecond());
430 if (t.GetMillisecond() > 0) { 430 if (t.GetMillisecond() > 0) {
431 CFX_WideString wsTemp; 431 CFX_WideString wsTemp;
432 wsTemp.Format(L"%:03d", t.GetMillisecond()); 432 wsTemp.Format(L"%:03d", t.GetMillisecond());
433 m_wsValue += wsTemp; 433 m_wsValue += wsTemp;
434 } 434 }
435 return TRUE; 435 return true;
436 } 436 }
437 FX_BOOL CXFA_LocaleValue::SetTime(const CFX_WideString& wsTime, 437 bool CXFA_LocaleValue::SetTime(const CFX_WideString& wsTime,
438 const CFX_WideString& wsFormat, 438 const CFX_WideString& wsFormat,
439 IFX_Locale* pLocale) { 439 IFX_Locale* pLocale) {
440 m_dwType = XFA_VT_TIME; 440 m_dwType = XFA_VT_TIME;
441 return m_bValid = ParsePatternValue(wsTime, wsFormat, pLocale); 441 return m_bValid = ParsePatternValue(wsTime, wsFormat, pLocale);
442 } 442 }
443 FX_BOOL CXFA_LocaleValue::SetDateTime(const CFX_Unitime& dt) { 443 bool CXFA_LocaleValue::SetDateTime(const CFX_Unitime& dt) {
444 m_dwType = XFA_VT_DATETIME; 444 m_dwType = XFA_VT_DATETIME;
445 m_wsValue.Format(L"%04d-%02d-%02dT%02d:%02d:%02d", dt.GetYear(), 445 m_wsValue.Format(L"%04d-%02d-%02dT%02d:%02d:%02d", dt.GetYear(),
446 dt.GetMonth(), dt.GetDay(), dt.GetHour(), dt.GetMinute(), 446 dt.GetMonth(), dt.GetDay(), dt.GetHour(), dt.GetMinute(),
447 dt.GetSecond()); 447 dt.GetSecond());
448 if (dt.GetMillisecond() > 0) { 448 if (dt.GetMillisecond() > 0) {
449 CFX_WideString wsTemp; 449 CFX_WideString wsTemp;
450 wsTemp.Format(L"%:03d", dt.GetMillisecond()); 450 wsTemp.Format(L"%:03d", dt.GetMillisecond());
451 m_wsValue += wsTemp; 451 m_wsValue += wsTemp;
452 } 452 }
453 return TRUE; 453 return true;
454 } 454 }
455 FX_BOOL CXFA_LocaleValue::SetDateTime(const CFX_WideString& wsDateTime, 455 bool CXFA_LocaleValue::SetDateTime(const CFX_WideString& wsDateTime,
456 const CFX_WideString& wsFormat, 456 const CFX_WideString& wsFormat,
457 IFX_Locale* pLocale) { 457 IFX_Locale* pLocale) {
458 m_dwType = XFA_VT_DATETIME; 458 m_dwType = XFA_VT_DATETIME;
459 return m_bValid = ParsePatternValue(wsDateTime, wsFormat, pLocale); 459 return m_bValid = ParsePatternValue(wsDateTime, wsFormat, pLocale);
460 } 460 }
461 FX_BOOL CXFA_LocaleValue::FormatPatterns(CFX_WideString& wsResult, 461 bool CXFA_LocaleValue::FormatPatterns(CFX_WideString& wsResult,
462 const CFX_WideString& wsFormat, 462 const CFX_WideString& wsFormat,
463 IFX_Locale* pLocale, 463 IFX_Locale* pLocale,
464 XFA_VALUEPICTURE eValueType) const { 464 XFA_VALUEPICTURE eValueType) const {
465 wsResult.clear(); 465 wsResult.clear();
466 FX_BOOL bRet = FALSE; 466 bool bRet = false;
467 467
468 CFX_FormatString* pFormat = nullptr; 468 CFX_FormatString* pFormat = nullptr;
469 if (m_pLocaleMgr) 469 if (m_pLocaleMgr)
470 pFormat = new CFX_FormatString(m_pLocaleMgr, FALSE); 470 pFormat = new CFX_FormatString(m_pLocaleMgr, false);
471 471
472 CFX_WideStringArray wsPatterns; 472 CFX_WideStringArray wsPatterns;
473 pFormat->SplitFormatString(wsFormat, wsPatterns); 473 pFormat->SplitFormatString(wsFormat, wsPatterns);
474 int32_t iCount = wsPatterns.GetSize(); 474 int32_t iCount = wsPatterns.GetSize();
475 for (int32_t i = 0; i < iCount; i++) { 475 for (int32_t i = 0; i < iCount; i++) {
476 bRet = FormatSinglePattern(wsResult, wsPatterns[i], pLocale, eValueType); 476 bRet = FormatSinglePattern(wsResult, wsPatterns[i], pLocale, eValueType);
477 if (bRet) { 477 if (bRet) {
478 break; 478 break;
479 } 479 }
480 } 480 }
481 pFormat->Release(); 481 pFormat->Release();
482 return bRet; 482 return bRet;
483 } 483 }
484 FX_BOOL CXFA_LocaleValue::FormatSinglePattern( 484 bool CXFA_LocaleValue::FormatSinglePattern(CFX_WideString& wsResult,
485 CFX_WideString& wsResult, 485 const CFX_WideString& wsFormat,
486 const CFX_WideString& wsFormat, 486 IFX_Locale* pLocale,
487 IFX_Locale* pLocale, 487 XFA_VALUEPICTURE eValueType) const {
488 XFA_VALUEPICTURE eValueType) const {
489 IFX_Locale* locale = m_pLocaleMgr->GetDefLocale(); 488 IFX_Locale* locale = m_pLocaleMgr->GetDefLocale();
490 if (pLocale) { 489 if (pLocale) {
491 m_pLocaleMgr->SetDefLocale(pLocale); 490 m_pLocaleMgr->SetDefLocale(pLocale);
492 } 491 }
493 wsResult.clear(); 492 wsResult.clear();
494 FX_BOOL bRet = FALSE; 493 bool bRet = false;
495 494
496 CFX_FormatString* pFormat = nullptr; 495 CFX_FormatString* pFormat = nullptr;
497 if (m_pLocaleMgr) 496 if (m_pLocaleMgr)
498 pFormat = new CFX_FormatString(m_pLocaleMgr, FALSE); 497 pFormat = new CFX_FormatString(m_pLocaleMgr, false);
499 498
500 FX_LOCALECATEGORY eCategory = pFormat->GetCategory(wsFormat); 499 FX_LOCALECATEGORY eCategory = pFormat->GetCategory(wsFormat);
501 eCategory = XFA_ValugeCategory(eCategory, m_dwType); 500 eCategory = XFA_ValugeCategory(eCategory, m_dwType);
502 switch (eCategory) { 501 switch (eCategory) {
503 case FX_LOCALECATEGORY_Null: 502 case FX_LOCALECATEGORY_Null:
504 if (m_wsValue.IsEmpty()) { 503 if (m_wsValue.IsEmpty()) {
505 bRet = pFormat->FormatNull(wsFormat, wsResult); 504 bRet = pFormat->FormatNull(wsFormat, wsResult);
506 } 505 }
507 break; 506 break;
508 case FX_LOCALECATEGORY_Zero: 507 case FX_LOCALECATEGORY_Zero:
(...skipping 14 matching lines...) Expand all
523 case FX_LOCALECATEGORY_Time: 522 case FX_LOCALECATEGORY_Time:
524 bRet = pFormat->FormatDateTime(m_wsValue, wsFormat, wsResult, 523 bRet = pFormat->FormatDateTime(m_wsValue, wsFormat, wsResult,
525 FX_DATETIMETYPE_Time); 524 FX_DATETIMETYPE_Time);
526 break; 525 break;
527 case FX_LOCALECATEGORY_DateTime: 526 case FX_LOCALECATEGORY_DateTime:
528 bRet = pFormat->FormatDateTime(m_wsValue, wsFormat, wsResult, 527 bRet = pFormat->FormatDateTime(m_wsValue, wsFormat, wsResult,
529 FX_DATETIMETYPE_DateTime); 528 FX_DATETIMETYPE_DateTime);
530 break; 529 break;
531 default: 530 default:
532 wsResult = m_wsValue; 531 wsResult = m_wsValue;
533 bRet = TRUE; 532 bRet = true;
534 } 533 }
535 pFormat->Release(); 534 pFormat->Release();
536 if (!bRet && (eCategory != FX_LOCALECATEGORY_Num || 535 if (!bRet && (eCategory != FX_LOCALECATEGORY_Num ||
537 eValueType != XFA_VALUEPICTURE_Display)) { 536 eValueType != XFA_VALUEPICTURE_Display)) {
538 wsResult = m_wsValue; 537 wsResult = m_wsValue;
539 } 538 }
540 if (pLocale) { 539 if (pLocale) {
541 m_pLocaleMgr->SetDefLocale(locale); 540 m_pLocaleMgr->SetDefLocale(locale);
542 } 541 }
543 return bRet; 542 return bRet;
544 } 543 }
545 static FX_BOOL XFA_ValueSplitDateTime(const CFX_WideString& wsDateTime, 544 static bool XFA_ValueSplitDateTime(const CFX_WideString& wsDateTime,
546 CFX_WideString& wsDate, 545 CFX_WideString& wsDate,
547 CFX_WideString& wsTime) { 546 CFX_WideString& wsTime) {
548 wsDate = L""; 547 wsDate = L"";
549 wsTime = L""; 548 wsTime = L"";
550 if (wsDateTime.IsEmpty()) { 549 if (wsDateTime.IsEmpty()) {
551 return FALSE; 550 return false;
552 } 551 }
553 int nSplitIndex = -1; 552 int nSplitIndex = -1;
554 nSplitIndex = wsDateTime.Find('T'); 553 nSplitIndex = wsDateTime.Find('T');
555 if (nSplitIndex < 0) { 554 if (nSplitIndex < 0) {
556 nSplitIndex = wsDateTime.Find(' '); 555 nSplitIndex = wsDateTime.Find(' ');
557 } 556 }
558 if (nSplitIndex < 0) { 557 if (nSplitIndex < 0) {
559 return FALSE; 558 return false;
560 } 559 }
561 wsDate = wsDateTime.Left(nSplitIndex); 560 wsDate = wsDateTime.Left(nSplitIndex);
562 wsTime = wsDateTime.Right(wsDateTime.GetLength() - nSplitIndex - 1); 561 wsTime = wsDateTime.Right(wsDateTime.GetLength() - nSplitIndex - 1);
563 return TRUE; 562 return true;
564 } 563 }
565 FX_BOOL CXFA_LocaleValue::ValidateCanonicalValue(const CFX_WideString& wsValue, 564 bool CXFA_LocaleValue::ValidateCanonicalValue(const CFX_WideString& wsValue,
566 uint32_t dwVType) { 565 uint32_t dwVType) {
567 if (wsValue.IsEmpty()) { 566 if (wsValue.IsEmpty()) {
568 return TRUE; 567 return true;
569 } 568 }
570 CFX_Unitime dt; 569 CFX_Unitime dt;
571 switch (dwVType) { 570 switch (dwVType) {
572 case XFA_VT_DATE: { 571 case XFA_VT_DATE: {
573 if (ValidateCanonicalDate(wsValue, dt)) { 572 if (ValidateCanonicalDate(wsValue, dt)) {
574 return TRUE; 573 return true;
575 } 574 }
576 CFX_WideString wsDate, wsTime; 575 CFX_WideString wsDate, wsTime;
577 if (XFA_ValueSplitDateTime(wsValue, wsDate, wsTime) && 576 if (XFA_ValueSplitDateTime(wsValue, wsDate, wsTime) &&
578 ValidateCanonicalDate(wsDate, dt)) { 577 ValidateCanonicalDate(wsDate, dt)) {
579 return TRUE; 578 return true;
580 } 579 }
581 return FALSE; 580 return false;
582 } 581 }
583 case XFA_VT_TIME: { 582 case XFA_VT_TIME: {
584 if (ValidateCanonicalTime(wsValue)) { 583 if (ValidateCanonicalTime(wsValue)) {
585 return TRUE; 584 return true;
586 } 585 }
587 CFX_WideString wsDate, wsTime; 586 CFX_WideString wsDate, wsTime;
588 if (XFA_ValueSplitDateTime(wsValue, wsDate, wsTime) && 587 if (XFA_ValueSplitDateTime(wsValue, wsDate, wsTime) &&
589 ValidateCanonicalTime(wsTime)) { 588 ValidateCanonicalTime(wsTime)) {
590 return TRUE; 589 return true;
591 } 590 }
592 return FALSE; 591 return false;
593 } 592 }
594 case XFA_VT_DATETIME: { 593 case XFA_VT_DATETIME: {
595 CFX_WideString wsDate, wsTime; 594 CFX_WideString wsDate, wsTime;
596 if (XFA_ValueSplitDateTime(wsValue, wsDate, wsTime) && 595 if (XFA_ValueSplitDateTime(wsValue, wsDate, wsTime) &&
597 ValidateCanonicalDate(wsDate, dt) && ValidateCanonicalTime(wsTime)) { 596 ValidateCanonicalDate(wsDate, dt) && ValidateCanonicalTime(wsTime)) {
598 return TRUE; 597 return true;
599 } 598 }
600 } break; 599 } break;
601 } 600 }
602 return TRUE; 601 return true;
603 } 602 }
604 FX_BOOL CXFA_LocaleValue::ValidateCanonicalDate(const CFX_WideString& wsDate, 603 bool CXFA_LocaleValue::ValidateCanonicalDate(const CFX_WideString& wsDate,
605 CFX_Unitime& unDate) { 604 CFX_Unitime& unDate) {
606 const uint16_t LastDay[12] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}; 605 const uint16_t LastDay[12] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
607 const uint16_t wCountY = 4, wCountM = 2, wCountD = 2; 606 const uint16_t wCountY = 4, wCountM = 2, wCountD = 2;
608 int nLen = wsDate.GetLength(); 607 int nLen = wsDate.GetLength();
609 if (nLen < wCountY || nLen > wCountY + wCountM + wCountD + 2) { 608 if (nLen < wCountY || nLen > wCountY + wCountM + wCountD + 2) {
610 return FALSE; 609 return false;
611 } 610 }
612 const bool bSymbol = wsDate.Find(0x2D) != -1; 611 const bool bSymbol = wsDate.Find(0x2D) != -1;
613 uint16_t wYear = 0; 612 uint16_t wYear = 0;
614 uint16_t wMonth = 0; 613 uint16_t wMonth = 0;
615 uint16_t wDay = 0; 614 uint16_t wDay = 0;
616 const FX_WCHAR* pDate = wsDate.c_str(); 615 const FX_WCHAR* pDate = wsDate.c_str();
617 int nIndex = 0, nStart = 0; 616 int nIndex = 0, nStart = 0;
618 while (pDate[nIndex] != '\0' && nIndex < wCountY) { 617 while (pDate[nIndex] != '\0' && nIndex < wCountY) {
619 if (!FXSYS_isDecimalDigit(pDate[nIndex])) { 618 if (!FXSYS_isDecimalDigit(pDate[nIndex])) {
620 return FALSE; 619 return false;
621 } 620 }
622 wYear = (pDate[nIndex] - '0') + wYear * 10; 621 wYear = (pDate[nIndex] - '0') + wYear * 10;
623 nIndex++; 622 nIndex++;
624 } 623 }
625 if (bSymbol) { 624 if (bSymbol) {
626 if (pDate[nIndex] != 0x2D) { 625 if (pDate[nIndex] != 0x2D) {
627 return FALSE; 626 return false;
628 } 627 }
629 nIndex++; 628 nIndex++;
630 } 629 }
631 nStart = nIndex; 630 nStart = nIndex;
632 while (pDate[nIndex] != '\0' && nIndex - nStart < wCountM && nIndex < nLen) { 631 while (pDate[nIndex] != '\0' && nIndex - nStart < wCountM && nIndex < nLen) {
633 if (!FXSYS_isDecimalDigit(pDate[nIndex])) { 632 if (!FXSYS_isDecimalDigit(pDate[nIndex])) {
634 return FALSE; 633 return false;
635 } 634 }
636 wMonth = (pDate[nIndex] - '0') + wMonth * 10; 635 wMonth = (pDate[nIndex] - '0') + wMonth * 10;
637 nIndex++; 636 nIndex++;
638 } 637 }
639 if (bSymbol) { 638 if (bSymbol) {
640 if (pDate[nIndex] != 0x2D) { 639 if (pDate[nIndex] != 0x2D) {
641 return FALSE; 640 return false;
642 } 641 }
643 nIndex++; 642 nIndex++;
644 } 643 }
645 nStart = nIndex; 644 nStart = nIndex;
646 while (pDate[nIndex] != '\0' && nIndex - nStart < wCountD && nIndex < nLen) { 645 while (pDate[nIndex] != '\0' && nIndex - nStart < wCountD && nIndex < nLen) {
647 if (!FXSYS_isDecimalDigit(pDate[nIndex])) { 646 if (!FXSYS_isDecimalDigit(pDate[nIndex])) {
648 return FALSE; 647 return false;
649 } 648 }
650 wDay = (pDate[nIndex] - '0') + wDay * 10; 649 wDay = (pDate[nIndex] - '0') + wDay * 10;
651 nIndex++; 650 nIndex++;
652 } 651 }
653 if (nIndex != nLen) { 652 if (nIndex != nLen) {
654 return FALSE; 653 return false;
655 } 654 }
656 if (wYear < 1900 || wYear > 2029) { 655 if (wYear < 1900 || wYear > 2029) {
657 return FALSE; 656 return false;
658 } 657 }
659 if (wMonth < 1 || wMonth > 12) { 658 if (wMonth < 1 || wMonth > 12) {
660 if (wMonth == 0 && nLen == wCountY) { 659 if (wMonth == 0 && nLen == wCountY) {
661 return TRUE; 660 return true;
662 } 661 }
663 return FALSE; 662 return false;
664 } 663 }
665 if (wDay < 1) { 664 if (wDay < 1) {
666 if (wDay == 0 && (nLen == wCountY + wCountM)) { 665 if (wDay == 0 && (nLen == wCountY + wCountM)) {
667 return TRUE; 666 return true;
668 } 667 }
669 return FALSE; 668 return false;
670 } 669 }
671 if (wMonth == 2) { 670 if (wMonth == 2) {
672 if (wYear % 400 == 0 || (wYear % 100 != 0 && wYear % 4 == 0)) { 671 if (wYear % 400 == 0 || (wYear % 100 != 0 && wYear % 4 == 0)) {
673 if (wDay > 29) { 672 if (wDay > 29) {
674 return FALSE; 673 return false;
675 } 674 }
676 } else { 675 } else {
677 if (wDay > 28) { 676 if (wDay > 28) {
678 return FALSE; 677 return false;
679 } 678 }
680 } 679 }
681 } else if (wDay > LastDay[wMonth - 1]) { 680 } else if (wDay > LastDay[wMonth - 1]) {
682 return FALSE; 681 return false;
683 } 682 }
684 CFX_Unitime ut; 683 CFX_Unitime ut;
685 ut.Set(wYear, static_cast<uint8_t>(wMonth), static_cast<uint8_t>(wDay)); 684 ut.Set(wYear, static_cast<uint8_t>(wMonth), static_cast<uint8_t>(wDay));
686 unDate = unDate + ut; 685 unDate = unDate + ut;
687 return TRUE; 686 return true;
688 } 687 }
689 FX_BOOL CXFA_LocaleValue::ValidateCanonicalTime(const CFX_WideString& wsTime) { 688 bool CXFA_LocaleValue::ValidateCanonicalTime(const CFX_WideString& wsTime) {
690 int nLen = wsTime.GetLength(); 689 int nLen = wsTime.GetLength();
691 if (nLen < 2) 690 if (nLen < 2)
692 return FALSE; 691 return false;
693 const uint16_t wCountH = 2; 692 const uint16_t wCountH = 2;
694 const uint16_t wCountM = 2; 693 const uint16_t wCountM = 2;
695 const uint16_t wCountS = 2; 694 const uint16_t wCountS = 2;
696 const uint16_t wCountF = 3; 695 const uint16_t wCountF = 3;
697 const bool bSymbol = wsTime.Find(':') != -1; 696 const bool bSymbol = wsTime.Find(':') != -1;
698 uint16_t wHour = 0; 697 uint16_t wHour = 0;
699 uint16_t wMinute = 0; 698 uint16_t wMinute = 0;
700 uint16_t wSecond = 0; 699 uint16_t wSecond = 0;
701 uint16_t wFraction = 0; 700 uint16_t wFraction = 0;
702 const FX_WCHAR* pTime = wsTime.c_str(); 701 const FX_WCHAR* pTime = wsTime.c_str();
703 int nIndex = 0; 702 int nIndex = 0;
704 int nStart = 0; 703 int nStart = 0;
705 while (nIndex - nStart < wCountH && pTime[nIndex]) { 704 while (nIndex - nStart < wCountH && pTime[nIndex]) {
706 if (!FXSYS_isDecimalDigit(pTime[nIndex])) 705 if (!FXSYS_isDecimalDigit(pTime[nIndex]))
707 return FALSE; 706 return false;
708 wHour = pTime[nIndex] - '0' + wHour * 10; 707 wHour = pTime[nIndex] - '0' + wHour * 10;
709 nIndex++; 708 nIndex++;
710 } 709 }
711 if (bSymbol) { 710 if (bSymbol) {
712 if (nIndex < nLen && pTime[nIndex] != ':') 711 if (nIndex < nLen && pTime[nIndex] != ':')
713 return FALSE; 712 return false;
714 nIndex++; 713 nIndex++;
715 } 714 }
716 nStart = nIndex; 715 nStart = nIndex;
717 while (nIndex - nStart < wCountM && nIndex < nLen && pTime[nIndex]) { 716 while (nIndex - nStart < wCountM && nIndex < nLen && pTime[nIndex]) {
718 if (!FXSYS_isDecimalDigit(pTime[nIndex])) 717 if (!FXSYS_isDecimalDigit(pTime[nIndex]))
719 return FALSE; 718 return false;
720 wMinute = pTime[nIndex] - '0' + wMinute * 10; 719 wMinute = pTime[nIndex] - '0' + wMinute * 10;
721 nIndex++; 720 nIndex++;
722 } 721 }
723 if (bSymbol) { 722 if (bSymbol) {
724 if (nIndex < nLen && pTime[nIndex] != ':') 723 if (nIndex < nLen && pTime[nIndex] != ':')
725 return FALSE; 724 return false;
726 nIndex++; 725 nIndex++;
727 } 726 }
728 nStart = nIndex; 727 nStart = nIndex;
729 while (nIndex - nStart < wCountS && nIndex < nLen && pTime[nIndex]) { 728 while (nIndex - nStart < wCountS && nIndex < nLen && pTime[nIndex]) {
730 if (!FXSYS_isDecimalDigit(pTime[nIndex])) 729 if (!FXSYS_isDecimalDigit(pTime[nIndex]))
731 return FALSE; 730 return false;
732 wSecond = pTime[nIndex] - '0' + wSecond * 10; 731 wSecond = pTime[nIndex] - '0' + wSecond * 10;
733 nIndex++; 732 nIndex++;
734 } 733 }
735 if (wsTime.Find('.') > 0) { 734 if (wsTime.Find('.') > 0) {
736 if (pTime[nIndex] != '.') 735 if (pTime[nIndex] != '.')
737 return FALSE; 736 return false;
738 nIndex++; 737 nIndex++;
739 nStart = nIndex; 738 nStart = nIndex;
740 while (nIndex - nStart < wCountF && nIndex < nLen && pTime[nIndex]) { 739 while (nIndex - nStart < wCountF && nIndex < nLen && pTime[nIndex]) {
741 if (!FXSYS_isDecimalDigit(pTime[nIndex])) 740 if (!FXSYS_isDecimalDigit(pTime[nIndex]))
742 return FALSE; 741 return false;
743 wFraction = pTime[nIndex] - '0' + wFraction * 10; 742 wFraction = pTime[nIndex] - '0' + wFraction * 10;
744 nIndex++; 743 nIndex++;
745 } 744 }
746 } 745 }
747 if (nIndex < nLen) { 746 if (nIndex < nLen) {
748 if (pTime[nIndex] == 'Z') { 747 if (pTime[nIndex] == 'Z') {
749 nIndex++; 748 nIndex++;
750 } else if (pTime[nIndex] == '-' || pTime[nIndex] == '+') { 749 } else if (pTime[nIndex] == '-' || pTime[nIndex] == '+') {
751 int16_t nOffsetH = 0; 750 int16_t nOffsetH = 0;
752 int16_t nOffsetM = 0; 751 int16_t nOffsetM = 0;
753 nIndex++; 752 nIndex++;
754 nStart = nIndex; 753 nStart = nIndex;
755 while (nIndex - nStart < wCountH && nIndex < nLen && pTime[nIndex]) { 754 while (nIndex - nStart < wCountH && nIndex < nLen && pTime[nIndex]) {
756 if (!FXSYS_isDecimalDigit(pTime[nIndex])) 755 if (!FXSYS_isDecimalDigit(pTime[nIndex]))
757 return FALSE; 756 return false;
758 nOffsetH = pTime[nIndex] - '0' + nOffsetH * 10; 757 nOffsetH = pTime[nIndex] - '0' + nOffsetH * 10;
759 nIndex++; 758 nIndex++;
760 } 759 }
761 if (bSymbol) { 760 if (bSymbol) {
762 if (nIndex < nLen && pTime[nIndex] != ':') 761 if (nIndex < nLen && pTime[nIndex] != ':')
763 return FALSE; 762 return false;
764 nIndex++; 763 nIndex++;
765 } 764 }
766 nStart = nIndex; 765 nStart = nIndex;
767 while (nIndex - nStart < wCountM && nIndex < nLen && pTime[nIndex]) { 766 while (nIndex - nStart < wCountM && nIndex < nLen && pTime[nIndex]) {
768 if (!FXSYS_isDecimalDigit(pTime[nIndex])) 767 if (!FXSYS_isDecimalDigit(pTime[nIndex]))
769 return FALSE; 768 return false;
770 nOffsetM = pTime[nIndex] - '0' + nOffsetM * 10; 769 nOffsetM = pTime[nIndex] - '0' + nOffsetM * 10;
771 nIndex++; 770 nIndex++;
772 } 771 }
773 if (nOffsetH > 12 || nOffsetM >= 60) 772 if (nOffsetH > 12 || nOffsetM >= 60)
774 return FALSE; 773 return false;
775 } 774 }
776 } 775 }
777 return nIndex == nLen && wHour < 24 && wMinute < 60 && wSecond < 60 && 776 return nIndex == nLen && wHour < 24 && wMinute < 60 && wSecond < 60 &&
778 wFraction <= 999; 777 wFraction <= 999;
779 } 778 }
780 FX_BOOL CXFA_LocaleValue::ValidateCanonicalDateTime( 779 bool CXFA_LocaleValue::ValidateCanonicalDateTime(
781 const CFX_WideString& wsDateTime) { 780 const CFX_WideString& wsDateTime) {
782 CFX_WideString wsDate, wsTime; 781 CFX_WideString wsDate, wsTime;
783 if (wsDateTime.IsEmpty()) { 782 if (wsDateTime.IsEmpty()) {
784 return FALSE; 783 return false;
785 } 784 }
786 int nSplitIndex = -1; 785 int nSplitIndex = -1;
787 nSplitIndex = wsDateTime.Find('T'); 786 nSplitIndex = wsDateTime.Find('T');
788 if (nSplitIndex < 0) { 787 if (nSplitIndex < 0) {
789 nSplitIndex = wsDateTime.Find(' '); 788 nSplitIndex = wsDateTime.Find(' ');
790 } 789 }
791 if (nSplitIndex < 0) { 790 if (nSplitIndex < 0) {
792 return FALSE; 791 return false;
793 } 792 }
794 wsDate = wsDateTime.Left(nSplitIndex); 793 wsDate = wsDateTime.Left(nSplitIndex);
795 wsTime = wsDateTime.Right(wsDateTime.GetLength() - nSplitIndex - 1); 794 wsTime = wsDateTime.Right(wsDateTime.GetLength() - nSplitIndex - 1);
796 CFX_Unitime dt; 795 CFX_Unitime dt;
797 return ValidateCanonicalDate(wsDate, dt) && ValidateCanonicalTime(wsTime); 796 return ValidateCanonicalDate(wsDate, dt) && ValidateCanonicalTime(wsTime);
798 } 797 }
799 FX_BOOL CXFA_LocaleValue::ParsePatternValue(const CFX_WideString& wsValue, 798 bool CXFA_LocaleValue::ParsePatternValue(const CFX_WideString& wsValue,
800 const CFX_WideString& wsPattern, 799 const CFX_WideString& wsPattern,
801 IFX_Locale* pLocale) { 800 IFX_Locale* pLocale) {
802 IFX_Locale* locale = m_pLocaleMgr->GetDefLocale(); 801 IFX_Locale* locale = m_pLocaleMgr->GetDefLocale();
803 if (pLocale) { 802 if (pLocale) {
804 m_pLocaleMgr->SetDefLocale(pLocale); 803 m_pLocaleMgr->SetDefLocale(pLocale);
805 } 804 }
806 805
807 CFX_FormatString* pFormat = nullptr; 806 CFX_FormatString* pFormat = nullptr;
808 if (m_pLocaleMgr) 807 if (m_pLocaleMgr)
809 pFormat = new CFX_FormatString(m_pLocaleMgr, FALSE); 808 pFormat = new CFX_FormatString(m_pLocaleMgr, false);
810 809
811 CFX_WideStringArray wsPatterns; 810 CFX_WideStringArray wsPatterns;
812 pFormat->SplitFormatString(wsPattern, wsPatterns); 811 pFormat->SplitFormatString(wsPattern, wsPatterns);
813 FX_BOOL bRet = FALSE; 812 bool bRet = false;
814 int32_t iCount = wsPatterns.GetSize(); 813 int32_t iCount = wsPatterns.GetSize();
815 for (int32_t i = 0; i < iCount && !bRet; i++) { 814 for (int32_t i = 0; i < iCount && !bRet; i++) {
816 CFX_WideString wsFormat = wsPatterns[i]; 815 CFX_WideString wsFormat = wsPatterns[i];
817 FX_LOCALECATEGORY eCategory = pFormat->GetCategory(wsFormat); 816 FX_LOCALECATEGORY eCategory = pFormat->GetCategory(wsFormat);
818 eCategory = XFA_ValugeCategory(eCategory, m_dwType); 817 eCategory = XFA_ValugeCategory(eCategory, m_dwType);
819 switch (eCategory) { 818 switch (eCategory) {
820 case FX_LOCALECATEGORY_Null: 819 case FX_LOCALECATEGORY_Null:
821 bRet = pFormat->ParseNull(wsValue, wsFormat); 820 bRet = pFormat->ParseNull(wsValue, wsFormat);
822 if (bRet) { 821 if (bRet) {
823 m_wsValue.clear(); 822 m_wsValue.clear();
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after
865 CFX_Unitime dt; 864 CFX_Unitime dt;
866 bRet = pFormat->ParseDateTime(wsValue, wsFormat, 865 bRet = pFormat->ParseDateTime(wsValue, wsFormat,
867 FX_DATETIMETYPE_DateTime, dt); 866 FX_DATETIMETYPE_DateTime, dt);
868 if (bRet) { 867 if (bRet) {
869 SetDateTime(dt); 868 SetDateTime(dt);
870 } 869 }
871 break; 870 break;
872 } 871 }
873 default: 872 default:
874 m_wsValue = wsValue; 873 m_wsValue = wsValue;
875 bRet = TRUE; 874 bRet = true;
876 break; 875 break;
877 } 876 }
878 } 877 }
879 if (!bRet) { 878 if (!bRet) {
880 m_wsValue = wsValue; 879 m_wsValue = wsValue;
881 } 880 }
882 pFormat->Release(); 881 pFormat->Release();
883 if (pLocale) { 882 if (pLocale) {
884 m_pLocaleMgr->SetDefLocale(locale); 883 m_pLocaleMgr->SetDefLocale(locale);
885 } 884 }
886 return bRet; 885 return bRet;
887 } 886 }
888 void CXFA_LocaleValue::GetNumbericFormat(CFX_WideString& wsFormat, 887 void CXFA_LocaleValue::GetNumbericFormat(CFX_WideString& wsFormat,
889 int32_t nIntLen, 888 int32_t nIntLen,
890 int32_t nDecLen, 889 int32_t nDecLen,
891 FX_BOOL bSign) { 890 bool bSign) {
892 ASSERT(wsFormat.IsEmpty()); 891 ASSERT(wsFormat.IsEmpty());
893 ASSERT(nIntLen >= -1 && nDecLen >= -1); 892 ASSERT(nIntLen >= -1 && nDecLen >= -1);
894 int32_t nTotalLen = (nIntLen >= 0 ? nIntLen : 2) + (bSign ? 1 : 0) + 893 int32_t nTotalLen = (nIntLen >= 0 ? nIntLen : 2) + (bSign ? 1 : 0) +
895 (nDecLen >= 0 ? nDecLen : 2) + (nDecLen == 0 ? 0 : 1); 894 (nDecLen >= 0 ? nDecLen : 2) + (nDecLen == 0 ? 0 : 1);
896 FX_WCHAR* lpBuf = wsFormat.GetBuffer(nTotalLen); 895 FX_WCHAR* lpBuf = wsFormat.GetBuffer(nTotalLen);
897 int32_t nPos = 0; 896 int32_t nPos = 0;
898 if (bSign) { 897 if (bSign) {
899 lpBuf[nPos++] = L's'; 898 lpBuf[nPos++] = L's';
900 } 899 }
901 if (nIntLen == -1) { 900 if (nIntLen == -1) {
(...skipping 12 matching lines...) Expand all
914 lpBuf[nPos++] = L'z'; 913 lpBuf[nPos++] = L'z';
915 lpBuf[nPos++] = L'*'; 914 lpBuf[nPos++] = L'*';
916 } else { 915 } else {
917 while (nDecLen) { 916 while (nDecLen) {
918 lpBuf[nPos++] = L'z'; 917 lpBuf[nPos++] = L'z';
919 nDecLen--; 918 nDecLen--;
920 } 919 }
921 } 920 }
922 wsFormat.ReleaseBuffer(nTotalLen); 921 wsFormat.ReleaseBuffer(nTotalLen);
923 } 922 }
924 FX_BOOL CXFA_LocaleValue::ValidateNumericTemp(CFX_WideString& wsNumeric, 923 bool CXFA_LocaleValue::ValidateNumericTemp(CFX_WideString& wsNumeric,
925 CFX_WideString& wsFormat, 924 CFX_WideString& wsFormat,
926 IFX_Locale* pLocale, 925 IFX_Locale* pLocale,
927 int32_t* pos) { 926 int32_t* pos) {
928 if (wsFormat.IsEmpty() || wsNumeric.IsEmpty()) { 927 if (wsFormat.IsEmpty() || wsNumeric.IsEmpty()) {
929 return TRUE; 928 return true;
930 } 929 }
931 const FX_WCHAR* pNum = wsNumeric.c_str(); 930 const FX_WCHAR* pNum = wsNumeric.c_str();
932 const FX_WCHAR* pFmt = wsFormat.c_str(); 931 const FX_WCHAR* pFmt = wsFormat.c_str();
933 int32_t n = 0, nf = 0; 932 int32_t n = 0, nf = 0;
934 FX_WCHAR c = pNum[n]; 933 FX_WCHAR c = pNum[n];
935 FX_WCHAR cf = pFmt[nf]; 934 FX_WCHAR cf = pFmt[nf];
936 if (cf == L's') { 935 if (cf == L's') {
937 if (c == L'-' || c == L'+') { 936 if (c == L'-' || c == L'+') {
938 ++n; 937 ++n;
939 } 938 }
940 ++nf; 939 ++nf;
941 } 940 }
942 FX_BOOL bLimit = TRUE; 941 bool bLimit = true;
943 int32_t nCount = wsNumeric.GetLength(); 942 int32_t nCount = wsNumeric.GetLength();
944 int32_t nCountFmt = wsFormat.GetLength(); 943 int32_t nCountFmt = wsFormat.GetLength();
945 while (n < nCount && (bLimit ? nf < nCountFmt : TRUE) && 944 while (n < nCount && (bLimit ? nf < nCountFmt : true) &&
946 FXSYS_isDecimalDigit(c = pNum[n])) { 945 FXSYS_isDecimalDigit(c = pNum[n])) {
947 if (bLimit == TRUE) { 946 if (bLimit == true) {
948 if ((cf = pFmt[nf]) == L'*') { 947 if ((cf = pFmt[nf]) == L'*') {
949 bLimit = FALSE; 948 bLimit = false;
950 } else if (cf == L'z') { 949 } else if (cf == L'z') {
951 nf++; 950 nf++;
952 } else { 951 } else {
953 return FALSE; 952 return false;
954 } 953 }
955 } 954 }
956 n++; 955 n++;
957 } 956 }
958 if (n == nCount) { 957 if (n == nCount) {
959 return TRUE; 958 return true;
960 } 959 }
961 if (nf == nCountFmt) { 960 if (nf == nCountFmt) {
962 return FALSE; 961 return false;
963 } 962 }
964 while (nf < nCountFmt && (cf = pFmt[nf]) != L'.') { 963 while (nf < nCountFmt && (cf = pFmt[nf]) != L'.') {
965 ASSERT(cf == L'z' || cf == L'*'); 964 ASSERT(cf == L'z' || cf == L'*');
966 ++nf; 965 ++nf;
967 } 966 }
968 CFX_WideString wsDecimalSymbol; 967 CFX_WideString wsDecimalSymbol;
969 if (pLocale) { 968 if (pLocale) {
970 pLocale->GetNumbericSymbol(FX_LOCALENUMSYMBOL_Decimal, wsDecimalSymbol); 969 pLocale->GetNumbericSymbol(FX_LOCALENUMSYMBOL_Decimal, wsDecimalSymbol);
971 } else { 970 } else {
972 wsDecimalSymbol = CFX_WideString(L'.'); 971 wsDecimalSymbol = CFX_WideString(L'.');
973 } 972 }
974 if (pFmt[nf] != L'.') { 973 if (pFmt[nf] != L'.') {
975 return FALSE; 974 return false;
976 } 975 }
977 if (wsDecimalSymbol != CFX_WideStringC(c) && c != L'.') { 976 if (wsDecimalSymbol != CFX_WideStringC(c) && c != L'.') {
978 return FALSE; 977 return false;
979 } 978 }
980 ++nf; 979 ++nf;
981 ++n; 980 ++n;
982 bLimit = TRUE; 981 bLimit = true;
983 while (n < nCount && (bLimit ? nf < nCountFmt : TRUE) && 982 while (n < nCount && (bLimit ? nf < nCountFmt : true) &&
984 FXSYS_isDecimalDigit(c = pNum[n])) { 983 FXSYS_isDecimalDigit(c = pNum[n])) {
985 if (bLimit == TRUE) { 984 if (bLimit == true) {
986 if ((cf = pFmt[nf]) == L'*') { 985 if ((cf = pFmt[nf]) == L'*') {
987 bLimit = FALSE; 986 bLimit = false;
988 } else if (cf == L'z') { 987 } else if (cf == L'z') {
989 nf++; 988 nf++;
990 } else { 989 } else {
991 return FALSE; 990 return false;
992 } 991 }
993 } 992 }
994 n++; 993 n++;
995 } 994 }
996 return n == nCount; 995 return n == nCount;
997 } 996 }
OLDNEW
« no previous file with comments | « xfa/fxfa/parser/xfa_localevalue.h ('k') | xfa/fxfa/parser/xfa_object.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698