static void FXJSE_V8_GenericNamedPropertyGetterCallback( v8::Local<v8::Name> property, const v8::PropertyCallbackInfo<v8::Value>& info) { v8::Local<v8::Object> thisObject = info.This(); const FXJSE_CLASS* lpClass = static_cast<FXJSE_CLASS*>(info.Data().As<v8::External>()->Value()); v8::String::Utf8Value szPropName(property); CFX_ByteStringC szFxPropName(*szPropName, szPropName.length()); CFXJSE_Value* lpThisValue = CFXJSE_Value::Create(info.GetIsolate()); lpThisValue->ForceSetValue(thisObject); CFXJSE_Value* lpNewValue = CFXJSE_Value::Create(info.GetIsolate()); FXJSE_DynPropGetterAdapter( lpClass, reinterpret_cast<FXJSE_HOBJECT>(lpThisValue), szFxPropName, reinterpret_cast<FXJSE_HVALUE>(lpNewValue)); info.GetReturnValue().Set(lpNewValue->DirectGetValue()); delete lpThisValue; lpThisValue = nullptr; }
static void FXJSE_V8ProxyCallback_getOwnPropertyDescriptor_setter( const v8::FunctionCallbackInfo<v8::Value>& info) { v8::Local<v8::Object> hCallBackInfo = info.Data().As<v8::Object>(); FXJSE_CLASS* lpClass = static_cast<FXJSE_CLASS*>( hCallBackInfo->GetAlignedPointerFromInternalField(0)); v8::Local<v8::String> hPropName = hCallBackInfo->GetInternalField(1).As<v8::String>(); ASSERT(lpClass && !hPropName.IsEmpty()); v8::String::Utf8Value szPropName(hPropName); CFX_ByteStringC szFxPropName = *szPropName; CFXJSE_Value* lpThisValue = CFXJSE_Value::Create(info.GetIsolate()); CFXJSE_Value* lpNewValue = CFXJSE_Value::Create(info.GetIsolate()); lpThisValue->ForceSetValue(info.This()); lpNewValue->ForceSetValue(info[0]); FXJSE_DynPropSetterAdapter( lpClass, reinterpret_cast<FXJSE_HOBJECT>(lpThisValue), szFxPropName, reinterpret_cast<FXJSE_HVALUE>(lpNewValue)); delete lpThisValue; lpThisValue = nullptr; delete lpNewValue; lpNewValue = nullptr; }
FX_BOOL CXFA_FFNotify::RunScript(CXFA_Node* pScript, CXFA_Node* pFormItem) { FX_BOOL bRet = FALSE; CXFA_FFDocView* pDocView = m_pDoc->GetDocView(); if (!pDocView) { return bRet; } CXFA_WidgetAcc* pWidgetAcc = static_cast<CXFA_WidgetAcc*>(pFormItem->GetWidgetData()); if (!pWidgetAcc) { return bRet; } CXFA_EventParam EventParam; EventParam.m_eType = XFA_EVENT_Unknown; CFXJSE_Value* pRetValue = nullptr; int32_t iRet = pWidgetAcc->ExecuteScript(CXFA_Script(pScript), &EventParam, &pRetValue); if (iRet == XFA_EVENTERROR_Success && pRetValue) { bRet = pRetValue->ToBoolean(); delete pRetValue; } return bRet; }
static void FXJSE_V8_GenericNamedPropertyQueryCallback( v8::Local<v8::Name> property, const v8::PropertyCallbackInfo<v8::Integer>& info) { v8::Local<v8::Object> thisObject = info.This(); const FXJSE_CLASS* lpClass = static_cast<FXJSE_CLASS*>(info.Data().As<v8::External>()->Value()); v8::Isolate* pIsolate = info.GetIsolate(); v8::HandleScope scope(pIsolate); v8::String::Utf8Value szPropName(property); CFX_ByteStringC szFxPropName(*szPropName, szPropName.length()); CFXJSE_Value* lpThisValue = CFXJSE_Value::Create(info.GetIsolate()); lpThisValue->ForceSetValue(thisObject); if (FXJSE_DynPropQueryAdapter(lpClass, reinterpret_cast<FXJSE_HOBJECT>(lpThisValue), szFxPropName)) { info.GetReturnValue().Set(v8::DontDelete); } else { const int32_t iV8Absent = 64; info.GetReturnValue().Set(iV8Absent); } delete lpThisValue; lpThisValue = nullptr; }
static void FXJSE_V8ProxyCallback_delete( const v8::FunctionCallbackInfo<v8::Value>& info) { info.GetReturnValue().Set(true); const FXJSE_CLASS* lpClass = static_cast<FXJSE_CLASS*>(info.Data().As<v8::External>()->Value()); if (!lpClass) { return; } v8::Isolate* pIsolate = info.GetIsolate(); v8::HandleScope scope(pIsolate); v8::Local<v8::String> hPropName = info[0]->ToString(); v8::String::Utf8Value szPropName(hPropName); CFX_ByteStringC szFxPropName(*szPropName, szPropName.length()); CFXJSE_Value* lpThisValue = CFXJSE_Value::Create(info.GetIsolate()); lpThisValue->ForceSetValue(info.This()); info.GetReturnValue().Set( FXJSE_DynPropDeleterAdapter( lpClass, reinterpret_cast<FXJSE_HOBJECT>(lpThisValue), szFxPropName) ? true : false); delete lpThisValue; lpThisValue = nullptr; }
void CScript_LayoutPseudoModel::Script_LayoutPseudoModel_PageImp( CFXJSE_Arguments* pArguments, FX_BOOL bAbsPage) { int32_t iLength = pArguments->GetLength(); if (iLength != 1) { const FX_WCHAR* methodName; if (bAbsPage) { methodName = L"absPage"; } else { methodName = L"page"; } ThrowException(XFA_IDS_INCORRECT_NUMBER_OF_METHOD, methodName); return; } CXFA_Node* pNode = nullptr; if (iLength >= 1) { pNode = static_cast<CXFA_Node*>(pArguments->GetObject(0)); } int32_t iPage = 0; CFXJSE_Value* pValue = pArguments->GetReturnValue(); if (!pNode && pValue) pValue->SetInteger(iPage); CXFA_LayoutProcessor* pDocLayout = m_pDocument->GetDocLayout(); if (!pDocLayout) { return; } CXFA_LayoutItem* pLayoutItem = pDocLayout->GetLayoutItem(pNode); if (!pLayoutItem) { pValue->SetInteger(-1); return; } iPage = pLayoutItem->GetFirst()->GetPage()->GetPageIndex(); if (pValue) pValue->SetInteger(bAbsPage ? iPage : iPage + 1); }
void FXJSE_Value_SetFloat(FXJSE_HVALUE hValue, FX_FLOAT fFloat) { CFXJSE_Value* lpValue = reinterpret_cast<CFXJSE_Value*>(hValue); ASSERT(lpValue); return lpValue->SetFloat(fFloat); }
void FXJSE_Value_SetUTF8String(FXJSE_HVALUE hValue, const CFX_ByteStringC& szString) { CFXJSE_Value* lpValue = reinterpret_cast<CFXJSE_Value*>(hValue); ASSERT(lpValue); return lpValue->SetString(szString); }
void FXJSE_Value_SetBoolean(FXJSE_HVALUE hValue, FX_BOOL bBoolean) { CFXJSE_Value* lpValue = reinterpret_cast<CFXJSE_Value*>(hValue); ASSERT(lpValue); return lpValue->SetBoolean(bBoolean); }
void FXJSE_Value_SetNull(FXJSE_HVALUE hValue) { CFXJSE_Value* lpValue = reinterpret_cast<CFXJSE_Value*>(hValue); ASSERT(lpValue); return lpValue->SetNull(); }
void* FXJSE_Value_ToObject(FXJSE_HVALUE hValue, FXJSE_HCLASS hClass) { CFXJSE_Value* lpValue = reinterpret_cast<CFXJSE_Value*>(hValue); CFXJSE_Class* lpClass = reinterpret_cast<CFXJSE_Class*>(hClass); ASSERT(lpValue); return lpValue->ToObject(lpClass); }
FXJSE_HRUNTIME FXJSE_Value_GetRuntime(FXJSE_HVALUE hValue) { CFXJSE_Value* lpValue = reinterpret_cast<CFXJSE_Value*>(hValue); ASSERT(lpValue); return reinterpret_cast<FXJSE_HRUNTIME>(lpValue->GetIsolate()); }
void FXJSE_Value_SetInteger(FXJSE_HVALUE hValue, int32_t nInteger) { CFXJSE_Value* lpValue = reinterpret_cast<CFXJSE_Value*>(hValue); ASSERT(lpValue); return lpValue->SetInteger(nInteger); }
void FXJSE_Value_SetDate(FXJSE_HVALUE hValue, FXJSE_DOUBLE dDouble) { CFXJSE_Value* lpValue = reinterpret_cast<CFXJSE_Value*>(hValue); return lpValue->SetDate(dDouble); }
FX_FLOAT FXJSE_Value_ToFloat(FXJSE_HVALUE hValue) { CFXJSE_Value* lpValue = reinterpret_cast<CFXJSE_Value*>(hValue); ASSERT(lpValue); return lpValue->ToFloat(); }
FX_BOOL FXJSE_Value_ToBoolean(FXJSE_HVALUE hValue) { CFXJSE_Value* lpValue = reinterpret_cast<CFXJSE_Value*>(hValue); ASSERT(lpValue); return lpValue->ToBoolean(); }
FX_BOOL CFXJSE_Value::Call(CFXJSE_Value* lpReceiver, CFXJSE_Value* lpRetValue, uint32_t nArgCount, FXJSE_HVALUE* lpArgs) { CFXJSE_ScopeUtil_IsolateHandleRootContext scope(m_pIsolate); v8::Local<v8::Value> hFunctionValue = v8::Local<v8::Value>::New(m_pIsolate, DirectGetValue()); v8::Local<v8::Object> hFunctionObject = !hFunctionValue.IsEmpty() && hFunctionValue->IsObject() ? hFunctionValue.As<v8::Object>() : v8::Local<v8::Object>(); v8::TryCatch trycatch; if (hFunctionObject.IsEmpty() || !hFunctionObject->IsCallable()) { if (lpRetValue) { lpRetValue->ForceSetValue(FXJSE_CreateReturnValue(m_pIsolate, trycatch)); } return FALSE; } v8::Local<v8::Value> hReturnValue; v8::Local<v8::Value>* lpLocalArgs = NULL; if (nArgCount) { lpLocalArgs = FX_Alloc(v8::Local<v8::Value>, nArgCount); for (uint32_t i = 0; i < nArgCount; i++) { new (lpLocalArgs + i) v8::Local<v8::Value>; CFXJSE_Value* lpArg = (CFXJSE_Value*)lpArgs[i]; if (lpArg) { lpLocalArgs[i] = v8::Local<v8::Value>::New(m_pIsolate, lpArg->DirectGetValue()); } if (lpLocalArgs[i].IsEmpty()) { lpLocalArgs[i] = v8::Undefined(m_pIsolate); } } } FX_BOOL bRetValue = TRUE; if (lpReceiver == FXJSE_INVALID_PTR) { hReturnValue = hFunctionObject->CallAsConstructor(nArgCount, lpLocalArgs); } else { v8::Local<v8::Value> hReceiver; if (lpReceiver) { hReceiver = v8::Local<v8::Value>::New(m_pIsolate, lpReceiver->DirectGetValue()); } if (hReceiver.IsEmpty() || !hReceiver->IsObject()) { hReceiver = v8::Object::New(m_pIsolate); } hReturnValue = hFunctionObject->CallAsFunction(hReceiver, nArgCount, lpLocalArgs); } if (trycatch.HasCaught()) { hReturnValue = FXJSE_CreateReturnValue(m_pIsolate, trycatch); bRetValue = FALSE; } if (lpRetValue) { lpRetValue->ForceSetValue(hReturnValue); } if (lpLocalArgs) { for (uint32_t i = 0; i < nArgCount; i++) { lpLocalArgs[i].~Local(); } FX_Free(lpLocalArgs); } return bRetValue; }
FX_BOOL FXJSE_Value_IsDate(FXJSE_HVALUE hValue) { CFXJSE_Value* lpValue = reinterpret_cast<CFXJSE_Value*>(hValue); return lpValue && lpValue->IsDate(); }
FX_BOOL FXJSE_Value_IsUTF8String(FXJSE_HVALUE hValue) { CFXJSE_Value* lpValue = reinterpret_cast<CFXJSE_Value*>(hValue); return lpValue && lpValue->IsString(); }
int32_t FXJSE_Value_ToInteger(FXJSE_HVALUE hValue) { CFXJSE_Value* lpValue = reinterpret_cast<CFXJSE_Value*>(hValue); ASSERT(lpValue); return lpValue->ToInteger(); }
FXJSE_DOUBLE FXJSE_Value_ToDouble(FXJSE_HVALUE hValue) { CFXJSE_Value* lpValue = reinterpret_cast<CFXJSE_Value*>(hValue); ASSERT(lpValue); return lpValue->ToDouble(); }
FX_BOOL FXJSE_Value_DeleteObjectProp(FXJSE_HVALUE hValue, const CFX_ByteStringC& szPropName) { CFXJSE_Value* lpValue = reinterpret_cast<CFXJSE_Value*>(hValue); ASSERT(lpValue); return lpValue->DeleteObjectProperty(szPropName); }
void CScript_LayoutPseudoModel::HWXY(CFXJSE_Arguments* pArguments, XFA_LAYOUTMODEL_HWXY layoutModel) { int32_t iLength = pArguments->GetLength(); if (iLength < 1 || iLength > 3) { const FX_WCHAR* methodName = nullptr; switch (layoutModel) { case XFA_LAYOUTMODEL_H: methodName = L"h"; break; case XFA_LAYOUTMODEL_W: methodName = L"w"; break; case XFA_LAYOUTMODEL_X: methodName = L"x"; break; case XFA_LAYOUTMODEL_Y: methodName = L"y"; break; } ThrowException(XFA_IDS_INCORRECT_NUMBER_OF_METHOD, methodName); return; } CXFA_Node* pNode = nullptr; CFX_WideString wsUnit(L"pt"); int32_t iIndex = 0; if (iLength >= 1) { pNode = static_cast<CXFA_Node*>(pArguments->GetObject(0)); } if (iLength >= 2) { CFX_ByteString bsUnit = pArguments->GetUTF8String(1); if (!bsUnit.IsEmpty()) { wsUnit = CFX_WideString::FromUTF8(bsUnit.AsStringC()); } } if (iLength >= 3) { iIndex = pArguments->GetInt32(2); } if (!pNode) { return; } CXFA_LayoutProcessor* pDocLayout = m_pDocument->GetDocLayout(); if (!pDocLayout) { return; } CFX_RectF rtRect; CXFA_Measurement measure; CXFA_LayoutItem* pLayoutItem = pDocLayout->GetLayoutItem(pNode); if (!pLayoutItem) { return; } while (iIndex > 0 && pLayoutItem) { pLayoutItem = pLayoutItem->GetNext(); iIndex--; } CFXJSE_Value* pValue = pArguments->GetReturnValue(); if (!pLayoutItem) { pValue->SetFloat(0); return; } pLayoutItem->GetRect(rtRect, TRUE); switch (layoutModel) { case XFA_LAYOUTMODEL_H: measure.Set(rtRect.height, XFA_UNIT_Pt); break; case XFA_LAYOUTMODEL_W: measure.Set(rtRect.width, XFA_UNIT_Pt); break; case XFA_LAYOUTMODEL_X: measure.Set(rtRect.left, XFA_UNIT_Pt); break; case XFA_LAYOUTMODEL_Y: measure.Set(rtRect.top, XFA_UNIT_Pt); break; } XFA_UNIT unit = measure.GetUnit(wsUnit.AsStringC()); FX_FLOAT fValue = measure.ToUnit(unit); fValue = FXSYS_round(fValue * 1000) / 1000.0f; if (pValue) pValue->SetFloat(fValue); }
void FXJSE_Value_ToUTF8String(FXJSE_HVALUE hValue, CFX_ByteString& szStrOutput) { CFXJSE_Value* lpValue = reinterpret_cast<CFXJSE_Value*>(hValue); ASSERT(lpValue); return lpValue->ToString(szStrOutput); }