Compare with Previous | Blame | View Log
account = "MyAccountName" --your account name
files = { --a list of files to be merged
"Esohead.lua",
"Esohead2.lua"
}
output = "Output.lua" --the name of the output file
local function isPosition(table)
return (type(table[1]) == "number" and type(table[2]) == "number")
end
local function alreadyInTable(table, entry)
for _, value in pairs(table) do
if math.abs(entry[1] - value[1]) < 0.005 and math.abs(entry[2] - value[2]) < 0.005 then
return true
end
end
return false
end
local function merge(output, input)
for key, data in pairs(input) do
if not output[key] then
output[key] = data
elseif type(key) == "string" and type(output[key]) == "table" then
merge(output[key], input[key])
elseif type(key) == "number" then
if not isPosition(input[key]) or
not alreadyInTable(output, input[key]) then
table.insert(output, data)
end
end
end
end
local function newline(level)
return "\n" .. string.rep(" ", 4 * level)
end
local function export(table, level)
if not level then
level = 0
end
local result = newline(level) .. "{"
level = level + 1
for key, value in pairs(table) do
result = result .. newline(level)
if type(key) == "string" then
result = result ..'["' .. key .. '"] = '
else
result = result .."[" .. tostring(key) .. "] = "
end
if type(value) == "table" then
result = result .. export(value, level) .. ","
elseif type(value) == "string" then
result = result .. "[[" .. value .. "]],"
else
result = result .. tostring(value) .. ","
end
end
level = level - 1
result = result .. newline(level) .. "}"
return result
end
local data = {}
for _, file in ipairs(files) do
dofile(file)
for account, content in pairs(Esohead_SavedVariables["Default"]) do
content = content["$AccountWide"]
merge(data, content)
end
end
local result = "Esohead_SavedVariables = "
result = result .. newline(0) .. "{"
result = result .. newline(1) .. '["Default"] = '
result = result .. newline(1) .. "{"
result = result .. newline(2) .. '["@' .. account .. '"] = '
result = result .. newline(2) .. "{"
result = result .. newline(3) .. '["$AccountWide"] = '
result = result .. export(data, 3) .. ","
result = result .. newline(2) .. "}," .. newline(1) .. "}," .. newline(0) .. "}"
assert(io.open(output, 'w')):write(result)