#include #include #include #include "ScriptOptions.hpp" #include "Utilities/StringUtils.hpp" #include "Script.hpp" Porygon::ScriptOptions Porygon::ScriptOptions::DefaultScriptOptions; std::streambuf* Porygon::ScriptOptions::_printBuffer = std::cout.rdbuf(); std::ostream* Porygon::ScriptOptions::_printStream = new std::ostream(Porygon::ScriptOptions::_printBuffer); void Porygon::ScriptOptions::DefaultPrint(const char16_t *s) { Porygon::ScriptOptions::GetDefaultScriptOptions()->GetPrintStream() << Porygon::Utilities::StringUtils::FromUTF8(s) << std::endl; } bool Porygon::ScriptOptions::DefaultModuleExists(const char* moduleName, size_t size) { struct stat buffer; return (stat (moduleName, &buffer) == 0); } Porygon::Script *Porygon::ScriptOptions::DefaultResolveModule(const char* moduleName, size_t size) { auto stream = std::ifstream(moduleName); std::basic_stringstream stringStream; stringStream << stream.rdbuf(); auto str = std::u16string(stringStream.str()); return Porygon::Script::Create(str); } extern "C"{ void SetDefaultPrintFunc(void (*func)(const char16_t*)){ Porygon::ScriptOptions::GetDefaultScriptOptions()->SetPrintFunc(func); } void SetDefaultModuleExists(bool (*func)(const char* moduleName, size_t size)){ Porygon::ScriptOptions::GetDefaultScriptOptions()->SetModuleExistsFunc(func); } void SetDefaultResolveModule(Porygon::Script * (*func)(const char* moduleName, size_t size)){ Porygon::ScriptOptions::GetDefaultScriptOptions()->SetResolveModuleFunc(func); } Porygon::ScriptOptions* CreateOptions(){ return new Porygon::ScriptOptions(); } void SetOptionPrintFunc(Porygon::ScriptOptions* opt, void (*func)(const char16_t*)){ opt->SetPrintFunc(func); } void SetOptionModuleExistsFunc(Porygon::ScriptOptions* opt, bool (*func)(const char* moduleName, size_t size)){ opt->SetModuleExistsFunc(func); } void SetOptionResolveModuleFunc(Porygon::ScriptOptions* opt, Porygon::Script* (*func)(const char* moduleName, size_t size)){ opt->SetResolveModuleFunc(func); } }