You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
57 lines
1.4 KiB
57 lines
1.4 KiB
-- General collection of parsers for various linux utilities
|
|
local parsers = {}
|
|
parsers.upower = function(data)
|
|
-- this shit was born in a fever dream, that's the only reasonable explanation i can give to this.
|
|
local struct = {}
|
|
local layer = 1
|
|
local leaf = struct
|
|
local history = {}
|
|
data:gsub("\n?\r?([%s]*)([^\n]*)",function(block,line)
|
|
if block == "" then block = " " end
|
|
block = block:len()
|
|
if line:match("%S") then
|
|
if block > layer then
|
|
history[layer] = leaf
|
|
local pos = #leaf
|
|
local key = leaf[pos]
|
|
table.remove(leaf,pos)
|
|
leaf[key] = {}
|
|
leaf = leaf[key]
|
|
layer = block
|
|
end
|
|
if block < layer then
|
|
leaf = history[block]
|
|
layer = block
|
|
end
|
|
table.insert(leaf,line)
|
|
end
|
|
end)
|
|
local function prettify(t)
|
|
for k,v in ipairs(t) do
|
|
if v:find(":") then
|
|
t[v:match("^(.-):")] = v:match("^.-:%s*(.*)")
|
|
t[k] = nil
|
|
end
|
|
end
|
|
for k,v in pairs(t) do
|
|
if type(v) == "table" then
|
|
t[k] = prettify(v)
|
|
end
|
|
end
|
|
return t
|
|
end
|
|
return prettify(struct)
|
|
end
|
|
return parsers
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|