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 "../../include/javascript/JavaScript.h" | 7 #include "../../include/javascript/JavaScript.h" |
8 #include "../../include/javascript/IJavaScript.h" | 8 #include "../../include/javascript/IJavaScript.h" |
9 #include "../../include/javascript/JS_Define.h" | 9 #include "../../include/javascript/JS_Define.h" |
10 #include "../../include/javascript/JS_Object.h" | 10 #include "../../include/javascript/JS_Object.h" |
(...skipping 80 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
91 { L"h", L"%l" }, | 91 { L"h", L"%l" }, |
92 #endif | 92 #endif |
93 }; | 93 }; |
94 | 94 |
95 #define UTIL_INT 0 | 95 #define UTIL_INT 0 |
96 #define UTIL_DOUBLE 1 | 96 #define UTIL_DOUBLE 1 |
97 #define UTIL_STRING 2 | 97 #define UTIL_STRING 2 |
98 | 98 |
99 int util::ParstDataType(std::wstring* sFormat) | 99 int util::ParstDataType(std::wstring* sFormat) |
100 { | 100 { |
101 size_t i = 0; | |
102 bool bPercent = FALSE; | 101 bool bPercent = FALSE; |
103 » for (i=0; i<sFormat->length(); ++i) | 102 » for (size_t i = 0; i < sFormat->length(); ++i) |
104 { | 103 { |
105 wchar_t c = (*sFormat)[i]; | 104 wchar_t c = (*sFormat)[i]; |
106 if (c == L'%') | 105 if (c == L'%') |
107 { | 106 { |
108 bPercent = true; | 107 bPercent = true; |
109 continue; | 108 continue; |
110 } | 109 } |
111 | 110 |
112 if (bPercent) | 111 if (bPercent) |
113 { | 112 { |
114 if (c == L'c' || c == L'C' || c == L'd' || c == L'i' ||
c == L'o' || c == L'u' || c == L'x' || c == L'X') | 113 if (c == L'c' || c == L'C' || c == L'd' || c == L'i' ||
c == L'o' || c == L'u' || c == L'x' || c == L'X') |
115 » » » { | 114 { |
116 return UTIL_INT; | 115 return UTIL_INT; |
117 } | 116 } |
118 » » » else if (c == L'e' || c == L'E' || c == L'f' || c == L'g
' || c == L'G') | 117 » » » if (c == L'e' || c == L'E' || c == L'f' || c == L'g' ||
c == L'G') |
119 { | 118 { |
120 return UTIL_DOUBLE; | 119 return UTIL_DOUBLE; |
121 } | 120 } |
122 » » » else if (c == L's' || c == L'S') | 121 » » » if (c == L's' || c == L'S') |
123 { | 122 { |
124 // Map s to S since we always deal internally | 123 // Map s to S since we always deal internally |
125 // with wchar_t strings. | 124 // with wchar_t strings. |
126 (*sFormat)[i] = L'S'; | 125 (*sFormat)[i] = L'S'; |
127 return UTIL_STRING; | 126 return UTIL_STRING; |
128 } | 127 } |
129 » » » else if (c == L'.' || c == L'+' || c == L'-' || c == L'#
' || c == L' ' || CJS_PublicMethods::IsDigit(c)) | 128 » » » if (c == L'.' || c == L'+' || c == L'-' || c == L'#' ||
c == L' ' || CJS_PublicMethods::IsDigit(c)) |
130 { | 129 { |
131 continue; | 130 continue; |
132 } | 131 } |
133 » » » else break; | 132 » » » break; |
134 } | 133 } |
135 } | 134 } |
136 | 135 |
137 return -1; | 136 return -1; |
138 } | 137 } |
139 | 138 |
140 FX_BOOL util::printf(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value&
vRet, CFX_WideString& sError) | 139 FX_BOOL util::printf(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value&
vRet, CFX_WideString& sError) |
141 { | 140 { |
142 int iSize = params.size(); | 141 int iSize = params.size(); |
143 if (iSize < 1) | 142 if (iSize < 1) |
(...skipping 117 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
261 jsDate.GetMinutes(), | 260 jsDate.GetMinutes(), |
262 jsDate.GetSeconds()); | 261 jsDate.GetSeconds()); |
263 break; | 262 break; |
264 default: | 263 default: |
265 return FALSE; | 264 return FALSE; |
266 } | 265 } |
267 | 266 |
268 vRet = swResult.c_str(); | 267 vRet = swResult.c_str(); |
269 return TRUE; | 268 return TRUE; |
270 } | 269 } |
271 » else if (p1.GetType() == VT_string) | 270 if (p1.GetType() == VT_string) |
272 { | 271 { |
273 std::basic_string<wchar_t> cFormat = p1.ToCFXWideString().c_str(
); | 272 std::basic_string<wchar_t> cFormat = p1.ToCFXWideString().c_str(
); |
274 | 273 |
275 bool bXFAPicture = false; | 274 bool bXFAPicture = false; |
276 if (iSize > 2) | 275 if (iSize > 2) |
277 { | 276 { |
278 bXFAPicture = params[2].ToBool(); | 277 bXFAPicture = params[2].ToBool(); |
279 } | 278 } |
280 | 279 |
281 if (bXFAPicture) | 280 if (bXFAPicture) |
(...skipping 21 matching lines...) Expand all Loading... |
303 iMin = jsDate.GetMinutes(); | 302 iMin = jsDate.GetMinutes(); |
304 iSec = jsDate.GetSeconds(); | 303 iSec = jsDate.GetSeconds(); |
305 | 304 |
306 struct tm time = {}; | 305 struct tm time = {}; |
307 time.tm_year = iYear-1900; | 306 time.tm_year = iYear-1900; |
308 time.tm_mon = iMonth; | 307 time.tm_mon = iMonth; |
309 time.tm_mday = iDay; | 308 time.tm_mday = iDay; |
310 time.tm_hour = iHour; | 309 time.tm_hour = iHour; |
311 time.tm_min = iMin; | 310 time.tm_min = iMin; |
312 time.tm_sec = iSec; | 311 time.tm_sec = iSec; |
313 //COleDateTime cppTm(iYear,iMonth+1,iDay,iHour,iMin,iSec); | |
314 //CString strFormat = cppTm.Format(cFormat.c_str()); | |
315 | 312 |
316 struct stru_TbConvertAd | 313 struct stru_TbConvertAd |
317 { | 314 { |
318 const FX_WCHAR* lpszJSMark; | 315 const FX_WCHAR* lpszJSMark; |
319 int iValue; | 316 int iValue; |
320 }; | 317 }; |
321 | 318 |
322 stru_TbConvertAd cTableAd[] ={ | 319 stru_TbConvertAd cTableAd[] ={ |
323 { L"m", iMonth+1 }, | 320 { L"m", iMonth+1 }, |
324 { L"d", iDay }, | 321 { L"d", iDay }, |
325 { L"H", iHour }, | 322 { L"H", iHour }, |
326 { L"h", iHour>12?iHour-12:iHour }, | 323 { L"h", iHour>12?iHour-12:iHour }, |
327 { L"M", iMin }, | 324 { L"M", iMin }, |
328 { L"s", iSec }, | 325 { L"s", iSec }, |
329 }; | 326 }; |
330 | 327 |
331 //cFormat = strFormat.GetBuffer(strFormat.GetLength()+1); | |
332 for(iIndex = 0;iIndex<sizeof(cTableAd)/sizeof(stru_TbConvertAd);
iIndex++) | 328 for(iIndex = 0;iIndex<sizeof(cTableAd)/sizeof(stru_TbConvertAd);
iIndex++) |
333 { | 329 { |
334 wchar_t tszValue[10]; | 330 wchar_t tszValue[10]; |
335 //_itot(cTableAd[iIndex].iValue,tszValue,10); | |
336 CFX_WideString sValue; | 331 CFX_WideString sValue; |
337 sValue.Format(L"%d",cTableAd[iIndex].iValue); | 332 sValue.Format(L"%d",cTableAd[iIndex].iValue); |
338 memcpy(tszValue, (wchar_t *)sValue.GetBuffer(sValue.GetL
ength()+1), | 333 memcpy(tszValue, (wchar_t *)sValue.GetBuffer(sValue.GetL
ength()+1), |
339 (sValue.GetLength()+1)*sizeof(wchar_t)); | 334 (sValue.GetLength()+1)*sizeof(wchar_t)); |
340 | 335 |
341 //strFormat.Replace(cTableAd[iIndex].lpszJSMark,"%d"); | |
342 //strFormat.Format(strFormat,cTableAd[iIndex].iValue); | |
343 int iStart = 0; | 336 int iStart = 0; |
344 int iEnd; | 337 int iEnd; |
345 while((iEnd = cFormat.find(cTableAd[iIndex].lpszJSMark,
iStart)) != -1) | 338 while((iEnd = cFormat.find(cTableAd[iIndex].lpszJSMark,
iStart)) != -1) |
346 { | 339 { |
347 if (iEnd > 0) | 340 if (iEnd > 0) |
348 { | 341 { |
349 if (cFormat[iEnd-1] == L'%') | 342 if (cFormat[iEnd-1] == L'%') |
350 { | 343 { |
351 iStart = iEnd+1; | 344 iStart = iEnd+1; |
352 continue; | 345 continue; |
353 } | 346 } |
354 } | 347 } |
355 cFormat.replace(iEnd, FXSYS_wcslen(cTableAd[iInd
ex].lpszJSMark), tszValue); | 348 cFormat.replace(iEnd, FXSYS_wcslen(cTableAd[iInd
ex].lpszJSMark), tszValue); |
356 iStart = iEnd; | 349 iStart = iEnd; |
357 } | 350 } |
358 } | 351 } |
359 | 352 |
360 CFX_WideString strFormat; | 353 CFX_WideString strFormat; |
361 // strFormat.Format(L"%d,%d,%d,%d,%d,%d",iYear, iMonth, iDay, iHour
, iMin, iSec); | |
362 // CString strFormat = cppTm.Format(cFormat.c_str()); | |
363 wchar_t buf[64] = {}; | 354 wchar_t buf[64] = {}; |
364 strFormat = wcsftime(buf, 64, cFormat.c_str(), &time); | 355 strFormat = wcsftime(buf, 64, cFormat.c_str(), &time); |
365 cFormat = buf; | 356 cFormat = buf; |
366 vRet = cFormat.c_str(); | 357 vRet = cFormat.c_str(); |
367 //rtRet = strFormat.GetBuffer(strFormat.GetLength()+1); | |
368 return TRUE; | 358 return TRUE; |
369 } | 359 } |
370 return FALSE; | 360 return FALSE; |
371 } | 361 } |
372 | 362 |
373 void util::printd(const std::wstring &cFormat2, CJS_Date jsDate, bool bXFAPictur
e, std::wstring &cPurpose) | 363 void util::printd(const std::wstring &cFormat2, CJS_Date jsDate, bool bXFAPictur
e, std::wstring &cPurpose) |
374 { | 364 { |
375 std::wstring cFormat = cFormat2; | 365 std::wstring cFormat = cFormat2; |
376 | 366 |
377 if (bXFAPicture) | 367 if (bXFAPicture) |
(...skipping 240 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
618 if (c == '-' || c == '+') | 608 if (c == '-' || c == '+') |
619 c = (int)(unsigned char)*nptr++; /* skip sign */ | 609 c = (int)(unsigned char)*nptr++; /* skip sign */ |
620 | 610 |
621 total = 0; | 611 total = 0; |
622 | 612 |
623 while (isdigit(c)) { | 613 while (isdigit(c)) { |
624 total = 10 * total + (c - '0'); /* accumulate digit */ | 614 total = 10 * total + (c - '0'); /* accumulate digit */ |
625 c = (int)(unsigned char)*nptr++; /* get next char */ | 615 c = (int)(unsigned char)*nptr++; /* get next char */ |
626 } | 616 } |
627 | 617 |
628 if (sign == '-') | 618 return sign == '-' ? -total : total; |
629 return -total; | |
630 else | |
631 return total; /* return result, negated if necessary */ | |
632 } | 619 } |
633 | 620 |
634 FX_BOOL util::byteToChar(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Va
lue& vRet, CFX_WideString& sError) | 621 FX_BOOL util::byteToChar(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Va
lue& vRet, CFX_WideString& sError) |
635 { | 622 { |
636 int iSize = params.size(); | 623 int iSize = params.size(); |
637 if (iSize == 0) | 624 if (iSize == 0) |
638 return FALSE; | 625 return FALSE; |
639 int nByte = params[0].ToInt(); | 626 int nByte = params[0].ToInt(); |
640 unsigned char cByte = (unsigned char)nByte; | 627 unsigned char cByte = (unsigned char)nByte; |
641 CFX_WideString csValue; | 628 CFX_WideString csValue; |
642 csValue.Format(L"%c", cByte); | 629 csValue.Format(L"%c", cByte); |
643 vRet = csValue.c_str(); | 630 vRet = csValue.c_str(); |
644 return TRUE; | 631 return TRUE; |
645 } | 632 } |
OLD | NEW |