| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158 |
- using Lua.Standard.Basic;
- using Lua.Standard.Coroutines;
- using Lua.Standard.IO;
- using Lua.Standard.Mathematics;
- using Lua.Standard.Modules;
- using Lua.Standard.Table;
- namespace Lua.Standard;
- public static class OpenLibExtensions
- {
- static readonly LuaFunction[] baseFunctions = [
- AssertFunction.Instance,
- ErrorFunction.Instance,
- PrintFunction.Instance,
- RawGetFunction.Instance,
- RawSetFunction.Instance,
- RawEqualFunction.Instance,
- RawLenFunction.Instance,
- GetMetatableFunction.Instance,
- SetMetatableFunction.Instance,
- ToNumberFunction.Instance,
- ToStringFunction.Instance,
- CollectGarbageFunction.Instance,
- NextFunction.Instance,
- IPairsFunction.Instance,
- PairsFunction.Instance,
- Basic.TypeFunction.Instance,
- PCallFunction.Instance,
- XPCallFunction.Instance,
- DoFileFunction.Instance,
- LoadFileFunction.Instance,
- LoadFunction.Instance,
- SelectFunction.Instance,
- ];
- static readonly LuaFunction[] mathFunctions = [
- AbsFunction.Instance,
- AcosFunction.Instance,
- AsinFunction.Instance,
- Atan2Function.Instance,
- AtanFunction.Instance,
- CeilFunction.Instance,
- CosFunction.Instance,
- CoshFunction.Instance,
- DegFunction.Instance,
- ExpFunction.Instance,
- FloorFunction.Instance,
- FmodFunction.Instance,
- FrexpFunction.Instance,
- LdexpFunction.Instance,
- LogFunction.Instance,
- MaxFunction.Instance,
- MinFunction.Instance,
- ModfFunction.Instance,
- PowFunction.Instance,
- RadFunction.Instance,
- RandomFunction.Instance,
- RandomSeedFunction.Instance,
- SinFunction.Instance,
- SinhFunction.Instance,
- SqrtFunction.Instance,
- TanFunction.Instance,
- TanhFunction.Instance,
- ];
- static readonly LuaFunction[] tableFunctions = [
- PackFunction.Instance,
- UnpackFunction.Instance,
- RemoveFunction.Instance,
- ConcatFunction.Instance,
- InsertFunction.Instance,
- SortFunction.Instance,
- ];
- static readonly LuaFunction[] ioFunctions = [
- OpenFunction.Instance,
- CloseFunction.Instance,
- InputFunction.Instance,
- OutputFunction.Instance,
- WriteFunction.Instance,
- ReadFunction.Instance,
- LinesFunction.Instance,
- IO.TypeFunction.Instance,
- ];
- public static void OpenBasicLibrary(this LuaState state)
- {
- // basic
- state.Environment["_G"] = state.Environment;
- state.Environment["_VERSION"] = "Lua 5.2";
- foreach (var func in baseFunctions)
- {
- state.Environment[func.Name] = func;
- }
- // coroutine
- var coroutine = new LuaTable(0, 6);
- coroutine[CoroutineCreateFunction.FunctionName] = new CoroutineCreateFunction();
- coroutine[CoroutineResumeFunction.FunctionName] = new CoroutineResumeFunction();
- coroutine[CoroutineYieldFunction.FunctionName] = new CoroutineYieldFunction();
- coroutine[CoroutineStatusFunction.FunctionName] = new CoroutineStatusFunction();
- coroutine[CoroutineRunningFunction.FunctionName] = new CoroutineRunningFunction();
- coroutine[CoroutineWrapFunction.FunctionName] = new CoroutineWrapFunction();
- state.Environment["coroutine"] = coroutine;
- }
- public static void OpenMathLibrary(this LuaState state)
- {
- state.Environment[RandomFunction.RandomInstanceKey] = new LuaUserData<Random>(new Random());
- state.Environment["pi"] = Math.PI;
- state.Environment["huge"] = double.PositiveInfinity;
- var table = new LuaTable(0, mathFunctions.Length);
- foreach (var func in mathFunctions)
- {
- table[func.Name] = func;
- }
- state.Environment["math"] = table;
- }
- public static void OpenModuleLibrary(this LuaState state)
- {
- var package = new LuaTable(0, 1);
- package["loaded"] = new LuaTable();
- state.Environment["package"] = package;
- state.Environment[RequireFunction.Instance.Name] = RequireFunction.Instance;
- }
- public static void OpenTableLibrary(this LuaState state)
- {
- var table = new LuaTable(0, tableFunctions.Length);
- foreach (var func in tableFunctions)
- {
- table[func.Name] = func;
- }
- state.Environment["table"] = table;
- }
- public static void OpenIOLibrary(this LuaState state)
- {
- var io = new LuaTable(0, ioFunctions.Length);
- foreach (var func in ioFunctions)
- {
- io[func.Name] = func;
- }
- io["stdio"] = new FileHandle(Console.OpenStandardInput());
- io["stdout"] = new FileHandle(Console.OpenStandardOutput());
- io["stderr"] = new FileHandle(Console.OpenStandardError());
- state.Environment["io"] = io;
- }
- }
|