Module:nn-noun

-- TODO: avoid duplicates with 'multi' with e.g. f1 and f2

local lang = require("Module:languages").getByCode("nn") local accents = require("Module:no-diacritics")

local export = {}

function export.regular(frame) local PAGENAME = mw.title.getCurrentTitle.text local args = frame:getParent.args local classType = frame.args[1] local class = '' local data = {lang = lang, pos_category = "nouns", categories = {}, genders = {}, inflections = {}} -- Gather parameters local root = PAGENAME:gsub("e$", "") local root_sg = nil local root_pl = nil if classType ~= 'multi' then if args[1] and args[1] ~= '' and not args[2] then root_sg = args[1] root_pl = args[1] elseif args[2] and args[2] ~= '' then root_pl = args[2] if args[1] and args[1] ~= '' then root_sg = args[1] end end end local gen_dsg = args['gen_dsg']; if gen_dsg == "" then gen_dsg = nil end

if args['stem'] then root_sg = args['stem'] root_pl = root_sg end if not classType:find('multi') then -- the word has only one possible inflection (normal) class = classType data.genders = {class:sub(1, 1)} -- extracts e.g. "m" from "m1" else local i = 1 local j = 1 local _genders = {} while (true) do			if args[i] == nil then break end class = class .. '-' .. args[i] local g = args[i]:sub(1, 1) _genders[g] = true i = i + 1 end if _genders['f'] then data.genders[j] = 'f'			j = j + 1 end if _genders['m'] then data.genders[j] = 'm'			j = j + 1 end if _genders['n'] then data.genders[j] = 'n'			j = j + 1 end end hasAccents = false if accents.hasAccents(PAGENAME) then hasAccents = true end if not root_pl then if PAGENAME:find("kel$") then root_pl = PAGENAME:gsub("k?kel$", "kl") elseif PAGENAME:find("tel$") and not PAGENAME:find('mittel$') and not PAGENAME:find('pitel$')then root_pl = PAGENAME:gsub("t?tel$", "tl") else root_pl = root end end if not root_sg then root_sg = root end -- Generate inflected forms local definite_singular = {label = "definite singular"} local indefinite_plural = {label = "indefinite plural"} local definite_plural = {label = "definite plural"}

if class:find('m1') then table.insert(definite_singular, root_sg .. 'en') table.insert(indefinite_plural, root_pl .. 'ar') table.insert(definite_plural, root_pl .. 'ane') end if class:find('m2') then table.insert(definite_singular, root_sg .. 'en') table.insert(indefinite_plural, root_pl .. 'er') table.insert(indefinite_plural, root_pl .. 'ar') table.insert(definite_plural, root_pl .. 'ene') table.insert(definite_plural, root_pl .. 'ane') end if class:find('m3') then table.insert(definite_singular, root_sg .. 'en') table.insert(indefinite_plural, root_sg) table.insert(definite_plural, root_pl .. 'a') end if class == 'f13' then table.insert(indefinite_plural, root_pl .. 'ar') table.insert(definite_plural, root_pl .. 'ane') end if class:find('f1') or class == 'f2' then table.insert(definite_singular, root_sg .. 'a') table.insert(indefinite_plural, root_pl .. 'er') table.insert(definite_plural, root_pl .. 'ene') end if class == 'f2_2012' then root = PAGENAME:gsub("[ae]$", "") table.insert(definite_singular, root .. 'a') table.insert(indefinite_plural, root .. 'er') table.insert(indefinite_plural, root .. 'or') table.insert(definite_plural, root .. 'ene') table.insert(definite_plural, root .. 'one') end if class == 'f2_midlandsnormalen' then root = PAGENAME:gsub("[u]$", "") table.insert(definite_singular, root .. 'o') table.insert(indefinite_plural, root .. 'ur') table.insert(definite_plural, root .. 'une') end if class:find('f3') then table.insert(definite_singular, root_sg .. 'a') table.insert(indefinite_plural, root_pl .. 'ar') table.insert(definite_plural, root_pl .. 'ane') end if class:find('n1') then table.insert(definite_singular, root_sg .. 'et') table.insert(indefinite_plural, PAGENAME) table.insert(definite_plural, root_pl .. 'a') end if class:find('-ium') then data.genders = {'n'} root = PAGENAME:gsub('um$', '') table.insert(definite_singular, root .. 'et') table.insert(indefinite_plural, PAGENAME) table.insert(definite_plural, root .. 'a') end if class == 'mf' or class:find('c') then data.genders = {'f', 'm'} table.insert(definite_singular, root_sg .. 'en') table.insert(definite_singular, root_sg .. 'a') table.insert(indefinite_plural, root_pl .. 'er') table.insert(indefinite_plural, root_pl .. 'ar') table.insert(definite_plural, root_pl .. 'ene') table.insert(definite_plural, root_pl .. 'ane') end -- Add inflections data.inflections = {definite_singular} if #indefinite_plural > 0 then table.insert(data.inflections, indefinite_plural) end if #definite_plural > 0 then table.insert(data.inflections, definite_plural) end if gen_dsg then table.insert(data.inflections, {label = "genitive definite singular", gen_dsg}) end if hasAccents then for key, value in pairs(data.inflections) do --iterate over all generated forms for i = 1, #data.inflections[key] do				if data.inflections[key][i] ~= PAGENAME then -- inflected forms identical to the singular indefinite retain their accents table.insert(data.inflections[key], accents.removeAccents(data.inflections[key][i])) -- insert non-accented form end end end end return require("Module:headword").full_headword(data) end

function export.irregular(frame) local PAGENAME = mw.title.getCurrentTitle.text local args = frame:getParent.args local uncountable = false local data = {lang = lang, pos_category = "nouns", categories = {}, genders = {args[1]}, inflections = {}} -- Gather parameters local gen_dsg = args['gen_dsg']; if gen_dsg == "" then gen_dsg = nil end if args['uncountable'] or args['unc'] then uncountable = true end if args['g2'] then table.insert(data.genders, args['g2']) end if args['g3'] then table.insert(data.genders, args['g3']) end -- Insert inflected forms local definite_singular = {label = "definite singular"} local indefinite_plural = {label = "indefinite plural"} local definite_plural = {label = "definite plural"}

table.insert(definite_singular, args[2]) if args['ds2'] then table.insert(definite_singular, args['ds2']) end table.insert(data.inflections, definite_singular) if not uncountable then table.insert(indefinite_plural, args[3]) if args['ip2'] then table.insert(indefinite_plural, args['ip2']) end table.insert(data.inflections, indefinite_plural) table.insert(definite_plural, args[4]) if args['dp2'] then table.insert(definite_plural, args['dp2']) end table.insert(data.inflections, definite_plural) else table.insert(data.inflections, {label = 'uncountable'}) table.insert(data.categories, lang:getCanonicalName .. " uncountable nouns") end if gen_dsg then table.insert(data.inflections, {label = "genitive definite singular", gen_dsg}) end return require("Module:headword").full_headword(data) end

return export