Module:Exedra Skill Scaling

From Puella Magi Wiki
Jump to navigation Jump to search

See Template:Exedra Skill Scaling.


local getArgs = require('Module:Arguments').getArgs
local p = {}

local function letter2index(letter)
	return string.byte(letter) - string.byte('a') + 1
end

local function convertPlaceholder(letter)
	if letter:match('[1-9]') then return '%' .. letter .. 's' end
	return '%' .. tostring(letter2index(letter)) .. 's'
end

function p.main(...)
	local args = getArgs(...)
	local frame = select(1, ...)
	local template = args.text:gsub([[%%]], '%%%%'):gsub('%[([a-z1-9])%]', convertPlaceholder)
	local fmt_args = {}
	for letter in ('abcdefghijklmnopqrstuvwxyz'):gmatch('.') do
		local min_arg = letter .. '1'
		local max_arg = letter .. '10'
		local idx = letter2index(letter)
		if args[min_arg] and args[max_arg] then
			fmt_args[idx] = string.format('%s-%s', args[min_arg], args[max_arg])
		elseif args[min_arg] or args[max_arg] then
			fmt_args[idx] = args[min_arg] or args[max_arg]
		end
		if fmt_args[idx] then
			fmt_args[idx] = frame:expandTemplate{title=[[Template:Skill Color]], args={idx, fmt_args[idx]}}
		end
	end
	return template:format(unpack(fmt_args))
end

return p