diff options
| author | Elias Fleckenstein <eliasfleckenstein@web.de> | 2022-05-29 00:49:10 +0200 |
|---|---|---|
| committer | Elias Fleckenstein <eliasfleckenstein@web.de> | 2022-05-29 00:49:10 +0200 |
| commit | 535595e9823f020b8f02ae657f259966814d1906 (patch) | |
| tree | 1901448068b0868b9176736b4c2437ef97948d01 | |
| parent | e7841553c1c28affcb9a907ee35317754f4ca442 (diff) | |
| download | hydra-dragonfire-535595e9823f020b8f02ae657f259966814d1906.tar.xz | |
Add escape sequence library
| -rw-r--r-- | .gitmodules | 3 | ||||
| -rw-r--r-- | builtin/escapes.lua | 50 | ||||
| m--------- | builtin/luax | 0 | ||||
| -rwxr-xr-x | example/chat-client.lua | 24 | ||||
| -rw-r--r-- | hydra.go | 20 |
5 files changed, 94 insertions, 3 deletions
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 +Subproject 130a68dc27f3461838be005b3cb7b8a115e2c21 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() @@ -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 { |
