OLD | NEW |
1 // Copyright 2014 PDFium Authors. All rights reserved. | 1 // Copyright 2014 PDFium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com | 5 // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com |
6 | 6 |
7 #ifndef _JS_DEFINE_H_ | 7 #ifndef _JS_DEFINE_H_ |
8 #define _JS_DEFINE_H_ | 8 #define _JS_DEFINE_H_ |
9 | 9 |
10 #include "../jsapi/fxjs_v8.h" | 10 #include "../jsapi/fxjs_v8.h" |
(...skipping 14 matching lines...) Expand all Loading... |
25 { | 25 { |
26 const wchar_t* pName; | 26 const wchar_t* pName; |
27 v8::AccessorGetterCallback pPropGet; | 27 v8::AccessorGetterCallback pPropGet; |
28 v8::AccessorSetterCallback pPropPut; | 28 v8::AccessorSetterCallback pPropPut; |
29 }; | 29 }; |
30 | 30 |
31 struct JSMethodSpec | 31 struct JSMethodSpec |
32 { | 32 { |
33 const wchar_t* pName; | 33 const wchar_t* pName; |
34 v8::FunctionCallback pMethodCall; | 34 v8::FunctionCallback pMethodCall; |
35 unsigned nParamNum; | |
36 }; | 35 }; |
37 | 36 |
38 /* ====================================== PUBLIC DEFINE SPEC ===================
=========================== */ | 37 /* ====================================== PUBLIC DEFINE SPEC ===================
=========================== */ |
39 #define JS_WIDESTRING(widestring) L###widestring | 38 #define JS_WIDESTRING(widestring) L###widestring |
40 | 39 |
41 #define BEGIN_JS_STATIC_CONST(js_class_name) JSConstSpec js_class_name::JS_Class
_Consts[] = { | 40 #define BEGIN_JS_STATIC_CONST(js_class_name) JSConstSpec js_class_name::JS_Class
_Consts[] = { |
42 #define JS_STATIC_CONST_ENTRY_NUMBER(const_name, pValue) {JS_WIDESTRING(const_na
me), pValue, L"", 0}, | 41 #define JS_STATIC_CONST_ENTRY_NUMBER(const_name, pValue) {JS_WIDESTRING(const_na
me), pValue, L"", 0}, |
43 #define JS_STATIC_CONST_ENTRY_STRING(const_name, pValue) {JS_WIDESTRING(const_na
me), 0, JS_WIDESTRING(pValue), 1}, | 42 #define JS_STATIC_CONST_ENTRY_STRING(const_name, pValue) {JS_WIDESTRING(const_na
me), 0, JS_WIDESTRING(pValue), 1}, |
44 #define END_JS_STATIC_CONST() {0, 0, 0, 0}}; | 43 #define END_JS_STATIC_CONST() {0, 0, 0, 0}}; |
45 | 44 |
46 #define BEGIN_JS_STATIC_PROP(js_class_name) JSPropertySpec js_class_name::JS_Cla
ss_Properties[] = { | 45 #define BEGIN_JS_STATIC_PROP(js_class_name) JSPropertySpec js_class_name::JS_Cla
ss_Properties[] = { |
47 #define JS_STATIC_PROP_ENTRY(prop_name) {JS_WIDESTRING(prop_name), get_##prop_na
me##_static, set_##prop_name##_static}, | 46 #define JS_STATIC_PROP_ENTRY(prop_name) {JS_WIDESTRING(prop_name), get_##prop_na
me##_static, set_##prop_name##_static}, |
48 #define END_JS_STATIC_PROP() {0, 0, 0}}; | 47 #define END_JS_STATIC_PROP() {0, 0, 0}}; |
49 | 48 |
50 #define BEGIN_JS_STATIC_METHOD(js_class_name) JSMethodSpec js_class_name::JS_Cla
ss_Methods[] = { | 49 #define BEGIN_JS_STATIC_METHOD(js_class_name) JSMethodSpec js_class_name::JS_Cla
ss_Methods[] = { |
51 #define JS_STATIC_METHOD_ENTRY(method_name, nargs) {JS_WIDESTRING(method_name),
method_name##_static, nargs}, | 50 #define JS_STATIC_METHOD_ENTRY(method_name) {JS_WIDESTRING(method_name), method_
name##_static}, |
52 #define END_JS_STATIC_METHOD() {0, 0, 0}}; | 51 #define END_JS_STATIC_METHOD() {0, 0}}; |
53 | 52 |
54 /* ======================================== PROP CALLBACK ======================
====================== */ | 53 /* ======================================== PROP CALLBACK ======================
====================== */ |
55 | 54 |
56 template <class C, FX_BOOL (C::*M)(IFXJS_Context*, CJS_PropValue&, CFX_WideStrin
g&)> | 55 template <class C, FX_BOOL (C::*M)(IFXJS_Context*, CJS_PropValue&, CFX_WideStrin
g&)> |
57 void JSPropGetter(const char* prop_name_string, | 56 void JSPropGetter(const char* prop_name_string, |
58 const char* class_name_string, | 57 const char* class_name_string, |
59 v8::Local<v8::String> property, | 58 v8::Local<v8::String> property, |
60 const v8::PropertyCallbackInfo<v8::Value>& info) { | 59 const v8::PropertyCallbackInfo<v8::Value>& info) { |
61 v8::Isolate* isolate = info.GetIsolate(); | 60 v8::Isolate* isolate = info.GetIsolate(); |
62 IFXJS_Runtime* pRuntime = (IFXJS_Runtime*)isolate->GetData(2); | 61 IFXJS_Runtime* pRuntime = (IFXJS_Runtime*)isolate->GetData(2); |
(...skipping 115 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
178 {\ | 177 {\ |
179 int nObjDefnID = JS_DefineObj(pRuntime, js_class_name::m_pClassName, eOb
jType, JSConstructor, JSDestructor, 0);\ | 178 int nObjDefnID = JS_DefineObj(pRuntime, js_class_name::m_pClassName, eOb
jType, JSConstructor, JSDestructor, 0);\ |
180 if (nObjDefnID >= 0)\ | 179 if (nObjDefnID >= 0)\ |
181 {\ | 180 {\ |
182 for (int j=0, szj=sizeof(JS_Class_Properties)/sizeof(JSPropertyS
pec)-1; j<szj; j++)\ | 181 for (int j=0, szj=sizeof(JS_Class_Properties)/sizeof(JSPropertyS
pec)-1; j<szj; j++)\ |
183 {\ | 182 {\ |
184 if (JS_DefineObjProperty(pRuntime, nObjDefnID, JS_Class_
Properties[j].pName, JS_Class_Properties[j].pPropGet, JS_Class_Properties[j].pPr
opPut) < 0) return -1;\ | 183 if (JS_DefineObjProperty(pRuntime, nObjDefnID, JS_Class_
Properties[j].pName, JS_Class_Properties[j].pPropGet, JS_Class_Properties[j].pPr
opPut) < 0) return -1;\ |
185 }\ | 184 }\ |
186 for (int k=0, szk=sizeof(JS_Class_Methods)/sizeof(JSMethodSpec)-
1; k<szk; k++)\ | 185 for (int k=0, szk=sizeof(JS_Class_Methods)/sizeof(JSMethodSpec)-
1; k<szk; k++)\ |
187 {\ | 186 {\ |
188 » » » if (JS_DefineObjMethod(pRuntime, nObjDefnID,JS_Class_Met
hods[k].pName, JS_Class_Methods[k].pMethodCall, JS_Class_Methods[k].nParamNum) <
0) return -1;\ | 187 » » » if (JS_DefineObjMethod(pRuntime, nObjDefnID,JS_Class_Met
hods[k].pName, JS_Class_Methods[k].pMethodCall) < 0) return -1;\ |
189 }\ | 188 }\ |
190 return nObjDefnID;\ | 189 return nObjDefnID;\ |
191 }\ | 190 }\ |
192 return -1;\ | 191 return -1;\ |
193 } | 192 } |
194 | 193 |
195 #define IMPLEMENT_JS_CLASS(js_class_name, class_name) IMPLEMENT_JS_CLASS_RICH(js
_class_name, class_name, class_name) | 194 #define IMPLEMENT_JS_CLASS(js_class_name, class_name) IMPLEMENT_JS_CLASS_RICH(js
_class_name, class_name, class_name) |
196 | 195 |
197 /* ======================================== CONST CLASS ========================
==================== */ | 196 /* ======================================== CONST CLASS ========================
==================== */ |
198 | 197 |
(...skipping 151 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
350 \ | 349 \ |
351 if (nObjDefnID >= 0)\ | 350 if (nObjDefnID >= 0)\ |
352 {\ | 351 {\ |
353 for (int j=0, szj=sizeof(JS_Class_Properties)/sizeof(JSPropertyS
pec)-1; j<szj; j++)\ | 352 for (int j=0, szj=sizeof(JS_Class_Properties)/sizeof(JSPropertyS
pec)-1; j<szj; j++)\ |
354 {\ | 353 {\ |
355 if (JS_DefineObjProperty(pRuntime, nObjDefnID, JS_Class_
Properties[j].pName, JS_Class_Properties[j].pPropGet,JS_Class_Properties[j].pPro
pPut)<0)return -1;\ | 354 if (JS_DefineObjProperty(pRuntime, nObjDefnID, JS_Class_
Properties[j].pName, JS_Class_Properties[j].pPropGet,JS_Class_Properties[j].pPro
pPut)<0)return -1;\ |
356 }\ | 355 }\ |
357 \ | 356 \ |
358 for (int k=0, szk=sizeof(JS_Class_Methods)/sizeof(JSMethodSpec)-
1; k<szk; k++)\ | 357 for (int k=0, szk=sizeof(JS_Class_Methods)/sizeof(JSMethodSpec)-
1; k<szk; k++)\ |
359 {\ | 358 {\ |
360 » » » if (JS_DefineObjMethod(pRuntime, nObjDefnID,JS_Class_Met
hods[k].pName,JS_Class_Methods[k].pMethodCall,JS_Class_Methods[k].nParamNum)<0)r
eturn -1;\ | 359 » » » if (JS_DefineObjMethod(pRuntime, nObjDefnID,JS_Class_Met
hods[k].pName,JS_Class_Methods[k].pMethodCall)<0)return -1;\ |
361 }\ | 360 }\ |
362 if (JS_DefineObjAllProperties(pRuntime, nObjDefnID, js_class_nam
e::queryprop_##js_class_name##_static, js_class_name::getprop_##js_class_name##_
static,js_class_name::putprop_##js_class_name##_static,js_class_name::delprop_##
js_class_name##_static)<0) return -1;\ | 361 if (JS_DefineObjAllProperties(pRuntime, nObjDefnID, js_class_nam
e::queryprop_##js_class_name##_static, js_class_name::getprop_##js_class_name##_
static,js_class_name::putprop_##js_class_name##_static,js_class_name::delprop_##
js_class_name##_static)<0) return -1;\ |
363 \ | 362 \ |
364 return nObjDefnID;\ | 363 return nObjDefnID;\ |
365 }\ | 364 }\ |
366 \ | 365 \ |
367 return -1;\ | 366 return -1;\ |
368 } | 367 } |
369 | 368 |
370 /* ======================================== GLOBAL METHODS =====================
======================= */ | 369 /* ======================================== GLOBAL METHODS =====================
======================= */ |
(...skipping 22 matching lines...) Expand all Loading... |
393 JSGlobalFunc<fun_name>(#fun_name, info); \ | 392 JSGlobalFunc<fun_name>(#fun_name, info); \ |
394 } | 393 } |
395 | 394 |
396 #define JS_STATIC_DECLARE_GLOBAL_FUN() \ | 395 #define JS_STATIC_DECLARE_GLOBAL_FUN() \ |
397 static JSMethodSpec global_methods[]; \ | 396 static JSMethodSpec global_methods[]; \ |
398 static int Init(IJS_Runtime* pRuntime) | 397 static int Init(IJS_Runtime* pRuntime) |
399 | 398 |
400 #define BEGIN_JS_STATIC_GLOBAL_FUN(js_class_name) \ | 399 #define BEGIN_JS_STATIC_GLOBAL_FUN(js_class_name) \ |
401 JSMethodSpec js_class_name::global_methods[] = { | 400 JSMethodSpec js_class_name::global_methods[] = { |
402 | 401 |
403 #define JS_STATIC_GLOBAL_FUN_ENTRY(method_name,nargs) JS_STATIC_METHOD_ENTRY(met
hod_name,nargs) | 402 #define JS_STATIC_GLOBAL_FUN_ENTRY(method_name) JS_STATIC_METHOD_ENTRY(method_na
me) |
404 | 403 |
405 #define END_JS_STATIC_GLOBAL_FUN() END_JS_STATIC_METHOD() | 404 #define END_JS_STATIC_GLOBAL_FUN() END_JS_STATIC_METHOD() |
406 | 405 |
407 #define IMPLEMENT_JS_STATIC_GLOBAL_FUN(js_class_name) \ | 406 #define IMPLEMENT_JS_STATIC_GLOBAL_FUN(js_class_name) \ |
408 int js_class_name::Init(IJS_Runtime* pRuntime)\ | 407 int js_class_name::Init(IJS_Runtime* pRuntime)\ |
409 {\ | 408 {\ |
410 for (int i=0, sz=sizeof(js_class_name::global_methods)/sizeof(JSMethodSp
ec)-1; i<sz; i++)\ | 409 for (int i=0, sz=sizeof(js_class_name::global_methods)/sizeof(JSMethodSp
ec)-1; i<sz; i++)\ |
411 {\ | 410 {\ |
412 if (JS_DefineGlobalMethod(pRuntime,\ | 411 if (JS_DefineGlobalMethod(pRuntime,\ |
413 js_class_name::global_methods[i].pName,\ | 412 js_class_name::global_methods[i].pName,\ |
414 » » » » js_class_name::global_methods[i].pMethodCall,\ | 413 » » » » js_class_name::global_methods[i].pMethodCall\ |
415 » » » » js_class_name::global_methods[i].nParamNum\ | |
416 ) < 0\ | 414 ) < 0\ |
417 )return -1;\ | 415 )return -1;\ |
418 }\ | 416 }\ |
419 return 0;\ | 417 return 0;\ |
420 } | 418 } |
421 | 419 |
422 /* ======================================== GLOBAL CONSTS ======================
====================== */ | 420 /* ======================================== GLOBAL CONSTS ======================
====================== */ |
423 #define DEFINE_GLOBAL_CONST(pRuntime, const_name , const_value)\ | 421 #define DEFINE_GLOBAL_CONST(pRuntime, const_name , const_value)\ |
424 if (JS_DefineGlobalConst(pRuntime,JS_WIDESTRING(const_name),JS_NewString(pRuntim
e,JS_WIDESTRING(const_value)))) return -1 | 422 if (JS_DefineGlobalConst(pRuntime,JS_WIDESTRING(const_name),JS_NewString(pRuntim
e,JS_WIDESTRING(const_value)))) return -1 |
425 | 423 |
(...skipping 17 matching lines...) Expand all Loading... |
443 #define VALUE_NAME_BOOLEAN L"boolean" | 441 #define VALUE_NAME_BOOLEAN L"boolean" |
444 #define VALUE_NAME_DATE L"date" | 442 #define VALUE_NAME_DATE L"date" |
445 #define VALUE_NAME_OBJECT L"object" | 443 #define VALUE_NAME_OBJECT L"object" |
446 #define VALUE_NAME_FXOBJ L"fxobj" | 444 #define VALUE_NAME_FXOBJ L"fxobj" |
447 #define VALUE_NAME_NULL L"null" | 445 #define VALUE_NAME_NULL L"null" |
448 #define VALUE_NAME_UNDEFINED L"undefined" | 446 #define VALUE_NAME_UNDEFINED L"undefined" |
449 | 447 |
450 FXJSVALUETYPE GET_VALUE_TYPE(v8::Handle<v8::Value> p); | 448 FXJSVALUETYPE GET_VALUE_TYPE(v8::Handle<v8::Value> p); |
451 | 449 |
452 #endif //_JS_DEFINE_H_ | 450 #endif //_JS_DEFINE_H_ |
OLD | NEW |