Modulis:it-head
Izskats
Šī moduļa dokumentāciju var izveidot Modulis:it-head/doc lapā
-- This module contains code for Italian headword templates.
-- Templates covered are it-adj and it-noun.
-- See Module:itconj for Italian conjugation templates.
local m_headword = require("Module:headword")
local m_utilities = require("Module:utilities")
local export = {}
local lang = require("Module:languages").getByCode("it")
function export.itadj(frame)
local args = frame:getParent().args
PAGENAME = mw.title.getCurrentTitle().text
local genders = {}
local inflections = {}
local categories = {"Italian adjectives"}
local head = args["head"]; if head == "" then head = nil end
local sort_key = args["sort"] or ""; if sort_key == "" then sort_key = nil end
local stem = args[1] or error("1st parameter (stem of adjective) missing!")
local end1 = args[2]
-- no ending vowel parameters - generate default
if not end1 then
genders = {"m"}
inflections = {
{label = "feminine", stem .. "a"},
{label = "masculine plural", make_plural(stem .. "o","m")},
{label = "feminine plural", make_plural(stem .. "a","f")} }
else
local end2 = args[3] or error("Either 0, 2 or 4 vowel endings should be supplied!")
local end3 = args[4]
-- 2 ending vowel parameters - m and f are identical
if not end3 then
genders = {"m", "f"}
inflections = {
{label = "masculine and feminine plural", stem .. end2} }
-- 4 ending vowel parameters - specify exactly
else
local end4 = args[5] or error("Either 0, 2 or 4 vowel endings should be supplied!")
genders = {"m"}
inflections = {
{label = "feminine", stem .. end2},
{label = "masculine plural", stem .. end3},
{label = "feminine plural", stem .. end4} }
end
end
return
m_headword.format_headword(head, lang, nil) ..
m_headword.format_genders(genders, lang) ..
m_headword.format_inflections(inflections, lang, nil) ..
m_utilities.format_categories(categories, lang, sort_key)
end
function export.itnoun(frame)
local args = frame:getParent().args
PAGENAME = mw.title.getCurrentTitle().text
local genders = {}
local inflections = {}
local categories = {"Itāļu valodas lietvārdi"}
local head = args["head"]; if head == "" then head = nil end
local sort_key = args["sort"] or ""; if sort_key == "" then sort_key = nil end
local gender = args[1]; if gender == "" then gender = nil end
local plural = args[2]; if plural == "" then plural = nil end
if args[3] or args[4] then
error("Third and fourth parameter should be empty.")
end
-- Gender
if gender == "mf" then
genders = {"m", "f"}
else
genders = {gender}
end
if #genders == 0 then
genders = {"?"}
end
-- Plural
if not plural then
plural = make_plural(PAGENAME, genders[1])
end
if plural == "-" then
table.insert(inflections, {label = "invariable"})
else
table.insert(inflections, {label = "daudzskaitlī", plural})
end
-- Other gender
local feminine = args["f"]; if feminine == "" then feminine = nil end
local masculine = args["m"]; if masculine == "" then masculine = nil end
if feminine then
table.insert(inflections, {label = "feminine", feminine})
end
if masculine then
table.insert(inflections, {label = "masculine", masculine})
end
-- Category
if (head or PAGENAME):find('o$') and gender=="f" then
table.insert(categories,"Italian nouns with irregular gender")
end
if (head or PAGENAME):find('a$') and gender=="m" then
table.insert(categories,"Italian nouns with irregular gender")
end
return
m_headword.format_headword(head, lang, nil) ..
m_headword.format_genders(genders, lang) ..
m_headword.format_inflections(inflections, lang, nil) ..
m_utilities.format_categories(categories, lang, sort_key)
end
-- Generate a default plural form, which is correct for most regular nouns
function make_plural(word, gender)
-- If there are spaces in the term, then we can't reliably form the plural.
-- Return nothing instead.
if word:find(" ") then
return nil
elseif word:find("io$") then
word = word:gsub("io$", "i")
elseif word:find("ologo$") then
word = word:gsub("o$", "i")
elseif word:find("[cg]o$") then
word = word:gsub("o$", "hi")
elseif word:find("o$") then
word = word:gsub("o$", "i")
elseif word:find("[cg]a$") then
word = word:gsub("a$", (gender == "m" and "hi" or "he"))
elseif word:find("[cg]ia$") then
word = word:gsub("ia$", "e")
elseif word:find("a$") then
word = word:gsub("a$", (gender == "m" and "i" or "e"))
elseif word:find("e$") then
word = word:gsub("e$", "i")
end
return word
end
-- Generate a default feminine form
function make_feminine(word, gender)
if word:find("o$") then
return word:gsub("o$", "a")
else
return word
end
end
return export