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("pra")
local genders = {
["m"] = "陽性", ["f"] = "陰性", ["n"] = "中性",
}
export.orjoiner = " <small style=\"color:888\">或</small> " -- Share for testing
local cases = {
"主格", "賓格", "工具格", "與格", "離格",
"屬格", "位格", "呼格"
}
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, "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, "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;"
|- style="background: #d9ebff;"
! class="vsToggleElement" style="text-align: left;" colspan="3" |]=])
insert(sub(m_lang:getCanonicalName(), 1, -9))
insert(word)
insert [=[ 的變格 ]=]
insert(" (" .. genders[g] .. ")")
insert [=[
|- class="vsHide"
! style="background:#eff7ff" |
! style="background:#eff7ff" | 單數
! style="background:#eff7ff" | 複數
]=]
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