Module:gender and number
Appearance
- 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, " ")
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