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_SRC_JAVASCRIPT_JS_VALUE_H_
      8 #define FPDFSDK_SRC_JAVASCRIPT_JS_VALUE_H_
      9 
     10 #include "core/include/fxcrt/fx_basic.h"
     11 #include "fpdfsdk/include/jsapi/fxjs_v8.h"
     12 
     13 class CJS_Array;
     14 class CJS_Date;
     15 class CJS_Document;
     16 class CJS_Object;
     17 class CJS_Runtime;
     18 
     19 class CJS_Value {
     20  public:
     21   enum Type {
     22     VT_unknown,
     23     VT_string,
     24     VT_number,
     25     VT_boolean,
     26     VT_date,
     27     VT_object,
     28     VT_fxobject,
     29     VT_null,
     30     VT_undefined
     31   };
     32 
     33   CJS_Value(CJS_Runtime* pRuntime);
     34   CJS_Value(CJS_Runtime* pRuntime, v8::Local<v8::Value> pValue, Type t);
     35   CJS_Value(CJS_Runtime* pRuntime, const int& iValue);
     36   CJS_Value(CJS_Runtime* pRuntime, const double& dValue);
     37   CJS_Value(CJS_Runtime* pRuntime, const float& fValue);
     38   CJS_Value(CJS_Runtime* pRuntime, const bool& bValue);
     39   CJS_Value(CJS_Runtime* pRuntime, v8::Local<v8::Object>);
     40   CJS_Value(CJS_Runtime* pRuntime, CJS_Object*);
     41   CJS_Value(CJS_Runtime* pRuntime, CJS_Document*);
     42   CJS_Value(CJS_Runtime* pRuntime, const FX_CHAR* pStr);
     43   CJS_Value(CJS_Runtime* pRuntime, const FX_WCHAR* pWstr);
     44   CJS_Value(CJS_Runtime* pRuntime, CJS_Array& array);
     45 
     46   ~CJS_Value();
     47 
     48   void SetNull();
     49   void Attach(v8::Local<v8::Value> pValue, Type t);
     50   void Attach(CJS_Value* pValue);
     51   void Detach();
     52 
     53   Type GetType() const;
     54   int ToInt() const;
     55   bool ToBool() const;
     56   double ToDouble() const;
     57   float ToFloat() const;
     58   CJS_Object* ToCJSObject() const;
     59   CFX_WideString ToCFXWideString() const;
     60   CFX_ByteString ToCFXByteString() const;
     61   v8::Local<v8::Object> ToV8Object() const;
     62   v8::Local<v8::Array> ToV8Array() const;
     63   v8::Local<v8::Value> ToV8Value() const;
     64 
     65   void operator=(int iValue);
     66   void operator=(bool bValue);
     67   void operator=(double);
     68   void operator=(float);
     69   void operator=(CJS_Object*);
     70   void operator=(CJS_Document*);
     71   void operator=(v8::Local<v8::Object>);
     72   void operator=(CJS_Array&);
     73   void operator=(CJS_Date&);
     74   void operator=(const FX_WCHAR* pWstr);
     75   void operator=(const FX_CHAR* pStr);
     76   void operator=(CJS_Value value);
     77 
     78   FX_BOOL IsArrayObject() const;
     79   FX_BOOL IsDateObject() const;
     80   FX_BOOL ConvertToArray(CJS_Array&) const;
     81   FX_BOOL ConvertToDate(CJS_Date&) const;
     82 
     83   CJS_Runtime* GetJSRuntime() const { return m_pJSRuntime; }
     84 
     85  protected:
     86   Type m_eType;
     87   v8::Local<v8::Value> m_pValue;
     88   CJS_Runtime* m_pJSRuntime;
     89 };
     90 
     91 class CJS_PropValue : public CJS_Value {
     92  public:
     93   CJS_PropValue(const CJS_Value&);
     94   CJS_PropValue(CJS_Runtime* pRuntime);
     95   ~CJS_PropValue();
     96 
     97   FX_BOOL IsSetting() const { return m_bIsSetting; }
     98   FX_BOOL IsGetting() const { return !m_bIsSetting; }
     99 
    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<<(const FX_WCHAR* c_string);
    115   void operator<<(v8::Local<v8::Object>);
    116   void operator>>(v8::Local<v8::Object>&) 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 
    125  private:
    126   FX_BOOL m_bIsSetting;
    127 };
    128 
    129 class CJS_Array {
    130  public:
    131   CJS_Array(CJS_Runtime* pRuntime);
    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   CJS_Runtime* GetJSRuntime() const { return m_pJSRuntime; }
    142 
    143  private:
    144   v8::Local<v8::Array> m_pArray;
    145   CJS_Runtime* m_pJSRuntime;
    146 };
    147 
    148 class CJS_Date {
    149   friend class CJS_Value;
    150 
    151  public:
    152   CJS_Date(CJS_Runtime* pRuntime);
    153   CJS_Date(CJS_Runtime* pRuntime, double dMsec_time);
    154   CJS_Date(CJS_Runtime* pRuntime,
    155            int year,
    156            int mon,
    157            int day,
    158            int hour,
    159            int min,
    160            int sec);
    161   virtual ~CJS_Date();
    162   void Attach(v8::Local<v8::Value> pDate);
    163 
    164   int GetYear();
    165   void SetYear(int iYear);
    166 
    167   int GetMonth();
    168   void SetMonth(int iMonth);
    169 
    170   int GetDay();
    171   void SetDay(int iDay);
    172 
    173   int GetHours();
    174   void SetHours(int iHours);
    175 
    176   int GetMinutes();
    177   void SetMinutes(int minutes);
    178 
    179   int GetSeconds();
    180   void SetSeconds(int seconds);
    181 
    182   operator v8::Local<v8::Value>();
    183   operator double() const;
    184 
    185   CFX_WideString ToString() const;
    186 
    187   static double
    188   MakeDate(int year, int mon, int mday, int hour, int min, int sec, int ms);
    189 
    190   FX_BOOL IsValidDate();
    191 
    192  protected:
    193   v8::Local<v8::Value> m_pDate;
    194   CJS_Runtime* m_pJSRuntime;
    195 };
    196 
    197 double JS_GetDateTime();
    198 int JS_GetYearFromTime(double dt);
    199 int JS_GetMonthFromTime(double dt);
    200 int JS_GetDayFromTime(double dt);
    201 int JS_GetHourFromTime(double dt);
    202 int JS_GetMinFromTime(double dt);
    203 int JS_GetSecFromTime(double dt);
    204 double JS_DateParse(const wchar_t* string);
    205 double JS_MakeDay(int nYear, int nMonth, int nDay);
    206 double JS_MakeTime(int nHour, int nMin, int nSec, int nMs);
    207 double JS_MakeDate(double day, double time);
    208 bool JS_PortIsNan(double d);
    209 double JS_LocalTime(double d);
    210 
    211 #endif  // FPDFSDK_SRC_JAVASCRIPT_JS_VALUE_H_
    212