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