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