Module:labels/demo

From Wiktionary, the free dictionary
Jump to navigation Jump to search

local export = {}

function export.examples(frame)
	local beginning =
[[
{| class="wikitable"
]]
	local caption = "|+ "

	local headers = 
[[
! code !! result
]]
	
	local row_template =
[[
|-
| {{{code}}} ||{{{middle}}} {{{result}}}
]]

	local middle
	
	local close = "|}"

	local rows = {}
	
	local params = {
		[1] = { required = true, list = true },
		["caption"] = {},
		["header"] = { type = "boolean" },
	}
	
	local args = require("Module:parameters").process(frame:getParent().args, params)
	
	if args.caption then
		beginning = beginning .. caption .. args.caption .. "\n"
	end
	
	if args.header then
		beginning = beginning .. headers
		middle = ""
	else
		middle = " → || "
	end
	
	for i, example in ipairs(args[1]) do
		local lang, rest = mw.ustring.match(example, "^([^:]+)%:(.*)$")
		if lang then
			example = rest
		else
			error("Examples must be preceded by a language code prefix, followed by a colon")
		end
		
		local parameters = mw.text.split(example, "~")
		local template_params = {
			lang,
		}
		
		for _, parameter in ipairs(parameters) do
			table.insert(template_params, parameter)
		end
		
		local code = require("Module:template link").format_link("label", template_params)
		local result = require("Module:labels").show_labels {
			labels = parameters,
			lang = require("Module:languages").getByCode(lang, i, "allow etym"),
			nocat = true
		}
		
		local content = {
			code = code,
			middle = middle,
			result = result,
		}
		
		local function add_content(item)
			if content[item] then
				return content[item]
			end
		end
		
		local row = mw.ustring.gsub(row_template, "{{{(%w+)}}}", add_content)
		table.insert(rows, row)
	end
	
	return beginning .. table.concat(rows) .. close
end

return export