Browse Source

Add: string.len

AnnulusGames 1 year ago
parent
commit
4031b2aa43

+ 16 - 0
src/Lua/Standard/OpenLibExtensions.cs

@@ -6,6 +6,7 @@ using Lua.Standard.Mathematics;
 using Lua.Standard.Modules;
 using Lua.Standard.Modules;
 using Lua.Standard.OperatingSystem;
 using Lua.Standard.OperatingSystem;
 using Lua.Standard.Table;
 using Lua.Standard.Table;
+using Lua.Standard.Text;
 
 
 namespace Lua.Standard;
 namespace Lua.Standard;
 
 
@@ -75,6 +76,10 @@ public static class OpenLibExtensions
         SortFunction.Instance,
         SortFunction.Instance,
     ];
     ];
 
 
+    static readonly LuaFunction[] stringFunctions = [
+        LenFunction.Instance,
+    ];
+
     static readonly LuaFunction[] ioFunctions = [
     static readonly LuaFunction[] ioFunctions = [
         OpenFunction.Instance,
         OpenFunction.Instance,
         CloseFunction.Instance,
         CloseFunction.Instance,
@@ -173,6 +178,17 @@ public static class OpenLibExtensions
         state.Environment["table"] = table;
         state.Environment["table"] = table;
     }
     }
 
 
+    public static void OpenStringLibrary(this LuaState state)
+    {
+        var @string = new LuaTable(0, stringFunctions.Length);
+        foreach (var func in stringFunctions)
+        {
+            @string[func.Name] = func;
+        }
+
+        state.Environment["string"] = @string;
+    }
+
     public static void OpenIOLibrary(this LuaState state)
     public static void OpenIOLibrary(this LuaState state)
     {
     {
         var io = new LuaTable(0, ioFunctions.Length);
         var io = new LuaTable(0, ioFunctions.Length);

+ 15 - 0
src/Lua/Standard/Text/LenFunction.cs

@@ -0,0 +1,15 @@
+
+namespace Lua.Standard.Text;
+
+public sealed class LenFunction : LuaFunction
+{
+    public override string Name => "len";
+    public static readonly LenFunction Instance = new();
+
+    protected override ValueTask<int> InvokeAsyncCore(LuaFunctionExecutionContext context, Memory<LuaValue> buffer, CancellationToken cancellationToken)
+    {
+        var s = context.GetArgument<string>(0);
+        buffer.Span[0] = s.Length;
+        return new(1);
+    }
+}

+ 10 - 0
src/Lua/Standard/Text/StringHelper.cs

@@ -0,0 +1,10 @@
+namespace Lua.Standard.Text;
+
+internal static class StringHelper
+{
+    public static int UnicodeToAscii(int i)
+    {
+        if (i >= 0 && i <= 255) return i;
+        throw new ArgumentOutOfRangeException(nameof(i));
+    }
+}