ESOUI SVN EsoHeadMarkers

[/] [trunk/] [Merger/] [merge.lua] - Rev 8

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)

Compare with Previous | Blame