123 lines
4.0 KiB
Lua
123 lines
4.0 KiB
Lua
strin = "2~NzUwMCBzdGFycyBjOg==~4~3~9~1 month~6~1803945|2~SSBiZWF0IDYgaW5zYW5lIGRlbW9ucyBpbiAyNCBob3VycyBsbWFvOiBOZWNyb3BvbGlzLCBUaGUgQ2F2ZXJucyBJSSwgRWxlbWVudHMgWCwgWCBBZHZlbnR1cmUsIFNhZGlzbSwgYW5kIEJsYXN0ZXIgYzo=~4~21~9~8 months~6~1793260|2~L1wvXC9cIDwz~4~6~9~1 year~6~1785414|2~U2VudCBmcm9tIGlPUyBTaG9ydGN1dHMh~4~8~9~1 year~6~1776426|2~VGhpcyBjb21tZW50IHdhcyB1cGxvYWRlZCBmb3IgdGhlIEdEIERvY3Mh~4~5~9~1 year~6~1772719|2~VGhlIHRyaWxvZ3kgaGFzIGJlZW4gY29tcGxldGVkLi4uR0cgQWZ0ZXJtYXRoIQ==~4~8~9~1 year~6~1766450|2~Im93byIgLSBGb3VuZG15YmFsbA==~4~4~9~1 year~6~1766338|2~NTAwMCBzdGFycyE=~4~12~9~2 years~6~1756926|2~Qmxvb2RiYXRoIEdHISEh~4~24~9~2 years~6~1745624|2~QWxsZWdpYW5jZSAxMDAl~4~3~9~2 years~6~1744292#73:0:10"
|
|
|
|
-- https://stackoverflow.com/questions/40149617/split-string-with-specified-delimiter-in-lua
|
|
function split(s, sep)
|
|
local fields = {}
|
|
|
|
local sep = sep or " "
|
|
local pattern = string.format("([^%s]+)", sep)
|
|
string.gsub(s, pattern, function(c) fields[#fields + 1] = c end)
|
|
|
|
return fields
|
|
end
|
|
-- https://stackoverflow.com/questions/40149617/split-string-with-specified-delimiter-in-lua
|
|
--
|
|
GMD = {}
|
|
GMD["comments"] = {}
|
|
|
|
function table.show(t, name, indent)
|
|
local cart -- a container
|
|
local autoref -- for self references
|
|
|
|
--[[ counts the number of elements in a table
|
|
local function tablecount(t)
|
|
local n = 0
|
|
for _, _ in pairs(t) do n = n+1 end
|
|
return n
|
|
end
|
|
]]
|
|
-- (RiciLake) returns true if the table is empty
|
|
local function isemptytable(t) return next(t) == nil end
|
|
|
|
local function basicSerialize (o)
|
|
local so = tostring(o)
|
|
if type(o) == "function" then
|
|
local info = debug.getinfo(o, "S")
|
|
-- info.name is nil because o is not a calling level
|
|
if info.what == "C" then
|
|
return string.format("%q", so .. ", C function")
|
|
else
|
|
-- the information is defined through lines
|
|
return string.format("%q", so .. ", defined in (" ..
|
|
info.linedefined .. "-" .. info.lastlinedefined ..
|
|
")" .. info.source)
|
|
end
|
|
elseif type(o) == "number" or type(o) == "boolean" then
|
|
return so
|
|
else
|
|
return string.format("%q", so)
|
|
end
|
|
end
|
|
|
|
local function addtocart (value, name, indent, saved, field)
|
|
indent = indent or ""
|
|
saved = saved or {}
|
|
field = field or name
|
|
|
|
cart = cart .. indent .. field
|
|
|
|
if type(value) ~= "table" then
|
|
cart = cart .. " = " .. basicSerialize(value) .. ";\n"
|
|
else
|
|
if saved[value] then
|
|
cart = cart .. " = {}; -- " .. saved[value]
|
|
.. " (self reference)\n"
|
|
autoref = autoref .. name .. " = " .. saved[value] .. ";\n"
|
|
else
|
|
saved[value] = name
|
|
--if tablecount(value) == 0 then
|
|
if isemptytable(value) then
|
|
cart = cart .. " = {};\n"
|
|
else
|
|
cart = cart .. " = {\n"
|
|
for k, v in pairs(value) do
|
|
k = basicSerialize(k)
|
|
local fname = string.format("%s[%s]", name, k)
|
|
field = string.format("[%s]", k)
|
|
-- three spaces between levels
|
|
addtocart(v, fname, indent .. " ", saved, field)
|
|
end
|
|
cart = cart .. indent .. "};\n"
|
|
end
|
|
end
|
|
end
|
|
end
|
|
|
|
name = name or "__unnamed__"
|
|
if type(t) ~= "table" then
|
|
return name .. " = " .. basicSerialize(t)
|
|
end
|
|
cart, autoref = "", ""
|
|
addtocart(t, name, indent)
|
|
return cart .. autoref
|
|
end
|
|
|
|
GMD["comments"]["parse"] = function(comment)
|
|
local splitted = split(comment, ":")
|
|
local retern = {}
|
|
retern.comment = splitted[1]
|
|
retern.account = splitted[2]
|
|
|
|
retern.parsed = {}
|
|
retern.parsed.comment = {}
|
|
local data = split(retern.comment, "|")
|
|
for i=1, #data do
|
|
retern.parsed.comment[i] = {}
|
|
-- comment parser
|
|
local ndata = split(data[i], "~")
|
|
for j=1, #ndata do
|
|
if not (j % 2 == 0) then -- key
|
|
key = ndata[j]
|
|
else -- value
|
|
local value = ndata[j]
|
|
retern.parsed.comment[i][key] = value
|
|
end
|
|
end
|
|
end
|
|
-- print("DONE")
|
|
-- print(table.show(retern.parsed.comment))
|
|
|
|
return retern
|
|
end
|
|
print(GMD["comments"]["parse"](strin))
|