| 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 |