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

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

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

Powered by Google App Engine
This is Rietveld 408576698