From: Elias Fleckenstein Date: Sat, 28 May 2022 22:49:10 +0000 (+0200) Subject: Add escape sequence library X-Git-Tag: v0.1.0~11 X-Git-Url: https://git.lizzy.rs/?a=commitdiff_plain;h=535595e9823f020b8f02ae657f259966814d1906;p=hydra-dragonfire.git Add escape sequence library --- diff --git a/.gitmodules b/.gitmodules new file mode 100644 index 0000000..dfc0099 --- /dev/null +++ b/.gitmodules @@ -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 index 0000000..12ba174 --- /dev/null +++ b/builtin/escapes.lua @@ -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 index 0000000..130a68d --- /dev/null +++ b/builtin/luax @@ -0,0 +1 @@ +Subproject commit 130a68dc27f3461838be005b3cb7b8a115e2c21e diff --git a/example/chat-client.lua b/example/chat-client.lua new file mode 100755 index 0000000..7acb9a6 --- /dev/null +++ b/example/chat-client.lua @@ -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() diff --git a/hydra.go b/hydra.go index ee8cdb6..5deb1d4 100644 --- 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 {