Sat, 17 Dec 2011 17:08:33 +0000
Initial commit
0 | 1 | #!/usr/bin/env lua5.1 |
2 | ||
3 | local yaml = require "yaml"; | |
4 | ||
5 | function merge_in(t1, t2, depth) | |
6 | depth = depth or 0; | |
7 | if type(t1) == "table" and type(t2) == "table" then | |
8 | local array = {}; | |
9 | if depth < 2 then -- numeric | |
10 | for i,v in ipairs(t1) do | |
11 | array[v] = true; | |
12 | t1[i] = nil; | |
13 | end | |
14 | for i,v in ipairs(t2) do | |
15 | array[v] = true; | |
16 | end | |
17 | end | |
18 | for k,v in pairs(t2) do -- non-numeric | |
19 | if not(type(k) == "number" and array[v]) then -- fixme, merge non-numeric | |
20 | t1[k] = merge_in(t1[k], v, depth + 1); | |
21 | end | |
22 | end | |
23 | for v in pairs(array) do | |
24 | table.insert(t1, v); | |
25 | end | |
26 | elseif t2 ~= nil then | |
27 | t1 = t2; | |
28 | end | |
29 | return t1; | |
30 | end | |
31 | ||
32 | local out = {}; | |
33 | for i, fn in ipairs(arg) do | |
34 | local f = assert(io.open(fn, "r")); | |
35 | merge_in(out, yaml.load(f:read("*a"))); | |
36 | f:close(); | |
37 | end | |
38 | ||
39 | print(yaml.dump(out)); |