Module:it-headword: difference between revisions
Jump to navigation
Jump to search
Content deleted Content added
No edit summary Tags: Mobile edit Mobile web edit |
No edit summary |
||
Line 168: | Line 168: | ||
function export.itprop(frame) |
function export.itprop(frame) |
||
local params = { |
local params = { |
||
[1] = {}, |
[1] = {list = "g", default = "?"}, |
||
["head"] = {}, |
["head"] = {}, |
||
["sort"] = {}, |
["sort"] = {}, |
||
["g2"] = {}, |
|||
["g3"] = {} |
|||
} |
} |
||
local args = require("Module:parameters").process(frame:getParent().args, params) |
local args = require("Module:parameters").process(frame:getParent().args, params) |
||
local data = {lang = lang, pos_category = "proper nouns", categories = {}, sort_key = args["sort"], heads = {args["head"]}, genders = |
local data = {lang = lang, pos_category = "proper nouns", categories = {}, sort_key = args["sort"], heads = {args["head"]}, genders = args[1], inflections = {}} |
||
for g in ipairs(data.genders) do |
|||
if args[g2] then |
|||
⚫ | |||
data.genders = {args[g2]} |
|||
⚫ | |||
⚫ | |||
⚫ | |||
break |
|||
if args[g3] then |
|||
⚫ | |||
data.genders = {args[g3]} |
|||
end |
|||
if #data.genders == 0 then |
|||
data.genders = {"?"} |
|||
end |
|||
⚫ | |||
⚫ | |||
⚫ | |||
end |
end |
||
end |
end |
Revision as of 15:14, 17 September 2017
- The following documentation is located at Module:it-headword/documentation. [edit] Categories were auto-generated by Module:module categorization. [edit]
- Useful links: subpage list • links • transclusions • testcases • sandbox
This module supports most of the Italian headword templates listed in Category:Italian headword-line templates. See the comment at the top of the module for an exact list.
-- This module contains code for Italian headword templates.
-- Templates covered are it-adj and it-noun.
-- See Module:itconj for Italian conjugation templates.
local export = {}
local lang = require("Module:languages").getByCode("it")
function export.itadj(frame)
local params = {
[1] = {},
[2] = {},
[3] = {},
[4] = {},
[5] = {},
["head"] = {},
["sort"] = {},
}
local args = require("Module:parameters").process(frame:getParent().args, params)
local data = {lang = lang, pos_category = "adjectives", categories = {}, sort_key = args["sort"], heads = {args["head"]}, genders = {}, inflections = {}}
local stem = args[1]
local end1 = args[2]
if not stem then -- all specified
data.heads = args[2]
data.inflections = {
{label = "feminine singular", args[3]},
{label = "masculine plural", args[4]},
{label = "feminine plural", args[5]}
}
elseif not end1 then -- no ending vowel parameters - generate default
data.inflections = {
{label = "feminine singular", 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]
if not end3 then -- 2 ending vowel parameters - m and f are identical
data.inflections = {
{label = "masculine and feminine plural", stem .. end2}
}
else -- 4 ending vowel parameters - specify exactly
local end4 = args[5] or error("Either 0, 2 or 4 vowel endings should be supplied!")
data.inflections = {
{label = "feminine singular", stem .. end2},
{label = "masculine plural", stem .. end3},
{label = "feminine plural", stem .. end4}
}
end
end
return require("Module:headword").full_headword(data)
end
function export.itnoun(frame)
PAGENAME = mw.title.getCurrentTitle().text
local params = {
[1] = {},
[2] = {},
["f"] = {},
["head"] = {},
["m"] = {},
["sort"] = {},
}
local args = require("Module:parameters").process(frame:getParent().args, params)
local data = {lang = lang, pos_category = "nouns", categories = {}, sort_key = args["sort"], heads = {args["head"]}, genders = {}, inflections = {}}
-- Gender
if args[1] == "mf" then
data.genders = {"m", "f"}
else
data.genders = {args[1]}
end
if #data.genders == 0 then
data.genders = {"?"}
end
-- Plural
local plural = args[2]
if not plural then
plural = make_plural(PAGENAME, data.genders[1])
end
if plural == "~" then
table.insert(data.inflections, {label = "[[Appendix:Glossary#uncountable|uncountable]]"})
table.insert(data.categories, "Italian uncountable nouns")
else
table.insert(data.categories, "Italian countable nouns")
end
if plural == "-" then
table.insert(data.inflections, {label = "[[Appendix:Glossary#invariable|invariable]]"})
end
if plural == "-" or plural == "~" then
else
table.insert(data.inflections, {label = "plural", plural})
end
-- Other gender
if args["f"] then
table.insert(data.inflections, {label = "feminine", args["f"]})
end
if args["m"] then
table.insert(data.inflections, {label = "masculine", args["m"]})
end
-- Category
if (data.heads[1] or PAGENAME):find('o$') and data.genders[1] == "f" then
table.insert(data.categories, "Italian nouns with irregular gender")
end
if (data.heads[1] or PAGENAME):find('a$') and data.genders[1] == "m" then
table.insert(data.categories, "Italian nouns with irregular gender")
end
return require("Module:headword").full_headword(data)
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
function export.itprop(frame)
local params = {
[1] = {list = "g", default = "?"},
["head"] = {},
["sort"] = {},
}
local args = require("Module:parameters").process(frame:getParent().args, params)
local data = {lang = lang, pos_category = "proper nouns", categories = {}, sort_key = args["sort"], heads = {args["head"]}, genders = args[1], inflections = {}}
for g in ipairs(data.genders) do
if g == "m-p" or g == "f-p" then
table.insert(data.inflections, {label = "[[Appendix:Glossary#plurale tantum|plural only]]"})
table.insert(data.categories, lang:getCanonicalName() .. " pluralia tantum")
break
end
end
end
return export