forked from mio/gemwriter
160 lines
3.2 KiB
Lua
160 lines
3.2 KiB
Lua
local util = {}
|
|
|
|
function util.split_str(str, sep)
|
|
local tbl = {}
|
|
local n = 0
|
|
if sep == nil then sep = "%S+" end
|
|
for sub in string.gmatch(str, sep) do
|
|
n = n + 1
|
|
tbl[n] = sub
|
|
end
|
|
return tbl
|
|
end
|
|
|
|
|
|
function util.split_lines(str)
|
|
local tbl = {}
|
|
local si = 1
|
|
for i = 1, #str do
|
|
if string.find(string.sub(str, i, i), "\n") ~= nil then
|
|
tbl[#tbl + 1] = string.sub(str, si, i - 1)
|
|
si = i + 1
|
|
end
|
|
end
|
|
return tbl
|
|
end
|
|
|
|
|
|
function util.extract_str(full_str, find_str, end_str)
|
|
local fi1, fi2 = string.find(full_str, find_str, 1)
|
|
local ei1, ei2 = string.find(full_str, end_str, fi2)
|
|
if end_str == "\n" then
|
|
return string.sub(full_str, fi2 + 1, ei1 - 2)
|
|
else
|
|
return string.sub(full_str, fi2 + 1, ei1 - 1)
|
|
end
|
|
end
|
|
|
|
|
|
function util.to_bool(str)
|
|
local bool = { ["true"] = true, ["false"] = false }
|
|
return bool(str)
|
|
end
|
|
|
|
|
|
function util.table_keys(tbl)
|
|
local keys = {}
|
|
local n = 0
|
|
for k, v in pairs(tbl) do
|
|
n = n + 1
|
|
keys[n] = k
|
|
end
|
|
return keys
|
|
end
|
|
|
|
|
|
function util.has_key(tbl, str)
|
|
local keys = util.table_keys(tbl)
|
|
for k = 1, #keys do
|
|
if str == keys[k] then
|
|
do return true end
|
|
end
|
|
end
|
|
return false
|
|
end
|
|
|
|
|
|
function util.replace_vars(str, vars, vals)
|
|
local text = str
|
|
for k, v in pairs(vars) do
|
|
text = string.gsub(text, v, vals[k])
|
|
end
|
|
return text
|
|
end
|
|
|
|
|
|
function util.replace_feed_entities(str, mode)
|
|
-- Pre-processing before replacing feed variables
|
|
-- "%" is a special character for string.gsub() and similar functions, and
|
|
-- will cause an error if not escaped.
|
|
local ents = {
|
|
percent = { "%%", "%" },
|
|
}
|
|
-- Used post-processing of feed variables, remove empty log metadata tags
|
|
if mode == "post" then
|
|
ents = {
|
|
percent = { "%", "%%" },
|
|
author = { " <author>\n <name></name>\n </author>\n", "" },
|
|
subtitle = { "<subtitle></subtitle>\n", "" },
|
|
title = { "<title></title>\n", "" },
|
|
}
|
|
end
|
|
local text = str
|
|
for e, c in pairs(ents) do
|
|
text = string.gsub(text, c[1], c[2])
|
|
end
|
|
return text
|
|
end
|
|
|
|
|
|
function util.make_dir(dir)
|
|
os.execute("test -d " .. dir .. " || mkdir -p " .. dir)
|
|
end
|
|
|
|
|
|
function util.ls_grep(dir, str)
|
|
local ls_cmd = io.popen("ls " .. dir .. " | grep " .. str)
|
|
return ls_cmd:read("*a")
|
|
end
|
|
|
|
|
|
function util.get_shell_var(str)
|
|
local var = os.getenv(str)
|
|
if var == "" then
|
|
return nil
|
|
else
|
|
return var
|
|
end
|
|
end
|
|
|
|
|
|
function util.replace_shell_vars(str)
|
|
-- Replace common shell variable paths
|
|
if string.find(str, "%$") ~= nil then
|
|
local shell_vars = { "HOME", "USER" }
|
|
for v = 1, #shell_vars do
|
|
str = string.gsub(str, "$" .. shell_vars[v],
|
|
util.get_shell_var(shell_vars[v]))
|
|
end
|
|
end
|
|
return str
|
|
end
|
|
|
|
|
|
function util.extract_file_date(dir, file)
|
|
-- Atom feed date format: 2022-01-15T00:00:00+00:00
|
|
local ls_cmd = io.popen("ls -l --time-style=\"+%Y-%m-%dT%H:%M:%S%z\" " ..
|
|
dir .. " | grep " .. file .. " | awk '{print $6}'")
|
|
return ls_cmd:read("*a")
|
|
end
|
|
|
|
|
|
function util.read_file(file)
|
|
local fh = io.open(file, "r")
|
|
local text = ""
|
|
if fh ~= nil then
|
|
text = fh:read("*a")
|
|
fh:close()
|
|
end
|
|
return text
|
|
end
|
|
|
|
|
|
function util.write_file(file, str)
|
|
local fh = io.open(file, "w")
|
|
fh:write(str)
|
|
fh:close()
|
|
end
|
|
|
|
return util
|