Module:Declension

local p = {}

p.langlist = { ar = { adjective = { singular = , default = },	},	de = { adjective = { singular = { n = {'er', 'e', 'es'}, d = {'em', 'er', 'em'}, },			plural = { n = {'e'}, d = {'en'}, },			default = },	},	es = { adjective = { singular = , plural = },	},	fr = { adjective = { singular = , plural = },	},	gl = { adjective = { singular = , plural = },	},	it = { adjective = { singular = , plural = },	},	nds = { adjective = { -- endings seem to be definite, but should probably be indefinite? singular={ n = {'en', 'e', 'e'}, d = {'en', 'e', 'en'}, },			plural={ n = {'en'}, d = {'en'}, },			default = }	},	pl = { -- Polish adjective = {                 -- Declension of regular adjectives / Deklinacja Przymiotnikow regularnych singular = {              -- Number: singular  / Liczba pojedyncza n = {'y', 'a', 'e'},  -- nominative: masculine, feminine, neuter / mianownik , rodzaj: męski, żenski, nijaki (np. zielonY chlopiec, zielonA dziewczynka, zielonE dziecko) l = {'ym', 'ej', 'ym'} -- locative : masculine, feminine, neuter / miejscownik, rodzaj: męski, żenski, nijaki (np. na zielonYM chlopiecu, na zielonEJ dziewczynce, na zielonym dziecku) },			plural = {                -- Number: plural  / Liczba mnoga n = {'i', 'e', 'e'},  -- nominative: masculine, feminine, neuter / mianownik , rodzaj: męski, żenski, nijaki (np. zielonI chlopiecy, zielonE dziewczynki, zielonE dzieci) l = {'ych'}           -- locative  : masculine, feminine, neuter / miejscownik, rodzaj: męski, żenski, nijaki (np. na zielonI chlopiecy, na zielonYCH dziewczynkach, na zielonYCH dzieciach) }		},	},	pt = { adjective = { singular = , plural= }	},	ro = { adjective = { singular = , plural = },	},	ru = { adjective = { singular = { {'ый', 'ая', 'ое'}, d = {'ому', 'ой', 'ому'}, p = {'ом', 'ой', 'ом'}, a = {'ый', 'ую', 'ое'}, },			plural = { {'ые'}, d={'ым'}, p={'ых'}, a={'ые'}, },			default = },	},	scn = { adjective = { singular = , plural = },	}, }

function p.selectAdjectiveForm(form, grammar) -- form is a table form.singular = form.singular or form.s	form.plural = form.plural or form.p	form.s = form.singular form.p = form.plural if grammar.gender and not grammar.number then -- where grammatical info is known, but number not set explicitly -- set it to singular grammar.number = 's'	end local defaultfeatures = {number='s', case='n'} for _,feature in ipairs({'number', 'case', 'gender'}) do		form = form[grammar[feature]] or form.default or form[1] or form[defaultfeatures[feature]] end -- form is a string return form end

function p.makeregular(lang, word, wordtype, number, gender, case) if wordtype == 'adj' then wordtype = 'adjective' end if number == 'p' then number = 'plural' end if number == 'sing' or number == 's' or not number then number = 'singular' end if not case then case = 'n'	end -- clip endings if lang == 'pl' then if wordtype == 'adjective' then -- clip "y" at the end if mw.ustring.sub(word, mw.ustring.len(word), mw.ustring.len(word)) == 'y' -- use string libraries ? then word = mw.ustring.sub(word, 1, mw.ustring.len(word)-1) end end end word = word .. p.selectAdjectiveForm(p.langlist[lang][wordtype], {number=number, case=case, gender=gender}) return word end

return p