Module:pra-decl/noun

local export = {}

local m_links = require("Module:links") local m_str_utils = require("Module:string utilities")

local sub = m_str_utils.sub local gsub = m_str_utils.gsub local match = m_str_utils.match local u = m_str_utils.char

local PAGENAME = mw.loadData("Module:headword/data").pagename local lang = require("Module:languages").getByCode("inc-pra")

local genders = { ["m"] = "masculine", ["f"] = "feminine", ["n"] = "neuter", }

export.orjoiner = " or " -- Share for testing

local cases = { "Nominative", "Accusative", "Instrumental", "Dative", "Ablative", "Genitive", "Locative", "Vocative" }

local diaeresis = {i = "ï", u = "ü"}

function ending(tr) return sub(tr, -1, -1) end

function export.joinSuffix(frame, stem, suffixes, etc)

local output = "" local term

local function to_Brah(tr) local is = require("Module:typing-aids").interpret_shortcuts return is(tr, "inc-pra") end

local function to_Deva(tr) local is = require("Module:typing-aids").interpret_shortcuts return is(tr, "sa") end

local function to_Knda(tr) local is = require("Module:typing-aids").interpret_shortcuts return is(tr, "inc-pra-Knda") end local function asis(tr) return tr end local sc = etc and etc.sc or error("Script not provided.") local converter = etc and etc.converter if not converter then converters = {Brah = to_Brah, Deva = to_Deva, Knda = to_Knda} converter = converters[sc:getCode] or asis if etc then etc.converter = converter end end for _,suffix in ipairs(suffixes) do		if match(suffix, "^⌫⌫") then --backspace term = sub(stem, 1, -3) .. "Ⓙ" .. sub(suffix, 3, -1) elseif match(suffix, "^⌫") then --backspace term = sub(stem, 1, -2) .. "Ⓙ" .. sub(suffix, 2, -1) else term = stem .. "Ⓙ" .. suffix end -- May need a diaeresis at the join. term = gsub(term, "aⒿⒿ?([iu])", function(x) return "a" .. diaeresis[x] end) term = gsub(term, "Ⓙ", "") if output ~= "" then output = output .. export.orjoiner end output = output .. m_links.full_link({			lang = lang,			sc = sc,			term = converter(term)}) end if output == "" then output = "—" end

return output

end

function export.select(dialect, word, g, etc) -- This is a function rather than inline so as to facilitate testing. -- sc is not yet used, but will be in later forms, and will be script object. local dn = "Module:pra-decl/noun/" .. dialect local data = mw.loadData(dn) or error("Could not load data module "..dn) if not etc then error("Argument etc not provided.") end if not etc.sc then error("Argument etc lacks field sc") --	else error("Argument etc provides script "..etc.sc:getCode) end toler_other = false local word_tr = (lang:transliterate(word, etc.sc)) or toler_other and word if not word_tr then if etc.sc:getCode == "None" then error(word.." is not in a script registered for Prakrit.") else error("Unknown transliteration error for "..word) end end -- Special handling for explicit combining diaeresis. if sub(word_tr, -1, -1) == u(0x0308) then stem = sub(word_tr, 1, -3) .. "Ⓙ" .. sub(word_tr, -2, -2) else stem = word_tr end local the_ending = ending(stem) return data[the_ending] and data[the_ending][g], stem end

function export.show(frame, dialect) local args = frame:getParent.args local g = args[1] local word = args[2] or PAGENAME if PAGENAME == "pra-mah-decl-noun" or PAGENAME == "pra-sau-decl-noun" or PAGENAME == "pra-ard-decl-noun" or PAGENAME == "pra-mag-decl-noun" then g = "m" word = "𑀧𑀼𑀢𑁆𑀢" end local sc = lang:findBestScript(word) local etc = {sc = sc} local m_lang = require("Module:languages").getByCode(dialect, true, "allow etym") -- 4th argument is to be supplied when it comes to be used. local selected_data, word_tr = export.select(dialect, word, g, etc) local output = {nil,nil,nil,nil,nil,nil,nil,nil,nil,nil,nil,nil,nil,nil,nil,nil,nil,nil,nil,nil,nil,nil,nil,nil,nil,nil,nil} local output_i = 0 local function insert(s) output_i = output_i + 1 output[output_i] = s	end insert([=[ {| class="inflection-table vsSwitcher" data-toggle-category="inflection" style="background:#FEFEFE; text-align:center; border: 1px solid #CCC;" ! class="vsToggleElement" style="text-align: left;" colspan="3" |]=]) insert(sub(m_lang:getCanonicalName, 1, -9)) insert [=[ declension of ]=] insert(word) insert(" (" .. genders[g] .. ")")
 * - style="background: #d9ebff;"

insert [=[

! style="background:#eff7ff" | ! style="background:#eff7ff" | singular ! style="background:#eff7ff" | plural ]=]
 * - class="vsHide"

for i,v in ipairs(cases) do insert("\n|- class=\"vsHide\"\n! style=\"background-color:#eff7ff;\" | ") insert(v) insert("\n| ") insert(export.joinSuffix(frame, word_tr, selected_data[2 * i - 1], etc)) insert("\n| ") insert(export.joinSuffix(frame, word_tr, selected_data[2 * i], etc)) end

insert "\n|}" return table.concat(output) end

function export.pra_mah(frame) return export.show(frame, "pra-mah") end

function export.pra_sau(frame) return export.show(frame, "pra-sau") end

function export.pra_ard(frame) return export.show(frame, "pra-ard") end

function export.pra_mag(frame) return export.show(frame, "pra-mag") end

return export