Line 1:
Line 1:
+
-- [[Category:Todo]]: have Module:Logger to expose syntax warnings, similarly to Module:DropList (use it there as well).
+
local getArgs = require("Module:GetArgs")
local getArgs = require("Module:GetArgs")
local format = require("Module:StringOperations").format
local format = require("Module:StringOperations").format
Line 56:
Line 58:
function make_id_from_title(title)
function make_id_from_title(title)
return title:gsub("%s", ""):lower()
return title:gsub("%s", ""):lower()
−
end
−
−
function MapBranchingTable:log(str)
−
if not self._vars.log then
−
self._vars.log = ""
−
end
−
self._vars.log = self._vars.log .. str .. "\n"
end
end
Line 96:
Line 91:
to_node, to_node_color1, to_node_color2 = self:parse_node(to_node)
to_node, to_node_color1, to_node_color2 = self:parse_node(to_node)
if from_node and to_node then
if from_node and to_node then
−
if not Utils.find(branching.index, from_node) then
+
Utils.insertNew(branching.index, from_node)
−
table.insert(branching.index, from_node)
−
end
if not branching[from_node] then
if not branching[from_node] then
−
branching[from_node] = { color = from_node_color1, color2 = from_node_color2, index = {} }
+
branching[from_node] = { color = from_node_color1, color2 = from_node_color2, index = {}, indexes = { index = {}, groups = {} } }
end
end
if not first_node then
if not first_node then
first_node = to_node
first_node = to_node
branching[from_node][to_node] = { color = to_node_color1, color2 = to_node_color2, rules = rules, span = 1 }
branching[from_node][to_node] = { color = to_node_color1, color2 = to_node_color2, rules = rules, span = 1 }
+
if not branching[from_node].indexes.groups[first_node] then
+
table.insert(branching[from_node].indexes.index, first_node)
+
branching[from_node].indexes.groups[first_node] = { first_node }
+
end
else
else
branching[from_node][first_node].span = branching[from_node][first_node].span + 1
branching[from_node][first_node].span = branching[from_node][first_node].span + 1
branching[from_node][to_node] = { color = to_node_color1, color2 = to_node_color2 }
branching[from_node][to_node] = { color = to_node_color1, color2 = to_node_color2 }
−
end
+
if branching[from_node].indexes.groups[first_node] then
−
if not Utils.find(branching[from_node].index, to_node) then
+
Utils.insertNew(branching[from_node].indexes.groups[first_node], to_node)
−
table.insert(branching[from_node].index, to_node)
+
end
end
end
end
end
Line 136:
Line 133:
table.sort(branching.index, sorting)
table.sort(branching.index, sorting)
for _, from in ipairs(branching.index) do
for _, from in ipairs(branching.index) do
−
-- table.sort(branching[from].index, sorting)
+
table.sort(branching[from].indexes.index, sorting)
+
for _, first_node in ipairs(branching[from].indexes.index) do
+
for _, node in ipairs(branching[from].indexes.groups[first_node]) do
+
table.insert(branching[from].index, node)
+
end
+
end
end
end
end
end
Line 197:
Line 199:
end
end
−
-- [[Category:Todo]]: make Module:Test maybe
+
--[[
−
function MapBranchingTable:tests()
+
Utils.registerTableTests(MapBranchingTable, {
−
return MapBranchingTable.Table(nil, {
+
{
["0 -> 1"] = "Fixed route",
["0 -> 1"] = "Fixed route",
−
["1 -> A, B/battle, C/empty"] = "Random",
+
["1 -> C/empty, D"] = "Random",
+
["1 -> A, B/battle, X/empty"] = "Random",
["C -> F, G/battle/empty"] = "...",
["C -> F, G/battle/empty"] = "...",
["B -> D, E"] = "...",
["B -> D, E"] = "...",
["title"] = "A Custom Title",
["title"] = "A Custom Title",
−
["order"] = "C, B",
+
["order"] = "C, A, 1, B",
"?",
"?",
−
}) .. "\n" .. (self._vars.log or "")
+
}
−
end
+
})
−
-- print(p:tests())
+
-- p.run_table_tests()
+
]]--
return MapBranchingTable
return MapBranchingTable