]> git.lizzy.rs Git - hydra-dragonfire.git/commitdiff
Add escape sequence library
authorElias Fleckenstein <eliasfleckenstein@web.de>
Sat, 28 May 2022 22:49:10 +0000 (00:49 +0200)
committerElias Fleckenstein <eliasfleckenstein@web.de>
Sat, 28 May 2022 22:49:10 +0000 (00:49 +0200)
.gitmodules [new file with mode: 0644]
builtin/escapes.lua [new file with mode: 0644]
builtin/luax [new submodule]
example/chat-client.lua [new file with mode: 0755]
hydra.go

diff --git a/.gitmodules b/.gitmodules
new file mode 100644 (file)
index 0000000..dfc0099
--- /dev/null
@@ -0,0 +1,3 @@
+[submodule "builtin/luax"]
+       path = builtin/luax
+       url = https://github.com/EliasFleckenstein03/luax
diff --git a/builtin/escapes.lua b/builtin/escapes.lua
new file mode 100644 (file)
index 0000000..12ba174
--- /dev/null
@@ -0,0 +1,50 @@
+--[[ builtin/escapes.lua ]]--
+-- code taken from minetest/builtin/common/misc_helpers.lua with modifications
+
+local escapes = {}
+package.loaded["escapes"] = escapes
+
+escapes.ESCAPE_CHAR = string.char(0x1b)
+
+function escapes.get_color_escape_sequence(color)
+       return escapes.ESCAPE_CHAR .. "(c@" .. color .. ")"
+end
+
+function escapes.get_background_escape_sequence(color)
+       return escapes.ESCAPE_CHAR .. "(b@" .. color .. ")"
+end
+
+function escapes.colorize(color, message)
+       local lines = tostring(message):split("\n", true)
+       local color_code = escapes.get_color_escape_sequence(color)
+
+       for i, line in ipairs(lines) do
+               lines[i] = color_code .. line
+       end
+
+       return table.concat(lines, "\n") .. escapes.get_color_escape_sequence("#ffffff")
+end
+
+function escapes.strip_foreground_colors(str)
+       return (str:gsub(escapes.ESCAPE_CHAR .. "%(c@[^)]+%)", ""))
+end
+
+function escapes.strip_background_colors(str)
+       return (str:gsub(escapes.ESCAPE_CHAR .. "%(b@[^)]+%)", ""))
+end
+
+function escapes.strip_colors(str)
+       return (str:gsub(escapes.ESCAPE_CHAR .. "%([bc]@[^)]+%)", ""))
+end
+
+function escapes.strip_translations(str)
+       return (str
+               :gsub(escapes.ESCAPE_CHAR .. "%(T@[^)]+%)", "")
+               :gsub(escapes.ESCAPE_CHAR .. "[TFE]", ""))
+end
+
+function escapes.strip_all(str)
+       str = escapes.strip_colors(str)
+       str = escapes.strip_translations(str)
+       return str
+end
diff --git a/builtin/luax b/builtin/luax
new file mode 160000 (submodule)
index 0000000..130a68d
--- /dev/null
@@ -0,0 +1 @@
+Subproject commit 130a68dc27f3461838be005b3cb7b8a115e2c21e
diff --git a/example/chat-client.lua b/example/chat-client.lua
new file mode 100755 (executable)
index 0000000..7acb9a6
--- /dev/null
@@ -0,0 +1,24 @@
+#!/usr/bin/env hydra-dragonfire
+local escapes = require("escapes")
+local address, name, password = unpack(arg)
+local client = hydra.client(address)
+
+client:enable("auth")
+client.auth:username(name)
+client.auth:password(password or "")
+
+client:subscribe("chat_msg")
+client:connect()
+
+while not hydra.canceled() do
+       local pkt, interrupt = client:poll()
+
+       if pkt then
+               print(escapes.strip_all(pkt.text))
+       elseif not interrupt then
+               print("disconnected")
+               break
+       end
+end
+
+client:disconnect()
index ee8cdb650cf33b560882dad6f094a84283e3c3ed..5deb1d4a2e4c10118316cc4821e9f26ce15f74bf 100644 (file)
--- a/hydra.go
+++ b/hydra.go
@@ -13,8 +13,20 @@ import (
 var lastTime = time.Now()
 var canceled = false
 
+//go:embed builtin/luax/init.lua
+var builtinLuaX string
+
 //go:embed builtin/vector.lua
-var vectorLibrary string
+var builtinVector string
+
+//go:embed builtin/escapes.lua
+var builtinEscapes string
+
+var builtinFiles = []string{
+       builtinLuaX,
+       builtinVector,
+       builtinEscapes,
+}
 
 var hydraFuncs = map[string]lua.LGFunction{
        "client":     l_client,
@@ -86,8 +98,10 @@ func main() {
        l.SetField(l.NewTypeMetatable("hydra.auth"), "__index", l.SetFuncs(l.NewTable(), authFuncs))
        l.SetField(l.NewTypeMetatable("hydra.client"), "__index", l.NewFunction(l_client_index))
 
-       if err := l.DoString(vectorLibrary); err != nil {
-               panic(err)
+       for _, str := range builtinFiles {
+               if err := l.DoString(str); err != nil {
+                       panic(err)
+               }
        }
 
        if err := l.DoFile(os.Args[1]); err != nil {