1*3ac0a46fSAndroid Build Coastguard Worker // Copyright 2014 The PDFium Authors 2*3ac0a46fSAndroid Build Coastguard Worker // Use of this source code is governed by a BSD-style license that can be 3*3ac0a46fSAndroid Build Coastguard Worker // found in the LICENSE file. 4*3ac0a46fSAndroid Build Coastguard Worker 5*3ac0a46fSAndroid Build Coastguard Worker // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com 6*3ac0a46fSAndroid Build Coastguard Worker 7*3ac0a46fSAndroid Build Coastguard Worker #ifndef FXJS_CJS_UTIL_H_ 8*3ac0a46fSAndroid Build Coastguard Worker #define FXJS_CJS_UTIL_H_ 9*3ac0a46fSAndroid Build Coastguard Worker 10*3ac0a46fSAndroid Build Coastguard Worker #include <vector> 11*3ac0a46fSAndroid Build Coastguard Worker 12*3ac0a46fSAndroid Build Coastguard Worker #include "core/fxcrt/widestring.h" 13*3ac0a46fSAndroid Build Coastguard Worker #include "fxjs/cjs_object.h" 14*3ac0a46fSAndroid Build Coastguard Worker #include "fxjs/js_define.h" 15*3ac0a46fSAndroid Build Coastguard Worker #include "v8/include/v8-forward.h" 16*3ac0a46fSAndroid Build Coastguard Worker 17*3ac0a46fSAndroid Build Coastguard Worker class CJS_Util final : public CJS_Object { 18*3ac0a46fSAndroid Build Coastguard Worker public: 19*3ac0a46fSAndroid Build Coastguard Worker enum class DataType { 20*3ac0a46fSAndroid Build Coastguard Worker kInvalid = -1, 21*3ac0a46fSAndroid Build Coastguard Worker kInt = 0, 22*3ac0a46fSAndroid Build Coastguard Worker kDouble = 1, 23*3ac0a46fSAndroid Build Coastguard Worker kString = 2, 24*3ac0a46fSAndroid Build Coastguard Worker }; 25*3ac0a46fSAndroid Build Coastguard Worker 26*3ac0a46fSAndroid Build Coastguard Worker static uint32_t GetObjDefnID(); 27*3ac0a46fSAndroid Build Coastguard Worker static void DefineJSObjects(CFXJS_Engine* pEngine); 28*3ac0a46fSAndroid Build Coastguard Worker 29*3ac0a46fSAndroid Build Coastguard Worker CJS_Util(v8::Local<v8::Object> pObject, CJS_Runtime* pRuntime); 30*3ac0a46fSAndroid Build Coastguard Worker ~CJS_Util() override; 31*3ac0a46fSAndroid Build Coastguard Worker 32*3ac0a46fSAndroid Build Coastguard Worker // Ensure that |sFormat| contains at most one well-understood printf 33*3ac0a46fSAndroid Build Coastguard Worker // formatting directive which is safe to use with a single argument, and 34*3ac0a46fSAndroid Build Coastguard Worker // return the type of argument expected, or -1 otherwise. If -1 is returned, 35*3ac0a46fSAndroid Build Coastguard Worker // it is NOT safe to use |sFormat| with printf() and it must be copied 36*3ac0a46fSAndroid Build Coastguard Worker // byte-by-byte. 37*3ac0a46fSAndroid Build Coastguard Worker // 38*3ac0a46fSAndroid Build Coastguard Worker // Exposed for testing. 39*3ac0a46fSAndroid Build Coastguard Worker static DataType ParseDataType(WideString* sFormat); 40*3ac0a46fSAndroid Build Coastguard Worker 41*3ac0a46fSAndroid Build Coastguard Worker // Exposed for testing. 42*3ac0a46fSAndroid Build Coastguard Worker static WideString StringPrintx(const WideString& cFormat, 43*3ac0a46fSAndroid Build Coastguard Worker const WideString& cSource); 44*3ac0a46fSAndroid Build Coastguard Worker 45*3ac0a46fSAndroid Build Coastguard Worker JS_STATIC_METHOD(printd, CJS_Util) 46*3ac0a46fSAndroid Build Coastguard Worker JS_STATIC_METHOD(printf, CJS_Util) 47*3ac0a46fSAndroid Build Coastguard Worker JS_STATIC_METHOD(printx, CJS_Util) 48*3ac0a46fSAndroid Build Coastguard Worker JS_STATIC_METHOD(scand, CJS_Util) 49*3ac0a46fSAndroid Build Coastguard Worker JS_STATIC_METHOD(byteToChar, CJS_Util) 50*3ac0a46fSAndroid Build Coastguard Worker 51*3ac0a46fSAndroid Build Coastguard Worker private: 52*3ac0a46fSAndroid Build Coastguard Worker static uint32_t ObjDefnID; 53*3ac0a46fSAndroid Build Coastguard Worker static const char kName[]; 54*3ac0a46fSAndroid Build Coastguard Worker static const JSMethodSpec MethodSpecs[]; 55*3ac0a46fSAndroid Build Coastguard Worker 56*3ac0a46fSAndroid Build Coastguard Worker CJS_Result printd(CJS_Runtime* pRuntime, 57*3ac0a46fSAndroid Build Coastguard Worker const std::vector<v8::Local<v8::Value>>& params); 58*3ac0a46fSAndroid Build Coastguard Worker CJS_Result printf(CJS_Runtime* pRuntime, 59*3ac0a46fSAndroid Build Coastguard Worker const std::vector<v8::Local<v8::Value>>& params); 60*3ac0a46fSAndroid Build Coastguard Worker CJS_Result printx(CJS_Runtime* pRuntime, 61*3ac0a46fSAndroid Build Coastguard Worker const std::vector<v8::Local<v8::Value>>& params); 62*3ac0a46fSAndroid Build Coastguard Worker CJS_Result scand(CJS_Runtime* pRuntime, 63*3ac0a46fSAndroid Build Coastguard Worker const std::vector<v8::Local<v8::Value>>& params); 64*3ac0a46fSAndroid Build Coastguard Worker CJS_Result byteToChar(CJS_Runtime* pRuntime, 65*3ac0a46fSAndroid Build Coastguard Worker const std::vector<v8::Local<v8::Value>>& params); 66*3ac0a46fSAndroid Build Coastguard Worker }; 67*3ac0a46fSAndroid Build Coastguard Worker 68*3ac0a46fSAndroid Build Coastguard Worker #endif // FXJS_CJS_UTIL_H_ 69