EXPORT void Item_GetLexems( Item& it, ScriptString& output ) { if(!it.Lexems) { output.assign(""); return; } output.assign(it.Lexems); return; }
void V8XMLHttpRequest::responseAttributeGetterCustom( const v8::FunctionCallbackInfo<v8::Value>& info) { XMLHttpRequest* xmlHttpRequest = V8XMLHttpRequest::toImpl(info.Holder()); ExceptionState exceptionState(info.GetIsolate(), ExceptionState::GetterContext, "XMLHttpRequest", "response"); switch (xmlHttpRequest->getResponseTypeCode()) { case XMLHttpRequest::ResponseTypeDefault: case XMLHttpRequest::ResponseTypeText: responseTextAttributeGetterCustom(info); return; case XMLHttpRequest::ResponseTypeJSON: { v8::Isolate* isolate = info.GetIsolate(); ScriptString jsonSource = xmlHttpRequest->responseJSONSource(); if (jsonSource.isEmpty()) { v8SetReturnValue(info, v8::Null(isolate)); return; } // Catch syntax error. Swallows an exception (when thrown) as the // spec says. https://xhr.spec.whatwg.org/#response-body v8::Local<v8::Value> json = fromJSONString( isolate, toCoreString(jsonSource.v8Value()), exceptionState); if (exceptionState.hadException()) { exceptionState.clearException(); v8SetReturnValue(info, v8::Null(isolate)); } else { v8SetReturnValue(info, json); } return; } case XMLHttpRequest::ResponseTypeDocument: { Document* document = xmlHttpRequest->responseXML(exceptionState); v8SetReturnValueFast(info, document, xmlHttpRequest); return; } case XMLHttpRequest::ResponseTypeBlob: { Blob* blob = xmlHttpRequest->responseBlob(); v8SetReturnValueFast(info, blob, xmlHttpRequest); return; } case XMLHttpRequest::ResponseTypeArrayBuffer: { DOMArrayBuffer* arrayBuffer = xmlHttpRequest->responseArrayBuffer(); v8SetReturnValueFast(info, arrayBuffer, xmlHttpRequest); return; } } }
void V8XMLHttpRequest::responseTextAttributeGetterCustom(const v8::PropertyCallbackInfo<v8::Value>& info) { XMLHttpRequest* xmlHttpRequest = V8XMLHttpRequest::toNative(info.Holder()); ExceptionState exceptionState(ExceptionState::GetterContext, "responseText", "XMLHttpRequest", info.Holder(), info.GetIsolate()); ScriptString text = xmlHttpRequest->responseText(exceptionState); if (exceptionState.throwIfNeeded()) return; if (text.isEmpty()) { v8SetReturnValueString(info, emptyString(), info.GetIsolate()); return; } v8SetReturnValue(info, text.v8Value()); }
EXPORT void String_ParseFloat(ScriptString& str, float val, uint8 precision) { static char prec[32]; sprintf(prec,"%%.%df",precision); static char buf[1024]; sprintf(buf,prec,val); str.assign(buf); }
// todo: remove and replace with fonline-provided callers EXPORT void RunScript(const ScriptString& scriptfunc, int p0, int p1, int p2, const ScriptString& p3) { int delim = scriptfunc.c_std_str().find("@"); if(delim == -1) return; string modulename = scriptfunc.c_std_str().substr(0, delim); string funcname = scriptfunc.c_std_str().substr(delim + 1); asIScriptModule* module = ASEngine->GetModule(modulename.c_str()); if(!module) return; asIScriptFunction* script_func = module->GetFunctionByName(funcname.c_str()); if(!script_func) return; asIScriptContext* ctx = ASEngine->CreateContext(); ctx->Prepare(script_func); ctx->SetArgDWord(0, p0); ctx->SetArgDWord(1, p1); ctx->SetArgDWord(2, p2); ctx->SetArgObject(3, (void*)&p3); ctx->Execute(); ctx->Release(); }
EXPORT void Critter_RunLocalScript( Critter& cr, const ScriptString& scriptfunc, int p0, int p1, int p2, const ScriptString* p3, ScriptArray* p4 ) #endif { if( Global_IsLocalScript( scriptfunc )) { string module, function; if( ParseLocalScriptName( scriptfunc, module, function )) { int bindId = FOnline->ScriptBind( module.c_str(), function.c_str(), true ); if( bindId > 0 && FOnline->ScriptPrepare( bindId )) { #ifdef __SERVER FOnline->ScriptSetArgObject( &cr ); #endif FOnline->ScriptSetArgInt( p0 ); FOnline->ScriptSetArgInt( p1 ); FOnline->ScriptSetArgInt( p2 ); FOnline->ScriptSetArgObject( (void*)p3 ); FOnline->ScriptSetArgObject( p4 ); FOnline->ScriptRunPrepared(); } else { Log( "RunLocalScript : cannot bind module<%s> function<%s>\n", module.c_str(), function.c_str() ); } } else { Log( "RunLocalScript : invalid function name<%s>\n", scriptfunc.c_str() ); } } else { Log( "RunLocalScript : function<%s> not found\n", scriptfunc.c_str() ); } }
bool ParseLocalScriptName( const ScriptString& scriptfunc, string& module, string& function ) { int pos = scriptfunc.c_std_str().find_first_of( "@" ); if( pos > 0 ) { string moduleName = scriptfunc.c_std_str().substr( 0, pos ); string functionDecl = "void "; functionDecl += scriptfunc.c_std_str().substr( pos + 1 ); #if defined(__CLIENT) functionDecl += "(int,int,int,string@,int[]@)"; #elif defined(__SERVER) functionDecl += "(Critter&,int,int,int,string@,int[]@)"; #endif module = moduleName; function = functionDecl; return( true ); } else return( false ); }
EXPORT int String_ReplaceText(ScriptString& str, ScriptString& text, ScriptString& replacement) { int size=text.length(); if(!size) return 0; int size_rep=replacement.length(); string st=str.c_std_str(); int pos=st.find(text.c_std_str(),0); int num=0; while(pos>=0) { st.replace(pos,size,replacement.c_std_str()); pos=st.find(text.c_std_str(),pos+size_rep); num++; } str=st; return num; }
void V8XMLHttpRequest::responseAttributeGetterCustom(const v8::PropertyCallbackInfo<v8::Value>& info) { XMLHttpRequest* xmlHttpRequest = V8XMLHttpRequest::toNative(info.Holder()); switch (xmlHttpRequest->responseTypeCode()) { case XMLHttpRequest::ResponseTypeDefault: case XMLHttpRequest::ResponseTypeText: responseTextAttributeGetterCustom(info); return; case XMLHttpRequest::ResponseTypeJSON: { v8::Isolate* isolate = info.GetIsolate(); ScriptString jsonSource = xmlHttpRequest->responseJSONSource(); if (jsonSource.isEmpty()) { v8SetReturnValue(info, v8::Null(isolate)); return; } // Catch syntax error. v8::TryCatch exceptionCatcher; v8::Handle<v8::Value> json = v8::JSON::Parse(jsonSource.v8Value()); if (exceptionCatcher.HasCaught() || json.IsEmpty()) v8SetReturnValue(info, v8::Null(isolate)); else v8SetReturnValue(info, json); return; } case XMLHttpRequest::ResponseTypeDocument: { ExceptionState exceptionState(ExceptionState::GetterContext, "response", "XMLHttpRequest", info.Holder(), info.GetIsolate()); Document* document = xmlHttpRequest->responseXML(exceptionState); if (exceptionState.throwIfNeeded()) return; v8SetReturnValueFast(info, document, xmlHttpRequest); return; } case XMLHttpRequest::ResponseTypeBlob: { Blob* blob = xmlHttpRequest->responseBlob(); v8SetReturnValueFast(info, blob, xmlHttpRequest); return; } case XMLHttpRequest::ResponseTypeLegacyStream: { Stream* stream = xmlHttpRequest->responseLegacyStream(); v8SetReturnValueFast(info, stream, xmlHttpRequest); return; } case XMLHttpRequest::ResponseTypeStream: { ReadableStream* stream = xmlHttpRequest->responseStream(); v8SetReturnValueFast(info, stream, xmlHttpRequest); return; } case XMLHttpRequest::ResponseTypeArrayBuffer: { ArrayBuffer* arrayBuffer = xmlHttpRequest->responseArrayBuffer(); if (arrayBuffer) { arrayBuffer->setDeallocationObserver(V8ArrayBufferDeallocationObserver::instanceTemplate()); } v8SetReturnValueFast(info, arrayBuffer, xmlHttpRequest); return; } } }
void V8XMLHttpRequest::responseAttributeGetterCustom(const v8::PropertyCallbackInfo<v8::Value>& info) { XMLHttpRequest* xmlHttpRequest = V8XMLHttpRequest::toImpl(info.Holder()); switch (xmlHttpRequest->responseTypeCode()) { case XMLHttpRequest::ResponseTypeDefault: case XMLHttpRequest::ResponseTypeText: responseTextAttributeGetterCustom(info); return; case XMLHttpRequest::ResponseTypeJSON: { v8::Isolate* isolate = info.GetIsolate(); ScriptString jsonSource = xmlHttpRequest->responseJSONSource(); if (jsonSource.isEmpty()) { v8SetReturnValue(info, v8::Null(isolate)); return; } // Catch syntax error. Swallows an exception (when thrown) as the // spec says. https://xhr.spec.whatwg.org/#response-body v8::TryCatch exceptionCatcher; v8::Local<v8::Value> json; if (v8Call(v8::JSON::Parse(isolate, jsonSource.v8Value()), json, exceptionCatcher)) v8SetReturnValue(info, json); else v8SetReturnValue(info, v8::Null(isolate)); return; } case XMLHttpRequest::ResponseTypeDocument: { ExceptionState exceptionState(ExceptionState::GetterContext, "response", "XMLHttpRequest", info.Holder(), info.GetIsolate()); Document* document = xmlHttpRequest->responseXML(exceptionState); if (exceptionState.throwIfNeeded()) return; v8SetReturnValueFast(info, document, xmlHttpRequest); return; } case XMLHttpRequest::ResponseTypeBlob: { Blob* blob = xmlHttpRequest->responseBlob(); v8SetReturnValueFast(info, blob, xmlHttpRequest); return; } case XMLHttpRequest::ResponseTypeLegacyStream: { Stream* stream = xmlHttpRequest->responseLegacyStream(); v8SetReturnValueFast(info, stream, xmlHttpRequest); return; } case XMLHttpRequest::ResponseTypeStream: { ReadableStream* stream = xmlHttpRequest->responseStream(); v8SetReturnValueFast(info, stream, xmlHttpRequest); return; } case XMLHttpRequest::ResponseTypeArrayBuffer: { DOMArrayBuffer* arrayBuffer = xmlHttpRequest->responseArrayBuffer(); v8SetReturnValueFast(info, arrayBuffer, xmlHttpRequest); return; } } }
void ScriptCallArgumentHandler::appendArgument(const ScriptString& argument) { m_arguments.append(jsString(m_exec, argument.ustring())); }
void ScriptFunctionCall::appendArgument(const ScriptString& argument) { m_arguments.append(jsString(m_exec, argument.ustring())); }
void AGSDeSerializer::Unserialize(int index, const char *objectType, const char *serializedData, int dataSize) { if (strcmp(objectType, "GUIObject") == 0) { ccDynamicGUIObject.Unserialize(index, serializedData, dataSize); } else if (strcmp(objectType, "Character") == 0) { ccDynamicCharacter.Unserialize(index, serializedData, dataSize); } else if (strcmp(objectType, "Hotspot") == 0) { ccDynamicHotspot.Unserialize(index, serializedData, dataSize); } else if (strcmp(objectType, "Region") == 0) { ccDynamicRegion.Unserialize(index, serializedData, dataSize); } else if (strcmp(objectType, "Inventory") == 0) { ccDynamicInv.Unserialize(index, serializedData, dataSize); } else if (strcmp(objectType, "Dialog") == 0) { ccDynamicDialog.Unserialize(index, serializedData, dataSize); } else if (strcmp(objectType, "GUI") == 0) { ccDynamicGUI.Unserialize(index, serializedData, dataSize); } else if (strcmp(objectType, "Object") == 0) { ccDynamicObject.Unserialize(index, serializedData, dataSize); } else if (strcmp(objectType, "String") == 0) { ScriptString *scf = new ScriptString(); scf->Unserialize(index, serializedData, dataSize); } else if (strcmp(objectType, "File") == 0) { // files cannot be restored properly -- so just recreate // the object; attempting any operations on it will fail sc_File *scf = new sc_File(); ccRegisterUnserializedObject(index, scf, scf); } else if (strcmp(objectType, "Overlay") == 0) { ScriptOverlay *scf = new ScriptOverlay(); scf->Unserialize(index, serializedData, dataSize); } else if (strcmp(objectType, "DateTime") == 0) { ScriptDateTime *scf = new ScriptDateTime(); scf->Unserialize(index, serializedData, dataSize); } else if (strcmp(objectType, "ViewFrame") == 0) { ScriptViewFrame *scf = new ScriptViewFrame(); scf->Unserialize(index, serializedData, dataSize); } else if (strcmp(objectType, "DynamicSprite") == 0) { ScriptDynamicSprite *scf = new ScriptDynamicSprite(); scf->Unserialize(index, serializedData, dataSize); } else if (strcmp(objectType, "DrawingSurface") == 0) { ScriptDrawingSurface *sds = new ScriptDrawingSurface(); sds->Unserialize(index, serializedData, dataSize); if (sds->isLinkedBitmapOnly) { dialogOptionsRenderingSurface = sds; } } else if (strcmp(objectType, "DialogOptionsRendering") == 0) { ccDialogOptionsRendering.Unserialize(index, serializedData, dataSize); } else if (!unserialize_audio_script_object(index, objectType, serializedData, dataSize)) { // check if the type is read by a plugin for (int ii = 0; ii < numPluginReaders; ii++) { if (strcmp(objectType, pluginReaders[ii].type) == 0) { pluginReaders[ii].reader->Unserialize(index, serializedData, dataSize); return; } } quitprintf("Unserialise: unknown object type: '%s'", objectType); } }
EXPORT void Critter_GetLexems( Critter& cr, ScriptString& output ) { output.assign(cr.Lexems); return; }