Springe nei ynhâld

Module:gender and number

Ut Wikiwurdboek
De neikommende dokumintaasje stiet op Module:gender and number/dokumintaasje. [bewurkje]

Oernommen fan en:Module:gender and number.

Oerset:

  • HTML-teksten
  • foutmeldingen
  • foarheaksel kategorynamme

Oanpast:

  • ûntbrekkende CSS classes ferfongen troch inline style

--[=[
	This module creates standardised displays for gender and number.
	It converts a gender specification into Wiki/HTML format.
	
	A gender specification is a list of one of the elements listed below,
	separated by hyphens. Examples are: "c", "n", "f-p", "m-an-p"
]=]--

local export = {}

local codes = {}

-- A list of all possible "parts" that a specification can be made out of.

codes["?"] = {type = "other", display = '<abbr title="geslacht ynkompleet">?</abbr>'}

-- Genders
codes["m"] = {type = "gender", display = '<abbr title="manlik geslacht">m</abbr>'}
codes["f"] = {type = "gender", display = '<abbr title="froulik geslacht">f</abbr>'}
codes["n"] = {type = "gender", display = '<abbr title="ûnsidich geslacht">û</abbr>'}
codes["c"] = {type = "gender", display = '<abbr title="mienskiplik geslacht">g</abbr>'}

-- Animacy
codes["an"] = {type = "animacy", display = '<abbr title="besiele">bs</abbr>'}
codes["in"] = {type = "animacy", display = '<abbr title="ûnbesiele">ûnbs</abbr>'}

-- Personal
codes["pr"] = {type = "personal", display = '<abbr title="persoanlik">pers</abbr>'}
codes["np"] = {type = "personal", display = '<abbr title="net-persoanlik">npers</abbr>'}

-- Numbers
codes["s"] = {type = "number", display = '<abbr title="inkelfâldich oantal">iental</abbr>'}
codes["d"] = {type = "number", display = '<abbr title="twafâldich oantal">twatal</abbr>'}
codes["p"] = {type = "number", display = '<abbr title="mearfâldich oantal">meartal</abbr>'}

-- Verb qualifiers
codes["impf"] = {type = "perfectivity", display = '<abbr title="ymperfektyf aspekt">ympf</abbr>'}
codes["pf"] = {type = "perfectivity", display = '<abbr title="perfektyf aspekt">pf</abbr>'}

-- Version of format_list that can be invoked from a template.
function export.show_list(frame)
	local args = frame.args
	local lang = args["lang"]; if lang == "" then lang = nil end
	local list = {}
	local i = 1
	
	while args[i] and args[i] ~= "" do
		table.insert(list, args[i])
		i = i + 1
	end
	
	return export.format_list(list, lang)
end

-- Format one or more gender specifications, in the form of a table of specifications.
function export.format_list(list, lang)
	local is_nounclass = nil
	
	-- Iterate over each specification and format it
	for key, spec in ipairs(list) do
		local nc
		list[key], nc = export.format_specification(spec, lang)
		
		-- Ensure that the specifications are either all noun classes, or none are.
		if is_nounclass == nil then
			is_nounclass = nc
		elseif is_nounclass ~= nc then
			error("Namwurdklassen en geslachten kinne net gearfoege wurde. Brûk a.j.w. ôf it iene ôf it oare.")
		end
	end
	
	if is_nounclass then
		-- Add the processed codes together with slashes
		return "<span style=\"font-style:italic\">klasse " .. table.concat(list, "/") .. "</span>"
	else
		-- Add the processed codes together with commas
		return "<span style=\"font-style:italic\">" .. table.concat(list, " of ") .. "</span>"
	end
end

-- Format the sub-parts of a single gender specification.
function export.format_specification(spec, lang)
	local categories = ""
	local ret = ""
	local is_nounclass = false
	
	-- If the specification starts with cX, then it is a noun class specification.
	if spec:find("^[1-9]") or spec:find("^c[^-]") then
		is_nounclass = true
		code = spec:gsub("^c", "")
		
		if code == "?" then
			ret = "<abbr style=\"font-style:italic\" title=\"namwurdklasse ûntbrekt\">?</abbr>"
		else
			ret = "<abbr style=\"font-style:italic\" title=\"namwurdklasse " .. code .. "\">" .. code .. "</abbr>"
		end
	else
		local types = {}
		
		-- Split the parts and iterate over each part, converting it into its display form
		local parts = mw.text.split(spec, "-")
		
		for key, code in ipairs(parts) do
			-- Is this code valid?
			if not codes[code] then
				error("De geslachtsopjefte \"" .. spec .. "\" is net jildich.")
			end
			
			if codes[code].type ~= "other" and types[codes[code].type] then
				--require("Module:debug").track("gender and number/multiple")
				--require("Module:debug").track("gender and number/multiple/" .. spec)
				error("De geslachtsopjefte \"" .. spec .. "\" befettet ferskate lebels fan it type \"" .. codes[code].type .. "\".")
			end
				
			parts[key] = codes[code].display
			types[codes[code].type] = true
		end
		
		-- Add the processed codes together with non-breaking spaces
		ret = table.concat(parts, "&nbsp;")
	end
	
	-- Do some additional checks if a language was given
	if lang then
		-- Is this an incomplete gender?
		if spec:find("?") then
			local m_utilities = require("Module:utilities")
			categories = m_utilities.format_categories({"Geslacht frege fan trefwurden yn it " .. lang:getCanonicalName()}, nil)
		end
		
		-- Check if the specification is valid
		--elseif langinfo.genders then
		--	local valid_genders = {}
		--	for _, g in ipairs(langinfo.genders) do valid_genders[g] = true end
		--	
		--	if not valid_genders[spec] then
		--		local valid_string = {}
		--		for i, g in ipairs(langinfo.genders) do valid_string[i] = g end
		--		error("The gender specification \"" .. spec .. "\" is not valid for " .. langinfo.names[1] .. ". Valid are: " .. table.concat(valid_string, ", "))
		--	end
		--end
	end
	
	return ret .. categories, is_nounclass
end

return export
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy