// Copyright 2014 PDFium Authors. All rights reserved. | |
// Use of this source code is governed by a BSD-style license that can be | |
// found in the LICENSE file. | |
// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com | |
#ifndef _XFA_FM2JS_CONTEXT_H | |
#define _XFA_FM2JS_CONTEXT_H | |
class CXFA_FM2JSContext { | |
public: | |
static void Abs(FXJSE_HOBJECT hThis, | |
const CFX_ByteStringC& szFuncName, | |
CFXJSE_Arguments& args); | |
static void Avg(FXJSE_HOBJECT hThis, | |
const CFX_ByteStringC& szFuncName, | |
CFXJSE_Arguments& args); | |
static void Ceil(FXJSE_HOBJECT hThis, | |
const CFX_ByteStringC& szFuncName, | |
CFXJSE_Arguments& args); | |
static void Count(FXJSE_HOBJECT hThis, | |
const CFX_ByteStringC& szFuncName, | |
CFXJSE_Arguments& args); | |
static void Floor(FXJSE_HOBJECT hThis, | |
const CFX_ByteStringC& szFuncName, | |
CFXJSE_Arguments& args); | |
static void Max(FXJSE_HOBJECT hThis, | |
const CFX_ByteStringC& szFuncName, | |
CFXJSE_Arguments& args); | |
static void Min(FXJSE_HOBJECT hThis, | |
const CFX_ByteStringC& szFuncName, | |
CFXJSE_Arguments& args); | |
static void Mod(FXJSE_HOBJECT hThis, | |
const CFX_ByteStringC& szFuncName, | |
CFXJSE_Arguments& args); | |
static void Round(FXJSE_HOBJECT hThis, | |
const CFX_ByteStringC& szFuncName, | |
CFXJSE_Arguments& args); | |
static void Sum(FXJSE_HOBJECT hThis, | |
const CFX_ByteStringC& szFuncName, | |
CFXJSE_Arguments& args); | |
static void Date(FXJSE_HOBJECT hThis, | |
const CFX_ByteStringC& szFuncName, | |
CFXJSE_Arguments& args); | |
static void Date2Num(FXJSE_HOBJECT hThis, | |
const CFX_ByteStringC& szFuncName, | |
CFXJSE_Arguments& args); | |
static void DateFmt(FXJSE_HOBJECT hThis, | |
const CFX_ByteStringC& szFuncName, | |
CFXJSE_Arguments& args); | |
static void IsoDate2Num(FXJSE_HOBJECT hThis, | |
const CFX_ByteStringC& szFuncName, | |
CFXJSE_Arguments& args); | |
static void IsoTime2Num(FXJSE_HOBJECT hThis, | |
const CFX_ByteStringC& szFuncName, | |
CFXJSE_Arguments& args); | |
static void LocalDateFmt(FXJSE_HOBJECT hThis, | |
const CFX_ByteStringC& szFuncName, | |
CFXJSE_Arguments& args); | |
static void LocalTimeFmt(FXJSE_HOBJECT hThis, | |
const CFX_ByteStringC& szFuncName, | |
CFXJSE_Arguments& args); | |
static void Num2Date(FXJSE_HOBJECT hThis, | |
const CFX_ByteStringC& szFuncName, | |
CFXJSE_Arguments& args); | |
static void Num2GMTime(FXJSE_HOBJECT hThis, | |
const CFX_ByteStringC& szFuncName, | |
CFXJSE_Arguments& args); | |
static void Num2Time(FXJSE_HOBJECT hThis, | |
const CFX_ByteStringC& szFuncName, | |
CFXJSE_Arguments& args); | |
static void Time(FXJSE_HOBJECT hThis, | |
const CFX_ByteStringC& szFuncName, | |
CFXJSE_Arguments& args); | |
static void Time2Num(FXJSE_HOBJECT hThis, | |
const CFX_ByteStringC& szFuncName, | |
CFXJSE_Arguments& args); | |
static void TimeFmt(FXJSE_HOBJECT hThis, | |
const CFX_ByteStringC& szFuncName, | |
CFXJSE_Arguments& args); | |
static FX_BOOL IsIsoDateFormat(const FX_CHAR* pData, | |
int32_t iLength, | |
int32_t& iStyle, | |
int32_t& iYear, | |
int32_t& iMonth, | |
int32_t& iDay); | |
static FX_BOOL IsIsoTimeFormat(const FX_CHAR* pData, | |
int32_t iLength, | |
int32_t& iHour, | |
int32_t& iMinute, | |
int32_t& iSecond, | |
int32_t& iMilliSecond, | |
int32_t& iZoneHour, | |
int32_t& iZoneMinute); | |
static FX_BOOL IsIsoDateTimeFormat(const FX_CHAR* pData, | |
int32_t iLength, | |
int32_t& iYear, | |
int32_t& iMonth, | |
int32_t& iDay, | |
int32_t& iHour, | |
int32_t& iMinute, | |
int32_t& iSecond, | |
int32_t& iMillionSecond, | |
int32_t& iZoneHour, | |
int32_t& iZoneMinute); | |
static FX_BOOL Local2IsoDate(FXJSE_HOBJECT hThis, | |
const CFX_ByteStringC& szDate, | |
const CFX_ByteStringC& szFormat, | |
const CFX_ByteStringC& szLocale, | |
CFX_ByteString& strIsoDate); | |
static FX_BOOL Local2IsoTime(FXJSE_HOBJECT hThis, | |
const CFX_ByteStringC& szTime, | |
const CFX_ByteStringC& szFormat, | |
const CFX_ByteStringC& szLocale, | |
CFX_ByteString& strIsoTime); | |
static FX_BOOL IsoDate2Local(FXJSE_HOBJECT hThis, | |
const CFX_ByteStringC& szDate, | |
const CFX_ByteStringC& szFormat, | |
const CFX_ByteStringC& szLocale, | |
CFX_ByteString& strLocalDate); | |
static FX_BOOL IsoTime2Local(FXJSE_HOBJECT hThis, | |
const CFX_ByteStringC& szTime, | |
const CFX_ByteStringC& szFormat, | |
const CFX_ByteStringC& szLocale, | |
CFX_ByteString& strLocalTime); | |
static FX_BOOL GetGMTTime(FXJSE_HOBJECT hThis, | |
const CFX_ByteStringC& szTime, | |
const CFX_ByteStringC& szFormat, | |
const CFX_ByteStringC& szLocale, | |
CFX_ByteString& strGMTTime); | |
static int32_t DateString2Num(const CFX_ByteStringC& szDateString); | |
static void GetLocalDateFormat(FXJSE_HOBJECT hThis, | |
int32_t iStyle, | |
const CFX_ByteStringC& szLocalStr, | |
CFX_ByteString& strFormat, | |
FX_BOOL bStandard); | |
static void GetLocalTimeFormat(FXJSE_HOBJECT hThis, | |
int32_t iStyle, | |
const CFX_ByteStringC& szLocalStr, | |
CFX_ByteString& strFormat, | |
FX_BOOL bStandard); | |
static void GetStandardDateFormat(FXJSE_HOBJECT hThis, | |
int32_t iStyle, | |
const CFX_ByteStringC& szLocalStr, | |
CFX_ByteString& strFormat); | |
static void GetStandardTimeFormat(FXJSE_HOBJECT hThis, | |
int32_t iStyle, | |
const CFX_ByteStringC& szLocalStr, | |
CFX_ByteString& strFormat); | |
static void Num2AllTime(FXJSE_HOBJECT hThis, | |
int32_t iTime, | |
const CFX_ByteStringC& szFormat, | |
const CFX_ByteStringC& szLocale, | |
FX_BOOL bGM, | |
CFX_ByteString& strTime); | |
static void GetLocalTimeZone(int32_t& iHour, int32_t& iMin, int32_t& iSec); | |
static void Apr(FXJSE_HOBJECT hThis, | |
const CFX_ByteStringC& szFuncName, | |
CFXJSE_Arguments& args); | |
static void CTerm(FXJSE_HOBJECT hThis, | |
const CFX_ByteStringC& szFuncName, | |
CFXJSE_Arguments& args); | |
static void FV(FXJSE_HOBJECT hThis, | |
const CFX_ByteStringC& szFuncName, | |
CFXJSE_Arguments& args); | |
static void IPmt(FXJSE_HOBJECT hThis, | |
const CFX_ByteStringC& szFuncName, | |
CFXJSE_Arguments& args); | |
static void NPV(FXJSE_HOBJECT hThis, | |
const CFX_ByteStringC& szFuncName, | |
CFXJSE_Arguments& args); | |
static void Pmt(FXJSE_HOBJECT hThis, | |
const CFX_ByteStringC& szFuncName, | |
CFXJSE_Arguments& args); | |
static void PPmt(FXJSE_HOBJECT hThis, | |
const CFX_ByteStringC& szFuncName, | |
CFXJSE_Arguments& args); | |
static void PV(FXJSE_HOBJECT hThis, | |
const CFX_ByteStringC& szFuncName, | |
CFXJSE_Arguments& args); | |
static void Rate(FXJSE_HOBJECT hThis, | |
const CFX_ByteStringC& szFuncName, | |
CFXJSE_Arguments& args); | |
static void Term(FXJSE_HOBJECT hThis, | |
const CFX_ByteStringC& szFuncName, | |
CFXJSE_Arguments& args); | |
static void Choose(FXJSE_HOBJECT hThis, | |
const CFX_ByteStringC& szFuncName, | |
CFXJSE_Arguments& args); | |
static void Exists(FXJSE_HOBJECT hThis, | |
const CFX_ByteStringC& szFuncName, | |
CFXJSE_Arguments& args); | |
static void HasValue(FXJSE_HOBJECT hThis, | |
const CFX_ByteStringC& szFuncName, | |
CFXJSE_Arguments& args); | |
static void Oneof(FXJSE_HOBJECT hThis, | |
const CFX_ByteStringC& szFuncName, | |
CFXJSE_Arguments& args); | |
static void Within(FXJSE_HOBJECT hThis, | |
const CFX_ByteStringC& szFuncName, | |
CFXJSE_Arguments& args); | |
static void If(FXJSE_HOBJECT hThis, | |
const CFX_ByteStringC& szFuncName, | |
CFXJSE_Arguments& args); | |
static void Eval(FXJSE_HOBJECT hThis, | |
const CFX_ByteStringC& szFuncName, | |
CFXJSE_Arguments& args); | |
static void Ref(FXJSE_HOBJECT hThis, | |
const CFX_ByteStringC& szFuncName, | |
CFXJSE_Arguments& args); | |
static void UnitType(FXJSE_HOBJECT hThis, | |
const CFX_ByteStringC& szFuncName, | |
CFXJSE_Arguments& args); | |
static void UnitValue(FXJSE_HOBJECT hThis, | |
const CFX_ByteStringC& szFuncName, | |
CFXJSE_Arguments& args); | |
static void At(FXJSE_HOBJECT hThis, | |
const CFX_ByteStringC& szFuncName, | |
CFXJSE_Arguments& args); | |
static void Concat(FXJSE_HOBJECT hThis, | |
const CFX_ByteStringC& szFuncName, | |
CFXJSE_Arguments& args); | |
static void Decode(FXJSE_HOBJECT hThis, | |
const CFX_ByteStringC& szFuncName, | |
CFXJSE_Arguments& args); | |
static void DecodeURL(const CFX_ByteStringC& szURLString, | |
CFX_ByteTextBuf& szResultBuf); | |
static void DecodeHTML(const CFX_ByteStringC& szHTMLString, | |
CFX_ByteTextBuf& szResultBuf); | |
static void DecodeXML(const CFX_ByteStringC& szXMLString, | |
CFX_ByteTextBuf& szResultBuf); | |
static void Encode(FXJSE_HOBJECT hThis, | |
const CFX_ByteStringC& szFuncName, | |
CFXJSE_Arguments& args); | |
static void EncodeURL(const CFX_ByteStringC& szURLString, | |
CFX_ByteTextBuf& szResultBuf); | |
static void EncodeHTML(const CFX_ByteStringC& szHTMLString, | |
CFX_ByteTextBuf& szResultBuf); | |
static void EncodeXML(const CFX_ByteStringC& szXMLString, | |
CFX_ByteTextBuf& szResultBuf); | |
static FX_BOOL HTMLSTR2Code(const CFX_WideStringC& pData, uint32_t& iCode); | |
static FX_BOOL HTMLCode2STR(uint32_t iCode, CFX_WideString& wsHTMLReserve); | |
static void Format(FXJSE_HOBJECT hThis, | |
const CFX_ByteStringC& szFuncName, | |
CFXJSE_Arguments& args); | |
static void Left(FXJSE_HOBJECT hThis, | |
const CFX_ByteStringC& szFuncName, | |
CFXJSE_Arguments& args); | |
static void Len(FXJSE_HOBJECT hThis, | |
const CFX_ByteStringC& szFuncName, | |
CFXJSE_Arguments& args); | |
static void Lower(FXJSE_HOBJECT hThis, | |
const CFX_ByteStringC& szFuncName, | |
CFXJSE_Arguments& args); | |
static void Ltrim(FXJSE_HOBJECT hThis, | |
const CFX_ByteStringC& szFuncName, | |
CFXJSE_Arguments& args); | |
static void Parse(FXJSE_HOBJECT hThis, | |
const CFX_ByteStringC& szFuncName, | |
CFXJSE_Arguments& args); | |
static void Replace(FXJSE_HOBJECT hThis, | |
const CFX_ByteStringC& szFuncName, | |
CFXJSE_Arguments& args); | |
static void Right(FXJSE_HOBJECT hThis, | |
const CFX_ByteStringC& szFuncName, | |
CFXJSE_Arguments& args); | |
static void Rtrim(FXJSE_HOBJECT hThis, | |
const CFX_ByteStringC& szFuncName, | |
CFXJSE_Arguments& args); | |
static void Space(FXJSE_HOBJECT hThis, | |
const CFX_ByteStringC& szFuncName, | |
CFXJSE_Arguments& args); | |
static void Str(FXJSE_HOBJECT hThis, | |
const CFX_ByteStringC& szFuncName, | |
CFXJSE_Arguments& args); | |
static void Stuff(FXJSE_HOBJECT hThis, | |
const CFX_ByteStringC& szFuncName, | |
CFXJSE_Arguments& args); | |
static void Substr(FXJSE_HOBJECT hThis, | |
const CFX_ByteStringC& szFuncName, | |
CFXJSE_Arguments& args); | |
static void Uuid(FXJSE_HOBJECT hThis, | |
const CFX_ByteStringC& szFuncName, | |
CFXJSE_Arguments& args); | |
static void Upper(FXJSE_HOBJECT hThis, | |
const CFX_ByteStringC& szFuncName, | |
CFXJSE_Arguments& args); | |
static void WordNum(FXJSE_HOBJECT hThis, | |
const CFX_ByteStringC& szFuncName, | |
CFXJSE_Arguments& args); | |
static void TrillionUS(const CFX_ByteStringC& szData, | |
CFX_ByteTextBuf& strBuf); | |
static void WordUS(const CFX_ByteStringC& szData, | |
int32_t iStyle, | |
CFX_ByteTextBuf& strBuf); | |
static void Get(FXJSE_HOBJECT hThis, | |
const CFX_ByteStringC& szFuncName, | |
CFXJSE_Arguments& args); | |
static void Post(FXJSE_HOBJECT hThis, | |
const CFX_ByteStringC& szFuncName, | |
CFXJSE_Arguments& args); | |
static void Put(FXJSE_HOBJECT hThis, | |
const CFX_ByteStringC& szFuncName, | |
CFXJSE_Arguments& args); | |
static void assign_value_operator(FXJSE_HOBJECT hThis, | |
const CFX_ByteStringC& szFuncName, | |
CFXJSE_Arguments& args); | |
static void logical_or_operator(FXJSE_HOBJECT hThis, | |
const CFX_ByteStringC& szFuncName, | |
CFXJSE_Arguments& args); | |
static void logical_and_operator(FXJSE_HOBJECT hThis, | |
const CFX_ByteStringC& szFuncName, | |
CFXJSE_Arguments& args); | |
static void equality_operator(FXJSE_HOBJECT hThis, | |
const CFX_ByteStringC& szFuncName, | |
CFXJSE_Arguments& args); | |
static void notequality_operator(FXJSE_HOBJECT hThis, | |
const CFX_ByteStringC& szFuncName, | |
CFXJSE_Arguments& args); | |
static FX_BOOL fm_ref_equal(FXJSE_HOBJECT hThis, CFXJSE_Arguments& args); | |
static void less_operator(FXJSE_HOBJECT hThis, | |
const CFX_ByteStringC& szFuncName, | |
CFXJSE_Arguments& args); | |
static void lessequal_operator(FXJSE_HOBJECT hThis, | |
const CFX_ByteStringC& szFuncName, | |
CFXJSE_Arguments& args); | |
static void greater_operator(FXJSE_HOBJECT hThis, | |
const CFX_ByteStringC& szFuncName, | |
CFXJSE_Arguments& args); | |
static void greaterequal_operator(FXJSE_HOBJECT hThis, | |
const CFX_ByteStringC& szFuncName, | |
CFXJSE_Arguments& args); | |
static void plus_operator(FXJSE_HOBJECT hThis, | |
const CFX_ByteStringC& szFuncName, | |
CFXJSE_Arguments& args); | |
static void minus_operator(FXJSE_HOBJECT hThis, | |
const CFX_ByteStringC& szFuncName, | |
CFXJSE_Arguments& args); | |
static void multiple_operator(FXJSE_HOBJECT hThis, | |
const CFX_ByteStringC& szFuncName, | |
CFXJSE_Arguments& args); | |
static void divide_operator(FXJSE_HOBJECT hThis, | |
const CFX_ByteStringC& szFuncName, | |
CFXJSE_Arguments& args); | |
static void positive_operator(FXJSE_HOBJECT hThis, | |
const CFX_ByteStringC& szFuncName, | |
CFXJSE_Arguments& args); | |
static void negative_operator(FXJSE_HOBJECT hThis, | |
const CFX_ByteStringC& szFuncName, | |
CFXJSE_Arguments& args); | |
static void logical_not_operator(FXJSE_HOBJECT hThis, | |
const CFX_ByteStringC& szFuncName, | |
CFXJSE_Arguments& args); | |
static void dot_accessor(FXJSE_HOBJECT hThis, | |
const CFX_ByteStringC& szFuncName, | |
CFXJSE_Arguments& args); | |
static void dotdot_accessor(FXJSE_HOBJECT hThis, | |
const CFX_ByteStringC& szFuncName, | |
CFXJSE_Arguments& args); | |
static void eval_translation(FXJSE_HOBJECT hThis, | |
const CFX_ByteStringC& szFuncName, | |
CFXJSE_Arguments& args); | |
static void is_fm_object(FXJSE_HOBJECT hThis, | |
const CFX_ByteStringC& szFuncName, | |
CFXJSE_Arguments& args); | |
static void is_fm_array(FXJSE_HOBJECT hThis, | |
const CFX_ByteStringC& szFuncName, | |
CFXJSE_Arguments& args); | |
static void get_fm_value(FXJSE_HOBJECT hThis, | |
const CFX_ByteStringC& szFuncName, | |
CFXJSE_Arguments& args); | |
static void get_fm_jsobj(FXJSE_HOBJECT hThis, | |
const CFX_ByteStringC& szFuncName, | |
CFXJSE_Arguments& args); | |
static void fm_var_filter(FXJSE_HOBJECT hThis, | |
const CFX_ByteStringC& szFuncName, | |
CFXJSE_Arguments& args); | |
static void concat_fm_object(FXJSE_HOBJECT hThis, | |
const CFX_ByteStringC& szFuncName, | |
CFXJSE_Arguments& args); | |
static int32_t hvalue_get_array_length(FXJSE_HOBJECT hThis, FXJSE_HVALUE arg); | |
static FX_BOOL simpleValueCompare(FXJSE_HOBJECT hThis, | |
FXJSE_HVALUE firstValue, | |
FXJSE_HVALUE secondValue); | |
static void unfoldArgs(FXJSE_HOBJECT hThis, | |
CFXJSE_Arguments& args, | |
FXJSE_HVALUE*& resultValues, | |
int32_t& iCount, | |
int32_t iStart = 0); | |
static void GetObjectDefaultValue(FXJSE_HVALUE hObjectValue, | |
FXJSE_HVALUE hDefaultValue); | |
static FX_BOOL SetObjectDefaultValue(FXJSE_HVALUE hObjectValue, | |
FXJSE_HVALUE hNewValue); | |
static void GenerateSomExpression(const CFX_ByteStringC& szName, | |
int32_t iIndexFlags, | |
int32_t iIndexValue, | |
FX_BOOL bIsStar, | |
CFX_ByteString& szSomExp); | |
static FX_BOOL GetObjectByName(FXJSE_HOBJECT hThis, | |
FXJSE_HVALUE accessorValue, | |
const CFX_ByteStringC& szAccessorName); | |
static int32_t ResolveObjects(FXJSE_HOBJECT hThis, | |
FXJSE_HVALUE hParentValue, | |
const CFX_ByteStringC& bsSomExp, | |
XFA_RESOLVENODE_RS& resoveNodeRS, | |
FX_BOOL bdotAccessor = TRUE, | |
FX_BOOL bHasNoResolveName = FALSE); | |
static void ParseResolveResult(FXJSE_HOBJECT hThis, | |
const XFA_RESOLVENODE_RS& resoveNodeRS, | |
FXJSE_HVALUE hParentValue, | |
FXJSE_HVALUE*& resultValues, | |
int32_t& iSize, | |
FX_BOOL& bAttribute); | |
static FXJSE_HVALUE GetSimpleHValue(FXJSE_HOBJECT hThis, | |
CFXJSE_Arguments& args, | |
uint32_t index); | |
static FX_BOOL HValueIsNull(FXJSE_HOBJECT hThis, FXJSE_HVALUE hValue); | |
static int32_t HValueToInteger(FXJSE_HOBJECT hThis, FXJSE_HVALUE hValue); | |
static FX_DOUBLE StringToDouble(const CFX_ByteStringC& szStringVal); | |
static FX_FLOAT HValueToFloat(FXJSE_HOBJECT hThis, FXJSE_HVALUE hValue); | |
static FX_DOUBLE HValueToDouble(FXJSE_HOBJECT hThis, FXJSE_HVALUE hValue); | |
static void HValueToUTF8String(FXJSE_HVALUE hValue, | |
CFX_ByteString& outputValue); | |
CXFA_FM2JSContext(); | |
~CXFA_FM2JSContext(); | |
static CXFA_FM2JSContext* Create(); | |
void Initialize(FXJSE_HRUNTIME hScriptRuntime, | |
FXJSE_HCONTEXT hScriptContext, | |
CXFA_Document* pDoc); | |
void GlobalPropertyGetter(FXJSE_HVALUE hValue); | |
void Release(); | |
FXJSE_HRUNTIME GetScriptRuntime() const { return m_hScriptRuntime; } | |
CXFA_Document* GetDocument() const { return m_pDocument; } | |
void ThrowScriptErrorMessage(int32_t iStringID, ...); | |
private: | |
FXJSE_HRUNTIME m_hScriptRuntime; | |
FXJSE_CLASS m_fmClass; | |
FXJSE_HCLASS m_hFMClass; | |
FXJSE_HVALUE m_hValue; | |
CXFA_Document* m_pDocument; | |
}; | |
#endif |