Jump to content

Module:User:Lunabunn/Q

From Wiktionary, the free dictionary


local export = {}

local function eval(key, d_work, defaults, args)
	local d = d_work[key] or defaults[key]
	if d == nil then
		return args[key]
	end
	local function fetch(var)
		if var == key then
			return args[var]
		else
			return d_work[var] or defaults[var] or args[var] 
		end
	end
	return d:gsub("{{([a-zA-Z_0-9]-):([a-zA-Z_0-9]-)}}", function (var, ind)
		var = fetch(var)
		return var and var[ind]
	end):gsub("{{([a-zA-Z_0-9]-)}}", fetch)
end

function export.make(frame)
	local parent_args = frame:getParent().args
	local params = {
		[1] = { required = true, type = "language", default = "und" },
		["year"] = {},
		[2] = { alias_of = "year" },
		["author"] = {},
		[3] = { alias_of = "author" },
		["title"] = {},
		[4] = { alias_of = "title" },
		["object"] = {},
		["section"] = {},
		["titlestyle"] = {},
	}
	local args = require("Module:parameters").process(parent_args, params, true)
	
	local data = mw.loadData("Module:User:Lunabunn/Q/" .. args[1]:getCode() .. "/data")
	while data.author_aliases[args.author] do
		args.author = data.author_aliases[args.author]
	end
	local d_author = data[args.author or false]
	while d_author.work_aliases[args.title] do
		args.title = d_author.work_aliases[args.title]
	end
	local d_work = d_author.works[args.title]
	local defaults = d_author.defaults
	
	args.year = eval("year", d_work, defaults, args)
	args.title = eval("title", d_work, defaults, args)
	args.object = eval("object", d_work, defaults, args)
	args.section = eval("section", d_work, defaults, args)
	
	args.titlestyle = d_work.titlestyle or defaults.titlestyle or args.titlestyle
	
	return require("Module:User:Lunabunn/quote").Q(frame, args)
end

return export