Home | History | Annotate | Download | only in javascript
      1 // Copyright 2014 PDFium Authors. All rights reserved.
      2 // Use of this source code is governed by a BSD-style license that can be
      3 // found in the LICENSE file.
      4 
      5 // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
      6 
      7 #ifndef FPDFSDK_INCLUDE_JAVASCRIPT_JS_VALUE_H_
      8 #define FPDFSDK_INCLUDE_JAVASCRIPT_JS_VALUE_H_
      9 
     10 #include "../../../core/include/fxcrt/fx_basic.h"
     11 #include "../jsapi/fxjs_v8.h"
     12 
     13 class CJS_Array;
     14 class CJS_Date;
     15 class CJS_Document;
     16 class CJS_Object;
     17 
     18 class CJS_Value
     19 {
     20 public:
     21 	CJS_Value(v8::Isolate* isolate);
     22 	CJS_Value(v8::Isolate* isolate, v8::Local<v8::Value> pValue,FXJSVALUETYPE t);
     23 	CJS_Value(v8::Isolate* isolate, const int &iValue);
     24 	CJS_Value(v8::Isolate* isolate, const double &dValue);
     25 	CJS_Value(v8::Isolate* isolate, const float &fValue);
     26 	CJS_Value(v8::Isolate* isolate, const bool &bValue);
     27 	CJS_Value(v8::Isolate* isolate, JSFXObject);
     28 	CJS_Value(v8::Isolate* isolate, CJS_Object*);
     29    	CJS_Value(v8::Isolate* isolate, CJS_Document*);
     30 	CJS_Value(v8::Isolate* isolate, FX_LPCSTR pStr);
     31 	CJS_Value(v8::Isolate* isolate, FX_LPCWSTR pWstr);
     32 	CJS_Value(v8::Isolate* isolate, CJS_Array& array);
     33 
     34 	~CJS_Value();
     35 
     36 	void SetNull();
     37     void Attach(v8::Local<v8::Value> pValue,FXJSVALUETYPE t);
     38 	void Attach(CJS_Value *pValue);
     39 	void Detach();
     40 
     41 
     42 	int ToInt() const;
     43 	bool ToBool() const;
     44 	double ToDouble() const;
     45 	float  ToFloat() const;
     46 	CJS_Object* ToCJSObject() const;
     47 	CFX_WideString ToCFXWideString() const;
     48 	CFX_ByteString ToCFXByteString() const;
     49 	v8::Local<v8::Object> ToV8Object() const;
     50 	v8::Local<v8::Array> ToV8Array() const;
     51 	v8::Local<v8::Value> ToV8Value() const;
     52 
     53 	void operator = (int iValue);
     54 	void operator = (bool bValue);
     55 	void operator = (double);
     56 	void operator = (float);
     57 	void operator = (CJS_Object*);
     58 	void operator = (CJS_Document*);
     59 	void operator = (v8::Local<v8::Object>);
     60 	void operator = (CJS_Array &);
     61 	void operator = (CJS_Date &);
     62 	void operator = (FX_LPCWSTR pWstr);
     63 	void operator = (FX_LPCSTR pStr);
     64 	void operator = (CJS_Value value);
     65 
     66 	FX_BOOL IsArrayObject() const;
     67 	FX_BOOL	IsDateObject() const;
     68 	FXJSVALUETYPE GetType() const;
     69 
     70 	FX_BOOL ConvertToArray(CJS_Array &) const;
     71 	FX_BOOL ConvertToDate(CJS_Date &) const;
     72 
     73 	v8::Isolate* GetIsolate() {return m_isolate;}
     74 protected:
     75 	v8::Local<v8::Value> m_pValue;
     76 	FXJSVALUETYPE m_eType;
     77 	v8::Isolate* m_isolate;
     78 };
     79 
     80 class CJS_Parameters : public CFX_ArrayTemplate<CJS_Value>
     81 {
     82 public:
     83 	void push_back(const CJS_Value& newElement) {
     84 		CFX_ArrayTemplate<CJS_Value>::Add(newElement);
     85 	}
     86 	int size() const {
     87 		return CFX_ArrayTemplate<CJS_Value>::GetSize();
     88 	}
     89 };
     90 
     91 class CJS_PropValue: public CJS_Value
     92 {
     93 public:
     94 	CJS_PropValue(const CJS_Value&);
     95 	CJS_PropValue(v8::Isolate* isolate);
     96 	~CJS_PropValue();
     97 public:
     98 	FX_BOOL IsSetting();
     99 	FX_BOOL IsGetting();
    100 	void operator<<(int);
    101 	void operator>>(int&) const;
    102 	void operator<<(bool);
    103 	void operator>>(bool&) const;
    104 	void operator<<(double);
    105 	void operator>>(double&) const;
    106 	void operator<<(CJS_Object* pObj);
    107 	void operator>>(CJS_Object*& ppObj) const;
    108 	void operator<<(CJS_Document* pJsDoc);
    109 	void operator>>(CJS_Document*& ppJsDoc) const;
    110 	void operator<<(CFX_ByteString);
    111 	void operator>>(CFX_ByteString&) const;
    112 	void operator<<(CFX_WideString);
    113 	void operator>>(CFX_WideString&) const;
    114 	void operator<<(FX_LPCWSTR c_string);
    115 	void operator<<(JSFXObject);
    116 	void operator>>(JSFXObject&) const;
    117 	void operator>>(CJS_Array& array) const;
    118 	void operator<<(CJS_Array& array);
    119 	void operator<<(CJS_Date& date);
    120 	void operator>>(CJS_Date& date) const;
    121 	operator v8::Local<v8::Value>() const;
    122 	void StartSetting();
    123 	void StartGetting();
    124 private:
    125 	FX_BOOL m_bIsSetting;
    126 };
    127 
    128 class CJS_Array
    129 {
    130 public:
    131 	CJS_Array(v8::Isolate* isolate);
    132 	virtual ~CJS_Array();
    133 
    134 	void Attach(v8::Local<v8::Array> pArray);
    135 	void GetElement(unsigned index,CJS_Value &value);
    136 	void SetElement(unsigned index,CJS_Value value);
    137     int GetLength();
    138 	FX_BOOL IsAttached();
    139 	operator v8::Local<v8::Array>();
    140 
    141 	v8::Isolate* GetIsolate() {return m_isolate;}
    142 private:
    143 	v8::Local<v8::Array> m_pArray;
    144 	v8::Isolate* m_isolate;
    145 };
    146 
    147 class CJS_Date
    148 {
    149 friend class CJS_Value;
    150 public:
    151 	CJS_Date(v8::Isolate* isolate);
    152 	CJS_Date(v8::Isolate* isolate,double dMsec_time);
    153 	CJS_Date(v8::Isolate* isolate,int year, int mon, int day,int hour, int min, int sec);
    154 	virtual ~CJS_Date();
    155 	void Attach(v8::Local<v8::Value> pDate);
    156 
    157 	int     GetYear();
    158 	void    SetYear(int iYear);
    159 
    160 	int     GetMonth();
    161 	void    SetMonth(int iMonth);
    162 
    163 	int     GetDay();
    164 	void    SetDay(int iDay);
    165 
    166 	int     GetHours();
    167 	void    SetHours(int iHours);
    168 
    169 	int     GetMinutes();
    170 	void    SetMinutes(int minutes);
    171 
    172 	int     GetSeconds();
    173 	void    SetSeconds(int seconds);
    174 
    175 	operator v8::Local<v8::Value>();
    176 	operator double() const;
    177 
    178 	CFX_WideString	ToString() const;
    179 
    180 	static double	MakeDate(int year, int mon, int mday,int hour, int min, int sec,int ms);
    181 
    182 	FX_BOOL	IsValidDate();
    183 
    184 protected:
    185 	v8::Local<v8::Value> m_pDate;
    186 	v8::Isolate* m_isolate;
    187 };
    188 
    189 #endif  // FPDFSDK_INCLUDE_JAVASCRIPT_JS_VALUE_H_
    190