Module:kmr-nouns
Appearance
- This module lacks a documentation subpage. Please create it.
- Useful links: subpage list • links • transclusions • testcases • sandbox
-- Ported from [[ku:Modul:ku-tewîn-nav]] authored by Ghybu
-- [[T:kmr-decl-noun]]
-- [[Module:kmr-nouns/masc and fem]] [[ku:Modul:ku-tewîn-nav/mê û nêr]]
-- [[Module:kmr-nouns/singular]] [[ku:Modul:ku-tewîn-nav/yekjimar]]
local export = {}
-- FERHENG --
-- Definite (def)
-- Indefinite (indef)
-- Singular (s) / Plural (p)
-- Case
-- Nominative (nom)
-- Construct (cons)
-- Oblique (obl)
-- Demonstrative oblique (demons_obl)
-- Vocativ (voc)
local gsub = mw.ustring.gsub
local find = mw.ustring.find
-- bolden the suffix
function b(bold)
return '<b>' .. bold .. '</b>'
end
function pronounDecl(g)
if g == 'f' then return 'wê' end
if g == 'm' then return 'wî' end
end
function export.decl(title, gender, variant, bold)
local decl = {}
decl.def_nom_s = title
decl.def_nom_p = title
if (find(title, '[bcçdfghjklmnpqrsştvwxyz]$')) then
if (gender == 'm') then
decl.def_cons_s = gsub(title, '(.)$', '%1' .. b('ê'))
decl.def_cons_p = gsub(title, '(.)$', '%1' .. b('ên'))
decl.def_obl_s = gsub(title, '(.)$', '%1' .. b('î'))
decl.def_obl_p = gsub(title, '(.)$', '%1' .. b('an'))
decl.indef_nom_s = gsub(title, '(.)$', '%1' .. b('ek'))
decl.indef_nom_p = gsub(title, '(.)$', '%1' .. b('in'))
decl.indef_cons_s = gsub(title, '(.)$', '%1' .. b('ekî'))
decl.indef_cons_p = gsub(title, '(.)$', '%1' .. b('ine'))
decl.indef_obl_s = gsub(title, '(.)$', '%1' .. b('ekî'))
decl.indef_obl_p = gsub(title, '(.)$', '%1' .. b('inan'))
decl.voc_s = gsub(title, '(.)$', '%1' .. b('o'))
decl.voc_p = gsub(title, '(.)$', '%1' .. b('ino'))
elseif (gender == 'f') then
decl.def_cons_s = gsub(title, '(.)$', '%1' .. b('a'))
decl.def_cons_p = gsub(title, '(.)$', '%1' .. b('ên'))
decl.def_obl_s = gsub(title, '(.)$', '%1' .. b('ê'))
decl.def_obl_p = gsub(title, '(.)$', '%1' .. b('an'))
decl.indef_nom_s = gsub(title, '(.)$', '%1' .. b('ek'))
decl.indef_nom_p = gsub(title, '(.)$', '%1' .. b('in'))
decl.indef_cons_s = gsub(title, '(.)$', '%1' .. b('eke'))
decl.indef_cons_p = gsub(title, '(.)$', '%1' .. b('ine'))
decl.indef_obl_s = gsub(title, '(.)$', '%1' .. b('ekê'))
decl.indef_obl_p = gsub(title, '(.)$', '%1' .. b('inan'))
decl.voc_s = gsub(title, '(.)$', '%1' .. b('ê'))
decl.voc_p = gsub(title, '(.)$', '%1' .. b('ino'))
end
elseif (find(title, '[aeêiîouû]$') and variant == '2') then
if (gender == 'm') then
decl.def_cons_s = gsub(title, '(.)$', '%1' .. b('yê'))
decl.def_cons_p = gsub(title, '(.)$', '%1' .. b('yên'))
if (find(title, '[î]$')) then
decl.def_obl_s = title
else
decl.def_obl_s = gsub(title, '(.)$', '%1' .. b('yî'))
end
decl.def_obl_p = gsub(title, '(.)$', '%1' .. b('yan'))
decl.indef_nom_s = gsub(title, '(.)$', '%1' .. b('yek'))
decl.indef_nom_p = gsub(title, '(.)$', '%1' .. b('yin'))
decl.indef_cons_s = gsub(title, '(.)$', '%1' .. b('yekî'))
decl.indef_cons_p = gsub(title, '(.)$', '%1' .. b('yine'))
decl.indef_obl_s = gsub(title, '(.)$', '%1' .. b('yekî'))
decl.indef_obl_p = gsub(title, '(.)$', '%1' .. b('yinan'))
decl.voc_s = gsub(title, '(.)$', '%1' .. b('yo'))
decl.voc_p = gsub(title, '(.)$', '%1' .. b('yino'))
elseif (gender == 'f') then
decl.def_cons_s = gsub(title, '(.)$', '%1' .. b('ya'))
decl.def_cons_p = gsub(title, '(.)$', '%1' .. b('yên'))
if (find(title, '[ê]$')) then
decl.def_obl_s = title
else
decl.def_obl_s = gsub(title, '(.)$', '%1' .. b('yê'))
end
decl.def_obl_p = gsub(title, '(.)$', '%1' .. b('yan'))
decl.indef_nom_s = gsub(title, '(.)$', '%1' .. b('yek'))
decl.indef_nom_p = gsub(title, '(.)$', '%1' .. b('yin'))
decl.indef_cons_s = gsub(title, '(.)$', '%1' .. b('yeke'))
decl.indef_cons_p = gsub(title, '(.)$', '%1' .. b('yine'))
decl.indef_obl_s = gsub(title, '(.)$', '%1' .. b('yekê'))
decl.indef_obl_p = gsub(title, '(.)$', '%1' .. b('yinan'))
decl.voc_s = gsub(title, '(.)$', '%1' .. b('yê'))
decl.voc_p = gsub(title, '(.)$', '%1' .. b('yino'))
end
elseif (find(title, '[aîoû]$')) then
if (gender == 'm') then
decl.def_cons_s = gsub(title, '(.)$', '%1' .. b('yê'))
decl.def_cons_p = gsub(title, '(.)$', '%1' .. b('yên'))
if (find(title, '[î]$')) then
decl.def_obl_s = title
else
decl.def_obl_s = gsub(title, '(.)$', '%1' .. b('yî'))
end
decl.def_obl_p = gsub(title, '(.)$', '%1' .. b('yan'))
decl.indef_nom_s = gsub(title, '(.)$', '%1' .. b('yek'))
decl.indef_nom_p = gsub(title, '(.)$', '%1' .. b('yin'))
decl.indef_cons_s = gsub(title, '(.)$', '%1' .. b('yekî'))
decl.indef_cons_p = gsub(title, '(.)$', '%1' .. b('yine'))
decl.indef_obl_s = gsub(title, '(.)$', '%1' .. b('yekî'))
decl.indef_obl_p = gsub(title, '(.)$', '%1' .. b('yinan'))
decl.voc_s = gsub(title, '(.)$', '%1' .. b('yo'))
decl.voc_p = gsub(title, '(.)$', '%1' .. b('yino'))
elseif (gender == 'f') then
decl.def_cons_s = gsub(title, '(.)$', '%1' .. b('ya'))
decl.def_cons_p = gsub(title, '(.)$', '%1' .. b('yên'))
decl.def_obl_s = gsub(title, '(.)$', '%1' .. b('yê'))
decl.def_obl_p = gsub(title, '(.)$', '%1' .. b('yan'))
decl.indef_nom_s = gsub(title, '(.)$', '%1' .. b('yek'))
decl.indef_nom_p = gsub(title, '(.)$', '%1' .. b('yin'))
decl.indef_cons_s = gsub(title, '(.)$', '%1' .. b('yeke'))
decl.indef_cons_p = gsub(title, '(.)$', '%1' .. b('yine'))
decl.indef_obl_s = gsub(title, '(.)$', '%1' .. b('yekê'))
decl.indef_obl_p = gsub(title, '(.)$', '%1' .. b('yinan'))
decl.voc_s = gsub(title, '(.)$', '%1' .. b('yê'))
decl.voc_p = gsub(title, '(.)$', '%1' .. b('yino'))
end
elseif (find(title, '[e]$')) then
if (gender == 'm') then
decl.def_cons_s = gsub(title, '(.)$', b('ê'))
decl.def_cons_p = gsub(title, '(.)$', b('ên'))
decl.def_obl_s = gsub(title, '(.)$', b('î'))
decl.def_obl_p = gsub(title, '(.)$', b('an'))
decl.indef_nom_s = gsub(title, '(.)$', 'e' .. b('k'))
decl.indef_nom_p = gsub(title, '(.)$', b('in'))
decl.indef_cons_s = gsub(title, '(.)$', 'e' .. b('kî'))
decl.indef_cons_p = gsub(title, '(.)$', b('ine'))
decl.indef_obl_s = gsub(title, '(.)$', 'e' .. b('kî'))
decl.indef_obl_p = gsub(title, '(.)$', b('inan'))
decl.voc_s = gsub(title, '(.)$', b('o'))
decl.voc_p = gsub(title, '(.)$', b('ino'))
elseif (gender == 'f') then
decl.def_cons_s = gsub(title, '(.)$', b('a'))
decl.def_cons_p = gsub(title, '(.)$', b('ên'))
decl.def_obl_s = gsub(title, '(.)$', b('ê'))
decl.def_obl_p = gsub(title, '(.)$', b('an'))
decl.indef_nom_s = gsub(title, '(.)$', 'e' .. b('k'))
decl.indef_nom_p = gsub(title, '(.)$', b('in'))
decl.indef_cons_s = gsub(title, '(.)$', 'e' .. b('ke'))
decl.indef_cons_p = gsub(title, '(.)$', b('ine'))
decl.indef_obl_s = gsub(title, '(.)$', 'e' .. b('kê'))
decl.indef_obl_p = gsub(title, '(.)$', b('inan'))
decl.voc_s = gsub(title, '(.)$', b('ê'))
decl.voc_p = gsub(title, '(.)$', b('ino'))
end
elseif (find(title, '[ê]$')) then
if (gender == 'm') then
decl.def_cons_s = gsub(title, '(.)$', b('iyê'))
decl.def_cons_p = gsub(title, '(.)$', b('iyên'))
decl.def_obl_s = gsub(title, '(.)$', b('iyî'))
decl.def_obl_p = gsub(title, '(.)$', b('iyan'))
decl.indef_nom_s = gsub(title, '(.)$', b('iyek'))
decl.indef_nom_p = gsub(title, '(.)$', b('iyin'))
decl.indef_cons_s = gsub(title, '(.)$', b('iyekî'))
decl.indef_cons_p = gsub(title, '(.)$', b('iyine'))
decl.indef_obl_s = gsub(title, '(.)$', b('iyekî'))
decl.indef_obl_p = gsub(title, '(.)$', b('iyinan'))
decl.voc_s = gsub(title, '(.)$', b('iyo'))
decl.voc_p = gsub(title, '(.)$', b('iyino'))
elseif (gender == 'f') then
decl.def_cons_s = gsub(title, '(.)$', b('iya'))
decl.def_cons_p = gsub(title, '(.)$', b('iyên'))
if (find(title, '[ê]$')) then
decl.def_obl_s = title
else
decl.def_obl_s = gsub(title, '(.)$', b('iyê'))
end
decl.def_obl_p = gsub(title, '(.)$', b('iyan'))
decl.indef_nom_s = gsub(title, '(.)$', b('iyek'))
decl.indef_nom_p = gsub(title, '(.)$', b('iyin'))
decl.indef_cons_s = gsub(title, '(.)$', b('iyeke'))
decl.indef_cons_p = gsub(title, '(.)$', b('iyine'))
decl.indef_obl_s = gsub(title, '(.)$', b('iyekê'))
decl.indef_obl_p = gsub(title, '(.)$', b('iyinan'))
decl.voc_s = gsub(title, '(.)$', b('iyê'))
decl.voc_p = gsub(title, '(.)$', b('iyino'))
end
end
-- îy --> iy + link
for i, v in pairs(decl) do
decl[i] = gsub(decl[i], 'î<b>y', '<b>iy')
if bold == 'no' then
decl[i] = gsub(decl[i], '<b>', '')
decl[i] = gsub(decl[i], '</b>', '')
else
local lang = require("Module:languages").getByCode("kmr")
local alt = decl[i]
decl[i] = gsub(decl[i], '<b>', '')
decl[i] = gsub(decl[i], '</b>', '')
local term = decl[i]
local form = gsub(i, '_', '|')
decl[i] = require("Module:links").full_link(
{
lang = lang,
term = term,
alt = alt,
accel = {form = form, gender = gender, lemma = title}
})
end
end
--pronouns for Demonstrative oblique form
decl.def_demons_obl_s = '[[' .. pronounDecl(gender) .. ']] ' .. decl.def_obl_s
decl.def_demons_obl_p = '[[wan]]' .. ' ' .. decl.def_obl_p
return decl
end
local function genderTable(gender)
if (gender == 'm') then return 'masculine gender'
elseif (gender == 'f') then return 'feminine gender'
end
end
function export.declension(frame)
local args = frame:getParent().args
local gender = args[1]
local singular = args[2]
local variant = args['variant']
local title = args['title']
if title then
title = title
else
title = mw.title.getCurrentTitle().subpageText
end
local header = frame:expandTemplate{
title = 'inflection-table-top',
args = {
title = "Declension of ''" .. title .. "''",
palette = 'yellow',
tall = 'yes',
}
}
local footer = frame:expandTemplate{ title = 'inflection-table-bottom' }
if (gender == 'mf') then
return header
..'\n! colspan="4" class="outer" | definite feminine and masculine gender'
..'\n|-'
.."\n! rowspan=\"2\" | ''case''"
..'\n! colspan="2" | singular'
..'\n! rowspan="2" | plural'
..'\n|-'
..'\n! class="secondary" | feminine'
..'\n! class="secondary" | masculine'
..'\n|-'
..'\n! nominative'
..'\n|' .. export.decl(title, 'f', variant)["def_nom_s"]
..'\n|' .. export.decl(title, 'm', variant)["def_nom_s"]
..'\n|' .. export.decl(title, 'm', variant)["def_nom_p"]
..'\n|-'
..'\n! construct'
..'\n|' .. export.decl(title, 'f', variant)["def_cons_s"]
..'\n|' .. export.decl(title, 'm', variant)["def_cons_s"]
..'\n|' .. export.decl(title, 'm', variant)["def_cons_p"]
..'\n|-'
..'\n! oblique'
..'\n|' .. export.decl(title, 'f', variant)["def_obl_s"]
..'\n|' .. export.decl(title, 'm', variant)["def_obl_s"]
..'\n|' .. export.decl(title, 'm', variant)["def_obl_p"]
..'\n|-'
..'\n! demonstrative oblique'
..'\n|' .. export.decl(title, 'f', variant)["def_demons_obl_s"]
..'\n|' .. export.decl(title, 'm', variant)["def_demons_obl_s"]
..'\n|' .. export.decl(title, 'm', variant)["def_demons_obl_p"]
..'\n|-'
..'\n! vocative'
..'\n|' .. export.decl(title, 'f', variant)["voc_s"]
..'\n|' .. export.decl(title, 'm', variant)["voc_s"]
..'\n|' .. export.decl(title, 'm', variant)["voc_p"]
..'\n|-'
..'\n| colspan="999" class="separator" | '
..'\n|-'
..'\n! colspan="5" class="outer" | indefinite feminine and masculine gender'
..'\n|-'
.."\n! rowspan=\"2\" | ''case''"
..'\n! colspan="2" | singular'
..'\n! rowspan="2" | plural'
..'\n|-'
..'\n! class="secondary" | feminine'
..'\n! class="secondary" | masculine'
..'\n|-'
..'\n! nominative'
..'\n|' .. export.decl(title, 'f', variant)["indef_nom_s"]
..'\n|' .. export.decl(title, 'm', variant)["indef_nom_s"]
..'\n|' .. export.decl(title, 'm', variant)["indef_nom_p"]
..'\n|-'
..'\n! construct'
..'\n|' .. export.decl(title, 'f', variant)["indef_cons_s"]
..'\n|' .. export.decl(title, 'm', variant)["indef_cons_s"]
..'\n|' .. export.decl(title, 'm', variant)["indef_cons_p"]
..'\n|-'
..'\n! oblique'
..'\n|' .. export.decl(title, 'f', variant)["indef_obl_s"]
..'\n|' .. export.decl(title, 'm', variant)["indef_obl_s"]
..'\n|' .. export.decl(title, 'm', variant)["indef_obl_p"]
..'\n' .. footer
elseif (singular == 's') then
return header
..'\n! colspan="3" class="outer" | definite ' .. genderTable(gender)
..'\n|-'
.."\n! ''case''"
..'\n! singular'
..'\n|-'
..'\n! nominative'
..'\n|' .. export.decl(title, gender, variant)["def_nom_s"]
..'\n|-'
..'\n! construct'
..'\n|' .. export.decl(title, gender, variant)["def_cons_s"]
..'\n|-'
..'\n! oblique'
..'\n|' .. export.decl(title, gender, variant)["def_obl_s"]
..'\n|-'
..'\n! demonstrative oblique'
..'\n|' .. export.decl(title, gender, variant)["def_demons_obl_s"]
..'\n|-'
..'\n! vocative'
..'\n|' .. export.decl(title, gender, variant)["voc_s"]
..'\n|-'
..'\n| colspan="999" class="separator" | '
..'\n|-'
..'\n! colspan="5" class="outer" | indefinite ' .. genderTable(gender)
..'\n|-'
.."\n! ''case''"
..'\n! singular'
..'\n|-'
..'\n! nominative'
..'\n|' .. export.decl(title, gender, variant)["indef_nom_s"]
..'\n|-'
..'\n! construct'
..'\n|' .. export.decl(title, gender, variant)["indef_cons_s"]
..'\n|-'
..'\n! oblique'
..'\n|' .. export.decl(title, gender, variant)["indef_obl_s"]
..'\n|}</div></div>'
else
return header
..'\n! colspan="3" class="outer" | definite ' .. genderTable(gender)
..'\n|-'
.."\n! ''case''"
..'\n! singular'
..'\n! plural'
..'\n|-'
..'\n! nominative'
..'\n|' .. export.decl(title, gender, variant)["def_nom_s"]
..'\n|' .. export.decl(title, gender, variant)["def_nom_p"]
..'\n|-'
..'\n! construct'
..'\n|' .. export.decl(title, gender, variant)["def_cons_s"]
..'\n|' .. export.decl(title, gender, variant)["def_cons_p"]
..'\n|-'
..'\n! oblique'
..'\n|' .. export.decl(title, gender, variant)["def_obl_s"]
..'\n|' .. export.decl(title, gender, variant)["def_obl_p"]
..'\n|-'
..'\n! demonstrative oblique'
..'\n|' .. export.decl(title, gender, variant)["def_demons_obl_s"]
..'\n|' .. export.decl(title, gender, variant)["def_demons_obl_p"]
..'\n|-'
..'\n! vocative'
..'\n|' .. export.decl(title, gender, variant)["voc_s"]
..'\n|' .. export.decl(title, gender, variant)["voc_p"]
..'\n|-'
..'\n| colspan="999" class="separator" | '
..'\n|-'
..'\n! colspan="5" class="outer" | indefinite ' .. genderTable(gender)
..'\n|-'
.."\n! ''case''"
..'\n! singular'
..'\n! plural'
..'\n|-'
..'\n! nominative'
..'\n|' .. export.decl(title, gender, variant)["indef_nom_s"]
..'\n|' .. export.decl(title, gender, variant)["indef_nom_p"]
..'\n|-'
..'\n! construct'
..'\n|' .. export.decl(title, gender, variant)["indef_cons_s"]
..'\n|' .. export.decl(title, gender, variant)["indef_cons_p"]
..'\n|-'
..'\n! oblique'
..'\n|' .. export.decl(title, gender, variant)["indef_obl_s"]
..'\n|' .. export.decl(title, gender, variant)["indef_obl_p"]
..'\n' .. footer
end
end
return export