ESOUI SVN EsoHeadMarkers

[/] [trunk/] [Merger/] [merge.lua] - Blame information for rev 8

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 8 Shinni-694
account = "MyAccountName" --your account name
2 Shinni-694
files = {                               --a list of files to be merged
3 Shinni-694
        "Esohead.lua",
4 Shinni-694
        "Esohead2.lua"
5 Shinni-694
        }
6 Shinni-694
output = "Output.lua"   --the name of the output file
7 Shinni-694
 
8 Shinni-694
 
9 Shinni-694
local function isPosition(table)
10 Shinni-694
        return (type(table[1]) == "number" and type(table[2]) == "number")
11 Shinni-694
end
12 Shinni-694
 
13 Shinni-694
local function alreadyInTable(table, entry)
14 Shinni-694
        for _, value in pairs(table) do
15 Shinni-694
                if math.abs(entry[1] - value[1]) < 0.005 and math.abs(entry[2] - value[2]) < 0.005 then
16 Shinni-694
            return true
17 Shinni-694
        end
18 Shinni-694
        end
19 Shinni-694
        return false
20 Shinni-694
end
21 Shinni-694
 
22 Shinni-694
local function merge(output, input)
23 Shinni-694
 
24 Shinni-694
        for key, data in pairs(input) do
25 Shinni-694
                if not output[key] then
26 Shinni-694
                        output[key] = data
27 Shinni-694
                elseif type(key) == "string" and type(output[key]) == "table" then
28 Shinni-694
                        merge(output[key], input[key])
29 Shinni-694
                elseif type(key) == "number" then
30 Shinni-694
                        if not isPosition(input[key]) or
31 Shinni-694
                                        not alreadyInTable(output, input[key]) then
32 Shinni-694
                                table.insert(output, data)
33 Shinni-694
                        end
34 Shinni-694
                end
35 Shinni-694
        end
36 Shinni-694
end
37 Shinni-694
 
38 Shinni-694
local function newline(level)
39 Shinni-694
        return "\n" .. string.rep(" ", 4 * level)
40 Shinni-694
end
41 Shinni-694
 
42 Shinni-694
local function export(table, level)
43 Shinni-694
        if not level then
44 Shinni-694
                level = 0
45 Shinni-694
        end
46 Shinni-694
 
47 Shinni-694
        local result = newline(level) .. "{"
48 Shinni-694
        level = level + 1
49 Shinni-694
 
50 Shinni-694
        for key, value in pairs(table) do
51 Shinni-694
                result = result .. newline(level)
52 Shinni-694
                if type(key) == "string" then
53 Shinni-694
                        result = result ..'["' .. key .. '"] = '
54 Shinni-694
                else
55 Shinni-694
                        result = result .."[" .. tostring(key) .. "] = "
56 Shinni-694
                end
57 Shinni-694
                if type(value) == "table" then
58 Shinni-694
                        result = result .. export(value, level) .. ","
59 Shinni-694
                elseif type(value) == "string" then
60 Shinni-694
                        result = result .. "[[" .. value .. "]],"
61 Shinni-694
                else
62 Shinni-694
                        result = result .. tostring(value) .. ","
63 Shinni-694
                end
64 Shinni-694
        end
65 Shinni-694
 
66 Shinni-694
        level = level - 1
67 Shinni-694
        result = result .. newline(level) .. "}"
68 Shinni-694
 
69 Shinni-694
        return result
70 Shinni-694
end
71 Shinni-694
 
72 Shinni-694
 
73 Shinni-694
local data = {}
74 Shinni-694
for _, file in ipairs(files) do
75 Shinni-694
        dofile(file)
76 Shinni-694
 
77 Shinni-694
        for account, content in pairs(Esohead_SavedVariables["Default"]) do
78 Shinni-694
                content = content["$AccountWide"]
79 Shinni-694
                merge(data, content)
80 Shinni-694
        end
81 Shinni-694
end
82 Shinni-694
 
83 Shinni-694
 
84 Shinni-694
 
85 Shinni-694
local result = "Esohead_SavedVariables = "
86 Shinni-694
result = result .. newline(0) .. "{"
87 Shinni-694
result = result .. newline(1) .. '["Default"] = '
88 Shinni-694
result = result .. newline(1) .. "{"
89 Shinni-694
result = result .. newline(2) .. '["@' .. account .. '"] = '
90 Shinni-694
result = result .. newline(2) .. "{"
91 Shinni-694
result = result .. newline(3) .. '["$AccountWide"] = '
92 Shinni-694
result = result .. export(data, 3) .. ","
93 Shinni-694
result = result .. newline(2) .. "}," .. newline(1) .. "}," .. newline(0) .. "}"
94 Shinni-694
 
95 Shinni-694
assert(io.open(output, 'w')):write(result)