Revision 22372 of "Модул:gender and number" on mkwiktionary--[=[
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["?"] = '<abbr title="родот е непотполн">?</abbr>'
-- Genders
codes["m"] = '<abbr title="машки род">м</abbr>'
codes["f"] = '<abbr title="женски род">ж</abbr>'
codes["n"] = '<abbr title="среден род">с</abbr>'
codes["c"] = '<abbr title="заеднички род">з</abbr>'
-- Additional qualifiers
codes["an"] = '<abbr title="живо">жив</abbr>'
codes["in"] = '<abbr title="неживо">неж</abbr>'
codes["pr"] = '<abbr title="лично">лич</abbr>'
-- Numbers
codes["s"] = '<abbr title="еднина">ед</abbr>'
codes["d"] = '<abbr title="двоина">дв</abbr>'
codes["p"] = '<abbr title="множина">мн</abbr>'
-- Verb qualifiers
codes["impf"] = '<abbr title="несвршено">нсв</abbr>'
codes["pf"] = '<abbr title="свршено">свр</abbr>'
-- Version of format_list that can be invoked from a template.
function export.show_list(frame)
local args = frame.args
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)
end
-- Format one or more gender specifications, in the form of a table of specifications.
function export.format_list(list)
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)
-- 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("Noun classes and genders cannot be mixed. Please use either one or the other.")
end
end
if is_nounclass then
-- Add the processed codes together with commas
return "<span class=\"gender\">class " .. table.concat(list, "/") .. "</span>"
else
-- Add the processed codes together with commas
return "<span class=\"gender\">" .. table.concat(list, ", ") .. "</span>"
end
end
-- Format the sub-parts of a single gender specification.
function export.format_specification(spec)
local separator = " "
-- If the specification starts with cX, then it is a noun class specification.
if spec:find("^c[^-]") then
code = spec:gsub("^c", "")
return "<abbr class=\"noun-class\" title=\"noun class " .. code .. "\">" .. code .. "</abbr>", true
else
-- 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 codes[code] then
parts[key] = codes[code]
else
error("Invalid gender specification code: \"" .. code .. "\"")
end
end
-- Add the processed codes together with spaces
return table.concat(parts, " "), false
end
end
return exportAll content in the above text box is licensed under the Creative Commons Attribution-ShareAlike license Version 4 and was originally sourced from https://mk.wiktionary.org/w/index.php?oldid=22372.
![]() ![]() This site is not affiliated with or endorsed in any way by the Wikimedia Foundation or any of its affiliates. In fact, we fucking despise them.
|