Module:ListAllChains
Documentation for this module may be created at Module:ListAllChains/doc
local getArgs = require('Module:Arguments').getArgs; local defArgs = require('Module:Arguments').defaultArgs; local lac = {}; function lac.func1( frame ) local args = defArgs(getArgs(frame), 1, ""); local arg = args[1]; local text = "" local sep = "==" for word in arg:gmatch("([%S \t]+)") do local title = word:match("&&([^|]+)|") local structure = word:match("Structure=(.*)$") local items = {} for part in structure:gmatch("([^-]+)") do table.insert(items, part) end local stackIndex = 1 local stack = {} local preB = "" local postB = "" for index = #items, 1, -1 do if items[index]:find("%(") ~= nil then preB = "(" postB = ")" elseif items[index]:find("%[") ~= nil then preB = "[" postB = "]" else preB = "" postB = "" end if preB:len() > 0 then local closed = false local str = "" local pos = items[index]:find("%" .. preB) local prefix = items[index]:sub(1, pos-1) str = items[index]:sub(pos+1) local tmp = "" for j = stackIndex-1, 1, -1 do if closed == false and stack[j]:find("%" .. postB) ~= nil then local pos2 = stack[j]:find("%" .. postB) tmp = prefix .. stack[j]:sub(pos2+1) str = str .. "-" .. stack[j] stackIndex = stackIndex - 1 closed = true else str = str .. "-" .. stack[j] if closed == false then stack[j] = "" stackIndex = stackIndex - 1 end end end stack[stackIndex] = tmp stackIndex = stackIndex + 1 local res = str:gsub("%)",""):gsub("%]","") text = text .. "* " .. title .. sep .. res .. sep .. "[" .. "[File:" .. title .. ".png|link=" .. title .. "]" .. "]\n" else stack[stackIndex] = items[index] stackIndex = stackIndex + 1 end end local str = stack[stackIndex-1] for j = stackIndex-2, 1, -1 do str = str .. "-" .. stack[j] end text = text .. "* " .. title .. sep .. str .. sep .. "[" .. "[File:" .. title .. ".png|link=" .. title .. "]" .. "]\n" end return text; end return lac