Pāriet uz saturu

Modulis:it-head

No ''Wiktionary''

Šī 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