Module:labels/demo

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

This module needs documentation.
Please document this module by describing its purpose and usage on the documentation page.

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 parser").templateLink("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