00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00031
00032 #ifndef __SCRIPTING_SCRIPT_H__
00033 #define __SCRIPTING_SCRIPT_H__
00034
00035 #define XP_UNIX 1
00036
00037 #include <jsapi.h>
00038 #include "common.h"
00039 #include "runtime.h"
00040 #include "cds_objects.h"
00041 #include "string_converter.h"
00042
00043
00044 #define JS_CALL_GC_AFTER_NUM (1000)
00045
00046 typedef enum
00047 {
00048 S_IMPORT = 0,
00049 S_PLAYLIST,
00050 S_DVD
00051 } script_class_t;
00052
00053 typedef enum
00054 {
00055 M2I,
00056 F2I,
00057 J2I,
00058 P2I,
00059 I2I,
00060 } charset_convert_t;
00061
00062 class Script : public zmm::Object
00063 {
00064 public:
00065 zmm::Ref<Runtime> runtime;
00066 JSRuntime *rt;
00067 JSContext *cx;
00068 JSObject *glob;
00069 JSScript *script;
00070 JSScript *common_script;
00071
00072 public:
00073 Script(zmm::Ref<Runtime> runtime);
00074 virtual ~Script();
00075
00076 zmm::String getProperty(JSObject *obj, zmm::String name);
00077 int getBoolProperty(JSObject *obj, zmm::String name);
00078 int getIntProperty(JSObject *obj, zmm::String name, int def);
00079 JSObject *getObjectProperty(JSObject *obj, zmm::String name);
00080
00081 void setProperty(JSObject *obj, zmm::String name, zmm::String value);
00082 void setIntProperty(JSObject *obj, zmm::String name, int value);
00083 void setObjectProperty(JSObject *parent, zmm::String name, JSObject *obj);
00084
00085 void deleteProperty(JSObject *obj, zmm::String name);
00086
00087 JSObject *getGlobalObject();
00088 void setGlobalObject(JSObject *glob);
00089
00090 JSContext *getContext();
00091
00092 void defineFunction(zmm::String name, JSNative function, int numParams);
00093 void defineFunctions(JSFunctionSpec *functions);
00094 void load(zmm::String scriptPath);
00095 void load(zmm::String scriptText, zmm::String scriptPath);
00096
00097 zmm::Ref<CdsObject> jsObject2cdsObject(JSObject *js, zmm::Ref<CdsObject> pcd);
00098 void cdsObject2jsObject(zmm::Ref<CdsObject> obj, JSObject *js);
00099
00100 virtual script_class_t whoami() = 0;
00101
00102 zmm::Ref<CdsObject> getProcessedObject();
00103
00104 zmm::String convertToCharset(zmm::String str, charset_convert_t chr);
00105
00106 protected:
00107 void execute();
00108 int gc_counter;
00109
00110
00111
00112 zmm::Ref<CdsObject> processed;
00113
00114 private:
00115 JSObject *common_root;
00116
00117 void initGlobalObject();
00118 JSScript *_load(zmm::String scriptPath);
00119 void _execute(JSScript *scr);
00120 zmm::Ref<StringConverter> _p2i;
00121 zmm::Ref<StringConverter> _j2i;
00122 zmm::Ref<StringConverter> _f2i;
00123 zmm::Ref<StringConverter> _m2i;
00124 zmm::Ref<StringConverter> _i2i;
00125 };
00126
00127 #endif // __SCRIPTING_SCRIPT_H__