Module:siwa-noun/data: Difference between revisions

From Linguifex
Jump to navigation Jump to search
No edit summary
No edit summary
 
(292 intermediate revisions by the same user not shown)
Line 1: Line 1:
local sub = mw.ustring.sub
local sub = mw.ustring.sub
local gsub = mw.ustring.gsub
local match = mw.ustring.match
local match = mw.ustring.match
local v = "([aeiouyůõảẻỉỏủỷę])"
local v = "([aeiouyůõảẻỉỏủỷęo̊])"
local nv = "([^aeiouyůõảẻỉỏủỷę])"
local PAGENAME = mw.title.getCurrentTitle().text
local PAGENAME = mw.title.getCurrentTitle().text
local na = false
local na = false -- does Not Apocopate


local ine, ill, ela, ade, all, abl, loc
local ine, ill, ela, ade, all, abl, loc
local cases = {"ine", "ill", "ela", "ade", "all", "abl"}
local cases = {"ine", "ill", "ela", "ade", "all", "abl"}
local ce = {"a", "ta", "ka", "ma", "bma", "ska"}
local ce = {"a", "ta", "ka", "ma", "bma", "ska"} -- Case Endings


local m_com = require('Module:siwa-noun/common')
local m_com = require('Module:siwa-noun/common')
local function exactly(source, pattern)
return source:match("^" .. pattern .. "$")
end
local function csub(term, foo, bar, n)
local coalesced = term
local patterns = {
{"([aoueů])", "%1gįa"}, {"ue", "ugįa"}, {"ie", "ieįa"},
{"ay", "ębia"}, {"uo", "ubia"}, {"au", "abia"}, {"o[au]", "obia"},
{"e[uy]", "ůbia"}, {"iu", "ibia"}, {"ả", "ęgįa"}, {"ỏ", "obia"},
{"ủ", "ubia"}, {"ẻ", "egįa"}, {"ỉ", "igįa"}, {"ỷ", "ybia"}, {"ẻu", "ůbia"}
}
for _, pat in ipairs(patterns) do
for _, case in ipairs(ce) do
coalesced = gsub(term, pat[1] .. case .. "$", pat[2])
end
end
return coalesced
end


local data = {}
local data = {}
Line 15: Line 39:
data["a"] = {
data["a"] = {
params = {
params = {
["nolen"] = {},
["nolen"] = {type = "boolean"}, -- No LENition
["ld"] = {},
["ld"] = {type = "boolean"}, -- Lenition Declension
["d"] = {type = "boolean"}, -- vowel Deletion
["d2"] = {type = "boolean"},
["s"] = {type = "boolean"}, -- Stressed
},
},
}
}
setmetatable(data["a"], {__call = function(self, args, data)
setmetatable(data["a"], {__call = function(self, args, data)
local stem = args.nolen and data.head or m_com.lenition(data.head)
local stem = args.nolen and data.head or m_com.coalescence(m_com.lenition(data.head), args.s)
local s2, s3 = sub(stem, 1, -3), sub(stem, 1, -4)
local s1, s2, s3 = sub(stem, 1, -2), sub(stem, 1, -3), sub(stem, 1, -4)
table.insert(data.categories, "Siwa a-declension nouns")
table.insert(data.categories, "Siwa a-declension " .. data.pos)
data.forms["u"] = {PAGENAME}
data.forms["u"] = {data.alt or PAGENAME}
if args.ld then
if args.ld then
data.forms["m"] = {stem .. "ka"}
data.forms["m"] = {(args.d2 and s2 or args.d and s1 or stem) .. "ka"}
loc = stem .. "ki"
loc = (args.d2 and s2 or args.d and s1 or stem) .. "ki"
na = true
na = true
elseif stem:match(v.."mm.$") then
elseif stem:match(v.."mm.$") then
Line 42: Line 69:
data.forms["m"] = {s2 .. "kka"}
data.forms["m"] = {s2 .. "kka"}
loc = s2 .. "kki"
loc = s2 .. "kki"
elseif stem:match(v.."m.$") then
elseif stem:match("m.$") then
data.forms["m"] = {s2 .. (data.q == "s" and "mġa" or data.q == "l" and "mka" or "kka")}
data.forms["m"] = {s2 .. (data.q == "s" and "mġa" or data.q == "l" and "mka" or "kka")}
loc = s2 .. (data.q == "s" and "mṡi" or data.q == "l" and "mki" or "kki")
loc = s2 .. (data.q == "s" and "mṡi" or data.q == "l" and "mki" or "kki")
Line 52: Line 79:
loc = s2 .. (data.q == "s" and "pri" or "ḍgi")
loc = s2 .. (data.q == "s" and "pri" or "ḍgi")
elseif stem:match(v.."[td].$") then
elseif stem:match(v.."[td].$") then
data.forms["m"] = {s2 .. (data.q == "s" and "tra" or "rka")}
data.forms["m"] = {s2 .. (data.q == "s" and "tra" or "tka")}
loc = s2 .. (data.q == "s" and "tri" or "tṡi")
loc = s2 .. (data.q == "s" and "tri" or "tṡi")
elseif stem:match(v.."r.$") then
elseif stem:match(v.."r.$") then
Line 61: Line 88:
loc = s2 .. "ki"
loc = s2 .. "ki"
else
else
data.forms["m"] = {stem .. "ka"}
data.forms["m"] = {(args.d2 and s2 or args.d and s1 or stem) .. "ka"}
loc = stem .. "ki"
loc = (args.d2 and s2 or args.d and s1 or stem) .. "ki"
na = true
na = true
end
end
Line 73: Line 100:
data.forms["abl"] = {(abl or loc) .. ce[6]}
data.forms["abl"] = {(abl or loc) .. ce[6]}
-- TODO: add alternative forms with table.insert
for n, case in pairs(cases) do
for n, case in pairs(cases) do
if stem:match(v.."nn.$") and data.q == "s" and not na then
if stem:match(v.."nn.$") and data.q == "s" and not na then
Line 88: Line 114:
data["e"] = {
data["e"] = {
params = {
params = {
["nolen"] = {},
["nolen"] = {type = "boolean"},
["ld"] = {},
["ld"] = {type = "boolean"},
["d"] = {type = "boolean"},
["s"] = {type = "boolean"},
},
},
}
}
setmetatable(data["e"], {__call = function(self, args, data)
setmetatable(data["e"], {__call = function(self, args, data)
local stem = args.nolen and data.head or m_com.lenition(data.head)
local stem = args.nolen and data.head or m_com.coalescence(m_com.lenition(data.head), args.s)
local s1, s2, s3 = sub(stem, 1, -2), sub(stem, 1, -3), sub(stem, 1, -4)
local s1, s2, s3 = sub(stem, 1, -2), sub(stem, 1, -3), sub(stem, 1, -4)
table.insert(data.categories, "Siwa e-declension nouns")
table.insert(data.categories, "Siwa e-declension " .. data.pos)
data.forms["u"] = {PAGENAME}
data.forms["u"] = {data.alt or PAGENAME}
if stem:match("[ae]$") then
if stem:match("[aeẻ]$") then
if args.ld then
if args.ld then
data.forms["m"] = {stem .. "ri"}
data.forms["m"] = {(args.d and s1 or stem) .. "ri"}
loc = stem .. "ri"
loc = (args.d and s1 or stem) .. "ri"
na = true
na = true
elseif stem:match(v.."ts.$") then
elseif stem:match(v.."ts.$") then
Line 140: Line 168:
loc = s2 .. "ġġi"
loc = s2 .. "ġġi"
else
else
data.forms["m"] = {stem .. "ri"}
data.forms["m"] = {(args.d and s1 or stem) .. "ri"}
loc = stem .. "ri"
loc = (args.d and s1 or stem) .. "ri"
na = true
na = true
end
end
elseif stem:match("[io]$") then
elseif stem:match("[io]$") then
if args.ld then
if args.ld then
data.forms["m"] = {s1 .. "ie"}
if stem:match("o$") then
loc = s1 .. "iei"
data.forms["m"] = {s1 .. "ue", s1 .. "obi"}
na = true
loc = s1 .. "uei"
na = true
else
data.forms["m"] = {s1 .. "ie"}
loc = s1 .. "iei"
na = true
end
elseif stem:match(v.."mm.$") then
elseif stem:match(v.."mm.$") then
data.forms["m"] = {s3 .. "mme"}
data.forms["m"] = {s3 .. "mme"}
loc = s3 .. "mmei"
loc = s3 .. "mmei"
elseif stem:match(v.."vv.$") then
data.forms["m"] = {s3 .. "vve"}
loc = s3 .. "vvei"
elseif stem:match(v.."[mpbvnrlkg].$") then
elseif stem:match(v.."[mpbvnrlkg].$") then
local stl = sub(stem, -2, -2)
local stl = sub(stem, -2, -2)
Line 168: Line 205:
elseif stem:match("[uyů]$") then
elseif stem:match("[uyů]$") then
if args.ld then
if args.ld then
data.forms["m"] = {stem .. "me"}
data.forms["m"] = {(args.d and s1 or stem) .. "me"}
loc = stem .. "mei"
loc = (args.d and s1 or stem) .. "mei"
na = true
na = true
elseif stem:match(v.."mm.$") then
elseif stem:match(v.."mm.$") then
Line 181: Line 218:
loc = s2 .. (data.q == "s" and "gme" or "hme")
loc = s2 .. (data.q == "s" and "gme" or "hme")
else
else
data.forms["m"] = {stem .. "me"}
data.forms["m"] = {(args.d and s1 or stem) .. "me"}
loc = stem .. "mei"
loc = (args.d and s1 or stem) .. "mei"
na = true
na = true
end
end
Line 194: Line 231:
data.forms["abl"] = {(abl or loc) .. ce[6]}
data.forms["abl"] = {(abl or loc) .. ce[6]}
-- TODO: add alternative forms with table.insert
for n, case in pairs(cases) do
for n, case in pairs(cases) do
if stem:match("o$") and na then
if stem:match("o$") and na then
Line 207: Line 243:
data["i"] = {
data["i"] = {
params = {
params = {
["nolen"] = {},
["nolen"] = {type = "boolean"},
["ld"] = {},
["ld"] = {type = "boolean"},
["s"] = {type = "boolean"},
},
},
}
}
setmetatable(data["i"], {__call = function(self, args, data)
setmetatable(data["i"], {__call = function(self, args, data)
local stem = args.nolen and data.head or m_com.lenition(data.head)
local stem = args.nolen and data.head or m_com.coalescence(m_com.lenition(data.head), args.s)
local s1, s2, s3 = sub(stem, 1, -2), sub(stem, 1, -3), sub(stem, 1, -4)
local s1, s2, s3 = sub(stem, 1, -2), sub(stem, 1, -3), sub(stem, 1, -4)
table.insert(data.categories, "Siwa i-declension nouns")
table.insert(data.categories, "Siwa i-declension " .. data.pos)
data.forms["ine"] = {}
data.forms["ine"], data.forms["all"], data.forms["abl"] = {}, {}, {}
data.forms["u"] = {PAGENAME}
data.forms["u"] = {data.alt or PAGENAME}
if args.ld then
if args.ld then
if stem:match("i$") then
if stem:match("[iỉ]$") then
data.forms["m"] = {s1 .. "id"}
data.forms["m"] = {stem .. "d"}
ill, ela, ade = s1 .. "ih", s1 .. "ih", s1 .. "ih"
ill, ela, ade = stem .. "h", stem .. "h", stem .. "h"
ine = s1 .. "idi"
ine = stem .. "di"
all, abl = s1 .. "ỉ", s1 .. "ỉ"
all, abl = stem, stem
table.insert(data.forms["ine"], s1 .. "ỉa")
table.insert(data.forms["ine"], s1 .. "ỉa")
if sub(stem, -1, -1) == "ỉ" then
table.insert(data.forms["all"], s1 .. "iddįibma")
table.insert(data.forms["abl"], s1 .. "iddįiska")
end
na = true
na = true
else
else
Line 234: Line 275:
na = true
na = true
end
end
elseif stem:match(v.."hh.$") then
data.forms["m"] = {s3 .. "hdi"}
loc = s3 .. "hdi"
elseif stem:match(v.."[mn][mn].$") then
elseif stem:match(v.."[mn][mn].$") then
data.forms["m"] = {s3 .. "ndi"}
data.forms["m"] = {s3 .. "ndi"}
loc = s3 .. "ndi"
loc = s3 .. "ndi"
elseif stem:match("[uo][mn].$") then
elseif stem:match(nv.."[uo][mn].$") then
data.forms["m"] = {s3 .. "õdi"}
data.forms["m"] = {s3 .. "õdi"}
loc = s3 .. "õdi"
loc = s3 .. "õdi"
Line 251: Line 295:
data.forms["m"] = {s2 .. "sti"}
data.forms["m"] = {s2 .. "sti"}
loc = s2 .. "sti"
loc = s2 .. "sti"
elseif stem:match(v.."ṡ.$") then
data.forms["m"] = {s2 .. "ṡti"}
loc = s2 .. "ṡti"
elseif stem:match(v.."[rhk].$") then
elseif stem:match(v.."[rhk].$") then
data.forms["m"] = {s2 .. "hdi"}
data.forms["m"] = {s2 .. "hdi"}
Line 257: Line 304:
data.forms["m"] = {s2 .. "ldi"}
data.forms["m"] = {s2 .. "ldi"}
loc = s2 .. "ldi"
loc = s2 .. "ldi"
elseif stem:match("i$") then
elseif stem:match("[iỉ]$") then
data.forms["m"] = {s1 .. "id"}
data.forms["m"] = {stem .. "d"}
ill, ela, ade = s1 .. "ih", s1 .. "ih", s1 .. "ih"
ill, ela, ade = stem .. "h", stem .. "h", stem .. "h"
ine = s1 .. "idi"
ine = stem .. "di"
all, abl = s1 .. "ỉ", s1 .. "ỉ"
all, abl = stem, stem
table.insert(data.forms["ine"], s1 .. "ỉa")
table.insert(data.forms["ine"], s1 .. "ỉa")
if sub(stem, -1, -1) == "ỉ" then
table.insert(data.forms["all"], s1 .. "iddįibma")
table.insert(data.forms["abl"], s1 .. "iddįiska")
end
na = true
na = true
else
else
Line 274: Line 325:
table.insert(data.forms["ine"], (ine or loc) .. ce[1])
table.insert(data.forms["ine"], (ine or loc) .. ce[1])
data.forms["ill"] = {(ill or loc) .. ce[2]}
data.forms["ill"] = {(ill or loc) .. ce[2]}
data.forms["ela"] = {(ela or loc) .. ce[3]}
data.forms["ela"] = {(ela or loc) .. (match(stem, "[vg].$") and "ga" or ce[3])}
data.forms["ade"] = {(ade or loc) .. ce[4]}
data.forms["ade"] = {(ade or loc) .. ce[4]}
data.forms["all"] = {(all or loc) .. ce[5]}
table.insert(data.forms["all"], (all or loc) .. ce[5])
data.forms["abl"] = {(abl or loc) .. ce[6]}
table.insert(data.forms["abl"], (abl or loc) .. ce[6])
end
end
Line 284: Line 336:
data["o"] = {
data["o"] = {
params = {
params = {
["nolen"] = {},
["nolen"] = {type = "boolean"},
["ld"] = {},
["ld"] = {type = "boolean"},
["s"] = {type = "boolean"},
["d"] = {type = "boolean"},
},
},
}
}
setmetatable(data["o"], {__call = function(self, args, data)
setmetatable(data["o"], {__call = function(self, args, data)
local stem = args.nolen and data.head or m_com.lenition(data.head)
local stem = args.nolen and data.head or m_com.coalescence(m_com.lenition(data.head), args.s)
local s1, s2, s3 = sub(stem, 1, -2), sub(stem, 1, -3), sub(stem, 1, -4)
local s1, s2, s3 = sub(stem, 1, -2), sub(stem, 1, -3), sub(stem, 1, -4)
table.insert(data.categories, "Siwa o-declension nouns")
table.insert(data.categories, "Siwa o-declension " .. data.pos)
data.forms["u"] = {PAGENAME}
data.forms["u"] = {data.alt or PAGENAME}
if stem:match("[ae]$") then
if stem:match("[ae]$") then
if args.ld then
if args.ld then
data.forms["m"] = {stem .. "mo"}
data.forms["m"] = {(args.d and s1 or stem == "kode" and "koi" or stem == "mohe" and "moi" or stem) .. "mo"}
loc = stem .. "moi"
loc = (args.d and s1 or stem) .. "moi"
na = true
na = true
elseif stem:match(v.."[mn][mn].$") then
elseif stem:match(v.."[mnv][mnv].$") then
data.forms["m"] = {s3 .. "mmo"}
data.forms["m"] = {s3 .. "mmo"}
loc = s3 .. "mmoi"
loc = s3 .. "mmoi"
elseif stem:match(v.."hh.$") then
data.forms["m"] = {s3 .. "hmo"}
loc = s3 .. "hmoi"
elseif stem:match(v.."[bt].$") then
elseif stem:match(v.."[bt].$") then
data.forms["m"] = {s2 .. "bmo"}
data.forms["m"] = {s2 .. "bmo"}
Line 319: Line 376:
loc = s2 .. "lmoi"
loc = s2 .. "lmoi"
else
else
data.forms["m"] = {stem .. "mo"}
data.forms["m"] = {(args.d and s1 or stem) .. "mo"}
loc = stem .. "moi"
loc = (args.d and s1 or stem) .. "moi"
na = true
na = true
end
end
elseif stem:match("i$") then
elseif stem:match("[iỷ]$") then
if args.ld then
if args.ld then
data.forms["m"] = {stem .. "ko"}
data.forms["m"] = {(args.d and s1 or stem) .. "ko"}
loc = stem .. "koi"
loc = (args.d and s1 or stem) .. "koi"
na = true
na = true
elseif stem:match(v.."hhį.$") then
elseif stem:match(v.."hhį.$") then
data.forms["m"] = {sub(stem, 1, -5) .. "ṡko"}
data.forms["m"] = {sub(stem, 1, -5) .. "ṡko"}
loc = sub(stem, 1, -5) .. "ṡkoi"
loc = sub(stem, 1, -5) .. "ṡkoi"
elseif stem:match(v.."[mn][mn].$") then
elseif stem:match(v.."hh.$") then
data.forms["m"] = {s3 .. "kko"}
data.forms["m"] = {s3 .. "hko"}
loc = s3 .. "kkoi"
loc = s3 .. "hkoi"
elseif stem:match(v.."[mnv][mnv].$") then
data.forms["m"] = {(sub(stem, -4, -4) == "o" and sub(stem, 1, -5) .. "õ" or s3) .. "kko"}
loc = (sub(stem, -4, -4) == "o" and sub(stem, 1, -5) .. "õ" or s3) .. "kkoi"
elseif stem:match(v.."[mnkg].$") then
elseif stem:match(v.."[mnkg].$") then
data.forms["m"] = {s2 .. "kko"}
data.forms["m"] = {(sub(stem, -3, -3) == "o" and not args.s and s3 .. "õ" or s2) .. "kko"}
loc = s2 .. "kkoi"
loc = (sub(stem, -3, -3) == "o" and not args.s and s3 .. "õ" or s2) .. "kkoi"
elseif stem:match(v.."[lrs]k.$") or stem:match(v.."sġ.$") then
elseif stem:match(v.."[lrs]k.$") or stem:match(v.."sġ.$") then
data.forms["m"] = {s2 .. "kko"}
data.forms["m"] = {s2 .. "kko"}
Line 350: Line 410:
loc = s2 .. "ṡkoi"
loc = s2 .. "ṡkoi"
else
else
data.forms["m"] = {stem .. "ko"}
data.forms["m"] = {(args.d and s1 or stem) .. "ko"}
loc = stem .. "koi"
loc = (args.d and s1 or stem) .. "koi"
na = true
na = true
end
end
elseif stem:match("[ouyů].$") then
elseif stem:match("[ouyůỏ]$") then
if args.ld then
if args.ld then
data.forms["m"] = {stem .. "ma"}
local del = args.d and s1 or stem
ill, ela = stem .. "n", stem .. "n"
data.forms["m"] = {del .. "ma"}
ine, ade, all, abl = stem .. "mi", stem .. "mi", stem .. "mi", stem .. "mi"
ill, ela = del .. "n", del .. "n"
ine, ade, all, abl = del .. "mi", del .. "mi", del .. "mi", del .. "mi"
na = true
na = true
elseif stem:match(v.."[mn][mn].$") then
elseif s1:match(v.."[bptd]$") then
data.forms["m"] = {s2 .. "bma"}
loc = s2 .. "bmi"
elseif s1:match(v.."[mn][mn]$") then
data.forms["m"] = {s3 .. "mma"}
data.forms["m"] = {s3 .. "mma"}
loc = s3 .. "mmi"
loc = s3 .. "mmi"
elseif stem:match(v.."[mnv].$") then
elseif s1:match(v.."[rhgk][rhgk]$") then
data.forms["m"] = {s3 .. "hma"}
loc = s3 .. "hmi"
elseif s1:match(v.."[mnv]$") then
data.forms["m"] = {s2 .. "mma"}
data.forms["m"] = {s2 .. "mma"}
loc = s2 .. "mmi"
loc = s2 .. "mmi"
elseif stem:match(v.."[rhgk].$") then
elseif s1:match(v.."[rhgk]$") then
data.forms["m"] = {s2 .. "hma"}
data.forms["m"] = {s2 .. "hma"}
loc = s2 .. "hmi"
loc = s2 .. "hmi"
elseif stem:match(v.."l.$") then
elseif s1:match(v.."l$") then
data.forms["m"] = {s2 .. "lma"}
data.forms["m"] = {s2 .. "lma"}
loc = s2 .. "lmi"
loc = s2 .. "lmi"
else
else
data.forms["m"] = {stem .. "ma"}
local del = args.d and s1 or stem
ill, ela = stem .. "n", stem .. "n"
data.forms["m"] = {del .. "ma"}
ine, ade, all, abl = stem .. "mi", stem .. "mi", stem .. "mi", stem .. "mi"
ill, ela = del .. "n", del .. "n"
ine, ade, all, abl = del .. "mi", del .. "mi", del .. "mi", del .. "mi"
na = true
na = true
end
end
Line 387: Line 455:
data.forms["abl"] = {(abl or loc) .. ce[6]}
data.forms["abl"] = {(abl or loc) .. ce[6]}
-- TODO: add alternative forms with table.insert
for n, case in pairs(cases) do
for n, case in pairs(cases) do
if stem:match(v.."[mnkg]i$") and not na then
if stem:match(v.."[mnkg]i$") and not na then
table.insert(data.forms[case], s2 .. "kki" .. ce[n])
table.insert(data.forms[case], (sub(stem, -3, -3) == "o" and s3 .. "õ" or s2) .. "kki" .. ce[n])
elseif (stem:match(v.."[lrs]ki$") or stem:match(v.."sġi$")) and not na then
elseif (stem:match(v.."[lrs]ki$") or stem:match(v.."sġi$")) and not na then
table.insert(data.forms[case], s2 .. "kki" .. ce[n])
table.insert(data.forms[case], s2 .. "kki" .. ce[n])
Line 400: Line 467:
data["u"] = {
data["u"] = {
params = {
params = {
["nolen"] = {},
["nolen"] = {type = "boolean"},
["ld"] = {},
["ld"] = {type = "boolean"},
["s"] = {type = "boolean"},
},
},
}
}
setmetatable(data["u"], {__call = function(self, args, data)
setmetatable(data["u"], {__call = function(self, args, data)
local stem = args.nolen and data.head or m_com.lenition(data.head)  
local stem = args.nolen and data.head or m_com.coalescence(m_com.lenition(data.head), args.s)
local s1, s2, s3 = sub(stem, 1, -2), sub(stem, 1, -3), sub(stem, 1, -4)
local s1, s2, s3 = sub(stem, 1, -2), sub(stem, 1, -3), sub(stem, 1, -4)
table.insert(data.categories, "Siwa u-declension nouns")
table.insert(data.categories, "Siwa u-declension " .. data.pos)
data.forms["u"] = {PAGENAME}
data.forms["u"] = {data.alt or PAGENAME}
if stem:match("[aei]$") then
if stem:match("[aei]$") then
Line 416: Line 484:
loc = stem .. "moi"
loc = stem .. "moi"
na = true
na = true
elseif stem:match(v.."[mn][mn].$") then
elseif stem:match(v.."[mnv][mnv].$") then
data.forms["m"] = {s3 .. "mmo"}
data.forms["m"] = {s3 .. "mmo"}
loc = s3 .. "mmoi"
loc = s3 .. "mmoi"
elseif stem:match(v.."hh.$") then
data.forms["m"] = {s3 .. "hmo"}
loc = s3 .. "hmoi"
elseif stem:match(v.."[btpd].$") then
elseif stem:match(v.."[btpd].$") then
data.forms["m"] = {s2 .. "bmo"}
data.forms["m"] = {s2 .. "bmo"}
Line 436: Line 507:
na = true
na = true
end
end
elseif stem:match("[ouyů]$") then
elseif stem:match("[ouyỷů]$") then
if args.ld then
if args.ld then
data.forms["m"] = {stem .. "ma"}
data.forms["m"] = {stem .. "ma"}
Line 448: Line 519:
data.forms["m"] = {s2 .. "mma", s2 .. "mmo"}
data.forms["m"] = {s2 .. "mma", s2 .. "mmo"}
loc = s2 .. "mmi"
loc = s2 .. "mmi"
elseif stem:match(v.."[bptd].$") then
data.forms["m"] = {s2 .. "bma"}
loc = s2 .. "bmi"
elseif stem:match(v.."[rhgk].$") then
elseif stem:match(v.."[rhgk].$") then
data.forms["m"] = {s2 .. "hma"}
data.forms["m"] = {s2 .. "hma"}
Line 469: Line 543:
data.forms["abl"] = {(abl or loc) .. ce[6]}
data.forms["abl"] = {(abl or loc) .. ce[6]}
-- TODO: add alternative forms with table.insert
for n, case in pairs(cases) do
for n, case in pairs(cases) do
if stem:match(v.."[mn][mn][oyuů]$") and not na then
if stem:match(v.."[mn][mn][oyuů]$") and not na then
Line 482: Line 555:
data["y"] = {
data["y"] = {
params = {
params = {
["nolen"] = {},
["nolen"] = {type = "boolean"},
["ld"] = {},
["ld"] = {type = "boolean"},
["s"] = {type = "boolean"},
["d"] = {type = "boolean"},
},
},
}
}
setmetatable(data["y"], {__call = function(self, args, data)
setmetatable(data["y"], {__call = function(self, args, data)
local stem = args.nolen and data.head or m_com.lenition(data.head)
local stem = args.nolen and data.head or m_com.coalescence(m_com.lenition(data.head), args.s)
local s1, s2, s3 = sub(stem, 1, -2), sub(stem, 1, -3), sub(stem, 1, -4)
local s1, s2, s3 = sub(stem, 1, -2), sub(stem, 1, -3), sub(stem, 1, -4)
table.insert(data.categories, "Siwa y-declension nouns")
table.insert(data.categories, "Siwa y-declension " .. data.pos)
data.forms["ine"] = {}
data.forms["ine"] = {}
data.forms["all"] = {}
data.forms["abl"] = {}
data.forms["u"] = {PAGENAME}
data.forms["u"] = {data.alt or PAGENAME}
if stem:match("a$") then
if stem:match("a$") then
if args.ld then
if args.ld then
data.forms["m"] = {stem .. "mo"}
data.forms["m"] = {(args.d and s1 or stem) .. "mo"}
loc = stem .. "moi"
loc = (args.d and s1 or stem) .. "moi"
na = true
na = true
elseif stem:match(v.."[mn][mn].$") then
elseif stem:match(v.."[mn][mn].$") then
Line 513: Line 590:
loc = s2 .. "lmoi"
loc = s2 .. "lmoi"
else
else
data.forms["m"] = {stem .. "mo"}
data.forms["m"] = {(args.d and s1 or stem) .. "mo"}
loc = stem .. "moi"
loc = (args.d and s1 or stem) .. "moi"
na = true
na = true
end
end
elseif stem:match("i$") then
elseif stem:match("[ie]$") then
if args.ld then
if args.ld then
if stem:match("i$") then
if stem:match("i$") then
data.forms["m"] = {s1 .. "id"}
data.forms["m"] = {stem .. "d"}
ill, ela, ade = s1 .. "ih", s1 .. "ih", s1 .. "ih"
ill, ela, ade = stem .. "h", stem .. "h", stem .. "h"
ine = s1 .. "idi"
ine = stem .. "di"
all, abl = s1 .. "ỉ", s1 .. "ỉ"
all, abl = stem, stem
table.insert(data.forms["ine"], s1 .. "ỉa")
table.insert(data.forms["ine"], s1 .. "ỉa")
table.insert(data.forms["all"], s1 .. "iddįibma")
table.insert(data.forms["abl"], s1 .. "iddįiska")
na = true
na = true
else
else
Line 550: Line 629:
data.forms["m"] = {s2 .. "sti"}
data.forms["m"] = {s2 .. "sti"}
loc = s2 .. "sti"
loc = s2 .. "sti"
elseif stem:match(v.."ṡ.$") then
data.forms["m"] = {s2 .. "ṡti"}
loc = s2 .. "ṡti"
elseif stem:match(v.."[rhk].$") then
elseif stem:match(v.."[rhk].$") then
data.forms["m"] = {s2 .. "hdi"}
data.forms["m"] = {s2 .. "hdi"}
Line 557: Line 639:
loc = s2 .. "ldi"
loc = s2 .. "ldi"
elseif stem:match("i$") then
elseif stem:match("i$") then
data.forms["m"] = {s1 .. "id"}
data.forms["m"] = {stem .. "d"}
ill, ela, ade = s1 .. "ih", s1 .. "ih", s1 .. "ih"
ill, ela, ade = stem .. "h", stem .. "h", stem .. "h"
ine = s1 .. "idi"
ine = stem .. "di"
all, abl = s1 .. "ỉ", s1 .. "ỉ"
all, abl = stem, stem
table.insert(data.forms["ine"], s1 .. "ỉa")
table.insert(data.forms["ine"], s1 .. "ỉa")
table.insert(data.forms["all"], s1 .. "iddįibma")
table.insert(data.forms["abl"], s1 .. "iddįiska")
na = true
na = true
else
else
Line 569: Line 653:
ine = stem .. "di"
ine = stem .. "di"
na = true
na = true
end
elseif stem:match("[ouyỷů]$") then
if args.ld then
data.forms["m"] = {stem .. "ma"}
ill, ela = stem .. "n", stem .. "n"
ine, ade, all, abl = stem .. "mi", stem .. "mi", stem .. "mi", stem .. "mi"
elseif stem:match(v.."[mn][mn].$") then
data.forms["m"] = {s3 .. "mma"}
loc = s3 .. "mmi"
elseif stem:match(v.."[mvn].$") then
data.forms["m"] = {s2 .. "mma"}
loc = s2 .. "mmi"
elseif stem:match(v.."[rhg].$") then
data.forms["m"] = {s2 .. "hma"}
loc = s2 .. "hmi"
elseif stem:match(v.."l.$") then
data.forms["m"] = {s2 .. "lma"}
loc = s2 .. "lmi"
else
data.forms["m"] = {(args.d and s1 or stem) .. "ma"}
ill, ela = (args.d and s1 or stem) .. "n", (args.d and s1 or stem) .. "n"
ine, ade, all, abl = (args.d and s1 or stem) .. "mi", (args.d and s1 or stem) .. "mi", (args.d and s1 or stem) .. "mi", (args.d and s1 or stem) .. "mi"
end
end
end
end
Line 574: Line 680:
table.insert(data.forms["ine"], (ine or loc) .. ce[1])
table.insert(data.forms["ine"], (ine or loc) .. ce[1])
data.forms["ill"] = {(ill or loc) .. ce[2]}
data.forms["ill"] = {(ill or loc) .. ce[2]}
data.forms["ela"] = {(ela or loc) .. ce[3]}
data.forms["ela"] = {(ela or loc) .. (match(stem, "[vg].$") and "ga" or ce[3])}
data.forms["ade"] = {(ade or loc) .. ce[4]}
data.forms["ade"] = {(ade or loc) .. ce[4]}
data.forms["all"] = {(all or loc) .. ce[5]}
table.insert(data.forms["all"], (all or loc) .. ce[5])
data.forms["abl"] = {(abl or loc) .. ce[6]}
table.insert(data.forms["abl"], (abl or loc) .. ce[6])
end
end
Line 584: Line 690:
data["s"] = {
data["s"] = {
params = {
params = {
["nolen"] = {},
["nolen"] = {type = "boolean"},
["d"] = {type = "boolean"},
["d2"] = {type = "boolean"},
["s"] = {type = "boolean"},
},
},
}
}
setmetatable(data["s"], {__call = function(self, args, data)
setmetatable(data["s"], {__call = function(self, args, data)
local stem = args.nolen and data.head or m_com.lenition(data.head)
local stem = args.nolen and data.head or m_com.coalescence(m_com.lenition(data.head), args.s)
local s1, s2, s3 = sub(stem, 1, -2), sub(stem, 1, -3), sub(stem, 1, -4)
local s1, s2, s3 = sub(stem, 1, -2), sub(stem, 1, -3), sub(stem, 1, -4)
table.insert(data.categories, "Siwa s-declension nouns")
table.insert(data.categories, "Siwa s-declension " .. data.pos)
data.forms["u"] = {PAGENAME}
local s = args.s and "hh" or "h"
data.forms["u"] = {data.alt or PAGENAME}
if stem:match(v.."d.s$") then
if stem:match(v.."d.s$") then
Line 603: Line 714:
ine, all, abl = s1 .. "hi", s1 .. "hi", s1 .. "hi"
ine, all, abl = s1 .. "hi", s1 .. "hi", s1 .. "hi"
else
else
data.forms["m"] = {s1 .. "hi"}
data.forms["m"] = {(args.d2 and s3 or args.d and s2 or s1) .. s .. "i"}
ill, ela, ade = s1 .. "h", s1 .. "h", s1 .. "h"
ill, ela, ade = (args.d2 and s3 or args.d and s2 or s1) .. "h", (args.d2 and s3 or args.d and s2 or s1) .. "h", (args.d2 and s3 or args.d and s2 or s1) .. "h"
ine, all, abl = s1 .. "hi", s1 .. "hi", s1 .. "hi"
ine, all, abl = (args.d2 and s3 or args.d and s2 or s1) .. s .. "i", (args.d2 and s3 or args.d and s2 or s1) .. s .. "i", (args.d2 and s3 or args.d and s2 or s1) .. s .. "i"
end
end
Line 620: Line 731:
params = {
params = {
[2] = {},
[2] = {},
["nolen"] = {},
["nolen"] = {type = "boolean"},
["s"] = {type = "boolean"},
["d"] = {type = "boolean"},
},
},
}
}
setmetatable(data["n"], {__call = function(self, args, data)
setmetatable(data["n"], {__call = function(self, args, data)
local stem = args.nolen and data.head or m_com.lenition(data.head)
local stem = args.nolen and data.head or m_com.coalescence(m_com.lenition(data.head), args.s)
local s1, s2, s3 = sub(stem, 1, -2), sub(stem, 1, -3), sub(stem, 1, -4)
local s1, s2, s3 = sub(stem, 1, -2), sub(stem, 1, -3), sub(stem, 1, -4)
local sv = args[2]
local sv = args[2]
table.insert(data.categories, "Siwa n-declension nouns")
table.insert(data.categories, "Siwa n-declension " .. data.pos)
data.forms["u"] = {PAGENAME}
data.forms["u"] = {data.alt or PAGENAME}
if sv:match("[aou]") then
if sv:match("[aou]$") then
data.forms["m"] = {stem .. "ta"}
data.forms["m"] = {stem .. "ta"}
loc = sv == "o" and s2 .. "õri" or s1 .. "ri"
loc = match(stem, "on$") and s2 .. "õri" or s1 .. "ri"
elseif sv:match("[eiyů]") then
elseif sv:match("[eiyůỉę]$") then
data.forms["m"] = {s1 .. "s"}
data.forms["m"] = {s1 .. "s"}
loc = s1 .. "ri"
loc = s1 .. "s" .. (args.d and "" or "i")
end
end
Line 651: Line 764:
params = {
params = {
[2] = {},
[2] = {},
["nolen"] = {},
["nolen"] = {type = "boolean"},
["ut"] = {type = "boolean"},
["s"] = {type = "boolean"},
},
},
}
}
setmetatable(data["t"], {__call = function(self, args, data)
setmetatable(data["t"], {__call = function(self, args, data)
local stem = args.nolen and data.head or m_com.lenition(data.head)
local stem = args.nolen and data.head or m_com.coalescence(m_com.lenition(data.head), args.s)
local s1, s2, s3 = sub(stem, 1, -2), sub(stem, 1, -3), sub(stem, 1, -4)
local s1, s2, s3 = sub(stem, 1, -2), sub(stem, 1, -3), sub(stem, 1, -4)
local sv = args[2]
local sv = args[2]
table.insert(data.categories, "Siwa t-declension nouns")
table.insert(data.categories, "Siwa t-declension " .. data.pos)
data.forms["u"] = {PAGENAME}
data.forms["u"] = {data.alt or PAGENAME}
if stem:match(v.."ut$") then
if args.ut then
data.forms["m"] = {s2 .. "lda", s2 .. "utta"}
data.forms["m"] = {s2 .. "lda", s1 .. "tta"}
elseif sv:match("[aou]") then
loc = s1 .. "ttai"
elseif sv:match("[aou]$") then
data.forms["m"] = {stem .. "ta"}
data.forms["m"] = {stem .. "ta"}
elseif sv:match("[eiyů]") then
loc = stem .. "tai"
elseif sv:match("[eiyů]$") then
data.forms["m"] = {s1 .. "tsta", s1 .. "ddįa", s1 .. "tsitta"}
data.forms["m"] = {s1 .. "tsta", s1 .. "ddįa", s1 .. "tsitta"}
loc = s1 .. "tsti"
end
end
data.forms["ine"] = {(ine or loc) .. ce[1]}
data.forms["ill"] = {(ill or loc) .. ce[2]}
data.forms["ela"] = {(ela or loc) .. ce[3]}
data.forms["ade"] = {(ade or loc) .. ce[4]}
data.forms["all"] = {(all or loc) .. ce[5]}
data.forms["abl"] = {(abl or loc) .. ce[6]}
for n, case in pairs(cases) do
if sv:match("[eiyů]$") then
table.insert(data.forms[case], s1 .. "ddįi" .. ce[n])
table.insert(data.forms[case], s1 .. "tsitti" .. ce[n])
end
end
end
end
})
})
Line 675: Line 808:
params = {
params = {
[2] = {},
[2] = {},
["nolen"] = {},
["nolen"] = {type = "boolean"},
["str"] = {type = "boolean"},
["s"] = {type = "boolean"},
},
},
}
}
setmetatable(data["l"], {__call = function(self, args, data)
setmetatable(data["l"], {__call = function(self, args, data)
local stem = args.nolen and data.head or m_com.lenition(data.head)
local stem = args.nolen and data.head or m_com.coalescence(m_com.lenition(data.head), args.s)
local s1, s2, s3 = sub(stem, 1, -2), sub(stem, 1, -3), sub(stem, 1, -4)
local s1, s2, s3 = sub(stem, 1, -2), sub(stem, 1, -3), sub(stem, 1, -4)
table.insert(data.categories, "Siwa l-declension nouns")
table.insert(data.categories, "Siwa l-declension " .. data.pos)
local sv = args[2]
local sv = args[2]
Line 689: Line 824:
}
}
data.forms["u"] = {PAGENAME}
local dtl = {
["aa"] = "ả", ["ee"] = "ẻ", ["ii"] = "ỉ",
["oo"] = "ỏ", ["uu"] = "ủ", ["yy"] = "ỷ",
}
if sv:match("[aou]") then
data.forms["u"] = {data.alt or PAGENAME}
if sv:match("[aou]$") then
if match("[ảẻỉỏủỷ]", sub(data.head, -1, -1)) then
if match("[ảẻỉỏủỷ]", sub(data.head, -1, -1)) then
data.forms["m"] = {s1 .. lts[sub(stem, -1, -1)] .. "ri"}
data.forms["m"] = {s1 .. lts[sub(stem, -1, -1)] .. "ri"}
Line 697: Line 837:
data.forms["m"] = {s1 .. "ri"}
data.forms["m"] = {s1 .. "ri"}
end
end
elseif stem:match("[eiyů]") then
elseif sv:match("[eiyů]$") then
if match("[ảẻỉỏủỷ]", sub(data.head, -1, -1)) then
if match("[ảẻỉỏủỷ]", sub(data.head, -1, -1)) then
data.forms["m"] = {s1 .. lts[sub(stem, -1, -1)] .. "la"}
data.forms["m"] = {s1 .. lts[sub(stem, -1, -1)] .. "la"}
Line 703: Line 843:
data.forms["m"] = {s1 .. "la"}
data.forms["m"] = {s1 .. "la"}
end
end
end
for double, long in pairs(dtl) do
data.forms["m"][1] = gsub(data.forms["m"][1], double, long)
end
end
})
data["animate"] = {
params = {
[2] = {}, -- stressed vowel
["h"] = {type = "boolean"}, -- Human
["t"] = {type = "boolean"}, -- extra T
["av"] = {type = "boolean"}, -- After Vowel
["s"] = {type = "boolean"},
["d"] = {type = "boolean"},
["i"] = {type = "boolean"}, -- -i Subgroup
},
}
setmetatable(data["animate"], {__call = function(self, args, data)
local stem = data.head; local sv = args[2]
local s1, s2, s3 = sub(stem, 1, -2), sub(stem, 1, -3), sub(stem, 1, -4)
--local av = stem:match(v.."..$") and true or false -- After Vowel
local av = args.av
data.forms["u_sg"] = {PAGENAME}
if stem:match("[iỉy]$") and args.i then
data.forms["u_pl"] = {stem .. "gi"}
data.forms["m_sg"] = {s2 .. "tṡa"}
data.forms["m_pl"] = {s2 .. "tṡagi"}
elseif stem:match("m[ao]$") then
data.forms["m_sg"] = {s2 .. (exactly(sv, "[ou]") and "ṡi" or "ka")}
data.forms["u_pl"] = {stem .. "gi"}
data.forms["m_pl"] = {s2 .. (exactly(sv, "[ou]") and "ṡi" or "ka") .. "gi"}
elseif stem:match("mi$") then
data.forms["m_sg"] = {s2 .. (args.t and "t" or "") .. "ta"}
if stem:match(v.."..$") then table.insert(data.forms["m_sg"], s2 .. "tta") end
data.forms["u_pl"] = {stem .. "gi"}
if stem:match(v.."..$") then
table.insert(data.forms["u_pl"], s2 .. "mhi")
table.insert(data.forms["u_pl"], s2 .. "mṡi")
end
data.forms["m_pl"] = {s2 .. (args.t and "t" or "") .. "tagi"}
if stem:match(v.."..$") then table.insert(data.forms["m_pl"], s2 .. "ttagi") end
elseif stem:match("[bpv]a$") then
data.forms["m_sg"] = {s2 .. "u"}
data.forms["m_sg"][1] = gsub(data.forms["m_sg"][1], "uu", "ủ")
data.forms["u_pl"] = {stem .. "gi"}
data.forms["m_pl"] = {s2 .. "ugi"}
data.forms["m_pl"][1] = gsub(data.forms["m_pl"][1], "uu", "ủ")
elseif stem:match("[bpv]i$") then
local repl = gsub(s2, "h$", "k"); repl = gsub(repl, "ḍ$", "hh"); repl = gsub(repl, "lp$", "ll")
      repl = gsub(repl, "p$", "ḥḥ"); repl = gsub(repl, "ṡ$", "ṡṡ")
data.forms["m_sg"] = {repl .. "umi"}
data.forms["u_pl"] = {stem .. "gi"}
if stem:match(v.."[bp].$") then table.insert(data.forms["u_pl"], s2 .. "bṡi") end
data.forms["m_pl"] = {repl .. "umṡi"}
elseif stem:match("[bpv]o$") then
data.forms["u_pl"] = {stem .. "gi"}
data.forms["m_sg"] = {s2 .. "oųi"}
data.forms["m_pl"] = {s2 .. "oṡi"}
elseif stem:match("[tn][ao]$") then
data.forms["u_pl"] = {stem .. "gi"}
if stem:match(nv.."..$") and not stem:match("[tsḍlgġksṡrd]..$") then
data.forms["m_sg"] = {s2 .. "ųa"}
data.forms["m_pl"] = {s2 .. "ųagi"}
else
data.forms["m_sg"] = {s2 .. (args.s and "v" or "") .."va"}
data.forms["m_pl"] = {s2 .. (args.s and "v" or "") .. "vagi"}
end
elseif stem:match("ni$") then
if av then
data.forms["u_pl"] = {s1 .. "ṡi", s1 .. "hi"}
else
data.forms["u_pl"] = {stem .. "gi"}
end
data.forms["m_sg"] = {s2 .. (match(s2, "h$") and "h" or "") .. "įa"}
data.forms["m_pl"] = {s2 .. (match(s2, "h$") and "h" or "") .. "įagi"}
elseif stem:match("t[ao]$") then
if args.s then
data.forms["m_sg"] = {s2 .. "vva"}
data.forms["m_pl"] = {s2 .. "vvagi"}
elseif not s2:match("[tklrḍsṡgġ]$") then
data.forms["m_sg"] = {s2 .. "ųa"}
data.forms["m_pl"] = {s2 .. "ųagi"}
else
data.forms["m_sg"] = {s2 .. "va"}
data.forms["m_pl"] = {s2 .. "vagi"}
end
data.forms["u_sg"] = {stem .. "gi"}
elseif stem:match("t[ei]$") then
data.forms["u_pl"] = {stem .. "gi", s1 .. "si"}
data.forms["m_sg"] = {s2 .. "ika"}
data.forms["m_pl"] = {s2 .. "ikagi"}
elseif stem:match("s[ao]$") then
data.forms["u_pl"] = {stem .. "gi"}
if args.h then
data.forms["m_sg"] = {s2 .. (match(s2, "t$") and "" or "t") .. "ta"}
data.forms["m_pl"] = {s2 .. (match(s2, "t$") and "" or "t") .. "tagi"}
else
data.forms["m_sg"] = {s2 .. "hi", s2 .. "ḥi"}
data.forms["m_pl"] = {s2 .. "higi", s2 .. "ḥigi"}
end
elseif stem:match("si$") then
data.forms["u_pl"] = {stem .. "gi", s2 .. "sġi"}
data.forms["m_sg"] = {s2 .. (av and "tta" or "ta")}
data.forms["m_pl"] = {s2 .. (av and "ttagi" or "tagi")}
elseif stem:match("ṡi$") then
data.forms["u_pl"] = {stem .. "gi"}
data.forms["m_sg"] = {s2 .. (av and "hta" or "ohta")}
data.forms["m_pl"] = {s2 .. (av and "hta" or "ohta") .. "gi"}
elseif stem:match("[lr][ao]$") then
data.forms["u_pl"] = {stem .. "gi"}
data.forms["m_sg"] = {s2 .. "sta"}
data.forms["m_pl"] = {s2 .. "stagi"}
elseif stem:match("[lr]i$") then
data.forms["u_pl"] = {s1 .. (av and "hi" or "igi")}
data.forms["m_sg"] = {s2 .. (stem:match("dli$") and "dįa" or s1:match("r$") and "" or "l") .. "tṡa"}
data.forms["m_pl"] = {s2 .. (stem:match("dli$") and "dįagi" or s1:match("r$") and "" or "l") .. "tṡagi"}
elseif stem:match("lu$") then
data.forms["u_pl"] = {s1 .. (av and "hi" or "ugi")}
data.forms["m_sg"] = {s2 .. "da"}
data.forms["m_pl"] = {s2 .. "dagi"}
elseif stem:match("k[ao]$") then
data.forms["u_pl"] = {stem .. "gi"}
data.forms["m_sg"] = {s2 .. (match(s2, "h$") and "h" or "") ..  "uni"}
data.forms["m_pl"] = {s2 .. (match(s2, "h$") and "h" or "") .. "unhi"}
elseif stem:match("ki$") then
data.forms["u_pl"] = {s1 .. (av and "ṡi" or "igi")}
data.forms["m_sg"] = {s2 .. "tṡa"}
data.forms["m_pl"] = {s2 .. "tṡagi"}
data.forms["m_sg"][1] = gsub(data.forms["m_sg"][1], "kt", "ht")
data.forms["m_pl"][1] = gsub(data.forms["m_pl"][1], "kt", "ht")
elseif stem:match("g[aoi]$") then
data.forms["u_pl"] = {stem .. "gi"}
if args.h then
data.forms["m_sg"] = {s2 .. "tsa"}
data.forms["m_pl"] = {s2 .. "tsagi"}
else
data.forms["m_sg"] = {s2 .. "ubi"}
data.forms["m_pl"] = {s2 .. "ubigi", s2 .. "ubṡi"}
end
elseif stem:match("h[ao]$") then
data.forms["u_pl"] = {stem .. "gi"}
data.forms["m_sg"] = {(args.d and s3 or s2) .. "ra"}
data.forms["m_pl"] = {(args.d and s3 or s2) .. "ragi"}
elseif stem:match("hi$") then
data.forms["u_pl"] = {stem .. "gi"}
data.forms["m_sg"] = {(args.d and s3 or s2) .. "tṡa"}
data.forms["m_pl"] = {(args.d and s3 or s2) .. "tṡagi"}
elseif stem:match("[iỉy]$") then
data.forms["u_pl"] = {stem .. "gi"}
data.forms["m_sg"] = {s1 .. "tṡa"}
data.forms["m_pl"] = {s1 .. "tṡagi"}
end
if match(data.forms["u_pl"][1], "igi$") then
table.insert(data.forms["u_pl"], sub(data.forms["u_pl"][1], 1, -4) .. "ęgi")
end
if match(data.forms["m_pl"][1], "igi$") then
table.insert(data.forms["m_pl"], sub(data.forms["m_pl"][1], 1, -4) .. "ęgi")
end
end
end
end
})
})
data["aḍba"] = function(args, data)
data.forms["u_pl"] = {"aḍba"}
data.forms["m_pl"] = {"aubba"}
end
data["aumulhi"] = function(args, data)
data.forms["u_pl"] = {"aumulhi"}
data.forms["m_pl"] = {"aumutṡagi"}
end
data["bahhi"] = function(args, data)
data.decl_type = "irregular"
table.insert(data.categories, "Siwa irregular nouns")
data.forms["u"] = {"bahhi"}
data.forms["m"] = {"baski"}
end
data["bahpa"] = function(args, data)
data.decl_type = "dual"
table.insert(data.categories, "Siwa dual nouns")
data.forms["u_sg"] = {"bahhįo"}
data.forms["u_pl"] = {"bahpa"}
data.forms["m_sg"] = {"baġa"}
data.forms["m_pl"] = data.forms["m_sg"]
end
data["boġġi"] = function(args, data)
data.decl_type = "irregular"
table.insert(data.categories, "Siwa irregular nouns")
data.forms["u"] = {"boġġi"}
data.forms["m"] = {"boġġo"}
end
data["bủtni"] = function(args, data)
data.decl_type = "irregular"
table.insert(data.categories, "Siwa irregular nouns")
data.forms["u"] = {"bủtni"}
data.forms["m"] = {"bủtnỉd"}
data.forms["ine"] = {"bủtnỉa", "bủtnidia"}
data.forms["ill"] = {"bủtnihta"}
data.forms["ela"] = {"bủtnihka"}
data.forms["ade"] = {"bủtnihma"}
data.forms["all"] = {"bủtniddįibma", "bủtnibma"}
data.forms["abl"] = {"bủtniddįiska", "bủtniska"}
end
data["bỷ"] = function(args, data)
data.decl_type = "irregular"
table.insert(data.categories, "Siwa irregular nouns")
data.forms["u"] = {"bỷ"}
data.forms["m"] = {"bůbů"}
end
data["dapsa"] = function(args, data)
data.decl_type = "irregular"
table.insert(data.categories, "Siwa irregular nouns")
data.forms["u_sg"] = {"dapsa"}
data.forms["u_pl"] = {"dapsagi"}
data.forms["m_sg"] = {"daḍḍa"}
data.forms["m_pl"] = {"daḍḍagi"}
end
data["dirva"] = function(args, data)
data.decl_type = "i"
table.insert(data.categories, "Siwa i-declension nouns")
data.forms["u"] = {"dirva"}
data.forms["m"] = {"dirdi", "dihdi"}
end
data["ebo"] = function(args, data)
data.decl_type = "coalescence"
table.insert(data.categories, "Siwa diphthong-coalescence nouns")
data.forms["u"] = {"ebo"}
data.forms["m"] = {"ivve", "iobi"}
data.forms["ine"] = {"ivveia", "iobia"}
data.forms["ill"] = {"ivveita", "iobita"}
data.forms["ela"] = {"ivveika", "iobika"}
data.forms["ade"] = {"ivveima", "iobima"}
data.forms["all"] = {"ivveibma", "iobibma"}
data.forms["abl"] = {"ivveiska", "iobiska"}
end
data["eu"] = function(args, data)
data.decl_type = "coalescence"
table.insert(data.categories, "Siwa diphthong-coalescence nouns")
data.forms["u"] = {"eu"}
data.forms["m"] = {"eme"}
end
data["ẻgi"] = function(args, data)
data.decl_type = "e"
table.insert(data.categories, "Siwa e-declension nouns")
data.forms["u"] = {"ẻgi"}
data.forms["m"] = {"egįegi"}
end
data["ẻu"] = function(args, data)
data.decl_type = "coalescence"
table.insert(data.categories, "Siwa diphthong-coalescence nouns")
data.forms["u"] = {"ẻu"}
data.forms["m"] = {"ůbů"}
end
data["ẻulbi"] = function(args, data)
data.decl_type = "y"
table.insert(data.categories, "Siwa y-declension nouns")
data.forms["u"] = {"ẻulbi"}
data.forms["m"] = {"ẻulbimo"}
data.forms["ill"] = {"ẻulbimoita"}
data.forms["abl"] = {"ẻulbimoiska"}
data.forms["ade"] = {"ẻulbimoima"}
data.forms["all"] = {"ẻulbimoibma"}
data.forms["ine"] = {"ẻulbimoįa"}
data.forms["ela"] = {"ẻulbimoika"}
end
data["eulhi"] = function(args, data)
data.forms["u_pl"] = {"eulhi"}
data.forms["m_pl"] = {"eultṡagi"}
end
data["gảgi"] = function(args, data)
data.decl_type = "a"
table.insert(data.categories, "Siwa a-declension nouns")
data.forms["u"] = {"gảgi"}
data.forms["m"] = {"gęįagi"}
end
data["gųesi"] = function(args, data)
data.decl_type = "e"
table.insert(data.categories, "Siwa irregular nouns")
table.insert(data.categories, "Siwa e-declension nouns")
data.forms["u"] = {"gųesi"}
data.forms["m"] = {"gųesse"}
loc = "gųessei"
data.forms["ine"] = {loc .. ce[1]}
data.forms["ill"] = {loc .. ce[2]}
data.forms["ela"] = {loc .. ce[3]}
data.forms["ade"] = {loc .. ce[4]}
data.forms["all"] = {loc .. ce[5]}
data.forms["abl"] = {loc .. ce[6]}
end
data["goi"] = function(args, data)
data.decl_type = "coalescence"
table.insert(data.categories, "Siwa diphthong-coalescence nouns")
data.forms["u"] = {"goi"}
data.forms["m"] = {"goįo"}
end
data["ġey"] = function(args, data)
data.decl_type = "coalescence"
table.insert(data.categories, "Siwa diphthong-coalescence nouns")
data.forms["u"] = {"ġey"}
data.forms["m"] = {"ġůbů"}
end
data["hai"] = function(args, data)
data.decl_type = "coalescence"
table.insert(data.categories, "Siwa diphthong-coalescence nouns")
data.forms["u"] = {"hai"}
data.forms["m"] = {"hagįa"}
end
data["hie"] = function(args, data)
data.decl_type = "coalescence"
table.insert(data.categories, "Siwa diphthong-coalescence nouns")
data.forms["u"] = {"hie"}
data.forms["m"] = {"hiddįi"}
end
data["hỏ"] = function(args, data)
data.decl_type = "coalescence"
table.insert(data.categories, "Siwa diphthong-coalescence nouns")
data.forms["u"] = {"hỏ"}
data.forms["m"] = {"hobo"}
end
data["hůpṡi"] = function(args, data)
table.insert(data.categories, "Siwa irregular nouns")
data.forms["u_sg"] = {"hůpṡi"}
data.forms["u_pl"] = {"hůpṡigi", "hůpṡęgi"}
data.forms["m_sg"] = {"hůppohta"}
data.forms["m_pl"] = {"hůppohtagi"}
end
data["įảlhi"] = function(args, data)
data.forms["u_pl"] = {"įảlhi"}
data.forms["m_pl"] = {"įảltṡagi"}
end
data["iḍmi"] = function(args, data)
data.decl_type = "irregular"
table.insert(data.categories, "Siwa irregular nouns")
data.forms["u_sg"] = {"iḍmi"}
data.forms["u_pl"] = {"iḍmigi", "iḍmęgi"}
data.forms["m_sg"] = {"iḍḍa", "iḍḍetta", "iḍḍutta"}
data.forms["m_pl"] = {"iḍḍagi", "iḍḍettagi", "iḍḍutagi"}
end
data["ie"] = function(args, data)
data.decl_type = "coalescence"
table.insert(data.categories, "Siwa diphthong-coalescence nouns")
data.forms["u"] = {"ie"}
data.forms["m"] = {"iddįi"}
end
data["ỉksả"] = function(args, data)
data.decl_type = "coalescence"
table.insert(data.categories, "Siwa diphthong-coalescence nouns")
data.forms["u"] = {"ỉksả"}
data.forms["m"] = {"ỉgsęgįi"}
end
data["ỉṡpa"] = function(args, data)
data.decl_type = "dual"
table.insert(data.categories, "Siwa dual nouns")
data.forms["u_pl"] = {"ỉṡpa"}
data.forms["m_pl"] = {"ỉṡva"}
end
data["ilkima"] = function(args, data)
data.decl_type = "dual"
table.insert(data.categories, "Siwa dual nouns")
data.forms["u_pl"] = {"ilkima"}
data.forms["m_pl"] = {"ilkia"}
end
data["ỉskanhi"] = function(args, data)
data.forms["u_pl"] = {"ỉskanhi"}
data.forms["m_pl"] = {"ỉskaįagi"}
end
data["iu"] = function(args, data)
data.decl_type = "coalescence"
table.insert(data.categories, "Siwa diphthong-coalescence nouns")
data.forms["u"] = {"iu"}
data.forms["m"] = {"ibi"}
end
data["kei"] = function(args, data)
data.decl_type = "coalescence"
table.insert(data.categories, "Siwa diphthong-coalescence nouns")
data.forms["u"] = {"kei"}
data.forms["m"] = {"keįe"}
end
data["keiḍgi"] = function(args, data)
data.forms["u_sg"] = {"keiḍgi"}
data.forms["u_pl"] = {"keiḍḍįa"}
data.forms["m_sg"] = {"keihtṡa"}
data.forms["m_pl"] = {"keihtṡagi"}
end
data["kelba"] = function(args, data)
data.decl_type = "dual"
table.insert(data.categories, "Siwa dual nouns")
data.forms["u_sg"] = {"ketku"}
data.forms["u_pl"] = {"kelba"}
data.forms["m_sg"] = {"ketkume"}
data.forms["m_pl"] = {"keḍma"}
end
data["kembo"] = function(args, data)
table.insert(data.categories, "Siwa irregular nouns")
data.forms["u_sg"] = {"kembo"}
data.forms["u_pl"] = {"kảmbogi"}
data.forms["m_sg"] = {"kảmoųi"}
data.forms["m_pl"] = {"kảmoṡi"}
end
data["kengi"] = function(args, data)
data.decl_type = "irregular"
table.insert(data.categories, "Siwa irregular nouns")
data.forms["u"] = {"kengi"}
data.forms["m"] = {"kenda"}
data.forms["ill"] = {"kendaita"}
data.forms["abl"] = {"kendaiska"}
data.forms["ade"] = {"kendaima"}
data.forms["all"] = {"kendaibma"}
data.forms["ine"] = {"kendaįa"}
data.forms["ela"] = {"kendaika"}
data.forms["u_sg"] = {"kengi"}
data.forms["m_sg"] = {"kegna"}
end
data["kili"] = function(args, data)
data.decl_type = "irregular"
table.insert(data.categories, "Siwa irregular nouns")
data.forms["u"] = {"kili"}
data.forms["m"] = {"kidli"}
end
data["kiḍba"] = function(args, data)
data.decl_type = "dual"
table.insert(data.categories, "Siwa dual nouns")
data.forms["u_sg"] = {"kita"}
data.forms["u_pl"] = {"kiḍba"}
data.forms["m_sg"] = {"kivva"}
data.forms["m_pl"] = {"keubba"}
end
data["koḍba"] = function(args, data)
data.decl_type = "dual"
table.insert(data.categories, "Siwa dual nouns")
data.forms["u_pl"] = {"koḍba"}
data.forms["m_pl"] = {"kỏbba"}
end
data["koḍḍa"] = function(args, data)
data.decl_type = "dual"
table.insert(data.categories, "Siwa dual nouns")
data.forms["u_pl"] = {"koḍḍa"}
data.forms["m_pl"] = {"kỏhha"}
end
data["kůimpa"] = function(args, data)
data.decl_type = "dual"
table.insert(data.categories, "Siwa dual nouns")
data.forms["u_sg"] = {"kůitton"}
data.forms["m_sg"] = {"kůittos"}
data.forms["u_pl"] = {"kůimpa"}
data.forms["m_pl"] = {"kygįua", "kỷbba"}
end
data["kỷ"] = function(args, data)
data.decl_type = "coalescence"
table.insert(data.categories, "Siwa diphthong-coalescence nouns")
data.forms["u"] = {"kỷ"}
data.forms["m"] = {"kyby"}
end
data["kvỷ"] = function(args, data)
data.decl_type = "coalescence"
table.insert(data.categories, "Siwa diphthong-coalescence nouns")
data.forms["u"] = {"kvỷ"}
data.forms["m"] = {"kvyby"}
end
data["leḍba"] = function(args, data)
data.decl_type = "dual"
table.insert(data.categories, "Siwa dual nouns")
data.forms["u_sg"] = {"lahton"}
data.forms["u_pl"] = {"leḍba"}
data.forms["m_sg"] = {"lahtos"}
data.forms["m_pl"] = {"leḍma"}
end
data["lỉsġi"] = function(args, data)
table.insert(data.categories, "Siwa irregular nouns")
data.forms["u_sg"] = {"lỉsġi"}
data.forms["m_sg"] = {"lihhįet"}
end
data["lįỏ"] = function(args, data)
data.decl_type = "irregular"
table.insert(data.categories, "Siwa irregular nouns")
data.forms["u"] = {"lįỏ"}
data.forms["m"] = {"lyra"}
end
data["lỷ"] = function(args, data)
data.decl_type = "coalescence"
table.insert(data.categories, "Siwa diphthong-coalescence nouns")
data.forms["u"] = {"lỷ"}
data.forms["m"] = {"lůbů"}
data.forms["ine"] = {"lỷgįia", "lybia"}
data.forms["ill"] = {"lỷgįita", "lybita"}
data.forms["ela"] = {"lỷgįika", "lybika"}
data.forms["ade"] = {"lỷgįima", "lybima"}
data.forms["all"] = {"lỷgįibma", "lybibma"}
data.forms["abl"] = {"lỷgįiska", "lybiska"}
end
data["madu"] = function(args, data)
data.decl_type = "coalescence"
table.insert(data.categories, "Siwa diphthong-coalescence nouns")
data.forms["u"] = {"madu"}
data.forms["m"] = {"mama"}
end
data["nảrri"] = function(args, data)
data.decl_type = "irregular"
table.insert(data.categories, "Siwa irregular nouns")
data.forms["u_sg"] = {"nảrri"}
data.forms["m_sg"] = {"nęręt"}
end
data["nảvi"] = function(args, data)
data.decl_type = "coalescence"
table.insert(data.categories, "Siwa diphthong-coalescence nouns")
data.forms["u"] = {"nảvi"}
data.forms["m"] = {"nęgįi"}
end
data["nay"] = function(args, data)
data.decl_type = "coalescence"
table.insert(data.categories, "Siwa diphthong-coalescence nouns")
data.forms["u"] = {"nay"}
data.forms["m"] = {"nęma"}
end
data["netsengųesi"] = function(args, data)
data.decl_type = "e"
table.insert(data.categories, "Siwa irregular nouns")
table.insert(data.categories, "Siwa e-declension nouns")
data.forms["u"] = {"netsengųesi"}
data.forms["m"] = {"netsengųesse"}
loc = "netsengųessei"
data.forms["ine"] = {loc .. ce[1]}
data.forms["ill"] = {loc .. ce[2]}
data.forms["ela"] = {loc .. ce[3]}
data.forms["ade"] = {loc .. ce[4]}
data.forms["all"] = {loc .. ce[5]}
data.forms["abl"] = {loc .. ce[6]}
end
data["nįarri"] = function(args, data)
data.decl_type = "irregular"
table.insert(data.categories, "Siwa irregular nouns")
data.forms["u_sg"] = {"nįarri"}
data.forms["m_sg"] = {"nįaret"}
end
data["niebini"] = function(args, data)
table.insert(data.categories, "Siwa irregular nouns")
data.forms["u_sg"] = {"niebini"}
data.forms["u_pl"] = {"niebinhi", "niebinṡi"}
data.forms["m_sg"] = {"nieigįa", "niẻddįa"}
data.forms["m_pl"] = {"nieigįagi", "niẻddįagi"}
end
data["nige"] = function(args, data)
data.decl_type = "coalescence"
table.insert(data.categories, "Siwa diphthong-coalescence nouns")
data.forms["u"] = {"nige"}
data.forms["m"] = {"niddįi"}
end
data["oaḍbi"] = function(args, data)
data.decl_type = "dual"
table.insert(data.categories, "Siwa dual nouns")
data.forms["u_sg"] = {"oadi"}
data.forms["u_pl"] = {"oaḍbi"}
data.forms["m_sg"] = {"vaika"}
data.forms["m_pl"] = {"vaubbi", "vaubba"}
end
data["omna"] = function(args, data)
data.decl_type = "dual"
table.insert(data.categories, "Siwa dual nouns")
data.forms["u_pl"] = {"omna"}
data.forms["m_pl"] = {"ỏbba"}
end
data["ỏ"] = function(args, data)
data.decl_type = "coalescence"
table.insert(data.categories, "Siwa diphthong-coalescence nouns")
data.forms["u"] = {"ỏ"}
data.forms["m"] = {"obo", "ỏbo"}
end
data["pỷka"] = function(args, data)
data.decl_type = "coalescence"
table.insert(data.categories, "Siwa diphthong-coalescence nouns")
data.forms["u"] = {"pỷka"}
data.forms["m"] = {"pyby"}
end
data["retema"] = function(args, data)
data.decl_type = "irregular"
table.insert(data.categories, "Siwa irregular nouns")
data.forms["u_sg"] = {"retema"}
data.forms["u_pl"] = {"revva"}
data.forms["m_sg"] = {"sitema"}
data.forms["m_pl"] = {"sivva"}
end
data["rįaḍba"] = function(args, data)
data.decl_type = "dual"
table.insert(data.categories, "Siwa dual nouns")
data.forms["u_sg"] = {"rįanna"}
data.forms["u_pl"] = {"rįaḍba"}
data.forms["m_sg"] = {"rįanka"}
data.forms["m_pl"] = {"rįaubba"}
end
data["rủ"] = function(args, data)
data.decl_type = "coalescence"
table.insert(data.categories, "Siwa diphthong-coalescence nouns")
data.forms["u"] = {"rủ"}
data.forms["m"] = {"rumu"}
end
data["rỷ"] = function(args, data)
data.decl_type = "coalescence"
table.insert(data.categories, "Siwa diphthong-coalescence nouns")
data.forms["u"] = {"rỷ"}
data.forms["m"] = {"rymy"}
end
data["sảhpa"] = function(args, data)
data.decl_type = "dual"
table.insert(data.categories, "Siwa dual nouns")
data.forms["u_sg"] = {"sảhta"}
data.forms["u_pl"] = {"sảhpa"}
data.forms["m_sg"] = {"sảhhųa"}
data.forms["m_pl"] = {"sảmġa"}
end
data["saḍba"] = function(args, data)
data.decl_type = "dual"
table.insert(data.categories, "Siwa dual nouns")
data.forms["u_sg"] = {"sata"}
data.forms["u_pl"] = {"saḍba"}
data.forms["m_sg"] = {"savva"}
data.forms["m_pl"] = {"saubba"}
end
data["sambo"] = function(args, data)
table.insert(data.categories, "Siwa irregular nouns")
data.forms["u_sg"] = {"sambo"}
data.forms["u_pl"] = {"sảmbogi"}
data.forms["m_sg"] = {"sảmoųi"}
data.forms["m_pl"] = {"sąmoṡi"}
end
data["sẻu"] = function(args, data)
data.decl_type = "coalescence"
table.insert(data.categories, "Siwa diphthong-coalescence nouns")
data.forms["u"] = {"sẻu"}
data.forms["m"] = {"sůbů"}
end
data["tiebba"] = function(args, data)
data.decl_type = "dual"
table.insert(data.categories, "Siwa dual nouns")
data.forms["u_sg"] = {"tiemo"}
data.forms["u_pl"] = {"tiebba"}
data.forms["m_sg"] = {"tieka"}
data.forms["m_pl"] = {"tiehba"}
end
data["tỏ"] = function(args, data)
data.decl_type = "coalescence"
table.insert(data.categories, "Siwa diphthong-coalescence nouns")
data.forms["u"] = {"tỏ"}
data.forms["m"] = {"tobo"}
end
data["totami"] = function(args, data)
data.decl_type = "irregular"
table.insert(data.categories, "Siwa irregular nouns")
data.forms["u_sg"] = {"totami"}
data.forms["u_pl"] = {"totamṡi"}
data.forms["m_sg"] = {"todatta"}
data.forms["m_pl"] = {"todattagi"}
end
data["tṡemi"] = function(args, data)
table.insert(data.categories, "Siwa irregular adjectives")
data.forms["u"] = {"tṡemi"}
data.forms["m"] = {"tṡebi"}
data.forms["ine"] = {"tṡebi" .. ce[1]}
data.forms["ill"] = {"tṡebi" .. ce[2]}
data.forms["ela"] = {"tṡebi" .. ce[3]}
data.forms["ade"] = {"tṡebi" .. ce[4]}
data.forms["all"] = {"tṡebi" .. ce[5]}
data.forms["abl"] = {"tṡebi" .. ce[6]}
end
data["umpa"] = function(args, data)
data.decl_type = "dual"
table.insert(data.categories, "Siwa dual nouns")
data.forms["u_sg"] = {"uba"}
data.forms["u_pl"] = {"umpa"}
data.forms["m_sg"] = {"oama"}
data.forms["m_pl"] = {"ủppa"}
end
data["vả"] = function(args, data)
data.decl_type = "coalescence"
table.insert(data.categories, "Siwa diphthong-coalescence nouns")
data.forms["u"] = {"vả"}
data.forms["m"] = {"vęįa"}
end
data["ỷ"] = function(args, data)
data.decl_type = "coalescence"
table.insert(data.categories, "Siwa diphthong-coalescence nouns")
data.forms["u"] = {"ỷ"}
data.forms["m"] = {"yby"}
end


return data
return data

Latest revision as of 11:19, 30 March 2023



local sub = mw.ustring.sub
local gsub = mw.ustring.gsub
local match = mw.ustring.match
local v = "([aeiouyůõảẻỉỏủỷęo̊])"
local nv = "([^aeiouyůõảẻỉỏủỷę])"
local PAGENAME = mw.title.getCurrentTitle().text
local na = false -- does Not Apocopate

local ine, ill, ela, ade, all, abl, loc
local cases = {"ine", "ill", "ela", "ade", "all", "abl"}
local ce = {"a", "ta", "ka", "ma", "bma", "ska"} -- Case Endings

local m_com = require('Module:siwa-noun/common')

local function exactly(source, pattern)
	return source:match("^" .. pattern .. "$")
end

local function csub(term, foo, bar, n)
	local coalesced = term
	local patterns = {
		{"([aoueů])", "%1gįa"}, {"ue", "ugįa"}, {"ie", "ieįa"},
		{"ay", "ębia"}, {"uo", "ubia"}, {"au", "abia"}, {"o[au]", "obia"},
		{"e[uy]", "ůbia"}, {"iu", "ibia"}, {"ả", "ęgįa"}, {"ỏ", "obia"},
		{"ủ", "ubia"}, {"ẻ", "egįa"}, {"ỉ", "igįa"}, {"ỷ", "ybia"}, {"ẻu", "ůbia"}
	}
	
	for _, pat in ipairs(patterns) do
		for _, case in ipairs(ce) do
			coalesced = gsub(term, pat[1] .. case .. "$", pat[2])
		end
	end
	
	return coalesced
end

local data = {}

data["a"] = {
	params = {
		["nolen"] = {type = "boolean"}, -- No LENition
		["ld"] = {type = "boolean"}, -- Lenition Declension
		["d"] = {type = "boolean"}, -- vowel Deletion
		["d2"] = {type = "boolean"},
		["s"] = {type = "boolean"}, -- Stressed
	},
}
setmetatable(data["a"], {__call = function(self, args, data)
	local stem = args.nolen and data.head or m_com.coalescence(m_com.lenition(data.head), args.s)
	local s1, s2, s3 = sub(stem, 1, -2), sub(stem, 1, -3), sub(stem, 1, -4)
	table.insert(data.categories, "Siwa a-declension " .. data.pos)
	
	data.forms["u"] = {data.alt or PAGENAME}
	
	if args.ld then
		data.forms["m"] = {(args.d2 and s2 or args.d and s1 or stem) .. "ka"}
		loc = (args.d2 and s2 or args.d and s1 or stem) .. "ki"
		na = true
	elseif stem:match(v.."mm.$") then
		data.forms["m"] = {s3 .. (data.q == "s" and "mġa" or data.q == "l" and "mka" or "kka")}
		loc = s3 .. (data.q == "s" and "mṡi" or data.q == "l" and "mki" or "kki")
	elseif stem:match(v.."nn.$") then
		data.forms["m"] = {s3 .. (data.q == "s" and "nka" or "kka")}
		loc = s3 .. (data.q == "s" and "nki" or "kki")
	elseif stem:match(v.."vv.$") then
		data.forms["m"] = {s3 .. "gga"}
		loc = s3 .. "ggi"
	elseif stem:match(v.."[lrs]k.$") then
		data.forms["m"] = {s2 .. "kka"}
		loc = s2 .. "kki"
	elseif stem:match("m.$") then
		data.forms["m"] = {s2 .. (data.q == "s" and "mġa" or data.q == "l" and "mka" or "kka")}
		loc = s2 .. (data.q == "s" and "mṡi" or data.q == "l" and "mki" or "kki")
	elseif stem:match(v.."n.$") then
		data.forms["m"] = {s2 .. (data.q == "s" and "nka" or "kka")}
		loc = s2 .. (data.q == "s" and "nki" or "kki")
	elseif stem:match(v.."[pb].$") then
		data.forms["m"] = {s2 .. (data.q == "s" and "pra" or "ḍga")}
		loc = s2 .. (data.q == "s" and "pri" or "ḍgi")
	elseif stem:match(v.."[td].$") then
		data.forms["m"] = {s2 .. (data.q == "s" and "tra" or "tka")}
		loc = s2 .. (data.q == "s" and "tri" or "tṡi")
	elseif stem:match(v.."r.$") then
		data.forms["m"] = {s2 .. "hka"}
		loc = s2 .. "hki"
	elseif stem:match(v.."ṡṡ.$") then
		data.forms["m"] = {s2 .. "ka"}
		loc = s2 .. "ki"
	else
		data.forms["m"] = {(args.d2 and s2 or args.d and s1 or stem) .. "ka"}
		loc = (args.d2 and s2 or args.d and s1 or stem) .. "ki"
		na = true
	end
	
	data.forms["ine"] = {(ine or loc) .. ce[1]}
	data.forms["ill"] = {(ill or loc) .. ce[2]}
	data.forms["ela"] = {(ela or loc) .. ce[3]}
	data.forms["ade"] = {(ade or loc) .. ce[4]}
	data.forms["all"] = {(all or loc) .. ce[5]}
	data.forms["abl"] = {(abl or loc) .. ce[6]}
	
	for n, case in pairs(cases) do
		if stem:match(v.."nn.$") and data.q == "s" and not na then
			table.insert(data.forms[case], s3 .. "nṡi" .. ce[n])
		elseif stem:match(v.."n.$") and data.q == "s" and not na then
			table.insert(data.forms[case], s2 .. "nṡi" .. ce[n])
		elseif stem:match(v.."[pb].$") and data.q == "s" and not na then
			table.insert(data.forms[case], s2 .. "pṡi" .. ce[n])
		end
	end
end
})

data["e"] = {
	params = {
		["nolen"] = {type = "boolean"},
		["ld"] = {type = "boolean"},
		["d"] = {type = "boolean"},
		["s"] = {type = "boolean"},
	},
}
setmetatable(data["e"], {__call = function(self, args, data)
	local stem = args.nolen and data.head or m_com.coalescence(m_com.lenition(data.head), args.s)
	local s1, s2, s3 = sub(stem, 1, -2), sub(stem, 1, -3), sub(stem, 1, -4)
	table.insert(data.categories, "Siwa e-declension " .. data.pos)
	
	data.forms["u"] = {data.alt or PAGENAME}
	
	if stem:match("[aeẻ]$") then
		if args.ld then
			data.forms["m"] = {(args.d and s1 or stem) .. "ri"}
			loc = (args.d and s1 or stem) .. "ri"
			na = true
		elseif stem:match(v.."ts.$") then
			data.forms["m"] = {s3 .. "tsġi"}
			loc = s3 .. "tsġi"
		elseif stem:match(v.."ss.$") then
			data.forms["m"] = {s3 .. "sġi"}
			loc = s3 .. "sġi"
		elseif stem:match(v.."n.$") then
			data.forms["m"] = {s2 .. "di"}
			ill, ela, ade = s2 .. "h", s2 .. "h", s2 .. "h"
			all, abl = s2 .. "i", s2 .. "i"
			ine = s2 .. "di"
		elseif stem:match(v.."b.$") then
			data.forms["m"] = {s2 .. "pri", s2 .. "bġi"}
			loc = s2 .. "pṡi"
		elseif stem:match(v.."k.$") then
			data.forms["m"] = {s2 .. "ġi"}
			loc = s2 .. "ṡi"
		elseif stem:match(v.."m.$") then
			data.forms["m"] = {s2 .. "mmi"}
			loc = s2 .. "mmi"
		elseif stem:match(v.."v.$") then
			data.forms["m"] = {s2 .. "rri"}
			loc = s2 .. "rri"
		elseif stem:match(v.."t.$") then
			data.forms["m"] = {s2 .. "tri"}
			loc = s2 .. "tri"
		elseif stem:match(v.."s.$") then
			data.forms["m"] = {s2 .. "sġi"}
			loc = s2 .. "sġi"
		elseif stem:match(v.."l.$") then
			data.forms["m"] = {s2 .. "lli"}
			loc = s2 .. "lli"
		elseif stem:match(v.."[hġ].$") then
			data.forms["m"] = {s2 .. "ġgi"}
			loc = s2 .. "ġġi"
		else
			data.forms["m"] = {(args.d and s1 or stem) .. "ri"}
			loc = (args.d and s1 or stem) .. "ri"
			na = true
		end
	elseif stem:match("[io]$") then
		if args.ld then
			if stem:match("o$") then
				data.forms["m"] = {s1 .. "ue", s1 .. "obi"}
				loc = s1 .. "uei"
				na = true
			else
				data.forms["m"] = {s1 .. "ie"}
				loc = s1 .. "iei"
				na = true
			end
		elseif stem:match(v.."mm.$") then
			data.forms["m"] = {s3 .. "mme"}
			loc = s3 .. "mmei"
		elseif stem:match(v.."vv.$") then
			data.forms["m"] = {s3 .. "vve"}
			loc = s3 .. "vvei"
		elseif stem:match(v.."[mpbvnrlkg].$") then
			local stl = sub(stem, -2, -2)
			stl = stl:gsub("p", "b"); stl = stl:gsub("k", "g")
			data.forms["m"] = {s2 .. stl .. stl .. "e"}
			loc = s2 .. stl .. stl .. "ei"
		elseif stem:match("o$") then
			data.forms["m"] = {s1 .. "ue", s1 .. "obi"}
			loc = s1 .. "uei"
			na = true
		else
			data.forms["m"] = {s1 .. "ie"}
			loc = s1 .. "iei"
			na = true
		end
	elseif stem:match("[uyů]$") then
		if args.ld then
			data.forms["m"] = {(args.d and s1 or stem) .. "me"}
			loc = (args.d and s1 or stem) .. "mei"
			na = true
		elseif stem:match(v.."mm.$") then
			data.forms["m"] = {s3 .. "mme"}
			loc = s3 .. "mme"
		elseif stem:match(v.."[mn].$") then
			data.forms["m"] = {s2 .. "mme"}
			loc = s2 .. "mme"
		elseif stem:match(v.."k.$") then
			data.forms["m"] = {s2 .. (data.q == "s" and "gme" or "hme")}
			loc = s2 .. (data.q == "s" and "gme" or "hme")
		else
			data.forms["m"] = {(args.d and s1 or stem) .. "me"}
			loc = (args.d and s1 or stem) .. "mei"
			na = true
		end
	end
	
	data.forms["ine"] = {(ine or loc) .. ce[1]}
	data.forms["ill"] = {(ill or loc) .. ce[2]}
	data.forms["ela"] = {(ela or loc) .. ce[3]}
	data.forms["ade"] = {(ade or loc) .. ce[4]}
	data.forms["all"] = {(all or loc) .. ce[5]}
	data.forms["abl"] = {(abl or loc) .. ce[6]}
	
	for n, case in pairs(cases) do
		if stem:match("o$") and na then
			table.insert(data.forms[case], s1 .. "obi" .. ce[n])
		elseif stem:match("[ae]$") and na then
			table.insert(data.forms[case], stem .. "h" .. ce[n])
		end
	end
end
})

data["i"] = {
	params = {
		["nolen"] = {type = "boolean"},
		["ld"] = {type = "boolean"},
		["s"] = {type = "boolean"},
	},
}
setmetatable(data["i"], {__call = function(self, args, data)
	local stem = args.nolen and data.head or m_com.coalescence(m_com.lenition(data.head), args.s)
	local s1, s2, s3 = sub(stem, 1, -2), sub(stem, 1, -3), sub(stem, 1, -4)
	table.insert(data.categories, "Siwa i-declension " .. data.pos)
	data.forms["ine"], data.forms["all"], data.forms["abl"] = {}, {}, {}
	
	data.forms["u"] = {data.alt or PAGENAME}
	
	if args.ld then
		if stem:match("[iỉ]$") then
			data.forms["m"] = {stem .. "d"}
			ill, ela, ade = stem .. "h", stem .. "h", stem .. "h"
			ine = stem .. "di"
			all, abl = stem, stem
			table.insert(data.forms["ine"], s1 .. "ỉa")
			if sub(stem, -1, -1) == "ỉ" then
				table.insert(data.forms["all"], s1 .. "iddįibma")
				table.insert(data.forms["abl"], s1 .. "iddįiska")
			end
			na = true
		else
			data.forms["m"] = {stem .. "di"}
			ill, ela, ade = stem .. "h", stem .. "h", stem .. "h"
			all, abl = stem .. "i", stem .. "i"
			ine = stem .. "di"
			na = true
		end
	elseif stem:match(v.."hh.$") then
		data.forms["m"] = {s3 .. "hdi"}
		loc = s3 .. "hdi"
	elseif stem:match(v.."[mn][mn].$") then
		data.forms["m"] = {s3 .. "ndi"}
		loc = s3 .. "ndi"
	elseif stem:match(nv.."[uo][mn].$") then
		data.forms["m"] = {s3 .. "õdi"}
		loc = s3 .. "õdi"
	elseif stem:match(v.."[mn].$") then
		data.forms["m"] = {s2 .. "ndi"}
		loc = s2 .. "ndi"
	elseif stem:match(v.."[vg].$") then
		data.forms["m"] = {s2 .. "ḍḍi"}
		if sub(stem, -2, -2) == "g" then table.insert(data.forms["m"], s2 .. "hdi") end
		ela, ade = s2 .. "ḍ", s2 .. "ḍ"
		ine, ill, all, abl = s2 .. "ḍḍi", s2 .. "ḍḍi", s2 .. "ḍḍi", s2 .. "ḍḍi"
	elseif stem:match(v.."s.$") then
		data.forms["m"] = {s2 .. "sti"}
		loc = s2 .. "sti"
	elseif stem:match(v.."ṡ.$") then
		data.forms["m"] = {s2 .. "ṡti"}
		loc = s2 .. "ṡti"
	elseif stem:match(v.."[rhk].$") then
		data.forms["m"] = {s2 .. "hdi"}
		loc = s2 .. "hdi"
	elseif stem:match(v.."l.$") then
		data.forms["m"] = {s2 .. "ldi"}
		loc = s2 .. "ldi"
	elseif stem:match("[iỉ]$") then
		data.forms["m"] = {stem .. "d"}
		ill, ela, ade = stem .. "h", stem .. "h", stem .. "h"
		ine = stem .. "di"
		all, abl = stem, stem
		table.insert(data.forms["ine"], s1 .. "ỉa")
		if sub(stem, -1, -1) == "ỉ" then
				table.insert(data.forms["all"], s1 .. "iddįibma")
				table.insert(data.forms["abl"], s1 .. "iddįiska")
			end
		na = true
	else
		data.forms["m"] = {stem .. "di"}
		ill, ela, ade = stem .. "h", stem .. "h", stem .. "h"
		all, abl = stem .. "i", stem .. "i"
		ine = stem .. "di"
		na = true
	end
	
	table.insert(data.forms["ine"], (ine or loc) .. ce[1])
	data.forms["ill"] = {(ill or loc) .. ce[2]}
	data.forms["ela"] = {(ela or loc) .. (match(stem, "[vg].$") and "ga" or ce[3])}
	data.forms["ade"] = {(ade or loc) .. ce[4]}
	table.insert(data.forms["all"], (all or loc) .. ce[5])
	table.insert(data.forms["abl"], (abl or loc) .. ce[6])
	
	
end
})

data["o"] = {
	params = {
		["nolen"] = {type = "boolean"},
		["ld"] = {type = "boolean"},
		["s"] = {type = "boolean"},
		["d"] = {type = "boolean"},
	},
}
setmetatable(data["o"], {__call = function(self, args, data)
	local stem = args.nolen and data.head or m_com.coalescence(m_com.lenition(data.head), args.s)
	local s1, s2, s3 = sub(stem, 1, -2), sub(stem, 1, -3), sub(stem, 1, -4)
	table.insert(data.categories, "Siwa o-declension " .. data.pos)
	
	data.forms["u"] = {data.alt or PAGENAME}
	
	if stem:match("[ae]$") then
		if args.ld then
			data.forms["m"] = {(args.d and s1 or stem == "kode" and "koi" or stem == "mohe" and "moi" or stem) .. "mo"}
			loc = (args.d and s1 or stem) .. "moi"
			na = true
		elseif stem:match(v.."[mnv][mnv].$") then
			data.forms["m"] = {s3 .. "mmo"}
			loc = s3 .. "mmoi"
		elseif stem:match(v.."hh.$") then
			data.forms["m"] = {s3 .. "hmo"}
			loc = s3 .. "hmoi"
		elseif stem:match(v.."[bt].$") then
			data.forms["m"] = {s2 .. "bmo"}
			loc = s2 .. "bmoi"
		elseif stem:match(v.."[mvn].$") then
			data.forms["m"] = {s2 .. "mmo"}
			loc = s2 .. "mmoi"
		elseif stem:match(v.."[rhg].$") then
			data.forms["m"] = {s2 .. "hmo"}
			loc = s2 .. "hmoi"
		elseif stem:match(v.."k.$") then
			data.forms["m"] = {s2 .. (data.q == "s" and "gmo" or "hmo")}
			loc = s2 .. (data.q == "s" and "gmoi" or "hmoi")
		elseif stem:match(v.."l.$") then
			data.forms["m"] = {s2 .. "lmo"}
			loc = s2 .. "lmoi"
		else
			data.forms["m"] = {(args.d and s1 or stem) .. "mo"}
			loc = (args.d and s1 or stem) .. "moi"
			na = true
		end
	elseif stem:match("[iỷ]$") then
		if args.ld then
			data.forms["m"] = {(args.d and s1 or stem) .. "ko"}
			loc = (args.d and s1 or stem) .. "koi"
			na = true
		elseif stem:match(v.."hhį.$") then
			data.forms["m"] = {sub(stem, 1, -5) .. "ṡko"}
			loc = sub(stem, 1, -5) .. "ṡkoi"
		elseif stem:match(v.."hh.$") then
			data.forms["m"] = {s3 .. "hko"}
			loc = s3 .. "hkoi"
		elseif stem:match(v.."[mnv][mnv].$") then
			data.forms["m"] = {(sub(stem, -4, -4) == "o" and sub(stem, 1, -5) .. "õ" or s3) .. "kko"}
			loc = (sub(stem, -4, -4) == "o" and sub(stem, 1, -5) .. "õ" or s3) .. "kkoi"
		elseif stem:match(v.."[mnkg].$") then
			data.forms["m"] = {(sub(stem, -3, -3) == "o" and not args.s and s3 .. "õ" or s2) .. "kko"}
			loc = (sub(stem, -3, -3) == "o" and not args.s and s3 .. "õ" or s2) .. "kkoi"
		elseif stem:match(v.."[lrs]k.$") or stem:match(v.."sġ.$") then
			data.forms["m"] = {s2 .. "kko"}
			loc = s2 .. "kkoi"
		elseif stem:match(v.."l.$") then
			data.forms["m"] = {s2 .. "lko"}
			loc = s2 .. "lkoi"
		elseif stem:match(v.."[rh].$") then
			data.forms["m"] = {s2 .. "hko"}
			loc = s2 .. "hkoi"
		elseif stem:match(v.."ṡ.$") then
			data.forms["m"] = {s2 .. "ṡko"}
			loc = s2 .. "ṡkoi"
		else
			data.forms["m"] = {(args.d and s1 or stem) .. "ko"}
			loc = (args.d and s1 or stem) .. "koi"
			na = true
		end
	elseif stem:match("[ouyůỏ]$") then
		if args.ld then
			local del = args.d and s1 or stem
			data.forms["m"] = {del .. "ma"}
			ill, ela = del .. "n", del .. "n"
			ine, ade, all, abl = del .. "mi", del .. "mi", del .. "mi", del .. "mi"
			na = true
		elseif s1:match(v.."[bptd]$") then
			data.forms["m"] = {s2 .. "bma"}
			loc = s2 .. "bmi"
		elseif s1:match(v.."[mn][mn]$") then
			data.forms["m"] = {s3 .. "mma"}
			loc = s3 .. "mmi"
		elseif s1:match(v.."[rhgk][rhgk]$") then
			data.forms["m"] = {s3 .. "hma"}
			loc = s3 .. "hmi"
		elseif s1:match(v.."[mnv]$") then
			data.forms["m"] = {s2 .. "mma"}
			loc = s2 .. "mmi"
		elseif s1:match(v.."[rhgk]$") then
			data.forms["m"] = {s2 .. "hma"}
			loc = s2 .. "hmi"
		elseif s1:match(v.."l$") then
			data.forms["m"] = {s2 .. "lma"}
			loc = s2 .. "lmi"
		else
			local del = args.d and s1 or stem
			data.forms["m"] = {del .. "ma"}
			ill, ela = del .. "n", del .. "n"
			ine, ade, all, abl = del .. "mi", del .. "mi", del .. "mi", del .. "mi"
			na = true
		end
	end
	
	data.forms["ine"] = {(ine or loc) .. ce[1]}
	data.forms["ill"] = {(ill or loc) .. ce[2]}
	data.forms["ela"] = {(ela or loc) .. ce[3]}
	data.forms["ade"] = {(ade or loc) .. ce[4]}
	data.forms["all"] = {(all or loc) .. ce[5]}
	data.forms["abl"] = {(abl or loc) .. ce[6]}
	
	for n, case in pairs(cases) do
		if stem:match(v.."[mnkg]i$") and not na then
			table.insert(data.forms[case], (sub(stem, -3, -3) == "o" and s3 .. "õ" or s2) .. "kki" .. ce[n])
		elseif (stem:match(v.."[lrs]ki$") or stem:match(v.."sġi$")) and not na then
			table.insert(data.forms[case], s2 .. "kki" .. ce[n])
		end
	end
end
})

data["u"] = {
	params = {
		["nolen"] = {type = "boolean"},
		["ld"] = {type = "boolean"},
		["s"] = {type = "boolean"},
	},
}
setmetatable(data["u"], {__call = function(self, args, data)
	local stem = args.nolen and data.head or m_com.coalescence(m_com.lenition(data.head), args.s)
	local s1, s2, s3 = sub(stem, 1, -2), sub(stem, 1, -3), sub(stem, 1, -4)
	table.insert(data.categories, "Siwa u-declension " .. data.pos)
	
	data.forms["u"] = {data.alt or PAGENAME}
	
	if stem:match("[aei]$") then
		if args.ld then
			data.forms["m"] = {stem .. "mo"}
			loc = stem .. "moi"
			na = true
		elseif stem:match(v.."[mnv][mnv].$") then
			data.forms["m"] = {s3 .. "mmo"}
			loc = s3 .. "mmoi"
		elseif stem:match(v.."hh.$") then
			data.forms["m"] = {s3 .. "hmo"}
			loc = s3 .. "hmoi"
		elseif stem:match(v.."[btpd].$") then
			data.forms["m"] = {s2 .. "bmo"}
			loc = s2 .. "bmoi"
		elseif stem:match(v.."[mvn].$") then
			data.forms["m"] = {s2 .. "mmo"}
			loc = s2 .. "mmoi"
		elseif stem:match(v.."[rhgk].$") then
			data.forms["m"] = {s2 .. "hmo"}
			loc = s2 .. "hmoi"
		elseif stem:match(v.."l.$") then
			data.forms["m"] = {s2 .. "lmo"}
			loc = s2 .. "lmoi"
		else
			data.forms["m"] = {stem .. "mo"}
			loc = stem .. "moi"
			na = true
		end
	elseif stem:match("[ouyỷů]$") then
		if args.ld then
			data.forms["m"] = {stem .. "ma"}
			ill, ela = stem .. "n", stem .. "n"
			ine, ade, all, abl = stem .. "mi", stem .. "mi", stem .. "mi", stem .. "mi"
			na = true
		elseif stem:match(v.."[mn][mn].$") then
			data.forms["m"] = {s3 .. "mma", s3 .. "mmo"}
			loc = s3 .. "mma"
		elseif stem:match(v.."[mnv].$") then
			data.forms["m"] = {s2 .. "mma", s2 .. "mmo"}
			loc = s2 .. "mmi"
		elseif stem:match(v.."[bptd].$") then
			data.forms["m"] = {s2 .. "bma"}
			loc = s2 .. "bmi"
		elseif stem:match(v.."[rhgk].$") then
			data.forms["m"] = {s2 .. "hma"}
			loc = s2 .. "hmi"
		elseif stem:match(v.."l.$") then
			data.forms["m"] = {s2 .. "lma"}
			loc = s2 .. "lmi"
		else
			data.forms["m"] = {stem .. "ma"}
			ill, ela = stem .. "n", stem .. "n"
			ine, ade, all, abl = stem .. "mi", stem .. "mi", stem .. "mi", stem .. "mi"
			na = true
		end
	end
	
	data.forms["ine"] = {(ine or loc) .. ce[1]}
	data.forms["ill"] = {(ill or loc) .. ce[2]}
	data.forms["ela"] = {(ela or loc) .. ce[3]}
	data.forms["ade"] = {(ade or loc) .. ce[4]}
	data.forms["all"] = {(all or loc) .. ce[5]}
	data.forms["abl"] = {(abl or loc) .. ce[6]}
	
	for n, case in pairs(cases) do
		if stem:match(v.."[mn][mn][oyuů]$") and not na then
			table.insert(data.forms[case], s3 .. "mmoi" .. ce[n])
		elseif (stem:match(v.."[mn][oyuů]$") or stem:match(v.."sġi$")) and not na then
			table.insert(data.forms[case], s2 .. "mmoi" .. ce[n])
		end
	end
end
})

data["y"] = {
	params = {
		["nolen"] = {type = "boolean"},
		["ld"] = {type = "boolean"},
		["s"] = {type = "boolean"},
		["d"] = {type = "boolean"},
	},
}
setmetatable(data["y"], {__call = function(self, args, data)
	local stem = args.nolen and data.head or m_com.coalescence(m_com.lenition(data.head), args.s)
	local s1, s2, s3 = sub(stem, 1, -2), sub(stem, 1, -3), sub(stem, 1, -4)
	table.insert(data.categories, "Siwa y-declension " .. data.pos)
	
	data.forms["ine"] = {}
	data.forms["all"] = {}
	data.forms["abl"] = {}
	
	data.forms["u"] = {data.alt or PAGENAME}
	
	if stem:match("a$") then
		if args.ld then
			data.forms["m"] = {(args.d and s1 or stem) .. "mo"}
			loc = (args.d and s1 or stem) .. "moi"
			na = true
		elseif stem:match(v.."[mn][mn].$") then
			data.forms["m"] = {s3 .. "mmo"}
			loc = s3 .. "mmoi"
		elseif stem:match(v.."[mvn].$") then
			data.forms["m"] = {s2 .. "mmo"}
			loc = s2 .. "mmoi"
		elseif stem:match(v.."[rhgk].$") then
			data.forms["m"] = {s2 .. "hmo"}
			loc = s2 .. "hmoi"
		elseif stem:match(v.."l.$") then
			data.forms["m"] = {s2 .. "lmo"}
			loc = s2 .. "lmoi"
		else
			data.forms["m"] = {(args.d and s1 or stem) .. "mo"}
			loc = (args.d and s1 or stem) .. "moi"
			na = true
		end
	elseif stem:match("[ie]$") then
		if args.ld then
			if stem:match("i$") then
				data.forms["m"] = {stem .. "d"}
				ill, ela, ade = stem .. "h", stem .. "h", stem .. "h"
				ine = stem .. "di"
				all, abl = stem, stem
				table.insert(data.forms["ine"], s1 .. "ỉa")
				table.insert(data.forms["all"], s1 .. "iddįibma")
				table.insert(data.forms["abl"], s1 .. "iddįiska")
				na = true
			else
				data.forms["m"] = {stem .. "di"}
				ill, ela, ade = stem .. "h", stem .. "h", stem .. "h"
				all, abl = stem .. "i", stem .. "i"
				ine = stem .. "di"
				na = true
			end
		elseif stem:match(v.."[mn][mn].$") then
			data.forms["m"] = {s3 .. "ndi"}
			loc = s3 .. "ndi"
		elseif stem:match("[uo][mn].$") then
			data.forms["m"] = {s3 .. "õdi"}
			loc = s3 .. "õdi"
		elseif stem:match(v.."[mn].$") then
			data.forms["m"] = {s2 .. "ndi"}
			loc = s2 .. "ndi"
		elseif stem:match(v.."[vg].$") then
			data.forms["m"] = {s2 .. "ḍḍi"}
			if sub(stem, -2, -2) == "g" then table.insert(data.forms["m"], s2 .. "hdi") end
			ela, ade = s2 .. "ḍ", s2 .. "ḍ"
			ine, ill, all, abl = s2 .. "ḍḍi", s2 .. "ḍḍi", s2 .. "ḍḍi", s2 .. "ḍḍi"
		elseif stem:match(v.."s.$") then
			data.forms["m"] = {s2 .. "sti"}
			loc = s2 .. "sti"
		elseif stem:match(v.."ṡ.$") then
			data.forms["m"] = {s2 .. "ṡti"}
			loc = s2 .. "ṡti"
		elseif stem:match(v.."[rhk].$") then
			data.forms["m"] = {s2 .. "hdi"}
			loc = s2 .. "hdi"
		elseif stem:match(v.."l.$") then
			data.forms["m"] = {s2 .. "ldi"}
			loc = s2 .. "ldi"
		elseif stem:match("i$") then
			data.forms["m"] = {stem .. "d"}
			ill, ela, ade = stem .. "h", stem .. "h", stem .. "h"
			ine = stem .. "di"
			all, abl = stem, stem
			table.insert(data.forms["ine"], s1 .. "ỉa")
			table.insert(data.forms["all"], s1 .. "iddįibma")
			table.insert(data.forms["abl"], s1 .. "iddįiska")
			na = true
		else
			data.forms["m"] = {stem .. "di"}
			ill, ela, ade = stem .. "h", stem .. "h", stem .. "h"
			all, abl = stem .. "i", stem .. "i"
			ine = stem .. "di"
			na = true
		end
	elseif stem:match("[ouyỷů]$") then
		if args.ld then
			data.forms["m"] = {stem .. "ma"}
			ill, ela = stem .. "n", stem .. "n"
			ine, ade, all, abl = stem .. "mi", stem .. "mi", stem .. "mi", stem .. "mi"
		elseif stem:match(v.."[mn][mn].$") then
			data.forms["m"] = {s3 .. "mma"}
			loc = s3 .. "mmi"
		elseif stem:match(v.."[mvn].$") then
			data.forms["m"] = {s2 .. "mma"}
			loc = s2 .. "mmi"
		elseif stem:match(v.."[rhg].$") then
			data.forms["m"] = {s2 .. "hma"}
			loc = s2 .. "hmi"
		elseif stem:match(v.."l.$") then
			data.forms["m"] = {s2 .. "lma"}
			loc = s2 .. "lmi"
		else
			data.forms["m"] = {(args.d and s1 or stem) .. "ma"}
			ill, ela = (args.d and s1 or stem) .. "n", (args.d and s1 or stem) .. "n"
			ine, ade, all, abl = (args.d and s1 or stem) .. "mi", (args.d and s1 or stem) .. "mi", (args.d and s1 or stem) .. "mi", (args.d and s1 or stem) .. "mi"
		end
	end
	
	table.insert(data.forms["ine"], (ine or loc) .. ce[1])
	data.forms["ill"] = {(ill or loc) .. ce[2]}
	data.forms["ela"] = {(ela or loc) .. (match(stem, "[vg].$") and "ga" or ce[3])}
	data.forms["ade"] = {(ade or loc) .. ce[4]}
	table.insert(data.forms["all"], (all or loc) .. ce[5])
	table.insert(data.forms["abl"], (abl or loc) .. ce[6])
	
end
})

data["s"] = {
	params = {
		["nolen"] = {type = "boolean"},
		["d"] = {type = "boolean"},
		["d2"] = {type = "boolean"},
		["s"] = {type = "boolean"},
	},
}
setmetatable(data["s"], {__call = function(self, args, data)
	local stem = args.nolen and data.head or m_com.coalescence(m_com.lenition(data.head), args.s)
	local s1, s2, s3 = sub(stem, 1, -2), sub(stem, 1, -3), sub(stem, 1, -4)
	table.insert(data.categories, "Siwa s-declension " .. data.pos)
	
	local s = args.s and "hh" or "h"
	
	data.forms["u"] = {data.alt or PAGENAME}
	
	if stem:match(v.."d.s$") then
		data.forms["m"] = {s3 .. "lhi"}
		ill, ela, ade = s3 .. "lh", s3 .. "lh", s3 .. "lh"
		ine, all, abl = s3 .. "lhi", s3 .. "lhi", s3 .. "lhi"
	elseif stem:match(v.."k.s$") then
		data.forms["m"] = {s1 .. "hi", s3 .. "hki"}
		ill, ela, ade = s1 .. "h", s1 .. "h", s1 .. "h"
		ine, all, abl = s1 .. "hi", s1 .. "hi", s1 .. "hi"
	else
		data.forms["m"] = {(args.d2 and s3 or args.d and s2 or s1) .. s .. "i"}
		ill, ela, ade = (args.d2 and s3 or args.d and s2 or s1) .. "h", (args.d2 and s3 or args.d and s2 or s1) .. "h", (args.d2 and s3 or args.d and s2 or s1) .. "h"
		ine, all, abl = (args.d2 and s3 or args.d and s2 or s1) .. s .. "i", (args.d2 and s3 or args.d and s2 or s1) .. s .. "i", (args.d2 and s3 or args.d and s2 or s1) .. s .. "i"
	end
	
	data.forms["ine"] = {(ine or loc) .. ce[1]}
	data.forms["ill"] = {(ill or loc) .. ce[2]}
	data.forms["ela"] = {(ela or loc) .. ce[3]}
	data.forms["ade"] = {(ade or loc) .. ce[4]}
	data.forms["all"] = {(all or loc) .. ce[5]}
	data.forms["abl"] = {(abl or loc) .. ce[6]}
end
})

data["n"] = {
	params = {
		[2] = {},
		["nolen"] = {type = "boolean"},
		["s"] = {type = "boolean"},
		["d"] = {type = "boolean"},
	},
}
setmetatable(data["n"], {__call = function(self, args, data)
	local stem = args.nolen and data.head or m_com.coalescence(m_com.lenition(data.head), args.s)
	local s1, s2, s3 = sub(stem, 1, -2), sub(stem, 1, -3), sub(stem, 1, -4)
	local sv = args[2]
	table.insert(data.categories, "Siwa n-declension " .. data.pos)
	
	data.forms["u"] = {data.alt or PAGENAME}
	
	if sv:match("[aou]$") then
		data.forms["m"] = {stem .. "ta"}
		loc = match(stem, "on$") and s2 .. "õri" or s1 .. "ri"
	elseif sv:match("[eiyůỉę]$") then
		data.forms["m"] = {s1 .. "s"}
		loc = s1 .. "s" .. (args.d and "" or "i")
	end
	
	data.forms["ine"] = {(ine or loc) .. ce[1]}
	data.forms["ill"] = {(ill or loc) .. ce[2]}
	data.forms["ela"] = {(ela or loc) .. ce[3]}
	data.forms["ade"] = {(ade or loc) .. ce[4]}
	data.forms["all"] = {(all or loc) .. ce[5]}
	data.forms["abl"] = {(abl or loc) .. ce[6]}
end
})

data["t"] = {
	params = {
		[2] = {},
		["nolen"] = {type = "boolean"},
		["ut"] = {type = "boolean"},
		["s"] = {type = "boolean"},
	},
}
setmetatable(data["t"], {__call = function(self, args, data)
	local stem = args.nolen and data.head or m_com.coalescence(m_com.lenition(data.head), args.s)
	local s1, s2, s3 = sub(stem, 1, -2), sub(stem, 1, -3), sub(stem, 1, -4)
	local sv = args[2]
	table.insert(data.categories, "Siwa t-declension " .. data.pos)
	
	data.forms["u"] = {data.alt or PAGENAME}
	
	if args.ut then
		data.forms["m"] = {s2 .. "lda", s1 .. "tta"}
		loc = s1 .. "ttai"
	elseif sv:match("[aou]$") then
		data.forms["m"] = {stem .. "ta"}
		loc = stem .. "tai"
	elseif sv:match("[eiyů]$") then
		data.forms["m"] = {s1 .. "tsta", s1 .. "ddįa", s1 .. "tsitta"}
		loc = s1 .. "tsti"
	end
	
	data.forms["ine"] = {(ine or loc) .. ce[1]}
	data.forms["ill"] = {(ill or loc) .. ce[2]}
	data.forms["ela"] = {(ela or loc) .. ce[3]}
	data.forms["ade"] = {(ade or loc) .. ce[4]}
	data.forms["all"] = {(all or loc) .. ce[5]}
	data.forms["abl"] = {(abl or loc) .. ce[6]}
	
	for n, case in pairs(cases) do
		if sv:match("[eiyů]$") then
			table.insert(data.forms[case], s1 .. "ddįi" .. ce[n])
			table.insert(data.forms[case], s1 .. "tsitti" .. ce[n])
		end
	end
		
end
})

data["l"] = {
	params = {
		[2] = {},
		["nolen"] = {type = "boolean"},
		["str"] = {type = "boolean"},
		["s"] = {type = "boolean"},
	},
}
setmetatable(data["l"], {__call = function(self, args, data)
	local stem = args.nolen and data.head or m_com.coalescence(m_com.lenition(data.head), args.s)
	local s1, s2, s3 = sub(stem, 1, -2), sub(stem, 1, -3), sub(stem, 1, -4)
	table.insert(data.categories, "Siwa l-declension " .. data.pos)
	local sv = args[2]
	
	local lts = {
		["ả"] = "a", ["ẻ"] = "e", ["ỉ"] = "i",
		["ỏ"] = "o", ["ủ"] = "u", ["ỷ"] = "y",
	}
	
	local dtl = {
		["aa"] = "ả", ["ee"] = "ẻ", ["ii"] = "ỉ",
		["oo"] = "ỏ", ["uu"] = "ủ", ["yy"] = "ỷ",
	}
	
	data.forms["u"] = {data.alt or PAGENAME}
	
	if sv:match("[aou]$") then
		if match("[ảẻỉỏủỷ]", sub(data.head, -1, -1)) then
			data.forms["m"] = {s1 .. lts[sub(stem, -1, -1)] .. "ri"}
		else
			data.forms["m"] = {s1 .. "ri"}
		end
	elseif sv:match("[eiyů]$") then
		if match("[ảẻỉỏủỷ]", sub(data.head, -1, -1)) then
			data.forms["m"] = {s1 .. lts[sub(stem, -1, -1)] .. "la"}
		else
			data.forms["m"] = {s1 .. "la"}
		end
	end
	
	for double, long in pairs(dtl) do
		data.forms["m"][1] = gsub(data.forms["m"][1], double, long)
	end
end
})

data["animate"] = {
	params = {
		[2] = {}, -- stressed vowel
		["h"] = {type = "boolean"}, -- Human
		["t"] = {type = "boolean"}, -- extra T
		["av"] = {type = "boolean"}, -- After Vowel
		["s"] = {type = "boolean"},
		["d"] = {type = "boolean"},
		["i"] = {type = "boolean"}, -- -i Subgroup
	},
}
setmetatable(data["animate"], {__call = function(self, args, data)
	local stem = data.head; local sv = args[2]
	local s1, s2, s3 = sub(stem, 1, -2), sub(stem, 1, -3), sub(stem, 1, -4)
	
	--local av = stem:match(v.."..$") and true or false -- After Vowel
	local av = args.av
	
	data.forms["u_sg"] = {PAGENAME}
	
	if stem:match("[iỉy]$") and args.i then
		data.forms["u_pl"] = {stem .. "gi"}
		data.forms["m_sg"] = {s2 .. "tṡa"}
		data.forms["m_pl"] = {s2 .. "tṡagi"}
	elseif stem:match("m[ao]$") then
		data.forms["m_sg"] = {s2 .. (exactly(sv, "[ou]") and "ṡi" or "ka")}
		data.forms["u_pl"] = {stem .. "gi"}
		data.forms["m_pl"] = {s2 .. (exactly(sv, "[ou]") and "ṡi" or "ka") .. "gi"}
	elseif stem:match("mi$") then
		data.forms["m_sg"] = {s2 .. (args.t and "t" or "") .. "ta"}
		if stem:match(v.."..$") then table.insert(data.forms["m_sg"], s2 .. "tta") end
		data.forms["u_pl"] = {stem .. "gi"}
		if stem:match(v.."..$") then
			table.insert(data.forms["u_pl"], s2 .. "mhi")
			table.insert(data.forms["u_pl"], s2 .. "mṡi")
		end
		data.forms["m_pl"] = {s2 .. (args.t and "t" or "") .. "tagi"}
		if stem:match(v.."..$") then table.insert(data.forms["m_pl"], s2 .. "ttagi") end
	elseif stem:match("[bpv]a$") then
		data.forms["m_sg"] = {s2 .. "u"}
		data.forms["m_sg"][1] = gsub(data.forms["m_sg"][1], "uu", "ủ")
		data.forms["u_pl"] = {stem .. "gi"}
		data.forms["m_pl"] = {s2 .. "ugi"}
		data.forms["m_pl"][1] = gsub(data.forms["m_pl"][1], "uu", "ủ")
	elseif stem:match("[bpv]i$") then
		local repl = gsub(s2, "h$", "k"); repl = gsub(repl, "ḍ$", "hh"); repl = gsub(repl, "lp$", "ll")
		      repl = gsub(repl, "p$", "ḥḥ"); repl = gsub(repl, "ṡ$", "ṡṡ")
		data.forms["m_sg"] = {repl .. "umi"}
		data.forms["u_pl"] = {stem .. "gi"}
		if stem:match(v.."[bp].$") then table.insert(data.forms["u_pl"], s2 .. "bṡi") end
		data.forms["m_pl"] = {repl .. "umṡi"}
	elseif stem:match("[bpv]o$") then
		data.forms["u_pl"] = {stem .. "gi"}
		data.forms["m_sg"] = {s2 .. "oųi"}
		data.forms["m_pl"] = {s2 .. "oṡi"}
	elseif stem:match("[tn][ao]$") then
		data.forms["u_pl"] = {stem .. "gi"}
		if stem:match(nv.."..$") and not stem:match("[tsḍlgġksṡrd]..$") then
			data.forms["m_sg"] = {s2 .. "ųa"}
			data.forms["m_pl"] = {s2 .. "ųagi"}
		else
			data.forms["m_sg"] = {s2 .. (args.s and "v" or "") .."va"}
			data.forms["m_pl"] = {s2 .. (args.s and "v" or "") .. "vagi"}
		end
	elseif stem:match("ni$") then
		if av then
			data.forms["u_pl"] = {s1 .. "ṡi", s1 .. "hi"}
		else
			data.forms["u_pl"] = {stem .. "gi"}
		end
		
		data.forms["m_sg"] = {s2 .. (match(s2, "h$") and "h" or "") .. "įa"}
		data.forms["m_pl"] = {s2 .. (match(s2, "h$") and "h" or "") .. "įagi"}
	elseif stem:match("t[ao]$") then
		if args.s then
			data.forms["m_sg"] = {s2 .. "vva"}
			data.forms["m_pl"] = {s2 .. "vvagi"}
		elseif not s2:match("[tklrḍsṡgġ]$") then
			data.forms["m_sg"] = {s2 .. "ųa"}
			data.forms["m_pl"] = {s2 .. "ųagi"}
		else
			data.forms["m_sg"] = {s2 .. "va"}
			data.forms["m_pl"] = {s2 .. "vagi"}
		end
		
		data.forms["u_sg"] = {stem .. "gi"}
	elseif stem:match("t[ei]$") then
		data.forms["u_pl"] = {stem .. "gi", s1 .. "si"}
		data.forms["m_sg"] = {s2 .. "ika"}
		data.forms["m_pl"] = {s2 .. "ikagi"}
	elseif stem:match("s[ao]$") then
		data.forms["u_pl"] = {stem .. "gi"}
		
		if args.h then
			data.forms["m_sg"] = {s2 .. (match(s2, "t$") and "" or "t") .. "ta"}
			data.forms["m_pl"] = {s2 .. (match(s2, "t$") and "" or "t") .. "tagi"}
		else
			data.forms["m_sg"] = {s2 .. "hi", s2 .. "ḥi"}
			data.forms["m_pl"] = {s2 .. "higi", s2 .. "ḥigi"}
		end
	elseif stem:match("si$") then
		data.forms["u_pl"] = {stem .. "gi", s2 .. "sġi"}
		data.forms["m_sg"] = {s2 .. (av and "tta" or "ta")}
		data.forms["m_pl"] = {s2 .. (av and "ttagi" or "tagi")}
	elseif stem:match("ṡi$") then
		data.forms["u_pl"] = {stem .. "gi"}
		data.forms["m_sg"] = {s2 .. (av and "hta" or "ohta")}
		data.forms["m_pl"] = {s2 .. (av and "hta" or "ohta") .. "gi"}
	elseif stem:match("[lr][ao]$") then
		data.forms["u_pl"] = {stem .. "gi"}
		data.forms["m_sg"] = {s2 .. "sta"}
		data.forms["m_pl"] = {s2 .. "stagi"}
	elseif stem:match("[lr]i$") then
		data.forms["u_pl"] = {s1 .. (av and "hi" or "igi")}
		data.forms["m_sg"] = {s2 .. (stem:match("dli$") and "dįa" or s1:match("r$") and "" or "l") .. "tṡa"}
		data.forms["m_pl"] = {s2 .. (stem:match("dli$") and "dįagi" or s1:match("r$") and "" or "l") .. "tṡagi"}
	elseif stem:match("lu$") then
		data.forms["u_pl"] = {s1 .. (av and "hi" or "ugi")}
		data.forms["m_sg"] = {s2 .. "da"}
		data.forms["m_pl"] = {s2 .. "dagi"}
	elseif stem:match("k[ao]$") then
		data.forms["u_pl"] = {stem .. "gi"}
		data.forms["m_sg"] = {s2 .. (match(s2, "h$") and "h" or "") ..  "uni"}
		data.forms["m_pl"] = {s2 .. (match(s2, "h$") and "h" or "") .. "unhi"}
	elseif stem:match("ki$") then
		data.forms["u_pl"] = {s1 .. (av and "ṡi" or "igi")}
		data.forms["m_sg"] = {s2 .. "tṡa"}
		data.forms["m_pl"] = {s2 .. "tṡagi"}
		data.forms["m_sg"][1] = gsub(data.forms["m_sg"][1], "kt", "ht")
		data.forms["m_pl"][1] = gsub(data.forms["m_pl"][1], "kt", "ht")
	elseif stem:match("g[aoi]$") then
		data.forms["u_pl"] = {stem .. "gi"}
		
		if args.h then
			data.forms["m_sg"] = {s2 .. "tsa"}
			data.forms["m_pl"] = {s2 .. "tsagi"}
		else
			data.forms["m_sg"] = {s2 .. "ubi"}
			data.forms["m_pl"] = {s2 .. "ubigi", s2 .. "ubṡi"}
		end
	elseif stem:match("h[ao]$") then
		data.forms["u_pl"] = {stem .. "gi"}
		data.forms["m_sg"] = {(args.d and s3 or s2) .. "ra"}
		data.forms["m_pl"] = {(args.d and s3 or s2) .. "ragi"}
	elseif stem:match("hi$") then
		data.forms["u_pl"] = {stem .. "gi"}
		data.forms["m_sg"] = {(args.d and s3 or s2) .. "tṡa"}
		data.forms["m_pl"] = {(args.d and s3 or s2) .. "tṡagi"}
	elseif stem:match("[iỉy]$") then
		data.forms["u_pl"] = {stem .. "gi"}
		data.forms["m_sg"] = {s1 .. "tṡa"}
		data.forms["m_pl"] = {s1 .. "tṡagi"}
	end
	
	if match(data.forms["u_pl"][1], "igi$") then
		table.insert(data.forms["u_pl"], sub(data.forms["u_pl"][1], 1, -4) .. "ęgi")
	end
	
	if match(data.forms["m_pl"][1], "igi$") then
		table.insert(data.forms["m_pl"], sub(data.forms["m_pl"][1], 1, -4) .. "ęgi")
	end
	
end
})

data["aḍba"] = function(args, data)
	data.forms["u_pl"] = {"aḍba"}
	data.forms["m_pl"] = {"aubba"}
end

data["aumulhi"] = function(args, data)
	data.forms["u_pl"] = {"aumulhi"}
	data.forms["m_pl"] = {"aumutṡagi"}
end

data["bahhi"] = function(args, data)
	data.decl_type = "irregular"
	table.insert(data.categories, "Siwa irregular nouns")
	data.forms["u"] = {"bahhi"}
	data.forms["m"] = {"baski"}
end

data["bahpa"] = function(args, data)
	data.decl_type = "dual"
	table.insert(data.categories, "Siwa dual nouns")
	data.forms["u_sg"] = {"bahhįo"}
	data.forms["u_pl"] = {"bahpa"}
	data.forms["m_sg"] = {"baġa"}
	data.forms["m_pl"] = data.forms["m_sg"]
end

data["boġġi"] = function(args, data)
	data.decl_type = "irregular"
	table.insert(data.categories, "Siwa irregular nouns")
	data.forms["u"] = {"boġġi"}
	data.forms["m"] = {"boġġo"}
end

data["bủtni"] = function(args, data)
	data.decl_type = "irregular"
	table.insert(data.categories, "Siwa irregular nouns")
	data.forms["u"] = {"bủtni"}
	data.forms["m"] = {"bủtnỉd"}
	data.forms["ine"] = {"bủtnỉa", "bủtnidia"}
	data.forms["ill"] = {"bủtnihta"}
	data.forms["ela"] = {"bủtnihka"}
	data.forms["ade"] = {"bủtnihma"}
	data.forms["all"] = {"bủtniddįibma", "bủtnibma"}
	data.forms["abl"] = {"bủtniddįiska", "bủtniska"}
end

data["bỷ"] = function(args, data)
	data.decl_type = "irregular"
	table.insert(data.categories, "Siwa irregular nouns")
	data.forms["u"] = {"bỷ"}
	data.forms["m"] = {"bůbů"}
end

data["dapsa"] = function(args, data)
	data.decl_type = "irregular"
	table.insert(data.categories, "Siwa irregular nouns")
	data.forms["u_sg"] = {"dapsa"}
	data.forms["u_pl"] = {"dapsagi"}
	data.forms["m_sg"] = {"daḍḍa"}
	data.forms["m_pl"] = {"daḍḍagi"}
end

data["dirva"] = function(args, data)
	data.decl_type = "i"
	table.insert(data.categories, "Siwa i-declension nouns")
	data.forms["u"] = {"dirva"}
	data.forms["m"] = {"dirdi", "dihdi"}
end

data["ebo"] = function(args, data)
	data.decl_type = "coalescence"
	table.insert(data.categories, "Siwa diphthong-coalescence nouns")
	data.forms["u"] = {"ebo"}
	data.forms["m"] = {"ivve", "iobi"}
	data.forms["ine"] = {"ivveia", "iobia"}
	data.forms["ill"] = {"ivveita", "iobita"}
	data.forms["ela"] = {"ivveika", "iobika"}
	data.forms["ade"] = {"ivveima", "iobima"}
	data.forms["all"] = {"ivveibma", "iobibma"}
	data.forms["abl"] = {"ivveiska", "iobiska"}
end

data["eu"] = function(args, data)
	data.decl_type = "coalescence"
	table.insert(data.categories, "Siwa diphthong-coalescence nouns")
	data.forms["u"] = {"eu"}
	data.forms["m"] = {"eme"}
end

data["ẻgi"] = function(args, data)
	data.decl_type = "e"
	table.insert(data.categories, "Siwa e-declension nouns")
	data.forms["u"] = {"ẻgi"}
	data.forms["m"] = {"egįegi"}
end

data["ẻu"] = function(args, data)
	data.decl_type = "coalescence"
	table.insert(data.categories, "Siwa diphthong-coalescence nouns")
	data.forms["u"] = {"ẻu"}
	data.forms["m"] = {"ůbů"}
end

data["ẻulbi"] = function(args, data)
	data.decl_type = "y"
	table.insert(data.categories, "Siwa y-declension nouns")
	data.forms["u"] = {"ẻulbi"}
	data.forms["m"] = {"ẻulbimo"}
	data.forms["ill"] = {"ẻulbimoita"}
	data.forms["abl"] = {"ẻulbimoiska"}
	data.forms["ade"] = {"ẻulbimoima"}
	data.forms["all"] = {"ẻulbimoibma"}
	data.forms["ine"] = {"ẻulbimoįa"}
	data.forms["ela"] = {"ẻulbimoika"}
end

data["eulhi"] = function(args, data)
	data.forms["u_pl"] = {"eulhi"}
	data.forms["m_pl"] = {"eultṡagi"}
end

data["gảgi"] = function(args, data)
	data.decl_type = "a"
	table.insert(data.categories, "Siwa a-declension nouns")
	data.forms["u"] = {"gảgi"}
	data.forms["m"] = {"gęįagi"}
end

data["gųesi"] = function(args, data)
	data.decl_type = "e"
	table.insert(data.categories, "Siwa irregular nouns")
	table.insert(data.categories, "Siwa e-declension nouns")
	data.forms["u"] = {"gųesi"}
	data.forms["m"] = {"gųesse"}
	loc = "gųessei"
	data.forms["ine"] = {loc .. ce[1]}
	data.forms["ill"] = {loc .. ce[2]}
	data.forms["ela"] = {loc .. ce[3]}
	data.forms["ade"] = {loc .. ce[4]}
	data.forms["all"] = {loc .. ce[5]}
	data.forms["abl"] = {loc .. ce[6]}
end

data["goi"] = function(args, data)
	data.decl_type = "coalescence"
	table.insert(data.categories, "Siwa diphthong-coalescence nouns")
	data.forms["u"] = {"goi"}
	data.forms["m"] = {"goįo"}
end

data["ġey"] = function(args, data)
	data.decl_type = "coalescence"
	table.insert(data.categories, "Siwa diphthong-coalescence nouns")
	data.forms["u"] = {"ġey"}
	data.forms["m"] = {"ġůbů"}
end

data["hai"] = function(args, data)
	data.decl_type = "coalescence"
	table.insert(data.categories, "Siwa diphthong-coalescence nouns")
	data.forms["u"] = {"hai"}
	data.forms["m"] = {"hagįa"}
end

data["hie"] = function(args, data)
	data.decl_type = "coalescence"
	table.insert(data.categories, "Siwa diphthong-coalescence nouns")
	data.forms["u"] = {"hie"}
	data.forms["m"] = {"hiddįi"}
end

data["hỏ"] = function(args, data)
	data.decl_type = "coalescence"
	table.insert(data.categories, "Siwa diphthong-coalescence nouns")
	data.forms["u"] = {"hỏ"}
	data.forms["m"] = {"hobo"}
end

data["hůpṡi"] = function(args, data)
	table.insert(data.categories, "Siwa irregular nouns")
	data.forms["u_sg"] = {"hůpṡi"}
	data.forms["u_pl"] = {"hůpṡigi", "hůpṡęgi"}
	data.forms["m_sg"] = {"hůppohta"}
	data.forms["m_pl"] = {"hůppohtagi"}
end

data["įảlhi"] = function(args, data)
	data.forms["u_pl"] = {"įảlhi"}
	data.forms["m_pl"] = {"įảltṡagi"}
end

data["iḍmi"] = function(args, data)
	data.decl_type = "irregular"
	table.insert(data.categories, "Siwa irregular nouns")
	data.forms["u_sg"] = {"iḍmi"}
	data.forms["u_pl"] = {"iḍmigi", "iḍmęgi"}
	data.forms["m_sg"] = {"iḍḍa", "iḍḍetta", "iḍḍutta"}
	data.forms["m_pl"] = {"iḍḍagi", "iḍḍettagi", "iḍḍutagi"} 
end

data["ie"] = function(args, data)
	data.decl_type = "coalescence"
	table.insert(data.categories, "Siwa diphthong-coalescence nouns")
	data.forms["u"] = {"ie"}
	data.forms["m"] = {"iddįi"}
end

data["ỉksả"] = function(args, data)
	data.decl_type = "coalescence"
	table.insert(data.categories, "Siwa diphthong-coalescence nouns")
	data.forms["u"] = {"ỉksả"}
	data.forms["m"] = {"ỉgsęgįi"}
end

data["ỉṡpa"] = function(args, data)
	data.decl_type = "dual"
	table.insert(data.categories, "Siwa dual nouns")
	data.forms["u_pl"] = {"ỉṡpa"}
	data.forms["m_pl"] = {"ỉṡva"}
end

data["ilkima"] = function(args, data)
	data.decl_type = "dual"
	table.insert(data.categories, "Siwa dual nouns")
	data.forms["u_pl"] = {"ilkima"}
	data.forms["m_pl"] = {"ilkia"}
end

data["ỉskanhi"] = function(args, data)
	data.forms["u_pl"] = {"ỉskanhi"}
	data.forms["m_pl"] = {"ỉskaįagi"}
end

data["iu"] = function(args, data)
	data.decl_type = "coalescence"
	table.insert(data.categories, "Siwa diphthong-coalescence nouns")
	data.forms["u"] = {"iu"}
	data.forms["m"] = {"ibi"}
end

data["kei"] = function(args, data)
	data.decl_type = "coalescence"
	table.insert(data.categories, "Siwa diphthong-coalescence nouns")
	data.forms["u"] = {"kei"}
	data.forms["m"] = {"keįe"}
end

data["keiḍgi"] = function(args, data)
	data.forms["u_sg"] = {"keiḍgi"}
	data.forms["u_pl"] = {"keiḍḍįa"}
	data.forms["m_sg"] = {"keihtṡa"}
	data.forms["m_pl"] = {"keihtṡagi"}
end

data["kelba"] = function(args, data)
	data.decl_type = "dual"
	table.insert(data.categories, "Siwa dual nouns")
	data.forms["u_sg"] = {"ketku"}
	data.forms["u_pl"] = {"kelba"}
	data.forms["m_sg"] = {"ketkume"}
	data.forms["m_pl"] = {"keḍma"}
end

data["kembo"] = function(args, data)
	table.insert(data.categories, "Siwa irregular nouns")
	data.forms["u_sg"] = {"kembo"}
	data.forms["u_pl"] = {"kảmbogi"}
	data.forms["m_sg"] = {"kảmoųi"}
	data.forms["m_pl"] = {"kảmoṡi"}
end

data["kengi"] = function(args, data)
	data.decl_type = "irregular"
	table.insert(data.categories, "Siwa irregular nouns")
	data.forms["u"] = {"kengi"}
	data.forms["m"] = {"kenda"}
	data.forms["ill"] = {"kendaita"}
	data.forms["abl"] = {"kendaiska"}
	data.forms["ade"] = {"kendaima"}
	data.forms["all"] = {"kendaibma"}
	data.forms["ine"] = {"kendaįa"}
	data.forms["ela"] = {"kendaika"}
	
	data.forms["u_sg"] = {"kengi"}
	data.forms["m_sg"] = {"kegna"}
end

data["kili"] = function(args, data)
	data.decl_type = "irregular"
	table.insert(data.categories, "Siwa irregular nouns")
	data.forms["u"] = {"kili"}
	data.forms["m"] = {"kidli"}
end

data["kiḍba"] = function(args, data)
	data.decl_type = "dual"
	table.insert(data.categories, "Siwa dual nouns")
	data.forms["u_sg"] = {"kita"}
	data.forms["u_pl"] = {"kiḍba"}
	data.forms["m_sg"] = {"kivva"}
	data.forms["m_pl"] = {"keubba"}
end

data["koḍba"] = function(args, data)
	data.decl_type = "dual"
	table.insert(data.categories, "Siwa dual nouns")
	data.forms["u_pl"] = {"koḍba"}
	data.forms["m_pl"] = {"kỏbba"}
end

data["koḍḍa"] = function(args, data)
	data.decl_type = "dual"
	table.insert(data.categories, "Siwa dual nouns")
	data.forms["u_pl"] = {"koḍḍa"}
	data.forms["m_pl"] = {"kỏhha"}
end

data["kůimpa"] = function(args, data)
	data.decl_type = "dual"
	table.insert(data.categories, "Siwa dual nouns")
	data.forms["u_sg"] = {"kůitton"}
	data.forms["m_sg"] = {"kůittos"}
	data.forms["u_pl"] = {"kůimpa"}
	data.forms["m_pl"] = {"kygįua", "kỷbba"}
end

data["kỷ"] = function(args, data)
	data.decl_type = "coalescence"
	table.insert(data.categories, "Siwa diphthong-coalescence nouns")
	data.forms["u"] = {"kỷ"}
	data.forms["m"] = {"kyby"}
end

data["kvỷ"] = function(args, data)
	data.decl_type = "coalescence"
	table.insert(data.categories, "Siwa diphthong-coalescence nouns")
	data.forms["u"] = {"kvỷ"}
	data.forms["m"] = {"kvyby"}
end

data["leḍba"] = function(args, data)
	data.decl_type = "dual"
	table.insert(data.categories, "Siwa dual nouns")
	data.forms["u_sg"] = {"lahton"}
	data.forms["u_pl"] = {"leḍba"}
	data.forms["m_sg"] = {"lahtos"}
	data.forms["m_pl"] = {"leḍma"}
end

data["lỉsġi"] = function(args, data)
	table.insert(data.categories, "Siwa irregular nouns")
	data.forms["u_sg"] = {"lỉsġi"}
	data.forms["m_sg"] = {"lihhįet"}
end

data["lįỏ"] = function(args, data)
	data.decl_type = "irregular"
	table.insert(data.categories, "Siwa irregular nouns")
	data.forms["u"] = {"lįỏ"}
	data.forms["m"] = {"lyra"}
end

data["lỷ"] = function(args, data)
	data.decl_type = "coalescence"
	table.insert(data.categories, "Siwa diphthong-coalescence nouns")
	data.forms["u"] = {"lỷ"}
	data.forms["m"] = {"lůbů"}
	data.forms["ine"] = {"lỷgįia", "lybia"}
	data.forms["ill"] = {"lỷgįita", "lybita"}
	data.forms["ela"] = {"lỷgįika", "lybika"}
	data.forms["ade"] = {"lỷgįima", "lybima"}
	data.forms["all"] = {"lỷgįibma", "lybibma"}
	data.forms["abl"] = {"lỷgįiska", "lybiska"}
end

data["madu"] = function(args, data)
	data.decl_type = "coalescence"
	table.insert(data.categories, "Siwa diphthong-coalescence nouns")
	data.forms["u"] = {"madu"}
	data.forms["m"] = {"mama"}
end

data["nảrri"] = function(args, data)
	data.decl_type = "irregular"
	table.insert(data.categories, "Siwa irregular nouns")
	data.forms["u_sg"] = {"nảrri"}
	data.forms["m_sg"] = {"nęręt"}
end

data["nảvi"] = function(args, data)
	data.decl_type = "coalescence"
	table.insert(data.categories, "Siwa diphthong-coalescence nouns")
	data.forms["u"] = {"nảvi"}
	data.forms["m"] = {"nęgįi"}
end

data["nay"] = function(args, data)
	data.decl_type = "coalescence"
	table.insert(data.categories, "Siwa diphthong-coalescence nouns")
	data.forms["u"] = {"nay"}
	data.forms["m"] = {"nęma"}
end

data["netsengųesi"] = function(args, data)
	data.decl_type = "e"
	table.insert(data.categories, "Siwa irregular nouns")
	table.insert(data.categories, "Siwa e-declension nouns")
	data.forms["u"] = {"netsengųesi"}
	data.forms["m"] = {"netsengųesse"}
	loc = "netsengųessei"
	data.forms["ine"] = {loc .. ce[1]}
	data.forms["ill"] = {loc .. ce[2]}
	data.forms["ela"] = {loc .. ce[3]}
	data.forms["ade"] = {loc .. ce[4]}
	data.forms["all"] = {loc .. ce[5]}
	data.forms["abl"] = {loc .. ce[6]}
end

data["nįarri"] = function(args, data)
	data.decl_type = "irregular"
	table.insert(data.categories, "Siwa irregular nouns")
	data.forms["u_sg"] = {"nįarri"}
	data.forms["m_sg"] = {"nįaret"}
end

data["niebini"] = function(args, data)
	table.insert(data.categories, "Siwa irregular nouns")
	data.forms["u_sg"] = {"niebini"}
	data.forms["u_pl"] = {"niebinhi", "niebinṡi"}
	data.forms["m_sg"] = {"nieigįa", "niẻddįa"}
	data.forms["m_pl"] = {"nieigįagi", "niẻddįagi"}
end

data["nige"] = function(args, data)
	data.decl_type = "coalescence"
	table.insert(data.categories, "Siwa diphthong-coalescence nouns")
	data.forms["u"] = {"nige"}
	data.forms["m"] = {"niddįi"}
end

data["oaḍbi"] = function(args, data)
	data.decl_type = "dual"
	table.insert(data.categories, "Siwa dual nouns")
	data.forms["u_sg"] = {"oadi"}
	data.forms["u_pl"] = {"oaḍbi"}
	data.forms["m_sg"] = {"vaika"}
	data.forms["m_pl"] = {"vaubbi", "vaubba"}
end

data["omna"] = function(args, data)
	data.decl_type = "dual"
	table.insert(data.categories, "Siwa dual nouns")
	data.forms["u_pl"] = {"omna"}
	data.forms["m_pl"] = {"ỏbba"}
end

data["ỏ"] = function(args, data)
	data.decl_type = "coalescence"
	table.insert(data.categories, "Siwa diphthong-coalescence nouns")
	data.forms["u"] = {"ỏ"}
	data.forms["m"] = {"obo", "ỏbo"}
end

data["pỷka"] = function(args, data)
	data.decl_type = "coalescence"
	table.insert(data.categories, "Siwa diphthong-coalescence nouns")
	data.forms["u"] = {"pỷka"}
	data.forms["m"] = {"pyby"}
end

data["retema"] = function(args, data)
	data.decl_type = "irregular"
	table.insert(data.categories, "Siwa irregular nouns")
	data.forms["u_sg"] = {"retema"}
	data.forms["u_pl"] = {"revva"}
	data.forms["m_sg"] = {"sitema"}
	data.forms["m_pl"] = {"sivva"}
end

data["rįaḍba"] = function(args, data)
	data.decl_type = "dual"
	table.insert(data.categories, "Siwa dual nouns")
	data.forms["u_sg"] = {"rįanna"}
	data.forms["u_pl"] = {"rįaḍba"}
	data.forms["m_sg"] = {"rįanka"}
	data.forms["m_pl"] = {"rįaubba"}
end

data["rủ"] = function(args, data)
	data.decl_type = "coalescence"
	table.insert(data.categories, "Siwa diphthong-coalescence nouns")
	data.forms["u"] = {"rủ"}
	data.forms["m"] = {"rumu"}
end

data["rỷ"] = function(args, data)
	data.decl_type = "coalescence"
	table.insert(data.categories, "Siwa diphthong-coalescence nouns")
	data.forms["u"] = {"rỷ"}
	data.forms["m"] = {"rymy"}
end

data["sảhpa"] = function(args, data)
	data.decl_type = "dual"
	table.insert(data.categories, "Siwa dual nouns")
	data.forms["u_sg"] = {"sảhta"}
	data.forms["u_pl"] = {"sảhpa"}
	data.forms["m_sg"] = {"sảhhųa"}
	data.forms["m_pl"] = {"sảmġa"}
end

data["saḍba"] = function(args, data)
	data.decl_type = "dual"
	table.insert(data.categories, "Siwa dual nouns")
	data.forms["u_sg"] = {"sata"}
	data.forms["u_pl"] = {"saḍba"}
	data.forms["m_sg"] = {"savva"}
	data.forms["m_pl"] = {"saubba"}
end

data["sambo"] = function(args, data)
	table.insert(data.categories, "Siwa irregular nouns")
	data.forms["u_sg"] = {"sambo"}
	data.forms["u_pl"] = {"sảmbogi"}
	data.forms["m_sg"] = {"sảmoųi"}
	data.forms["m_pl"] = {"sąmoṡi"}
end

data["sẻu"] = function(args, data)
	data.decl_type = "coalescence"
	table.insert(data.categories, "Siwa diphthong-coalescence nouns")
	data.forms["u"] = {"sẻu"}
	data.forms["m"] = {"sůbů"}
end

data["tiebba"] = function(args, data)
	data.decl_type = "dual"
	table.insert(data.categories, "Siwa dual nouns")
	data.forms["u_sg"] = {"tiemo"}
	data.forms["u_pl"] = {"tiebba"}
	data.forms["m_sg"] = {"tieka"}
	data.forms["m_pl"] = {"tiehba"}
end

data["tỏ"] = function(args, data)
	data.decl_type = "coalescence"
	table.insert(data.categories, "Siwa diphthong-coalescence nouns")
	data.forms["u"] = {"tỏ"}
	data.forms["m"] = {"tobo"}
end

data["totami"] = function(args, data)
	data.decl_type = "irregular"
	table.insert(data.categories, "Siwa irregular nouns")
	data.forms["u_sg"] = {"totami"}
	data.forms["u_pl"] = {"totamṡi"}
	data.forms["m_sg"] = {"todatta"}
	data.forms["m_pl"] = {"todattagi"}
end

data["tṡemi"] = function(args, data)
	table.insert(data.categories, "Siwa irregular adjectives")
	data.forms["u"] = {"tṡemi"}
	data.forms["m"] = {"tṡebi"}
	data.forms["ine"] = {"tṡebi" .. ce[1]}
	data.forms["ill"] = {"tṡebi" .. ce[2]}
	data.forms["ela"] = {"tṡebi" .. ce[3]}
	data.forms["ade"] = {"tṡebi" .. ce[4]}
	data.forms["all"] = {"tṡebi" .. ce[5]}
	data.forms["abl"] = {"tṡebi" .. ce[6]}
end

data["umpa"] = function(args, data)
	data.decl_type = "dual"
	table.insert(data.categories, "Siwa dual nouns")
	data.forms["u_sg"] = {"uba"}
	data.forms["u_pl"] = {"umpa"}
	data.forms["m_sg"] = {"oama"}
	data.forms["m_pl"] = {"ủppa"}
end

data["vả"] = function(args, data)
	data.decl_type = "coalescence"
	table.insert(data.categories, "Siwa diphthong-coalescence nouns")
	data.forms["u"] = {"vả"}
	data.forms["m"] = {"vęįa"}
end

data["ỷ"] = function(args, data)
	data.decl_type = "coalescence"
	table.insert(data.categories, "Siwa diphthong-coalescence nouns")
	data.forms["u"] = {"ỷ"}
	data.forms["m"] = {"yby"}
end

return data