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

Side by Side Diff: fpdfsdk/src/javascript/util.cpp

Issue 1265503005: clang-format all pdfium code. (Closed) Base URL: https://pdfium.googlesource.com/pdfium.git@master
Patch Set: sigh Created 5 years, 4 months 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
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 "../../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"
11 #include "../../include/javascript/JS_Value.h" 11 #include "../../include/javascript/JS_Value.h"
12 #include "../../include/javascript/util.h" 12 #include "../../include/javascript/util.h"
13 #include "../../include/javascript/PublicMethods.h" 13 #include "../../include/javascript/PublicMethods.h"
14 #include "../../include/javascript/resource.h" 14 #include "../../include/javascript/resource.h"
15 #include "../../include/javascript/JS_Context.h" 15 #include "../../include/javascript/JS_Context.h"
16 #include "../../include/javascript/JS_EventHandler.h" 16 #include "../../include/javascript/JS_EventHandler.h"
17 #include "../../include/javascript/JS_Runtime.h" 17 #include "../../include/javascript/JS_Runtime.h"
18 18
19 #if _FX_OS_ == _FX_ANDROID_ 19 #if _FX_OS_ == _FX_ANDROID_
20 #include <ctype.h> 20 #include <ctype.h>
21 #endif 21 #endif
22 22
23 static v8::Isolate* GetIsolate(IFXJS_Context* cc) 23 static v8::Isolate* GetIsolate(IFXJS_Context* cc) {
24 { 24 CJS_Context* pContext = (CJS_Context*)cc;
25 CJS_Context* pContext = (CJS_Context *)cc; 25 ASSERT(pContext != NULL);
26 ASSERT(pContext != NULL);
27 26
28 CJS_Runtime* pRuntime = pContext->GetJSRuntime(); 27 CJS_Runtime* pRuntime = pContext->GetJSRuntime();
29 ASSERT(pRuntime != NULL); 28 ASSERT(pRuntime != NULL);
30 29
31 return pRuntime->GetIsolate(); 30 return pRuntime->GetIsolate();
32 } 31 }
33 32
34 BEGIN_JS_STATIC_CONST(CJS_Util) 33 BEGIN_JS_STATIC_CONST(CJS_Util)
35 END_JS_STATIC_CONST() 34 END_JS_STATIC_CONST()
36 35
37 BEGIN_JS_STATIC_PROP(CJS_Util) 36 BEGIN_JS_STATIC_PROP(CJS_Util)
38 END_JS_STATIC_PROP() 37 END_JS_STATIC_PROP()
39 38
40 BEGIN_JS_STATIC_METHOD(CJS_Util) 39 BEGIN_JS_STATIC_METHOD(CJS_Util)
41 JS_STATIC_METHOD_ENTRY(printd) 40 JS_STATIC_METHOD_ENTRY(printd)
42 JS_STATIC_METHOD_ENTRY(printf) 41 JS_STATIC_METHOD_ENTRY(printf)
43 JS_STATIC_METHOD_ENTRY(printx) 42 JS_STATIC_METHOD_ENTRY(printx)
44 JS_STATIC_METHOD_ENTRY(scand) 43 JS_STATIC_METHOD_ENTRY(scand)
45 JS_STATIC_METHOD_ENTRY(byteToChar) 44 JS_STATIC_METHOD_ENTRY(byteToChar)
46 END_JS_STATIC_METHOD() 45 END_JS_STATIC_METHOD()
47 46
48 IMPLEMENT_JS_CLASS(CJS_Util,util) 47 IMPLEMENT_JS_CLASS(CJS_Util, util)
49 48
50 util::util(CJS_Object *pJSObject) : CJS_EmbedObj(pJSObject) 49 util::util(CJS_Object* pJSObject) : CJS_EmbedObj(pJSObject) {}
51 { 50
52 } 51 util::~util(void) {}
53 52
54 util::~util(void) 53 struct stru_TbConvert {
55 { 54 const FX_WCHAR* lpszJSMark;
56 } 55 const FX_WCHAR* lpszCppMark;
57
58
59 struct stru_TbConvert
60 {
61 const FX_WCHAR* lpszJSMark;
62 const FX_WCHAR* lpszCppMark;
63 }; 56 };
64 57
65 const stru_TbConvert fcTable[] = { 58 const stru_TbConvert fcTable[] = {
66 { L"mmmm", L"%B" }, 59 {L"mmmm", L"%B"},
67 { L"mmm", L"%b" }, 60 {L"mmm", L"%b"},
68 { L"mm", L"%m" }, 61 {L"mm", L"%m"},
69 //"m" 62 //"m"
70 { L"dddd", L"%A" }, 63 {L"dddd", L"%A"},
71 { L"ddd", L"%a" }, 64 {L"ddd", L"%a"},
72 { L"dd", L"%d" }, 65 {L"dd", L"%d"},
73 //"d", "%w", 66 //"d", "%w",
74 { L"yyyy", L"%Y" }, 67 {L"yyyy", L"%Y"},
75 { L"yy", L"%y" }, 68 {L"yy", L"%y"},
76 { L"HH", L"%H" }, 69 {L"HH", L"%H"},
77 //"H" 70 //"H"
78 { L"hh", L"%I" }, 71 {L"hh", L"%I"},
79 //"h" 72 //"h"
80 { L"MM", L"%M" }, 73 {L"MM", L"%M"},
81 //"M" 74 //"M"
82 { L"ss", L"%S" }, 75 {L"ss", L"%S"},
83 //"s 76 //"s
84 { L"TT", L"%p" }, 77 {L"TT", L"%p"},
85 //"t" 78 //"t"
86 #if defined(_WIN32) 79 #if defined(_WIN32)
87 { L"tt", L"%p" }, 80 {L"tt", L"%p"},
88 { L"h", L"%#I" }, 81 {L"h", L"%#I"},
89 #else 82 #else
90 { L"tt", L"%P" }, 83 {L"tt", L"%P"},
91 { L"h", L"%l" }, 84 {L"h", L"%l"},
92 #endif 85 #endif
93 }; 86 };
94 87
95 #define UTIL_INT 0 88 #define UTIL_INT 0
96 #define UTIL_DOUBLE 1 89 #define UTIL_DOUBLE 1
97 #define UTIL_STRING 2 90 #define UTIL_STRING 2
98 91
99 int util::ParstDataType(std::wstring* sFormat) 92 int util::ParstDataType(std::wstring* sFormat) {
100 { 93 bool bPercent = FALSE;
101 bool bPercent = FALSE; 94 for (size_t i = 0; i < sFormat->length(); ++i) {
102 for (size_t i = 0; i < sFormat->length(); ++i) 95 wchar_t c = (*sFormat)[i];
103 { 96 if (c == L'%') {
104 wchar_t c = (*sFormat)[i]; 97 bPercent = true;
105 if (c == L'%') 98 continue;
106 { 99 }
107 bPercent = true; 100
108 continue; 101 if (bPercent) {
109 } 102 if (c == L'c' || c == L'C' || c == L'd' || c == L'i' || c == L'o' ||
110 103 c == L'u' || c == L'x' || c == L'X') {
111 if (bPercent) 104 return UTIL_INT;
112 { 105 }
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') 106 if (c == L'e' || c == L'E' || c == L'f' || c == L'g' || c == L'G') {
114 { 107 return UTIL_DOUBLE;
115 return UTIL_INT; 108 }
116 } 109 if (c == L's' || c == L'S') {
117 if (c == L'e' || c == L'E' || c == L'f' || c == L'g' || c == L'G') 110 // Map s to S since we always deal internally
118 { 111 // with wchar_t strings.
119 return UTIL_DOUBLE; 112 (*sFormat)[i] = L'S';
120 } 113 return UTIL_STRING;
121 if (c == L's' || c == L'S') 114 }
122 { 115 if (c == L'.' || c == L'+' || c == L'-' || c == L'#' || c == L' ' ||
123 // Map s to S since we always deal internally 116 CJS_PublicMethods::IsDigit(c)) {
124 // with wchar_t strings. 117 continue;
125 (*sFormat)[i] = L'S'; 118 }
126 return UTIL_STRING; 119 break;
127 } 120 }
128 if (c == L'.' || c == L'+' || c == L'-' || c == L'#' || c == L' ' || CJS_PublicMethods::IsDigit(c)) 121 }
129 { 122
130 continue; 123 return -1;
131 }
132 break;
133 }
134 }
135
136 return -1;
137 } 124 }
138 125
139 FX_BOOL util::printf(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError) 126 FX_BOOL util::printf(IFXJS_Context* cc,
140 { 127 const CJS_Parameters& params,
141 int iSize = params.size(); 128 CJS_Value& vRet,
142 if (iSize < 1) 129 CFX_WideString& sError) {
130 int iSize = params.size();
131 if (iSize < 1)
132 return FALSE;
133 std::wstring c_ConvChar(params[0].ToCFXWideString().c_str());
134 std::vector<std::wstring> c_strConvers;
135 int iOffset = 0;
136 int iOffend = 0;
137 c_ConvChar.insert(c_ConvChar.begin(), L'S');
138 while (iOffset != -1) {
139 iOffend = c_ConvChar.find(L"%", iOffset + 1);
140 std::wstring strSub;
141 if (iOffend == -1)
142 strSub = c_ConvChar.substr(iOffset);
143 else
144 strSub = c_ConvChar.substr(iOffset, iOffend - iOffset);
145 c_strConvers.push_back(strSub);
146 iOffset = iOffend;
147 }
148
149 std::wstring c_strResult;
150
151 // for(int iIndex = 1;iIndex < params.size();iIndex++)
152 std::wstring c_strFormat;
153 for (int iIndex = 0; iIndex < (int)c_strConvers.size(); iIndex++) {
154 c_strFormat = c_strConvers[iIndex];
155 if (iIndex == 0) {
156 c_strResult = c_strFormat;
157 continue;
158 }
159
160 CFX_WideString strSegment;
161 if (iIndex >= iSize) {
162 c_strResult += c_strFormat;
163 continue;
164 }
165
166 switch (ParstDataType(&c_strFormat)) {
167 case UTIL_INT:
168 strSegment.Format(c_strFormat.c_str(), params[iIndex].ToInt());
169 break;
170 case UTIL_DOUBLE:
171 strSegment.Format(c_strFormat.c_str(), params[iIndex].ToDouble());
172 break;
173 case UTIL_STRING:
174 strSegment.Format(c_strFormat.c_str(),
175 params[iIndex].ToCFXWideString().c_str());
176 break;
177 default:
178 strSegment.Format(L"%S", c_strFormat.c_str());
179 break;
180 }
181 c_strResult += strSegment.GetBuffer(strSegment.GetLength() + 1);
182 }
183
184 c_strResult.erase(c_strResult.begin());
185 vRet = c_strResult.c_str();
186 return TRUE;
187 }
188
189 FX_BOOL util::printd(IFXJS_Context* cc,
190 const CJS_Parameters& params,
191 CJS_Value& vRet,
192 CFX_WideString& sError) {
193 v8::Isolate* isolate = GetIsolate(cc);
194
195 int iSize = params.size();
196 if (iSize < 2)
197 return FALSE;
198
199 CJS_Value p1(isolate);
200 p1 = params[0];
201
202 CJS_Value p2 = params[1];
203 CJS_Date jsDate(isolate);
204 if (!p2.ConvertToDate(jsDate)) {
205 sError = JSGetStringFromID((CJS_Context*)cc, IDS_STRING_JSPRINT1);
206 return FALSE;
207 }
208
209 if (!jsDate.IsValidDate()) {
210 sError = JSGetStringFromID((CJS_Context*)cc, IDS_STRING_JSPRINT2);
211 return FALSE;
212 }
213
214 if (p1.GetType() == VT_number) {
215 int nFormat = p1.ToInt();
216 CFX_WideString swResult;
217
218 switch (nFormat) {
219 case 0:
220 swResult.Format(L"D:%04d%02d%02d%02d%02d%02d", jsDate.GetYear(),
221 jsDate.GetMonth() + 1, jsDate.GetDay(),
222 jsDate.GetHours(), jsDate.GetMinutes(),
223 jsDate.GetSeconds());
224 break;
225 case 1:
226 swResult.Format(L"%04d.%02d.%02d %02d:%02d:%02d", jsDate.GetYear(),
227 jsDate.GetMonth() + 1, jsDate.GetDay(),
228 jsDate.GetHours(), jsDate.GetMinutes(),
229 jsDate.GetSeconds());
230 break;
231 case 2:
232 swResult.Format(L"%04d/%02d/%02d %02d:%02d:%02d", jsDate.GetYear(),
233 jsDate.GetMonth() + 1, jsDate.GetDay(),
234 jsDate.GetHours(), jsDate.GetMinutes(),
235 jsDate.GetSeconds());
236 break;
237 default:
143 return FALSE; 238 return FALSE;
144 std::wstring c_ConvChar(params[0].ToCFXWideString().c_str()); 239 }
145 std::vector<std::wstring> c_strConvers; 240
146 int iOffset = 0; 241 vRet = swResult.c_str();
147 int iOffend = 0;
148 c_ConvChar.insert(c_ConvChar.begin(),L'S');
149 while(iOffset != -1)
150 {
151 iOffend = c_ConvChar.find(L"%",iOffset+1);
152 std::wstring strSub;
153 if (iOffend == -1)
154 strSub = c_ConvChar.substr(iOffset);
155 else
156 strSub = c_ConvChar.substr(iOffset ,iOffend - iOffset);
157 c_strConvers.push_back(strSub);
158 iOffset = iOffend ;
159 }
160
161 std::wstring c_strResult;
162
163 //for(int iIndex = 1;iIndex < params.size();iIndex++)
164 std::wstring c_strFormat;
165 for(int iIndex = 0;iIndex < (int)c_strConvers.size();iIndex++)
166 {
167 c_strFormat = c_strConvers[iIndex];
168 if (iIndex == 0)
169 {
170 c_strResult = c_strFormat;
171 continue;
172 }
173
174
175 CFX_WideString strSegment;
176 if (iIndex >= iSize) {
177 c_strResult += c_strFormat;
178 continue;
179 }
180
181 switch (ParstDataType(&c_strFormat))
182 {
183 case UTIL_INT:
184 strSegment.Format(c_strFormat.c_str(), params[iIndex].ToInt());
185 break;
186 case UTIL_DOUBLE:
187 strSegment.Format(c_strFormat.c_str(), params[iIndex].ToDouble() );
188 break;
189 case UTIL_STRING:
190 strSegment.Format(c_strFormat.c_str(), params[iIndex].ToCFXWideS tring().c_str());
191 break;
192 default:
193 strSegment.Format(L"%S", c_strFormat.c_str());
194 break;
195 }
196 c_strResult += strSegment.GetBuffer(strSegment.GetLength()+1);
197 }
198
199 c_strResult.erase(c_strResult.begin());
200 vRet = c_strResult.c_str();
201 return TRUE; 242 return TRUE;
202 } 243 }
203 244 if (p1.GetType() == VT_string) {
204 FX_BOOL util::printd(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError) 245 std::basic_string<wchar_t> cFormat = p1.ToCFXWideString().c_str();
205 { 246
206 v8::Isolate* isolate = GetIsolate(cc); 247 bool bXFAPicture = false;
207 248 if (iSize > 2) {
208 int iSize = params.size(); 249 bXFAPicture = params[2].ToBool();
209 if (iSize < 2) 250 }
210 return FALSE; 251
211 252 if (bXFAPicture) {
212 CJS_Value p1(isolate); 253 return FALSE; // currently, it doesn't support XFAPicture.
213 p1 = params[0];
214
215 CJS_Value p2 = params[1];
216 CJS_Date jsDate(isolate);
217 if (!p2.ConvertToDate(jsDate))
218 {
219 sError = JSGetStringFromID((CJS_Context*)cc, IDS_STRING_JSPRINT1);
220 return FALSE;
221 }
222
223 if (!jsDate.IsValidDate())
224 {
225 sError = JSGetStringFromID((CJS_Context*)cc, IDS_STRING_JSPRINT2);
226 return FALSE;
227 }
228
229 if (p1.GetType() == VT_number)
230 {
231 int nFormat = p1.ToInt();
232 CFX_WideString swResult;
233
234 switch (nFormat)
235 {
236 case 0:
237 swResult.Format(L"D:%04d%02d%02d%02d%02d%02d",
238 jsDate.GetYear(),
239 jsDate.GetMonth() + 1,
240 jsDate.GetDay(),
241 jsDate.GetHours(),
242 jsDate.GetMinutes(),
243 jsDate.GetSeconds());
244 break;
245 case 1:
246 swResult.Format(L"%04d.%02d.%02d %02d:%02d:%02d",
247 jsDate.GetYear(),
248 jsDate.GetMonth() + 1,
249 jsDate.GetDay(),
250 jsDate.GetHours(),
251 jsDate.GetMinutes(),
252 jsDate.GetSeconds());
253 break;
254 case 2:
255 swResult.Format(L"%04d/%02d/%02d %02d:%02d:%02d",
256 jsDate.GetYear(),
257 jsDate.GetMonth() + 1,
258 jsDate.GetDay(),
259 jsDate.GetHours(),
260 jsDate.GetMinutes(),
261 jsDate.GetSeconds());
262 break;
263 default:
264 return FALSE;
265 }
266
267 vRet = swResult.c_str();
268 return TRUE;
269 }
270 if (p1.GetType() == VT_string)
271 {
272 std::basic_string<wchar_t> cFormat = p1.ToCFXWideString().c_str();
273
274 bool bXFAPicture = false;
275 if (iSize > 2)
276 {
277 bXFAPicture = params[2].ToBool();
278 }
279
280 if (bXFAPicture)
281 {
282 return FALSE; //currently, it doesn't support XFAPicture.
283 }
284
285 int iIndex;
286 for(iIndex = 0;iIndex<sizeof(fcTable)/sizeof(stru_TbConvert);iIndex++)
287 {
288 int iStart = 0;
289 int iEnd;
290 while((iEnd = cFormat.find(fcTable[iIndex].lpszJSMark, iStart)) != - 1)
291 {
292 cFormat.replace(iEnd, FXSYS_wcslen(fcTable[iIndex].lpszJSMark), fcTable[iIndex].lpszCppMark);
293 iStart = iEnd;
294 }
295 }
296
297 int iYear,iMonth,iDay,iHour,iMin,iSec;
298 iYear = jsDate.GetYear();
299 iMonth = jsDate.GetMonth();
300 iDay = jsDate.GetDay();
301 iHour = jsDate.GetHours();
302 iMin = jsDate.GetMinutes();
303 iSec = jsDate.GetSeconds();
304
305 struct tm time = {};
306 time.tm_year = iYear-1900;
307 time.tm_mon = iMonth;
308 time.tm_mday = iDay;
309 time.tm_hour = iHour;
310 time.tm_min = iMin;
311 time.tm_sec = iSec;
312
313 struct stru_TbConvertAd
314 {
315 const FX_WCHAR* lpszJSMark;
316 int iValue;
317 };
318
319 stru_TbConvertAd cTableAd[] ={
320 { L"m", iMonth+1 },
321 { L"d", iDay },
322 { L"H", iHour },
323 { L"h", iHour>12?iHour-12:iHour },
324 { L"M", iMin },
325 { L"s", iSec },
326 };
327
328 for(iIndex = 0;iIndex<sizeof(cTableAd)/sizeof(stru_TbConvertAd);iIndex++ )
329 {
330 wchar_t tszValue[10];
331 CFX_WideString sValue;
332 sValue.Format(L"%d",cTableAd[iIndex].iValue);
333 memcpy(tszValue, (wchar_t *)sValue.GetBuffer(sValue.GetLength()+1),
334 (sValue.GetLength()+1)*sizeof(wchar_t));
335
336 int iStart = 0;
337 int iEnd;
338 while((iEnd = cFormat.find(cTableAd[iIndex].lpszJSMark, iStart)) != -1)
339 {
340 if (iEnd > 0)
341 {
342 if (cFormat[iEnd-1] == L'%')
343 {
344 iStart = iEnd+1;
345 continue;
346 }
347 }
348 cFormat.replace(iEnd, FXSYS_wcslen(cTableAd[iIndex].lpszJSMark), tszValue);
349 iStart = iEnd;
350 }
351 }
352
353 CFX_WideString strFormat;
354 wchar_t buf[64] = {};
355 strFormat = wcsftime(buf, 64, cFormat.c_str(), &time);
356 cFormat = buf;
357 vRet = cFormat.c_str();
358 return TRUE;
359 }
360 return FALSE;
361 }
362
363 void util::printd(const std::wstring &cFormat2, CJS_Date jsDate, bool bXFAPictur e, std::wstring &cPurpose)
364 {
365 std::wstring cFormat = cFormat2;
366
367 if (bXFAPicture)
368 {
369 return ; //currently, it doesn't support XFAPicture.
370 } 254 }
371 255
372 int iIndex; 256 int iIndex;
373 for(iIndex = 0;iIndex<sizeof(fcTable)/sizeof(stru_TbConvert);iIndex++) 257 for (iIndex = 0; iIndex < sizeof(fcTable) / sizeof(stru_TbConvert);
374 { 258 iIndex++) {
375 int iStart = 0; 259 int iStart = 0;
376 int iEnd; 260 int iEnd;
377 while((iEnd = cFormat.find(fcTable[iIndex].lpszJSMark, iStart)) != -1) 261 while ((iEnd = cFormat.find(fcTable[iIndex].lpszJSMark, iStart)) != -1) {
378 { 262 cFormat.replace(iEnd, FXSYS_wcslen(fcTable[iIndex].lpszJSMark),
379 cFormat.replace(iEnd,FXSYS_wcslen(fcTable[iIndex].lpszJSMark), fcTab le[iIndex].lpszCppMark); 263 fcTable[iIndex].lpszCppMark);
380 iStart = iEnd; 264 iStart = iEnd;
381 } 265 }
382 } 266 }
383 267
384 int iYear,iMonth,iDay,iHour,iMin,iSec; 268 int iYear, iMonth, iDay, iHour, iMin, iSec;
385 iYear = jsDate.GetYear(); 269 iYear = jsDate.GetYear();
386 iMonth = jsDate.GetMonth(); 270 iMonth = jsDate.GetMonth();
387 iDay = jsDate.GetDay(); 271 iDay = jsDate.GetDay();
388 iHour = jsDate.GetHours(); 272 iHour = jsDate.GetHours();
389 iMin = jsDate.GetMinutes(); 273 iMin = jsDate.GetMinutes();
390 iSec = jsDate.GetSeconds(); 274 iSec = jsDate.GetSeconds();
391 275
392 struct tm time = {}; 276 struct tm time = {};
393 time.tm_year = iYear-1900; 277 time.tm_year = iYear - 1900;
394 time.tm_mon = iMonth; 278 time.tm_mon = iMonth;
395 time.tm_mday = iDay; 279 time.tm_mday = iDay;
396 time.tm_hour = iHour; 280 time.tm_hour = iHour;
397 time.tm_min = iMin; 281 time.tm_min = iMin;
398 time.tm_sec = iSec; 282 time.tm_sec = iSec;
399 // COleDateTime cppTm(iYear,iMonth+1,iDay,iHour,iMin,iSec); 283
400 //CString strFormat = cppTm.Format(cFormat.c_str()); 284 struct stru_TbConvertAd {
401 285 const FX_WCHAR* lpszJSMark;
402 struct stru_TbConvertAd 286 int iValue;
403 {
404 const FX_WCHAR* lpszJSMark;
405 int iValue;
406 }; 287 };
407 288
408 stru_TbConvertAd cTableAd[] ={ 289 stru_TbConvertAd cTableAd[] = {
409 { L"m", iMonth+1 }, 290 {L"m", iMonth + 1}, {L"d", iDay},
410 { L"d", iDay }, 291 {L"H", iHour}, {L"h", iHour > 12 ? iHour - 12 : iHour},
411 { L"H", iHour }, 292 {L"M", iMin}, {L"s", iSec},
412 { L"h", iHour>12?iHour-12:iHour },
413 { L"M", iMin },
414 { L"s", iSec },
415 }; 293 };
416 294
417 //cFormat = strFormat.GetBuffer(strFormat.GetLength()+1); 295 for (iIndex = 0; iIndex < sizeof(cTableAd) / sizeof(stru_TbConvertAd);
418 for(iIndex = 0;iIndex<sizeof(cTableAd)/sizeof(stru_TbConvertAd);iIndex++) 296 iIndex++) {
419 { 297 wchar_t tszValue[10];
420 wchar_t tszValue[10]; 298 CFX_WideString sValue;
421 //_itot(cTableAd[iIndex].iValue,tszValue,10); 299 sValue.Format(L"%d", cTableAd[iIndex].iValue);
422 CFX_WideString sValue; 300 memcpy(tszValue, (wchar_t*)sValue.GetBuffer(sValue.GetLength() + 1),
423 sValue.Format(L"%d",cTableAd[iIndex].iValue); 301 (sValue.GetLength() + 1) * sizeof(wchar_t));
424 memcpy(tszValue, (wchar_t *)sValue.GetBuffer(sValue.GetLength()+1),sValu e.GetLength()*sizeof(wchar_t)); 302
425 303 int iStart = 0;
426 304 int iEnd;
427 //strFormat.Replace(cTableAd[iIndex].lpszJSMark,"%d"); 305 while ((iEnd = cFormat.find(cTableAd[iIndex].lpszJSMark, iStart)) != -1) {
428 //strFormat.Format(strFormat,cTableAd[iIndex].iValue); 306 if (iEnd > 0) {
429 int iStart = 0; 307 if (cFormat[iEnd - 1] == L'%') {
430 int iEnd; 308 iStart = iEnd + 1;
431 while((iEnd = cFormat.find(cTableAd[iIndex].lpszJSMark, iStart)) != -1) 309 continue;
432 { 310 }
433 if (iEnd > 0) 311 }
434 { 312 cFormat.replace(iEnd, FXSYS_wcslen(cTableAd[iIndex].lpszJSMark),
435 if (cFormat[iEnd-1] == L'%') 313 tszValue);
436 { 314 iStart = iEnd;
437 iStart = iEnd+1; 315 }
438 continue;
439 }
440 }
441 cFormat.replace(iEnd,FXSYS_wcslen(cTableAd[iIndex].lpszJSMark),tszVa lue);
442 iStart = iEnd;
443 }
444 } 316 }
445 317
446 CFX_WideString strFormat; 318 CFX_WideString strFormat;
447 wchar_t buf[64] = {}; 319 wchar_t buf[64] = {};
448 strFormat = wcsftime(buf, 64, cFormat.c_str(), &time); 320 strFormat = wcsftime(buf, 64, cFormat.c_str(), &time);
449 cFormat = buf; 321 cFormat = buf;
450 cPurpose = cFormat; 322 vRet = cFormat.c_str();
451 }
452
453 FX_BOOL util::printx(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError)
454 {
455 int iSize = params.size();
456 if (iSize<2)
457 return FALSE;
458 CFX_WideString sFormat = params[0].ToCFXWideString();
459 CFX_WideString sSource = params[1].ToCFXWideString();
460 std::string cFormat = CFX_ByteString::FromUnicode(sFormat).c_str();
461 std::string cSource = CFX_ByteString::FromUnicode(sSource).c_str();
462 std::string cDest;
463 printx(cFormat,cSource,cDest);
464 vRet = cDest.c_str();
465 return TRUE; 323 return TRUE;
466 } 324 }
467 325 return FALSE;
468 void util::printx(const std::string &cFormat,const std::string &cSource2,std::st ring &cPurpose) 326 }
469 { 327
470 std::string cSource(cSource2); 328 void util::printd(const std::wstring& cFormat2,
471 if (!cPurpose.empty()) 329 CJS_Date jsDate,
472 //cPurpose.clear(); 330 bool bXFAPicture,
473 cPurpose.erase(); 331 std::wstring& cPurpose) {
474 int itSource = 0; 332 std::wstring cFormat = cFormat2;
475 int iSize = cSource.size(); 333
476 for(int iIndex = 0; iIndex < (int)cFormat.size() && itSource<iSize; iIndex++ ) 334 if (bXFAPicture) {
477 { 335 return; // currently, it doesn't support XFAPicture.
478 char letter = cFormat[iIndex]; 336 }
479 switch(letter) 337
480 { 338 int iIndex;
481 case '?': 339 for (iIndex = 0; iIndex < sizeof(fcTable) / sizeof(stru_TbConvert);
482 //cPurpose.push_back(cSource[itSource]); 340 iIndex++) {
341 int iStart = 0;
342 int iEnd;
343 while ((iEnd = cFormat.find(fcTable[iIndex].lpszJSMark, iStart)) != -1) {
344 cFormat.replace(iEnd, FXSYS_wcslen(fcTable[iIndex].lpszJSMark),
345 fcTable[iIndex].lpszCppMark);
346 iStart = iEnd;
347 }
348 }
349
350 int iYear, iMonth, iDay, iHour, iMin, iSec;
351 iYear = jsDate.GetYear();
352 iMonth = jsDate.GetMonth();
353 iDay = jsDate.GetDay();
354 iHour = jsDate.GetHours();
355 iMin = jsDate.GetMinutes();
356 iSec = jsDate.GetSeconds();
357
358 struct tm time = {};
359 time.tm_year = iYear - 1900;
360 time.tm_mon = iMonth;
361 time.tm_mday = iDay;
362 time.tm_hour = iHour;
363 time.tm_min = iMin;
364 time.tm_sec = iSec;
365 // COleDateTime cppTm(iYear,iMonth+1,iDay,iHour,iMin,iSec);
366 // CString strFormat = cppTm.Format(cFormat.c_str());
367
368 struct stru_TbConvertAd {
369 const FX_WCHAR* lpszJSMark;
370 int iValue;
371 };
372
373 stru_TbConvertAd cTableAd[] = {
374 {L"m", iMonth + 1}, {L"d", iDay},
375 {L"H", iHour}, {L"h", iHour > 12 ? iHour - 12 : iHour},
376 {L"M", iMin}, {L"s", iSec},
377 };
378
379 // cFormat = strFormat.GetBuffer(strFormat.GetLength()+1);
380 for (iIndex = 0; iIndex < sizeof(cTableAd) / sizeof(stru_TbConvertAd);
381 iIndex++) {
382 wchar_t tszValue[10];
383 //_itot(cTableAd[iIndex].iValue,tszValue,10);
384 CFX_WideString sValue;
385 sValue.Format(L"%d", cTableAd[iIndex].iValue);
386 memcpy(tszValue, (wchar_t*)sValue.GetBuffer(sValue.GetLength() + 1),
387 sValue.GetLength() * sizeof(wchar_t));
388
389 // strFormat.Replace(cTableAd[iIndex].lpszJSMark,"%d");
390 // strFormat.Format(strFormat,cTableAd[iIndex].iValue);
391 int iStart = 0;
392 int iEnd;
393 while ((iEnd = cFormat.find(cTableAd[iIndex].lpszJSMark, iStart)) != -1) {
394 if (iEnd > 0) {
395 if (cFormat[iEnd - 1] == L'%') {
396 iStart = iEnd + 1;
397 continue;
398 }
399 }
400 cFormat.replace(iEnd, FXSYS_wcslen(cTableAd[iIndex].lpszJSMark),
401 tszValue);
402 iStart = iEnd;
403 }
404 }
405
406 CFX_WideString strFormat;
407 wchar_t buf[64] = {};
408 strFormat = wcsftime(buf, 64, cFormat.c_str(), &time);
409 cFormat = buf;
410 cPurpose = cFormat;
411 }
412
413 FX_BOOL util::printx(IFXJS_Context* cc,
414 const CJS_Parameters& params,
415 CJS_Value& vRet,
416 CFX_WideString& sError) {
417 int iSize = params.size();
418 if (iSize < 2)
419 return FALSE;
420 CFX_WideString sFormat = params[0].ToCFXWideString();
421 CFX_WideString sSource = params[1].ToCFXWideString();
422 std::string cFormat = CFX_ByteString::FromUnicode(sFormat).c_str();
423 std::string cSource = CFX_ByteString::FromUnicode(sSource).c_str();
424 std::string cDest;
425 printx(cFormat, cSource, cDest);
426 vRet = cDest.c_str();
427 return TRUE;
428 }
429
430 void util::printx(const std::string& cFormat,
431 const std::string& cSource2,
432 std::string& cPurpose) {
433 std::string cSource(cSource2);
434 if (!cPurpose.empty())
435 // cPurpose.clear();
436 cPurpose.erase();
437 int itSource = 0;
438 int iSize = cSource.size();
439 for (int iIndex = 0; iIndex < (int)cFormat.size() && itSource < iSize;
440 iIndex++) {
441 char letter = cFormat[iIndex];
442 switch (letter) {
443 case '?':
444 // cPurpose.push_back(cSource[itSource]);
445 cPurpose += cSource[itSource];
446 itSource++;
447 break;
448 case 'X': {
449 while (itSource < iSize) {
450 if ((cSource[itSource] >= '0' && cSource[itSource] <= '9') ||
451 (cSource[itSource] >= 'a' && cSource[itSource] <= 'z') ||
452 (cSource[itSource] >= 'A' && cSource[itSource] <= 'Z')) {
453 // cPurpose.push_back(cSource[itSource]);
483 cPurpose += cSource[itSource]; 454 cPurpose += cSource[itSource];
484 itSource++; 455 itSource++;
485 break; 456 break;
486 case 'X': 457 }
487 { 458 itSource++;
488 while(itSource < iSize) 459 }
489 { 460 break;
490 if ((cSource[itSource]>='0'&&cSource[itSource]<='9') || (cSo urce[itSource]>='a' && cSource[itSource]<='z') || (cSource[itSource]>='A' && cSo urce[itSource]<='Z')) 461 } break;
491 { 462 case 'A': {
492 //cPurpose.push_back(cSource[itSource]); 463 while (itSource < iSize) {
493 cPurpose += cSource[itSource]; 464 if ((cSource[itSource] >= 'a' && cSource[itSource] <= 'z') ||
494 itSource++; 465 (cSource[itSource] >= 'A' && cSource[itSource] <= 'Z')) {
495 break; 466 // cPurpose.push_back(cSource[itSource]);
496 } 467 cPurpose += cSource[itSource];
497 itSource++; 468 itSource++;
498 }
499 break;
500 }
501 break; 469 break;
502 case 'A': 470 }
503 { 471 itSource++;
504 while(itSource < iSize) 472 }
505 { 473 break;
506 if ((cSource[itSource]>='a' && cSource[itSource]<='z') || (c Source[itSource]>='A' && cSource[itSource]<='Z')) 474 } break;
507 { 475 case '9': {
508 //cPurpose.push_back(cSource[itSource]); 476 while (itSource < iSize) {
509 cPurpose += cSource[itSource]; 477 if (cSource[itSource] >= '0' && cSource[itSource] <= '9') {
510 itSource++; 478 // cPurpose.push_back(cSource[itSource]);
511 break; 479 cPurpose += cSource[itSource];
512 } 480 itSource++;
513 itSource++;
514 }
515 break;
516 }
517 break; 481 break;
518 case '9': 482 }
519 { 483 itSource++;
520 while(itSource < iSize) 484 }
521 { 485 break;
522 if (cSource[itSource]>='0'&&cSource[itSource]<='9') 486 }
523 { 487 case '*': {
524 //cPurpose.push_back(cSource[itSource]); 488 cPurpose.append(cSource, itSource, iSize - itSource);
525 cPurpose += cSource[itSource]; 489 itSource = iSize - 1;
526 itSource++; 490 break;
527 break; 491 }
528 } 492 case '\\':
529 itSource++; 493 break;
530 } 494 case '>': {
531 break; 495 for (std::string::iterator it = cSource.begin(); it != cSource.end();
532 } 496 it++) {
533 case '*': 497 *it = toupper(*it);
534 { 498 }
535 cPurpose.append(cSource,itSource,iSize-itSource); 499 break;
536 itSource = iSize-1; 500 }
537 break; 501 case '<': {
538 } 502 for (std::string::iterator it = cSource.begin(); it != cSource.end();
539 case '\\': 503 it++) {
540 break; 504 *it = tolower(*it);
541 case '>': 505 }
542 { 506 break;
543 for(std::string::iterator it = cSource.begin();it != cSource.end (); it++) 507 }
544 { 508 case '=':
545 *it = toupper(*it); 509 break;
546 } 510 default:
547 break; 511 // cPurpose.push_back(letter);
548 } 512 cPurpose += letter;
549 case '<': 513 break;
550 {
551 for(std::string::iterator it = cSource.begin();it != cSource.end (); it++)
552 {
553 *it = tolower(*it);
554 }
555 break;
556 }
557 case '=':
558 break;
559 default:
560 //cPurpose.push_back(letter);
561 cPurpose += letter;
562 break;
563 }
564 } 514 }
565 } 515 }
566 516 }
567 FX_BOOL util::scand(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError) 517
568 { 518 FX_BOOL util::scand(IFXJS_Context* cc,
569 v8::Isolate* isolate = GetIsolate(cc); 519 const CJS_Parameters& params,
570 int iSize = params.size(); 520 CJS_Value& vRet,
571 if (iSize < 2) 521 CFX_WideString& sError) {
572 return FALSE; 522 v8::Isolate* isolate = GetIsolate(cc);
573 523 int iSize = params.size();
574 CFX_WideString sFormat = params[0].ToCFXWideString(); 524 if (iSize < 2)
575 CFX_WideString sDate = params[1].ToCFXWideString(); 525 return FALSE;
576 double dDate = JS_GetDateTime(); 526
577 if (sDate.GetLength() > 0) 527 CFX_WideString sFormat = params[0].ToCFXWideString();
578 { 528 CFX_WideString sDate = params[1].ToCFXWideString();
579 FX_BOOL bWrongFormat = FALSE; 529 double dDate = JS_GetDateTime();
580 dDate = CJS_PublicMethods::MakeRegularDate(sDate,sFormat,bWrongFormat); 530 if (sDate.GetLength() > 0) {
581 } 531 FX_BOOL bWrongFormat = FALSE;
582 532 dDate = CJS_PublicMethods::MakeRegularDate(sDate, sFormat, bWrongFormat);
583 if (!JS_PortIsNan(dDate)) 533 }
584 { 534
585 CJS_Date date(isolate,dDate); 535 if (!JS_PortIsNan(dDate)) {
586 vRet = date; 536 CJS_Date date(isolate, dDate);
587 } 537 vRet = date;
588 else 538 } else {
589 { 539 vRet.SetNull();
590 vRet.SetNull(); 540 }
591 } 541
592 542 return TRUE;
593 return TRUE; 543 }
594 } 544
595 545 int64_t FX_atoi64(const char* nptr) {
596 int64_t FX_atoi64(const char *nptr) 546 int c; /* current char */
597 { 547 int64_t total; /* current total */
598 int c; /* current char */ 548 int sign; /* if '-', then negative, otherwise positive */
599 int64_t total; /* current total */ 549
600 int sign; /* if '-', then negative, otherwise positive */ 550 /* skip whitespace */
601 551 while (isspace((int)(unsigned char)*nptr))
602 /* skip whitespace */ 552 ++nptr;
603 while ( isspace((int)(unsigned char)*nptr) ) 553
604 ++nptr; 554 c = (int)(unsigned char)*nptr++;
605 555 sign = c; /* save sign indication */
606 c = (int)(unsigned char)*nptr++; 556 if (c == '-' || c == '+')
607 sign = c; /* save sign indication */ 557 c = (int)(unsigned char)*nptr++; /* skip sign */
608 if (c == '-' || c == '+') 558
609 c = (int)(unsigned char)*nptr++; /* skip sign */ 559 total = 0;
610 560
611 total = 0; 561 while (isdigit(c)) {
612 562 total = 10 * total + (c - '0'); /* accumulate digit */
613 while (isdigit(c)) { 563 c = (int)(unsigned char)*nptr++; /* get next char */
614 total = 10 * total + (c - '0'); /* accumulate digit */ 564 }
615 c = (int)(unsigned char)*nptr++; /* get next char */ 565
616 } 566 return sign == '-' ? -total : total;
617 567 }
618 return sign == '-' ? -total : total; 568
619 } 569 FX_BOOL util::byteToChar(IFXJS_Context* cc,
620 570 const CJS_Parameters& params,
621 FX_BOOL util::byteToChar(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Va lue& vRet, CFX_WideString& sError) 571 CJS_Value& vRet,
622 { 572 CFX_WideString& sError) {
623 int iSize = params.size(); 573 int iSize = params.size();
624 if (iSize == 0) 574 if (iSize == 0)
625 return FALSE; 575 return FALSE;
626 int nByte = params[0].ToInt(); 576 int nByte = params[0].ToInt();
627 unsigned char cByte = (unsigned char)nByte; 577 unsigned char cByte = (unsigned char)nByte;
628 CFX_WideString csValue; 578 CFX_WideString csValue;
629 csValue.Format(L"%c", cByte); 579 csValue.Format(L"%c", cByte);
630 vRet = csValue.c_str(); 580 vRet = csValue.c_str();
631 return TRUE; 581 return TRUE;
632 } 582 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698