OpenLibExtensions.cs 5.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181
  1. using Lua.Standard.Basic;
  2. using Lua.Standard.Coroutines;
  3. using Lua.Standard.IO;
  4. using Lua.Standard.Mathematics;
  5. using Lua.Standard.Modules;
  6. using Lua.Standard.OperatingSystem;
  7. using Lua.Standard.Table;
  8. namespace Lua.Standard;
  9. public static class OpenLibExtensions
  10. {
  11. static readonly LuaFunction[] baseFunctions = [
  12. AssertFunction.Instance,
  13. ErrorFunction.Instance,
  14. PrintFunction.Instance,
  15. RawGetFunction.Instance,
  16. RawSetFunction.Instance,
  17. RawEqualFunction.Instance,
  18. RawLenFunction.Instance,
  19. GetMetatableFunction.Instance,
  20. SetMetatableFunction.Instance,
  21. ToNumberFunction.Instance,
  22. ToStringFunction.Instance,
  23. CollectGarbageFunction.Instance,
  24. NextFunction.Instance,
  25. IPairsFunction.Instance,
  26. PairsFunction.Instance,
  27. Basic.TypeFunction.Instance,
  28. PCallFunction.Instance,
  29. XPCallFunction.Instance,
  30. DoFileFunction.Instance,
  31. LoadFileFunction.Instance,
  32. LoadFunction.Instance,
  33. SelectFunction.Instance,
  34. ];
  35. static readonly LuaFunction[] mathFunctions = [
  36. AbsFunction.Instance,
  37. AcosFunction.Instance,
  38. AsinFunction.Instance,
  39. Atan2Function.Instance,
  40. AtanFunction.Instance,
  41. CeilFunction.Instance,
  42. CosFunction.Instance,
  43. CoshFunction.Instance,
  44. DegFunction.Instance,
  45. ExpFunction.Instance,
  46. FloorFunction.Instance,
  47. FmodFunction.Instance,
  48. FrexpFunction.Instance,
  49. LdexpFunction.Instance,
  50. LogFunction.Instance,
  51. MaxFunction.Instance,
  52. MinFunction.Instance,
  53. ModfFunction.Instance,
  54. PowFunction.Instance,
  55. RadFunction.Instance,
  56. RandomFunction.Instance,
  57. RandomSeedFunction.Instance,
  58. SinFunction.Instance,
  59. SinhFunction.Instance,
  60. SqrtFunction.Instance,
  61. TanFunction.Instance,
  62. TanhFunction.Instance,
  63. ];
  64. static readonly LuaFunction[] tableFunctions = [
  65. PackFunction.Instance,
  66. UnpackFunction.Instance,
  67. Table.RemoveFunction.Instance,
  68. ConcatFunction.Instance,
  69. InsertFunction.Instance,
  70. SortFunction.Instance,
  71. ];
  72. static readonly LuaFunction[] ioFunctions = [
  73. OpenFunction.Instance,
  74. CloseFunction.Instance,
  75. InputFunction.Instance,
  76. OutputFunction.Instance,
  77. WriteFunction.Instance,
  78. ReadFunction.Instance,
  79. LinesFunction.Instance,
  80. IO.TypeFunction.Instance,
  81. ];
  82. static readonly LuaFunction[] osFunctions = [
  83. ClockFunction.Instance,
  84. DiffTimeFunction.Instance,
  85. ExitFunction.Instance,
  86. GetEnvFunction.Instance,
  87. OperatingSystem.RemoveFunction.Instance,
  88. SetLocaleFunction.Instance,
  89. TimeFunction.Instance,
  90. ];
  91. public static void OpenBasicLibrary(this LuaState state)
  92. {
  93. // basic
  94. state.Environment["_G"] = state.Environment;
  95. state.Environment["_VERSION"] = "Lua 5.2";
  96. foreach (var func in baseFunctions)
  97. {
  98. state.Environment[func.Name] = func;
  99. }
  100. // coroutine
  101. var coroutine = new LuaTable(0, 6);
  102. coroutine[CoroutineCreateFunction.FunctionName] = new CoroutineCreateFunction();
  103. coroutine[CoroutineResumeFunction.FunctionName] = new CoroutineResumeFunction();
  104. coroutine[CoroutineYieldFunction.FunctionName] = new CoroutineYieldFunction();
  105. coroutine[CoroutineStatusFunction.FunctionName] = new CoroutineStatusFunction();
  106. coroutine[CoroutineRunningFunction.FunctionName] = new CoroutineRunningFunction();
  107. coroutine[CoroutineWrapFunction.FunctionName] = new CoroutineWrapFunction();
  108. state.Environment["coroutine"] = coroutine;
  109. }
  110. public static void OpenMathLibrary(this LuaState state)
  111. {
  112. state.Environment[RandomFunction.RandomInstanceKey] = new LuaUserData<Random>(new Random());
  113. var math = new LuaTable(0, mathFunctions.Length);
  114. foreach (var func in mathFunctions)
  115. {
  116. math[func.Name] = func;
  117. }
  118. math["pi"] = Math.PI;
  119. math["huge"] = double.PositiveInfinity;
  120. state.Environment["math"] = math;
  121. }
  122. public static void OpenModuleLibrary(this LuaState state)
  123. {
  124. var package = new LuaTable(0, 1);
  125. package["loaded"] = new LuaTable();
  126. state.Environment["package"] = package;
  127. state.Environment[RequireFunction.Instance.Name] = RequireFunction.Instance;
  128. }
  129. public static void OpenTableLibrary(this LuaState state)
  130. {
  131. var table = new LuaTable(0, tableFunctions.Length);
  132. foreach (var func in tableFunctions)
  133. {
  134. table[func.Name] = func;
  135. }
  136. state.Environment["table"] = table;
  137. }
  138. public static void OpenIOLibrary(this LuaState state)
  139. {
  140. var io = new LuaTable(0, ioFunctions.Length);
  141. foreach (var func in ioFunctions)
  142. {
  143. io[func.Name] = func;
  144. }
  145. io["stdio"] = new FileHandle(Console.OpenStandardInput());
  146. io["stdout"] = new FileHandle(Console.OpenStandardOutput());
  147. io["stderr"] = new FileHandle(Console.OpenStandardError());
  148. state.Environment["io"] = io;
  149. }
  150. public static void OpenOperatingSystemLibrary(this LuaState state)
  151. {
  152. var os = new LuaTable(0, osFunctions.Length);
  153. foreach (var func in osFunctions)
  154. {
  155. os[func.Name] = func;
  156. }
  157. state.Environment["os"] = os;
  158. }
  159. }