mirror of
https://github.com/jiriks74/presence.nvim
synced 2024-11-23 20:37:50 +01:00
fix(formatting): Fix formatting using stylua (#11)
This commit is contained in:
parent
9e478c9960
commit
c295e1e14f
@ -19,7 +19,6 @@ local function byte_mod(x,v)
|
|||||||
return (x % v)
|
return (x % v)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
||||||
-- buffer
|
-- buffer
|
||||||
local strbuf = "" -- for unpacking
|
local strbuf = "" -- for unpacking
|
||||||
local strary = {} -- for packing
|
local strary = {} -- for packing
|
||||||
@ -35,11 +34,10 @@ local function strary_append_int32(n,h)
|
|||||||
if n < 0 then
|
if n < 0 then
|
||||||
n = n + 4294967296
|
n = n + 4294967296
|
||||||
end
|
end
|
||||||
table.insert(strary, tostr(h,
|
table.insert(
|
||||||
math.floor(n / 16777216),
|
strary,
|
||||||
math.floor(n / 65536) % 256,
|
tostr(h, math.floor(n / 16777216), math.floor(n / 65536) % 256, math.floor(n / 256) % 256, n % 256)
|
||||||
math.floor(n / 256) % 256,
|
)
|
||||||
n % 256 ))
|
|
||||||
end
|
end
|
||||||
|
|
||||||
local doubleto8bytes
|
local doubleto8bytes
|
||||||
@ -59,7 +57,10 @@ doubleto8bytes = function(x)
|
|||||||
return math.floor(v / 256), tostr(math.fmod(math.floor(v), 256))
|
return math.floor(v / 256), tostr(math.fmod(math.floor(v), 256))
|
||||||
end
|
end
|
||||||
local sign = 0
|
local sign = 0
|
||||||
if x < 0 then sign = 1; x = -x end
|
if x < 0 then
|
||||||
|
sign = 1
|
||||||
|
x = -x
|
||||||
|
end
|
||||||
local mantissa, exponent = math.frexp(x)
|
local mantissa, exponent = math.frexp(x)
|
||||||
if x == 0 then -- zero
|
if x == 0 then -- zero
|
||||||
mantissa, exponent = 0, 0
|
mantissa, exponent = 0, 0
|
||||||
@ -73,10 +74,13 @@ doubleto8bytes = function(x)
|
|||||||
local v, byte = "" -- convert to bytes
|
local v, byte = "" -- convert to bytes
|
||||||
x = mantissa
|
x = mantissa
|
||||||
for _ = 1, 6 do
|
for _ = 1, 6 do
|
||||||
_, byte = grab_byte(x); v = v..byte -- 47:0
|
_, byte = grab_byte(x)
|
||||||
|
v = v .. byte -- 47:0
|
||||||
end
|
end
|
||||||
x, byte = grab_byte(exponent * 16 + x); v = v..byte -- 55:48
|
x, byte = grab_byte(exponent * 16 + x)
|
||||||
x, byte = grab_byte(sign * 128 + x); v = v..byte -- 63:56
|
v = v .. byte -- 55:48
|
||||||
|
x, byte = grab_byte(sign * 128 + x)
|
||||||
|
v = v .. byte -- 63:56
|
||||||
return v, x
|
return v, x
|
||||||
end
|
end
|
||||||
|
|
||||||
@ -108,17 +112,33 @@ local function bytestodouble(v)
|
|||||||
local exp = band(v:byte(8), 127) * 16 + rshift(v:byte(7), 4) - 1023 -- bias
|
local exp = band(v:byte(8), 127) * 16 + rshift(v:byte(7), 4) - 1023 -- bias
|
||||||
-- frac: 52 bit
|
-- frac: 52 bit
|
||||||
local fracbytes = {
|
local fracbytes = {
|
||||||
band( v:byte(7), 15 ), v:byte(6), v:byte(5), v:byte(4), v:byte(3), v:byte(2), v:byte(1) -- big endian
|
band(v:byte(7), 15),
|
||||||
|
v:byte(6),
|
||||||
|
v:byte(5),
|
||||||
|
v:byte(4),
|
||||||
|
v:byte(3),
|
||||||
|
v:byte(2),
|
||||||
|
v:byte(1), -- big endian
|
||||||
}
|
}
|
||||||
local bits = bytestobits(fracbytes)
|
local bits = bytestobits(fracbytes)
|
||||||
|
|
||||||
for _ = 1, 4 do table.remove(bits,1) end
|
for _ = 1, 4 do
|
||||||
|
table.remove(bits, 1)
|
||||||
|
end
|
||||||
|
|
||||||
if sign == 1 then sign = -1 else sign = 1 end
|
if sign == 1 then
|
||||||
|
sign = -1
|
||||||
|
else
|
||||||
|
sign = 1
|
||||||
|
end
|
||||||
|
|
||||||
local frac = bitstofrac(bits)
|
local frac = bitstofrac(bits)
|
||||||
if exp == -1023 and frac==0 then return 0 end
|
if exp == -1023 and frac == 0 then
|
||||||
if exp == 1024 and frac==0 then return 1/0 *sign end
|
return 0
|
||||||
|
end
|
||||||
|
if exp == 1024 and frac == 0 then
|
||||||
|
return 1 / 0 * sign
|
||||||
|
end
|
||||||
|
|
||||||
local real = math.ldexp(1 + frac, exp)
|
local real = math.ldexp(1 + frac, exp)
|
||||||
|
|
||||||
@ -208,8 +228,12 @@ packers.table = function(data)
|
|||||||
local is_map, ndata, nmax = false, 0, 0
|
local is_map, ndata, nmax = false, 0, 0
|
||||||
for k, _ in pairs(data) do
|
for k, _ in pairs(data) do
|
||||||
if type(k) == "number" then
|
if type(k) == "number" then
|
||||||
if k > nmax then nmax = k end
|
if k > nmax then
|
||||||
else is_map = true end
|
nmax = k
|
||||||
|
end
|
||||||
|
else
|
||||||
|
is_map = true
|
||||||
|
end
|
||||||
ndata = ndata + 1
|
ndata = ndata + 1
|
||||||
end
|
end
|
||||||
if is_map then -- pack as map
|
if is_map then -- pack as map
|
||||||
@ -236,7 +260,9 @@ packers.table = function(data)
|
|||||||
else
|
else
|
||||||
error("overflow")
|
error("overflow")
|
||||||
end
|
end
|
||||||
for i=1,nmax do packers[type(data[i])](data[i]) end
|
for i = 1, nmax do
|
||||||
|
packers[type(data[i])](data[i])
|
||||||
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
@ -265,26 +291,36 @@ local types_map = {
|
|||||||
}
|
}
|
||||||
|
|
||||||
local type_for = function(n)
|
local type_for = function(n)
|
||||||
|
if types_map[n] then
|
||||||
if types_map[n] then return types_map[n]
|
return types_map[n]
|
||||||
elseif n < 0xc0 then
|
elseif n < 0xc0 then
|
||||||
if n < 0x80 then return "fixnum_posi"
|
if n < 0x80 then
|
||||||
elseif n < 0x90 then return "fixmap"
|
return "fixnum_posi"
|
||||||
elseif n < 0xa0 then return "fixarray"
|
elseif n < 0x90 then
|
||||||
else return "fixraw" end
|
return "fixmap"
|
||||||
elseif n > 0xdf then return "fixnum_neg"
|
elseif n < 0xa0 then
|
||||||
else return "undefined" end
|
return "fixarray"
|
||||||
|
else
|
||||||
|
return "fixraw"
|
||||||
|
end
|
||||||
|
elseif n > 0xdf then
|
||||||
|
return "fixnum_neg"
|
||||||
|
else
|
||||||
|
return "undefined"
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
local types_len_map = {
|
local types_len_map = {
|
||||||
uint16 = 2, uint32 = 4, uint64 = 8,
|
uint16 = 2,
|
||||||
int16 = 2, int32 = 4, int64 = 8,
|
uint32 = 4,
|
||||||
float = 4, double = 8,
|
uint64 = 8,
|
||||||
|
int16 = 2,
|
||||||
|
int32 = 4,
|
||||||
|
int64 = 8,
|
||||||
|
float = 4,
|
||||||
|
double = 8,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
--- unpackers
|
--- unpackers
|
||||||
|
|
||||||
local unpackers = {}
|
local unpackers = {}
|
||||||
@ -308,12 +344,16 @@ local unpack_number = function(offset,ntype,nlen)
|
|||||||
elseif ntype == "int16_t" then
|
elseif ntype == "int16_t" then
|
||||||
local n = b1 * 256 + b2
|
local n = b1 * 256 + b2
|
||||||
local nn = (65536 - n) * -1
|
local nn = (65536 - n) * -1
|
||||||
if nn == -65536 then nn = 0 end
|
if nn == -65536 then
|
||||||
|
nn = 0
|
||||||
|
end
|
||||||
return nn
|
return nn
|
||||||
elseif ntype == "int32_t" then
|
elseif ntype == "int32_t" then
|
||||||
local n = b1 * 65536 * 256 + b2 * 65536 + b3 * 256 + b4
|
local n = b1 * 65536 * 256 + b2 * 65536 + b3 * 256 + b4
|
||||||
local nn = (4294967296 - n) * -1
|
local nn = (4294967296 - n) * -1
|
||||||
if nn == -4294967296 then nn = 0 end
|
if nn == -4294967296 then
|
||||||
|
nn = 0
|
||||||
|
end
|
||||||
return nn
|
return nn
|
||||||
elseif ntype == "double_t" then
|
elseif ntype == "double_t" then
|
||||||
local s = tostr(b8, b7, b6, b5, b4, b3, b2, b1)
|
local s = tostr(b8, b7, b6, b5, b4, b3, b2, b1)
|
||||||
@ -325,13 +365,11 @@ local unpack_number = function(offset,ntype,nlen)
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
local function unpacker_number(offset)
|
local function unpacker_number(offset)
|
||||||
local obj_type = type_for(string.byte(strbuf, offset + 1, offset + 1))
|
local obj_type = type_for(string.byte(strbuf, offset + 1, offset + 1))
|
||||||
local nlen = types_len_map[obj_type]
|
local nlen = types_len_map[obj_type]
|
||||||
local ntype
|
local ntype
|
||||||
if (obj_type == "float") then
|
if obj_type == "float" then
|
||||||
error("float is not implemented")
|
error("float is not implemented")
|
||||||
else
|
else
|
||||||
ntype = obj_type .. "_t"
|
ntype = obj_type .. "_t"
|
||||||
@ -362,7 +400,9 @@ local function unpack_array(offset,n)
|
|||||||
end
|
end
|
||||||
|
|
||||||
function unpackers.dynamic(offset)
|
function unpackers.dynamic(offset)
|
||||||
if offset >= #strbuf then error("need more data") end
|
if offset >= #strbuf then
|
||||||
|
error("need more data")
|
||||||
|
end
|
||||||
local obj_type = type_for(string.byte(strbuf, offset + 1, offset + 1))
|
local obj_type = type_for(string.byte(strbuf, offset + 1, offset + 1))
|
||||||
return unpackers[obj_type](offset)
|
return unpackers[obj_type](offset)
|
||||||
end
|
end
|
||||||
@ -485,8 +525,12 @@ local ljp_pack = function(data)
|
|||||||
end
|
end
|
||||||
|
|
||||||
local ljp_unpack = function(s, offset)
|
local ljp_unpack = function(s, offset)
|
||||||
if offset == nil then offset = 0 end
|
if offset == nil then
|
||||||
if type(s) ~= "string" then return false,"invalid argument" end
|
offset = 0
|
||||||
|
end
|
||||||
|
if type(s) ~= "string" then
|
||||||
|
return false, "invalid argument"
|
||||||
|
end
|
||||||
local data
|
local data
|
||||||
strbuf = s
|
strbuf = s
|
||||||
offset, data = unpackers.dynamic(offset)
|
offset, data = unpackers.dynamic(offset)
|
||||||
@ -496,14 +540,14 @@ end
|
|||||||
local function ljp_stat()
|
local function ljp_stat()
|
||||||
return {
|
return {
|
||||||
double_decode_count = double_decode_count,
|
double_decode_count = double_decode_count,
|
||||||
double_encode_count = double_encode_count
|
double_encode_count = double_encode_count,
|
||||||
}
|
}
|
||||||
end
|
end
|
||||||
|
|
||||||
local msgpack = {
|
local msgpack = {
|
||||||
pack = ljp_pack,
|
pack = ljp_pack,
|
||||||
unpack = ljp_unpack,
|
unpack = ljp_unpack,
|
||||||
stat = ljp_stat
|
stat = ljp_stat,
|
||||||
}
|
}
|
||||||
|
|
||||||
return msgpack
|
return msgpack
|
||||||
|
@ -1,140 +1,265 @@
|
|||||||
local n, v = "serpent", "0.302" -- (C) 2012-18 Paul Kulchenko; MIT License
|
local n, v = "serpent", "0.302" -- (C) 2012-18 Paul Kulchenko; MIT License
|
||||||
local c, d = "Paul Kulchenko", "Lua serializer and pretty printer"
|
local c, d = "Paul Kulchenko", "Lua serializer and pretty printer"
|
||||||
local snum = {[tostring(1/0)]='1/0 --[[math.huge]]',[tostring(-1/0)]='-1/0 --[[-math.huge]]',[tostring(0/0)]='0/0'}
|
local snum = {
|
||||||
|
[tostring(1 / 0)] = "1/0 --[[math.huge]]",
|
||||||
|
[tostring(-1 / 0)] = "-1/0 --[[-math.huge]]",
|
||||||
|
[tostring(0 / 0)] = "0/0",
|
||||||
|
}
|
||||||
local badtype = { thread = true, userdata = true, cdata = true }
|
local badtype = { thread = true, userdata = true, cdata = true }
|
||||||
local getmetatable = debug and debug.getmetatable or getmetatable
|
local getmetatable = debug and debug.getmetatable or getmetatable
|
||||||
local pairs = function(t) return next, t end -- avoid using __pairs in Lua 5.2+
|
local pairs = function(t)
|
||||||
|
return next, t
|
||||||
|
end -- avoid using __pairs in Lua 5.2+
|
||||||
local keyword, globals, G = {}, {}, (_G or _ENV)
|
local keyword, globals, G = {}, {}, (_G or _ENV)
|
||||||
for _,k in ipairs({'and', 'break', 'do', 'else', 'elseif', 'end', 'false',
|
for _, k in ipairs({
|
||||||
'for', 'function', 'goto', 'if', 'in', 'local', 'nil', 'not', 'or', 'repeat',
|
"and",
|
||||||
'return', 'then', 'true', 'until', 'while'}) do keyword[k] = true end
|
"break",
|
||||||
for k,v in pairs(G) do globals[v] = k end -- build func to name mapping
|
"do",
|
||||||
for _,g in ipairs({'coroutine', 'debug', 'io', 'math', 'string', 'table', 'os'}) do
|
"else",
|
||||||
for k,v in pairs(type(G[g]) == 'table' and G[g] or {}) do globals[v] = g..'.'..k end end
|
"elseif",
|
||||||
|
"end",
|
||||||
|
"false",
|
||||||
|
"for",
|
||||||
|
"function",
|
||||||
|
"goto",
|
||||||
|
"if",
|
||||||
|
"in",
|
||||||
|
"local",
|
||||||
|
"nil",
|
||||||
|
"not",
|
||||||
|
"or",
|
||||||
|
"repeat",
|
||||||
|
"return",
|
||||||
|
"then",
|
||||||
|
"true",
|
||||||
|
"until",
|
||||||
|
"while",
|
||||||
|
}) do
|
||||||
|
keyword[k] = true
|
||||||
|
end
|
||||||
|
for k, v in pairs(G) do
|
||||||
|
globals[v] = k
|
||||||
|
end -- build func to name mapping
|
||||||
|
for _, g in ipairs({ "coroutine", "debug", "io", "math", "string", "table", "os" }) do
|
||||||
|
for k, v in pairs(type(G[g]) == "table" and G[g] or {}) do
|
||||||
|
globals[v] = g .. "." .. k
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
local function s(t, opts)
|
local function s(t, opts)
|
||||||
local name, indent, fatal, maxnum = opts.name, opts.indent, opts.fatal, opts.maxnum
|
local name, indent, fatal, maxnum = opts.name, opts.indent, opts.fatal, opts.maxnum
|
||||||
local sparse, custom, huge = opts.sparse, opts.custom, not opts.nohuge
|
local sparse, custom, huge = opts.sparse, opts.custom, not opts.nohuge
|
||||||
local space, maxl = (opts.compact and '' or ' '), (opts.maxlevel or math.huge)
|
local space, maxl = (opts.compact and "" or " "), (opts.maxlevel or math.huge)
|
||||||
local maxlen, metatostring = tonumber(opts.maxlength), opts.metatostring
|
local maxlen, metatostring = tonumber(opts.maxlength), opts.metatostring
|
||||||
local iname, comm = '_'..(name or ''), opts.comment and (tonumber(opts.comment) or math.huge)
|
local iname, comm = "_" .. (name or ""), opts.comment and (tonumber(opts.comment) or math.huge)
|
||||||
local numformat = opts.numformat or "%.17g"
|
local numformat = opts.numformat or "%.17g"
|
||||||
local seen, sref, syms, symn = {}, {'local '..iname..'={}'}, {}, 0
|
local seen, sref, syms, symn = {}, { "local " .. iname .. "={}" }, {}, 0
|
||||||
local function gensym(val) return '_'..(tostring(tostring(val)):gsub("[^%w]",""):gsub("(%d%w+)",
|
local function gensym(val)
|
||||||
|
return "_"
|
||||||
|
.. (
|
||||||
|
tostring(tostring(val)):gsub("[^%w]", ""):gsub(
|
||||||
|
"(%d%w+)",
|
||||||
-- tostring(val) is needed because __tostring may return a non-string value
|
-- tostring(val) is needed because __tostring may return a non-string value
|
||||||
function(s) if not syms[s] then symn = symn+1; syms[s] = symn end return tostring(syms[s]) end)) end
|
function(s)
|
||||||
local function safestr(s) return type(s) == "number" and tostring(huge and snum[tostring(s)] or numformat:format(s))
|
if not syms[s] then
|
||||||
|
symn = symn + 1
|
||||||
|
syms[s] = symn
|
||||||
|
end
|
||||||
|
return tostring(syms[s])
|
||||||
|
end
|
||||||
|
)
|
||||||
|
)
|
||||||
|
end
|
||||||
|
local function safestr(s)
|
||||||
|
return type(s) == "number" and tostring(huge and snum[tostring(s)] or numformat:format(s))
|
||||||
or type(s) ~= "string" and tostring(s) -- escape NEWLINE/010 and EOF/026
|
or type(s) ~= "string" and tostring(s) -- escape NEWLINE/010 and EOF/026
|
||||||
or ("%q"):format(s):gsub("\010","n"):gsub("\026","\\026") end
|
or ("%q"):format(s):gsub("\010", "n"):gsub("\026", "\\026")
|
||||||
local function comment(s,l) return comm and (l or 0) < comm and ' --[['..select(2, pcall(tostring, s))..']]' or '' end
|
end
|
||||||
local function globerr(s,l) return globals[s] and globals[s]..comment(s,l) or not fatal
|
local function comment(s, l)
|
||||||
and safestr(select(2, pcall(tostring, s))) or error("Can't serialize "..tostring(s)) end
|
return comm and (l or 0) < comm and " --[[" .. select(2, pcall(tostring, s)) .. "]]" or ""
|
||||||
|
end
|
||||||
|
local function globerr(s, l)
|
||||||
|
return globals[s] and globals[s] .. comment(s, l)
|
||||||
|
or not fatal and safestr(select(2, pcall(tostring, s)))
|
||||||
|
or error("Can't serialize " .. tostring(s))
|
||||||
|
end
|
||||||
local function safename(path, name) -- generates foo.bar, foo[3], or foo['b a r']
|
local function safename(path, name) -- generates foo.bar, foo[3], or foo['b a r']
|
||||||
local n = name == nil and '' or name
|
local n = name == nil and "" or name
|
||||||
local plain = type(n) == "string" and n:match("^[%l%u_][%w_]*$") and not keyword[n]
|
local plain = type(n) == "string" and n:match("^[%l%u_][%w_]*$") and not keyword[n]
|
||||||
local safe = plain and n or '['..safestr(n)..']'
|
local safe = plain and n or "[" .. safestr(n) .. "]"
|
||||||
return (path or '')..(plain and path and '.' or '')..safe, safe end
|
return (path or "") .. (plain and path and "." or "") .. safe, safe
|
||||||
local alphanumsort = type(opts.sortkeys) == 'function' and opts.sortkeys or function(k, o, n) -- k=keys, o=originaltable, n=padding
|
end
|
||||||
local maxn, to = tonumber(n) or 12, {number = 'a', string = 'b'}
|
local alphanumsort = type(opts.sortkeys) == "function" and opts.sortkeys
|
||||||
local function padnum(d) return ("%0"..tostring(maxn).."d"):format(tonumber(d)) end
|
or function(k, o, n) -- k=keys, o=originaltable, n=padding
|
||||||
|
local maxn, to = tonumber(n) or 12, { number = "a", string = "b" }
|
||||||
|
local function padnum(d)
|
||||||
|
return ("%0" .. tostring(maxn) .. "d"):format(tonumber(d))
|
||||||
|
end
|
||||||
table.sort(k, function(a, b)
|
table.sort(k, function(a, b)
|
||||||
-- sort numeric keys first: k[key] is not nil for numerical keys
|
-- sort numeric keys first: k[key] is not nil for numerical keys
|
||||||
return (k[a] ~= nil and 0 or to[type(a)] or 'z')..(tostring(a):gsub("%d+",padnum))
|
return (k[a] ~= nil and 0 or to[type(a)] or "z") .. (tostring(a):gsub("%d+", padnum))
|
||||||
< (k[b] ~= nil and 0 or to[type(b)] or 'z')..(tostring(b):gsub("%d+",padnum)) end) end
|
< (k[b] ~= nil and 0 or to[type(b)] or "z") .. (tostring(b):gsub("%d+", padnum))
|
||||||
|
end)
|
||||||
|
end
|
||||||
local function val2str(t, name, indent, insref, path, plainindex, level)
|
local function val2str(t, name, indent, insref, path, plainindex, level)
|
||||||
local ttype, level, mt = type(t), (level or 0), getmetatable(t)
|
local ttype, level, mt = type(t), (level or 0), getmetatable(t)
|
||||||
local spath, sname = safename(path, name)
|
local spath, sname = safename(path, name)
|
||||||
local tag = plainindex and
|
local tag = plainindex and ((type(name) == "number") and "" or name .. space .. "=" .. space)
|
||||||
((type(name) == "number") and '' or name..space..'='..space) or
|
or (name ~= nil and sname .. space .. "=" .. space or "")
|
||||||
(name ~= nil and sname..space..'='..space or '')
|
|
||||||
if seen[t] then -- already seen this element
|
if seen[t] then -- already seen this element
|
||||||
sref[#sref+1] = spath..space..'='..space..seen[t]
|
sref[#sref + 1] = spath .. space .. "=" .. space .. seen[t]
|
||||||
return tag..'nil'..comment('ref', level) end
|
return tag .. "nil" .. comment("ref", level)
|
||||||
|
end
|
||||||
-- protect from those cases where __tostring may fail
|
-- protect from those cases where __tostring may fail
|
||||||
if type(mt) == 'table' and metatostring ~= false then
|
if type(mt) == "table" and metatostring ~= false then
|
||||||
local to, tr = pcall(function() return mt.__tostring(t) end)
|
local to, tr = pcall(function()
|
||||||
local so, sr = pcall(function() return mt.__serialize(t) end)
|
return mt.__tostring(t)
|
||||||
if (to or so) then -- knows how to serialize itself
|
end)
|
||||||
|
local so, sr = pcall(function()
|
||||||
|
return mt.__serialize(t)
|
||||||
|
end)
|
||||||
|
if to or so then -- knows how to serialize itself
|
||||||
seen[t] = insref or spath
|
seen[t] = insref or spath
|
||||||
t = so and sr or tr
|
t = so and sr or tr
|
||||||
ttype = type(t)
|
ttype = type(t)
|
||||||
end -- new value falls through to be serialized
|
end -- new value falls through to be serialized
|
||||||
end
|
end
|
||||||
if ttype == "table" then
|
if ttype == "table" then
|
||||||
if level >= maxl then return tag..'{}'..comment('maxlvl', level) end
|
if level >= maxl then
|
||||||
|
return tag .. "{}" .. comment("maxlvl", level)
|
||||||
|
end
|
||||||
seen[t] = insref or spath
|
seen[t] = insref or spath
|
||||||
if next(t) == nil then return tag..'{}'..comment(t, level) end -- table empty
|
if next(t) == nil then
|
||||||
if maxlen and maxlen < 0 then return tag..'{}'..comment('maxlen', level) end
|
return tag .. "{}" .. comment(t, level)
|
||||||
|
end -- table empty
|
||||||
|
if maxlen and maxlen < 0 then
|
||||||
|
return tag .. "{}" .. comment("maxlen", level)
|
||||||
|
end
|
||||||
local maxn, o, out = math.min(#t, maxnum or #t), {}, {}
|
local maxn, o, out = math.min(#t, maxnum or #t), {}, {}
|
||||||
for key = 1, maxn do o[key] = key end
|
for key = 1, maxn do
|
||||||
|
o[key] = key
|
||||||
|
end
|
||||||
if not maxnum or #o < maxnum then
|
if not maxnum or #o < maxnum then
|
||||||
local n = #o -- n = n + 1; o[n] is much faster than o[#o+1] on large tables
|
local n = #o -- n = n + 1; o[n] is much faster than o[#o+1] on large tables
|
||||||
for key in pairs(t) do if o[key] ~= key then n = n + 1; o[n] = key end end end
|
for key in pairs(t) do
|
||||||
if maxnum and #o > maxnum then o[maxnum+1] = nil end
|
if o[key] ~= key then
|
||||||
if opts.sortkeys and #o > maxn then alphanumsort(o, t, opts.sortkeys) end
|
n = n + 1
|
||||||
|
o[n] = key
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
if maxnum and #o > maxnum then
|
||||||
|
o[maxnum + 1] = nil
|
||||||
|
end
|
||||||
|
if opts.sortkeys and #o > maxn then
|
||||||
|
alphanumsort(o, t, opts.sortkeys)
|
||||||
|
end
|
||||||
local sparse = sparse and #o > maxn -- disable sparsness if only numeric keys (shorter output)
|
local sparse = sparse and #o > maxn -- disable sparsness if only numeric keys (shorter output)
|
||||||
for n, key in ipairs(o) do
|
for n, key in ipairs(o) do
|
||||||
local value, ktype, plainindex = t[key], type(key), n <= maxn and not sparse
|
local value, ktype, plainindex = t[key], type(key), n <= maxn and not sparse
|
||||||
if opts.valignore and opts.valignore[value] -- skip ignored values; do nothing
|
if
|
||||||
|
opts.valignore and opts.valignore[value] -- skip ignored values; do nothing
|
||||||
or opts.keyallow and not opts.keyallow[key]
|
or opts.keyallow and not opts.keyallow[key]
|
||||||
or opts.keyignore and opts.keyignore[key]
|
or opts.keyignore and opts.keyignore[key]
|
||||||
or opts.valtypeignore and opts.valtypeignore[type(value)] -- skipping ignored value types
|
or opts.valtypeignore and opts.valtypeignore[type(value)] -- skipping ignored value types
|
||||||
or sparse and value == nil then -- skipping nils; do nothing
|
or sparse and value == nil
|
||||||
elseif ktype == 'table' or ktype == 'function' or badtype[ktype] then
|
then -- skipping nils; do nothing
|
||||||
|
elseif ktype == "table" or ktype == "function" or badtype[ktype] then
|
||||||
if not seen[key] and not globals[key] then
|
if not seen[key] and not globals[key] then
|
||||||
sref[#sref+1] = 'placeholder'
|
sref[#sref + 1] = "placeholder"
|
||||||
local sname = safename(iname, gensym(key)) -- iname is table for local variables
|
local sname = safename(iname, gensym(key)) -- iname is table for local variables
|
||||||
sref[#sref] = val2str(key,sname,indent,sname,iname,true) end
|
sref[#sref] = val2str(key, sname, indent, sname, iname, true)
|
||||||
sref[#sref+1] = 'placeholder'
|
end
|
||||||
local path = seen[t]..'['..tostring(seen[key] or globals[key] or gensym(key))..']'
|
sref[#sref + 1] = "placeholder"
|
||||||
sref[#sref] = path..space..'='..space..tostring(seen[value] or val2str(value,nil,indent,path))
|
local path = seen[t] .. "[" .. tostring(seen[key] or globals[key] or gensym(key)) .. "]"
|
||||||
|
sref[#sref] = path
|
||||||
|
.. space
|
||||||
|
.. "="
|
||||||
|
.. space
|
||||||
|
.. tostring(seen[value] or val2str(value, nil, indent, path))
|
||||||
else
|
else
|
||||||
out[#out + 1] = val2str(value, key, indent, nil, seen[t], plainindex, level + 1)
|
out[#out + 1] = val2str(value, key, indent, nil, seen[t], plainindex, level + 1)
|
||||||
if maxlen then
|
if maxlen then
|
||||||
maxlen = maxlen - #out[#out]
|
maxlen = maxlen - #out[#out]
|
||||||
if maxlen < 0 then break end
|
if maxlen < 0 then
|
||||||
|
break
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
local prefix = string.rep(indent or '', level)
|
end
|
||||||
local head = indent and '{\n'..prefix..indent or '{'
|
local prefix = string.rep(indent or "", level)
|
||||||
local body = table.concat(out, ','..(indent and '\n'..prefix..indent or space))
|
local head = indent and "{\n" .. prefix .. indent or "{"
|
||||||
local tail = indent and "\n"..prefix..'}' or '}'
|
local body = table.concat(out, "," .. (indent and "\n" .. prefix .. indent or space))
|
||||||
|
local tail = indent and "\n" .. prefix .. "}" or "}"
|
||||||
return (custom and custom(tag, head, body, tail, level) or tag .. head .. body .. tail) .. comment(t, level)
|
return (custom and custom(tag, head, body, tail, level) or tag .. head .. body .. tail) .. comment(t, level)
|
||||||
elseif badtype[ttype] then
|
elseif badtype[ttype] then
|
||||||
seen[t] = insref or spath
|
seen[t] = insref or spath
|
||||||
return tag .. globerr(t, level)
|
return tag .. globerr(t, level)
|
||||||
elseif ttype == 'function' then
|
elseif ttype == "function" then
|
||||||
seen[t] = insref or spath
|
seen[t] = insref or spath
|
||||||
if opts.nocode then return tag.."function() --[[..skipped..]] end"..comment(t, level) end
|
if opts.nocode then
|
||||||
|
return tag .. "function() --[[..skipped..]] end" .. comment(t, level)
|
||||||
|
end
|
||||||
local ok, res = pcall(string.dump, t)
|
local ok, res = pcall(string.dump, t)
|
||||||
local func = ok and "((loadstring or load)(" .. safestr(res) .. ",'@serialized'))" .. comment(t, level)
|
local func = ok and "((loadstring or load)(" .. safestr(res) .. ",'@serialized'))" .. comment(t, level)
|
||||||
return tag .. (func or globerr(t, level))
|
return tag .. (func or globerr(t, level))
|
||||||
else return tag..safestr(t) end -- handle all other types
|
else
|
||||||
|
return tag .. safestr(t)
|
||||||
|
end -- handle all other types
|
||||||
end
|
end
|
||||||
local sepr = indent and "\n" or ";" .. space
|
local sepr = indent and "\n" or ";" .. space
|
||||||
local body = val2str(t, name, indent) -- this call also populates sref
|
local body = val2str(t, name, indent) -- this call also populates sref
|
||||||
local tail = #sref>1 and table.concat(sref, sepr)..sepr or ''
|
local tail = #sref > 1 and table.concat(sref, sepr) .. sepr or ""
|
||||||
local warn = opts.comment and #sref>1 and space.."--[[incomplete output with shared/self-references skipped]]" or ''
|
local warn = opts.comment and #sref > 1 and space .. "--[[incomplete output with shared/self-references skipped]]"
|
||||||
|
or ""
|
||||||
return not name and body .. warn or "do local " .. body .. sepr .. tail .. "return " .. name .. sepr .. "end"
|
return not name and body .. warn or "do local " .. body .. sepr .. tail .. "return " .. name .. sepr .. "end"
|
||||||
end
|
end
|
||||||
|
|
||||||
local function deserialize(data, opts)
|
local function deserialize(data, opts)
|
||||||
local env = (opts and opts.safe == false) and G
|
local env = (opts and opts.safe == false) and G
|
||||||
or setmetatable({}, {
|
or setmetatable({}, {
|
||||||
__index = function(t,k) return t end,
|
__index = function(t, k)
|
||||||
__call = function(t,...) error("cannot call functions") end
|
return t
|
||||||
|
end,
|
||||||
|
__call = function(t, ...)
|
||||||
|
error("cannot call functions")
|
||||||
|
end,
|
||||||
})
|
})
|
||||||
local f, res = (loadstring or load)('return '..data, nil, nil, env)
|
local f, res = (loadstring or load)("return " .. data, nil, nil, env)
|
||||||
if not f then f, res = (loadstring or load)(data, nil, nil, env) end
|
if not f then
|
||||||
if not f then return f, res end
|
f, res = (loadstring or load)(data, nil, nil, env)
|
||||||
if setfenv then setfenv(f, env) end
|
end
|
||||||
|
if not f then
|
||||||
|
return f, res
|
||||||
|
end
|
||||||
|
if setfenv then
|
||||||
|
setfenv(f, env)
|
||||||
|
end
|
||||||
return pcall(f)
|
return pcall(f)
|
||||||
end
|
end
|
||||||
|
|
||||||
local function merge(a, b) if b then for k,v in pairs(b) do a[k] = v end end; return a; end
|
local function merge(a, b)
|
||||||
return { _NAME = n, _COPYRIGHT = c, _DESCRIPTION = d, _VERSION = v, serialize = s,
|
if b then
|
||||||
|
for k, v in pairs(b) do
|
||||||
|
a[k] = v
|
||||||
|
end
|
||||||
|
end
|
||||||
|
return a
|
||||||
|
end
|
||||||
|
return {
|
||||||
|
_NAME = n,
|
||||||
|
_COPYRIGHT = c,
|
||||||
|
_DESCRIPTION = d,
|
||||||
|
_VERSION = v,
|
||||||
|
serialize = s,
|
||||||
load = deserialize,
|
load = deserialize,
|
||||||
dump = function(a, opts) return s(a, merge({name = '_', compact = true, sparse = true}, opts)) end,
|
dump = function(a, opts)
|
||||||
line = function(a, opts) return s(a, merge({sortkeys = true, comment = true}, opts)) end,
|
return s(a, merge({ name = "_", compact = true, sparse = true }, opts))
|
||||||
block = function(a, opts) return s(a, merge({indent = ' ', sortkeys = true, comment = true}, opts)) end }
|
end,
|
||||||
|
line = function(a, opts)
|
||||||
|
return s(a, merge({ sortkeys = true, comment = true }, opts))
|
||||||
|
end,
|
||||||
|
block = function(a, opts)
|
||||||
|
return s(a, merge({ indent = " ", sortkeys = true, comment = true }, opts))
|
||||||
|
end,
|
||||||
|
}
|
||||||
|
@ -8,12 +8,12 @@ function struct.pack(format, ...)
|
|||||||
for i = 1, format:len() do
|
for i = 1, format:len() do
|
||||||
local opt = format:sub(i, i)
|
local opt = format:sub(i, i)
|
||||||
|
|
||||||
if opt == '<' then
|
if opt == "<" then
|
||||||
endianness = true
|
endianness = true
|
||||||
elseif opt == '>' then
|
elseif opt == ">" then
|
||||||
endianness = false
|
endianness = false
|
||||||
elseif opt:find('[bBhHiIlL]') then
|
elseif opt:find("[bBhHiIlL]") then
|
||||||
local n = opt:find('[hH]') and 2 or opt:find('[iI]') and 4 or opt:find('[lL]') and 8 or 1
|
local n = opt:find("[hH]") and 2 or opt:find("[iI]") and 4 or opt:find("[lL]") and 8 or 1
|
||||||
local val = tonumber(table.remove(vars, 1))
|
local val = tonumber(table.remove(vars, 1))
|
||||||
|
|
||||||
local bytes = {}
|
local bytes = {}
|
||||||
@ -27,7 +27,7 @@ function struct.pack(format, ...)
|
|||||||
else
|
else
|
||||||
table.insert(stream, table.concat(bytes))
|
table.insert(stream, table.concat(bytes))
|
||||||
end
|
end
|
||||||
elseif opt:find('[fd]') then
|
elseif opt:find("[fd]") then
|
||||||
local val = tonumber(table.remove(vars, 1))
|
local val = tonumber(table.remove(vars, 1))
|
||||||
local sign = 0
|
local sign = 0
|
||||||
|
|
||||||
@ -41,12 +41,12 @@ function struct.pack(format, ...)
|
|||||||
mantissa = 0
|
mantissa = 0
|
||||||
exponent = 0
|
exponent = 0
|
||||||
else
|
else
|
||||||
mantissa = (mantissa * 2 - 1) * math.ldexp(0.5, (opt == 'd') and 53 or 24)
|
mantissa = (mantissa * 2 - 1) * math.ldexp(0.5, (opt == "d") and 53 or 24)
|
||||||
exponent = exponent + ((opt == 'd') and 1022 or 126)
|
exponent = exponent + ((opt == "d") and 1022 or 126)
|
||||||
end
|
end
|
||||||
|
|
||||||
local bytes = {}
|
local bytes = {}
|
||||||
if opt == 'd' then
|
if opt == "d" then
|
||||||
val = mantissa
|
val = mantissa
|
||||||
for _ = 1, 6 do
|
for _ = 1, 6 do
|
||||||
table.insert(bytes, string.char(math.floor(val) % (2 ^ 8)))
|
table.insert(bytes, string.char(math.floor(val) % (2 ^ 8)))
|
||||||
@ -59,8 +59,8 @@ function struct.pack(format, ...)
|
|||||||
val = math.floor(val / (2 ^ 8))
|
val = math.floor(val / (2 ^ 8))
|
||||||
end
|
end
|
||||||
|
|
||||||
table.insert(bytes, string.char(math.floor(exponent * ((opt == 'd') and 16 or 128) + val) % (2 ^ 8)))
|
table.insert(bytes, string.char(math.floor(exponent * ((opt == "d") and 16 or 128) + val) % (2 ^ 8)))
|
||||||
val = math.floor((exponent * ((opt == 'd') and 16 or 128) + val) / (2 ^ 8))
|
val = math.floor((exponent * ((opt == "d") and 16 or 128) + val) / (2 ^ 8))
|
||||||
table.insert(bytes, string.char(math.floor(sign * 128 + val) % (2 ^ 8)))
|
table.insert(bytes, string.char(math.floor(sign * 128 + val) % (2 ^ 8)))
|
||||||
|
|
||||||
if not endianness then
|
if not endianness then
|
||||||
@ -68,18 +68,18 @@ function struct.pack(format, ...)
|
|||||||
else
|
else
|
||||||
table.insert(stream, table.concat(bytes))
|
table.insert(stream, table.concat(bytes))
|
||||||
end
|
end
|
||||||
elseif opt == 's' then
|
elseif opt == "s" then
|
||||||
table.insert(stream, tostring(table.remove(vars, 1)))
|
table.insert(stream, tostring(table.remove(vars, 1)))
|
||||||
table.insert(stream, string.char(0))
|
table.insert(stream, string.char(0))
|
||||||
elseif opt == 'c' then
|
elseif opt == "c" then
|
||||||
local n = format:sub(i + 1):match('%d+')
|
local n = format:sub(i + 1):match("%d+")
|
||||||
local str = tostring(table.remove(vars, 1))
|
local str = tostring(table.remove(vars, 1))
|
||||||
local len = tonumber(n)
|
local len = tonumber(n)
|
||||||
if len <= 0 then
|
if len <= 0 then
|
||||||
len = str:len()
|
len = str:len()
|
||||||
end
|
end
|
||||||
if len - str:len() > 0 then
|
if len - str:len() > 0 then
|
||||||
str = str .. string.rep(' ', len - str:len())
|
str = str .. string.rep(" ", len - str:len())
|
||||||
end
|
end
|
||||||
table.insert(stream, str:sub(1, len))
|
table.insert(stream, str:sub(1, len))
|
||||||
end
|
end
|
||||||
@ -96,12 +96,12 @@ function struct.unpack(format, stream, pos)
|
|||||||
for i = 1, format:len() do
|
for i = 1, format:len() do
|
||||||
local opt = format:sub(i, i)
|
local opt = format:sub(i, i)
|
||||||
|
|
||||||
if opt == '<' then
|
if opt == "<" then
|
||||||
endianness = true
|
endianness = true
|
||||||
elseif opt == '>' then
|
elseif opt == ">" then
|
||||||
endianness = false
|
endianness = false
|
||||||
elseif opt:find('[bBhHiIlL]') then
|
elseif opt:find("[bBhHiIlL]") then
|
||||||
local n = opt:find('[hH]') and 2 or opt:find('[iI]') and 4 or opt:find('[lL]') and 8 or 1
|
local n = opt:find("[hH]") and 2 or opt:find("[iI]") and 4 or opt:find("[lL]") and 8 or 1
|
||||||
local signed = opt:lower() == opt
|
local signed = opt:lower() == opt
|
||||||
|
|
||||||
local val = 0
|
local val = 0
|
||||||
@ -120,8 +120,8 @@ function struct.unpack(format, stream, pos)
|
|||||||
end
|
end
|
||||||
|
|
||||||
table.insert(vars, math.floor(val))
|
table.insert(vars, math.floor(val))
|
||||||
elseif opt:find('[fd]') then
|
elseif opt:find("[fd]") then
|
||||||
local n = (opt == 'd') and 8 or 4
|
local n = (opt == "d") and 8 or 4
|
||||||
local x = stream:sub(iterator, iterator + n - 1)
|
local x = stream:sub(iterator, iterator + n - 1)
|
||||||
iterator = iterator + n
|
iterator = iterator + n
|
||||||
|
|
||||||
@ -130,7 +130,7 @@ function struct.unpack(format, stream, pos)
|
|||||||
end
|
end
|
||||||
|
|
||||||
local sign = 1
|
local sign = 1
|
||||||
local mantissa = string.byte(x, (opt == 'd') and 7 or 3) % ((opt == 'd') and 16 or 128)
|
local mantissa = string.byte(x, (opt == "d") and 7 or 3) % ((opt == "d") and 16 or 128)
|
||||||
for j = n - 2, 1, -1 do
|
for j = n - 2, 1, -1 do
|
||||||
mantissa = mantissa * (2 ^ 8) + string.byte(x, j)
|
mantissa = mantissa * (2 ^ 8) + string.byte(x, j)
|
||||||
end
|
end
|
||||||
@ -139,19 +139,18 @@ function struct.unpack(format, stream, pos)
|
|||||||
sign = -1
|
sign = -1
|
||||||
end
|
end
|
||||||
|
|
||||||
local exponent = (string.byte(x, n) % 128) * ((opt == 'd') and 16 or 2) +
|
local exponent = (string.byte(x, n) % 128) * ((opt == "d") and 16 or 2)
|
||||||
math.floor(string.byte(x, n - 1) /
|
+ math.floor(string.byte(x, n - 1) / ((opt == "d") and 16 or 128))
|
||||||
((opt == 'd') and 16 or 128))
|
|
||||||
if exponent == 0 then
|
if exponent == 0 then
|
||||||
table.insert(vars, 0.0)
|
table.insert(vars, 0.0)
|
||||||
else
|
else
|
||||||
mantissa = (math.ldexp(mantissa, (opt == 'd') and -52 or -23) + 1) * sign
|
mantissa = (math.ldexp(mantissa, (opt == "d") and -52 or -23) + 1) * sign
|
||||||
table.insert(vars, math.ldexp(mantissa, exponent - ((opt == 'd') and 1023 or 127)))
|
table.insert(vars, math.ldexp(mantissa, exponent - ((opt == "d") and 1023 or 127)))
|
||||||
end
|
end
|
||||||
elseif opt == 's' then
|
elseif opt == "s" then
|
||||||
local bytes = {}
|
local bytes = {}
|
||||||
for j = iterator, stream:len() do
|
for j = iterator, stream:len() do
|
||||||
if stream:sub(j,j) == string.char(0) or stream:sub(j) == '' then
|
if stream:sub(j, j) == string.char(0) or stream:sub(j) == "" then
|
||||||
break
|
break
|
||||||
end
|
end
|
||||||
|
|
||||||
@ -161,8 +160,8 @@ function struct.unpack(format, stream, pos)
|
|||||||
local str = table.concat(bytes)
|
local str = table.concat(bytes)
|
||||||
iterator = iterator + str:len() + 1
|
iterator = iterator + str:len() + 1
|
||||||
table.insert(vars, str)
|
table.insert(vars, str)
|
||||||
elseif opt == 'c' then
|
elseif opt == "c" then
|
||||||
local n = format:sub(i + 1):match('%d+')
|
local n = format:sub(i + 1):match("%d+")
|
||||||
local len = tonumber(n)
|
local len = tonumber(n)
|
||||||
if len <= 0 then
|
if len <= 0 then
|
||||||
len = table.remove(vars)
|
len = table.remove(vars)
|
||||||
|
@ -89,7 +89,6 @@ function Discord:read_message(nonce, on_response, err, chunk)
|
|||||||
local err_message = string.format(err_format, err)
|
local err_message = string.format(err_format, err)
|
||||||
|
|
||||||
on_response(err_message)
|
on_response(err_message)
|
||||||
|
|
||||||
elseif chunk then
|
elseif chunk then
|
||||||
-- Strip header from the chunk
|
-- Strip header from the chunk
|
||||||
local message = chunk:match("({.+)")
|
local message = chunk:match("({.+)")
|
||||||
@ -171,9 +170,7 @@ function Discord.generate_uuid(seed)
|
|||||||
index = index + 1
|
index = index + 1
|
||||||
math.randomseed((seed or os.clock()) / index)
|
math.randomseed((seed or os.clock()) / index)
|
||||||
|
|
||||||
local n = char == "x"
|
local n = char == "x" and math.random(0, 0xf) or math.random(8, 0xb)
|
||||||
and math.random(0, 0xf)
|
|
||||||
or math.random(8, 0xb)
|
|
||||||
|
|
||||||
return string.format("%x", n)
|
return string.format("%x", n)
|
||||||
end)
|
end)
|
||||||
|
@ -5,6 +5,6 @@ return {
|
|||||||
["[defx] default-"] = "Defx",
|
["[defx] default-"] = "Defx",
|
||||||
["netrw"] = "Netrw",
|
["netrw"] = "Netrw",
|
||||||
["TelescopePrompt"] = "Telescope",
|
["TelescopePrompt"] = "Telescope",
|
||||||
['neo-tree'] = 'Neotree',
|
["neo-tree"] = "Neotree",
|
||||||
['fern'] = 'Fern'
|
["fern"] = "Fern",
|
||||||
}
|
}
|
||||||
|
@ -848,8 +848,9 @@ function Presence:update_for_buffer(buffer, should_debounce)
|
|||||||
local use_file_as_main_image = self.options.main_image == "file"
|
local use_file_as_main_image = self.options.main_image == "file"
|
||||||
local use_neovim_as_main_image = self.options.main_image == "neovim"
|
local use_neovim_as_main_image = self.options.main_image == "neovim"
|
||||||
local assets = {
|
local assets = {
|
||||||
large_image = use_file_as_main_image and asset_key or use_neovim_as_main_image
|
large_image = use_file_as_main_image and asset_key
|
||||||
and "neovim" or self.options.main_image,
|
or use_neovim_as_main_image and "neovim"
|
||||||
|
or self.options.main_image,
|
||||||
large_text = use_file_as_main_image and file_text or neovim_image_text,
|
large_text = use_file_as_main_image and file_text or neovim_image_text,
|
||||||
small_image = use_file_as_main_image and "neovim" or asset_key,
|
small_image = use_file_as_main_image and "neovim" or asset_key,
|
||||||
small_text = use_file_as_main_image and neovim_image_text or file_text,
|
small_text = use_file_as_main_image and neovim_image_text or file_text,
|
||||||
|
Loading…
x
Reference in New Issue
Block a user