Module:siwa-noun/data: Difference between revisions
Jump to navigation
Jump to search
No edit summary |
No edit summary |
||
(318 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 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 | 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 | |||
for _, pat in ipairs(patterns) do | |||
for _, case in ipairs(ce) do | |||
coalesced = gsub(term, pat[1] .. case .. "$", pat[2]) | |||
end | |||
end | end | ||
return coalesced | |||
return | |||
end | end | ||
Line 28: | Line 39: | ||
data["a"] = { | data["a"] = { | ||
params = { | 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) | setmetatable(data["a"], {__call = function(self, args, data) | ||
local stem = data.head | local stem = args.nolen and data.head or m_com.coalescence(m_com.lenition(data.head), args.s) | ||
local s2, s3 = sub( | local s1, s2, s3 = sub(stem, 1, -2), sub(stem, 1, -3), sub(stem, 1, -4) | ||
table.insert(data.categories, "Siwa a-declension | table.insert(data.categories, "Siwa a-declension " .. data.pos) | ||
data.forms["u"] = { | data.forms["u"] = {data.alt or PAGENAME} | ||
if stem:match(v.."mm.$") then | 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")} | 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") | loc = s3 .. (data.q == "s" and "mṡi" or data.q == "l" and "mki" or "kki") | ||
Line 50: | Line 69: | ||
data.forms["m"] = {s2 .. "kka"} | data.forms["m"] = {s2 .. "kka"} | ||
loc = s2 .. "kki" | loc = s2 .. "kki" | ||
elseif stem:match( | 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 60: | 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 " | 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 69: | Line 88: | ||
loc = s2 .. "ki" | loc = s2 .. "ki" | ||
else | else | ||
data.forms["m"] = { | data.forms["m"] = {(args.d2 and s2 or args.d and s1 or stem) .. "ka"} | ||
loc = | loc = (args.d2 and s2 or args.d and s1 or stem) .. "ki" | ||
na = true | |||
end | end | ||
Line 80: | Line 100: | ||
data.forms["abl"] = {(abl or loc) .. ce[6]} | data.forms["abl"] = {(abl or loc) .. ce[6]} | ||
for n, case in pairs(cases) do | for n, case in pairs(cases) do | ||
if stem:match(v.."nn.$") then | if stem:match(v.."nn.$") and data.q == "s" and not na then | ||
table.insert(data.forms[case], s3 .. "nṡi" .. ce[n]) | table.insert(data.forms[case], s3 .. "nṡi" .. ce[n]) | ||
elseif stem:match(v.."n.$") then | elseif stem:match(v.."n.$") and data.q == "s" and not na then | ||
table.insert(data.forms[case], s2 .. "nṡi" .. ce[n]) | table.insert(data.forms[case], s2 .. "nṡi" .. ce[n]) | ||
elseif stem:match(v.."[pb].$") and data.q == "s" then | elseif stem:match(v.."[pb].$") and data.q == "s" and not na then | ||
table.insert(data.forms[case], s2 .. "pṡi" .. ce[n]) | table.insert(data.forms[case], s2 .. "pṡi" .. ce[n]) | ||
end | end | ||
Line 95: | Line 114: | ||
data["e"] = { | data["e"] = { | ||
params = { | params = { | ||
[ | ["nolen"] = {type = "boolean"}, | ||
["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 = 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 | local s1, s2, s3 = sub(stem, 1, -2), sub(stem, 1, -3), sub(stem, 1, -4) | ||
table.insert(data.categories, "Siwa e-declension | table.insert(data.categories, "Siwa e-declension " .. data.pos) | ||
data.forms["u"] = { | data.forms["u"] = {data.alt or PAGENAME} | ||
if stem:match("[ | if stem:match("[aeẻ]$") then | ||
if stem:match(v.."ts.$") 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"} | data.forms["m"] = {s3 .. "tsġi"} | ||
loc = 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 | elseif stem:match(v.."n.$") then | ||
data.forms["m"] = {s2 .. "di"} | data.forms["m"] = {s2 .. "di"} | ||
Line 139: | Line 168: | ||
loc = s2 .. "ġġi" | loc = s2 .. "ġġi" | ||
else | else | ||
data.forms["m"] = { | data.forms["m"] = {(args.d and s1 or stem) .. "ri"} | ||
loc = | loc = (args.d and s1 or stem) .. "ri" | ||
na = true | |||
end | end | ||
elseif stem:match("[io]$") then | elseif stem:match("[io]$") then | ||
if stem:match(v.."mm.$") 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"} | 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 154: | Line 197: | ||
data.forms["m"] = {s1 .. "ue", s1 .. "obi"} | data.forms["m"] = {s1 .. "ue", s1 .. "obi"} | ||
loc = s1 .. "uei" | loc = s1 .. "uei" | ||
na = true | |||
else | else | ||
data.forms["m"] = {s1 .. "ie"} | data.forms["m"] = {s1 .. "ie"} | ||
loc = s1 .. "iei" | loc = s1 .. "iei" | ||
na = true | |||
end | end | ||
elseif stem:match("[uyů] | elseif stem:match("[uyů]$") then | ||
if stem:match(v.."mm.$") 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"} | data.forms["m"] = {s3 .. "mme"} | ||
loc = s3 .. "mme" | loc = s3 .. "mme" | ||
Line 169: | 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"] = { | data.forms["m"] = {(args.d and s1 or stem) .. "me"} | ||
loc = | loc = (args.d and s1 or stem) .. "mei" | ||
na = true | |||
end | end | ||
end | end | ||
Line 181: | Line 231: | ||
data.forms["abl"] = {(abl or loc) .. ce[6]} | data.forms["abl"] = {(abl or loc) .. ce[6]} | ||
for n, case in pairs(cases) do | for n, case in pairs(cases) do | ||
if stem:match( | if stem:match("o$") and na then | ||
table.insert(data.forms[case], s1 .. "obi" .. ce[n]) | 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 | end | ||
Line 194: | Line 243: | ||
data["i"] = { | data["i"] = { | ||
params = { | params = { | ||
[ | ["nolen"] = {type = "boolean"}, | ||
["ld"] = {type = "boolean"}, | |||
["s"] = {type = "boolean"}, | |||
}, | }, | ||
} | } | ||
setmetatable(data["i"], {__call = function(self, args, data) | setmetatable(data["i"], {__call = function(self, args, data) | ||
local stem = 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 | local s1, s2, s3 = sub(stem, 1, -2), sub(stem, 1, -3), sub(stem, 1, -4) | ||
table.insert(data.categories, "Siwa i-declension | table.insert(data.categories, "Siwa i-declension " .. data.pos) | ||
data.forms["ine"] = {} | data.forms["ine"], data.forms["all"], data.forms["abl"] = {}, {}, {} | ||
data.forms["u"] = {data.alt or PAGENAME} | |||
data.forms[" | 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"} | 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 222: | 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 228: | Line 304: | ||
data.forms["m"] = {s2 .. "ldi"} | data.forms["m"] = {s2 .. "ldi"} | ||
loc = s2 .. "ldi" | loc = s2 .. "ldi" | ||
elseif stem:match(" | elseif stem:match("[iỉ]$") then | ||
data.forms["m"] = { | data.forms["m"] = {stem .. "d"} | ||
ill, ela, ade = | ill, ela, ade = stem .. "h", stem .. "h", stem .. "h" | ||
ine = | ine = stem .. "di" | ||
all, abl = | 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 | |||
else | else | ||
data.forms["m"] = { | data.forms["m"] = {stem .. "di"} | ||
ill, ela, ade = | ill, ela, ade = stem .. "h", stem .. "h", stem .. "h" | ||
all, abl = | all, abl = stem .. "i", stem .. "i" | ||
ine = | ine = stem .. "di" | ||
na = true | |||
end | end | ||
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"] | table.insert(data.forms["all"], (all or loc) .. ce[5]) | ||
data.forms["abl"] | table.insert(data.forms["abl"], (abl or loc) .. ce[6]) | ||
end | end | ||
Line 253: | Line 336: | ||
data["o"] = { | data["o"] = { | ||
params = { | params = { | ||
[ | ["nolen"] = {type = "boolean"}, | ||
["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 = 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 | local s1, s2, s3 = sub(stem, 1, -2), sub(stem, 1, -3), sub(stem, 1, -4) | ||
table.insert(data.categories, "Siwa o-declension | table.insert(data.categories, "Siwa o-declension " .. data.pos) | ||
data.forms["u"] = { | data.forms["u"] = {data.alt or PAGENAME} | ||
if stem:match("[ae]$") then | if stem:match("[ae]$") then | ||
if stem:match(v.."[ | 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"} | 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 283: | Line 376: | ||
loc = s2 .. "lmoi" | loc = s2 .. "lmoi" | ||
else | else | ||
data.forms["m"] = { | data.forms["m"] = {(args.d and s1 or stem) .. "mo"} | ||
loc = | loc = (args.d and s1 or stem) .. "moi" | ||
na = true | |||
end | end | ||
elseif stem:match(" | elseif stem:match("[iỷ]$") then | ||
if stem:match(v.."hhį.$") then | if args.ld then | ||
data.forms["m"] = {sub | data.forms["m"] = {(args.d and s1 or stem) .. "ko"} | ||
loc = sub | loc = (args.d and s1 or stem) .. "koi" | ||
elseif stem:match(v.."[ | na = true | ||
data.forms["m"] = {s3 .. "kko"} | elseif stem:match(v.."hhį.$") then | ||
loc = s3 .. "kkoi" | 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 | 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 309: | Line 410: | ||
loc = s2 .. "ṡkoi" | loc = s2 .. "ṡkoi" | ||
else | else | ||
data.forms["m"] = { | data.forms["m"] = {(args.d and s1 or stem) .. "ko"} | ||
loc = | loc = (args.d and s1 or stem) .. "koi" | ||
na = true | |||
end | end | ||
elseif stem:match("[ | elseif stem:match("[ouyůỏ]$") then | ||
if stem:match(v.."[mn][mn] | 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"} | data.forms["m"] = {s3 .. "mma"} | ||
loc = s3 .. "mmi" | loc = s3 .. "mmi" | ||
elseif | 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 | elseif s1:match(v.."[rhgk]$") then | ||
data.forms["m"] = {s2 .. "hma"} | data.forms["m"] = {s2 .. "hma"} | ||
loc = s2 .. "hmi" | loc = s2 .. "hmi" | ||
elseif | 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"] = { | local del = args.d and s1 or stem | ||
ill, ela = | data.forms["m"] = {del .. "ma"} | ||
ine, ade, all, abl = | ill, ela = del .. "n", del .. "n" | ||
ine, ade, all, abl = del .. "mi", del .. "mi", del .. "mi", del .. "mi" | |||
na = true | |||
end | end | ||
end | end | ||
Line 339: | Line 455: | ||
data.forms["abl"] = {(abl or loc) .. ce[6]} | data.forms["abl"] = {(abl or loc) .. ce[6]} | ||
for n, case in pairs(cases) do | for n, case in pairs(cases) do | ||
if stem:match(v.."[mnkg]i$") 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$") 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]) | ||
end | end | ||
Line 352: | Line 467: | ||
data["u"] = { | data["u"] = { | ||
params = { | params = { | ||
[ | ["nolen"] = {type = "boolean"}, | ||
["ld"] = {type = "boolean"}, | |||
["s"] = {type = "boolean"}, | |||
}, | }, | ||
} | } | ||
setmetatable(data["u"], {__call = function(self, args, data) | setmetatable(data["u"], {__call = function(self, args, data) | ||
local stem = 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 | local s1, s2, s3 = sub(stem, 1, -2), sub(stem, 1, -3), sub(stem, 1, -4) | ||
table.insert(data.categories, "Siwa u-declension | table.insert(data.categories, "Siwa u-declension " .. data.pos) | ||
data.forms["u"] = { | data.forms["u"] = {data.alt or PAGENAME} | ||
if stem:match("[aei]$") then | if stem:match("[aei]$") then | ||
if stem:match(v.."[ | 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"} | 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 379: | Line 503: | ||
loc = s2 .. "lmoi" | loc = s2 .. "lmoi" | ||
else | else | ||
data.forms["m"] = { | data.forms["m"] = {stem .. "mo"} | ||
loc = | loc = stem .. "moi" | ||
na = true | |||
end | end | ||
elseif stem:match("[ | elseif stem:match("[ouyỷů]$") then | ||
if stem:match(v.."[mn][mn].$") 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"} | data.forms["m"] = {s3 .. "mma", s3 .. "mmo"} | ||
loc = s3 .. "mma" | loc = s3 .. "mma" | ||
Line 389: | 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 396: | Line 529: | ||
loc = s2 .. "lmi" | loc = s2 .. "lmi" | ||
else | else | ||
data.forms["m"] = { | data.forms["m"] = {stem .. "ma"} | ||
ill, ela = | ill, ela = stem .. "n", stem .. "n" | ||
ine, ade, all, abl = | ine, ade, all, abl = stem .. "mi", stem .. "mi", stem .. "mi", stem .. "mi" | ||
na = true | |||
end | end | ||
end | end | ||
Line 409: | Line 543: | ||
data.forms["abl"] = {(abl or loc) .. ce[6]} | data.forms["abl"] = {(abl or loc) .. ce[6]} | ||
for n, case in pairs(cases) do | for n, case in pairs(cases) do | ||
if stem:match(v.."[mn][mn][oyuů]$") then | if stem:match(v.."[mn][mn][oyuů]$") and not na then | ||
table.insert(data.forms[case], s3 .. "mmoi" .. ce[n]) | table.insert(data.forms[case], s3 .. "mmoi" .. ce[n]) | ||
elseif stem:match(v.."[mn][oyuů]$") or stem:match(v.."sġi$") then | 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]) | table.insert(data.forms[case], s2 .. "mmoi" .. ce[n]) | ||
end | end | ||
Line 419: | Line 552: | ||
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 | return data |
Latest revision as of 11:19, 30 March 2023
- The following documentation is located at Module:siwa-noun/data/doc.[edit]
- Useful links: root page • root page's subpages • links • transclusions • testcases • sandbox
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