12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576 |
- local p = premake
- p.raw = { }
- local raw = p.raw
- local gvisited = { }
- function raw.workspace(wks)
- if not gvisited[wks.global] then
- gvisited[wks.global] = true
- raw.printTable({ global = wks.global })
- end
- end
- function raw.printTable(t, i)
- i = i or 0
- placement = raw._createPlacement(t)
- raw._printTableRecursive(t, i, placement)
- end
- function raw._printTableRecursive(t, i, placement)
- elements = { }
- for k, v in pairs(t) do
- table.insert(elements, { key = k, value = v })
- end
- table.sort(elements, function(a, b)
- local n1 = type(a.key) == "number"
- local n2 = type(b.key) == "number"
- if n1 ~= n2 then
- return n1
- end
- local k1 = n1 and a.key or raw._encode(a.key)
- local k2 = n2 and b.key or raw._encode(b.key)
- return k1 < k2
- end)
- for _, elem in ipairs(elements) do
- p = placement[elem.value]
- if p and elem.key == p.key and t == p.parent then
- _p(i, "%s", raw._encode(elem.key) .. ': ' .. raw._encode(elem.value) .. ' {')
- raw._printTableRecursive(elem.value, i + 1, placement)
- _p(i, '} # ' .. raw._encode(elem.key))
- else
- _p(i, "%s", raw._encode(elem.key) .. ': ' .. raw._encode(elem.value))
- end
- end
- end
- function raw._createPlacement(tbl)
- placement = { }
- placementList = { tbl }
- while #placementList ~= 0 do
- parentList = { }
- for _, parent in ipairs(placementList) do
- for k, v in pairs(parent) do
- if type(v) == "table" and not placement[v] then
- table.insert(parentList, v)
- placement[v] = {
- parent = parent,
- key = k
- }
- end
- end
- end
- placementList = parentList
- end
- return placement
- end
- function raw._encode(v)
- if type(v) == "string" then
- return '"' .. v .. '"'
- else
- return tostring(v)
- end
- end
|