local export = {}
local m_translit = require("Module:mr-translit")
local gsub = mw.ustring.gsub
local sub = mw.ustring.sub
local match = mw.ustring.match
local len = mw.ustring.len
local tc = table.concat
local genders = {
= 'masculine', = 'feminine', = 'feminine (exception)', = 'neuter',
}
function export.wordify(text, text_translit)
local words, translits = {}, {}
for word in mw.text.gsplit(text, ",") do
table.insert(words, mr_format(word))
end
table.insert(translits, text_translit)
text = table.concat(words, ", ") .. "<br><small style=\"color:#888\">" ..
table.concat(translits, ", ") .. "</small>"
return text
end
function mr_format(text)
text = ('<span lang="mr" class="Deva">[[%s#Marathi|'):format(gsub(text, "़", "")) ..
('%s]]</span>'):format(text)
return text
end
local function get_without_last_letter(word)
return sub(word, 1, -2)
end
local function get_without_last_two_letters(word)
return sub(word, 1, -3)
end
local function get_last_letter(word)
return sub(word, -1)
end
local function get_penultimate_letter(word)
return sub(word, -2, -2)
end
local function weaken_penultimate_iu(word)
local weakened_stem = ""
local last_letter = get_last_letter(word)
local penultimate_letter = get_penultimate_letter(word)
local penultimate_stem = get_without_last_two_letters(word)
-- īC stem
if penultimate_letter == "ी" then
weakened_stem = penultimate_stem .. "ि" .. last_letter
elseif penultimate_letter == "ई" then
weakened_stem = penultimate_stem .. "इ" .. last_letter
-- ūC stem
elseif penultimate_letter == "ू" then
weakened_stem = penultimate_stem .. "ु" .. last_letter
elseif penultimate_letter == "ऊ" then
weakened_stem = penultimate_stem .. "उ" .. last_letter
end
return weakened_stem
end
local function get_s_obl(word, g)
local penultimate_letter = get_penultimate_letter(word)
local stem = get_without_last_letter(word)
local ending = get_last_letter(word)
-- masc rā-stem
if g == "m" and penultimate_letter == "र" then
stem = get_without_last_two_letters(word)
ending = "र" .. get_last_letter(word)
end
data = {
= {
= word .. "ा",
= stem .. "्या",
= stem .. "ऱ्या",
= stem .. "्या",
= stem .. "वा",
= word,
= word,
},
= {
= word .. "ी",
= stem .. "े",
= word,
= stem .. "वे",
= word,
= stem .. "या",
= word,
},
= {
= word .. "े"
},
= {
= word .. "ा",
= stem .. "्या",
= stem .. "वा",
= stem .. "्या",
}
}
return data or data
end
local function get_p_dir(word, g)
local ending = get_last_letter(word)
local stem = get_without_last_letter(word)
data = {
= {
= {word} ,
= {stem .. "े"},
= {word},
= {word},
},
= {
= {word .. "ी"},
= {word},
= {stem .. "्या"},
= {stem .. "वा"},
= {word},
= {stem .. "या"},
= {stem .. "ा"},
},
= {
= {word .. "ा"},
},
= {
= {word .. "े", word .. "ं"},
= {stem .. "वे", stem .. "वं"},
= {stem .. "ी"},
}
}
-- it's ugly but it works ^_^
if g == "n" and (get_last_letter(m_translit.tr(word)) == "a" or ending == "ी") then
return {word}
end
return data or data
end
local function get_p_obl(word, g)
local ending = get_last_letter(word)
local stem = get_without_last_letter(word)
local plural_direct = get_p_dir(word, g)
local singular_oblique = get_s_obl(word, g)
data = {
= {
= singular_oblique .. "ं",
= singular_oblique .. "ं",
= singular_oblique .. "ं",
= singular_oblique .. "ं",
= singular_oblique .. "ं",
= singular_oblique .. "ं",
},
= {
= plural_direct .. "ं",
= plural_direct .. "ं",
= plural_direct .. "ं",
= plural_direct .. "ं",
= plural_direct .. "ं",
= plural_direct .. "ं",
= plural_direct .. "ं",
},
= {
= plural_direct .. "ं",
},
= {
= singular_oblique .. "ं",
= singular_oblique.. "ं",
= singular_oblique .. "ं",
= singular_oblique .. "ं",
}
}
return data or data
end
function get_weakened_cases(word, g, case)
local weakened_stem = weaken_penultimate_iu(word)
weakened_iu_cases = {
= {
= get_p_dir(word, g),
= get_s_obl(weakened_stem, g),
= get_p_obl(weakened_stem, g),
},
= {
= get_p_dir(weakened_stem, g),
= get_s_obl(weakened_stem, g),
= get_p_obl(weakened_stem, g),
},
= {
= get_p_dir(weakened_stem, g),
= get_s_obl(weakened_stem, g),
= get_p_obl(weakened_stem, g),
},
= {
= get_p_dir(weakened_stem, g),
= get_s_obl(weakened_stem, g),
= get_p_obl(weakened_stem, g),
}
}
return weakened_iu_cases
end
function handle_options(word, g, options)
local singular_oblique, plural_oblique, plural_direct = "", "", ""
-- no options
if options == nil then
plural_direct = get_p_dir(word, g)
singular_oblique = get_s_obl(word, g)
plural_oblique = get_p_obl(word, g)
-- weaken_iu option
elseif options == "true" then
plural_direct = get_weakened_cases(word, g, "direct plural")
singular_oblique = get_weakened_cases(word, g, "oblique singular")
plural_oblique = get_weakened_cases(word, g, "oblique plural")
elseif options == "sg-only" then
plural_direct = "-"
singular_oblique = get_s_obl(word, g)
plural_oblique = "-"
end
return singular_oblique, plural_oblique, plural_direct
end
function export.forms(word, g, options)
local singular_oblique, plural_oblique, plural_direct = handle_options(word, g, options)
form = {}
translit_form = {}
-- dir. sg.
form.dirs = {word}
translit_form.dirs = {m_translit.tr(word, "mr", "Deva")}
-- dir. pl.
if plural_direct == "-" then
form.dirp = {"-"}
translit_form.dirp = {"-"}
elseif plural_direct == nil then
form.dirp = {plural_direct}
translit_form.dirp = {m_translit.tr(plural_direct)}
else
form.dirp = {plural_direct, plural_direct}
translit_form.dirp = {m_translit.tr(plural_direct), m_translit.tr(plural_direct)}
end
-- obl. sg.
form.obls = {singular_oblique}
translit_form.obls = {m_translit.tr(singular_oblique)}
-- obl. pl.
form.oblp = {plural_oblique}
translit_form.oblp = {m_translit.tr(plural_oblique)}
-- dative
form.dats = {singular_oblique .. "ला"}
translit_form.dats = {m_translit.tr(singular_oblique .. "ला")}
form.datp = {plural_oblique .. "ना"}
translit_form.datp = {m_translit.tr(plural_oblique .. "ना")}
-- ergative
form.ergs = {singular_oblique .. "ने"}
translit_form.ergs = {m_translit.tr(singular_oblique .. "ने")}
form.ergp = {plural_oblique .. "नी"}
translit_form.ergp = {m_translit.tr(plural_oblique .. "नी")}
-- instrumental
form.inss = {singular_oblique .. "शी"}
translit_form.inss = {m_translit.tr(singular_oblique .. "शी")}
form.insp = {plural_oblique .. "शी"}
translit_form.insp = {m_translit.tr(plural_oblique .. "शी")}
-- locative
form.locs = {singular_oblique .. "त"}
translit_form.locs = {m_translit.tr(singular_oblique .. "त")}
form.locp = {plural_oblique .. "त"}
translit_form.locp = {m_translit.tr(plural_oblique .. "त")}
-- vocative
form.vocs = {singular_oblique}
translit_form.vocs = {m_translit.tr(singular_oblique)}
form.vocp = {plural_oblique .. "नो"}
translit_form.vocp = {m_translit.tr(plural_oblique .. "नो")}
-- genitive singular
form.gsns = {singular_oblique .. "च़े" , singular_oblique .. "च़ं"}
translit_form.gsns = {m_translit.tr(singular_oblique .. "च़े"), m_translit.tr(singular_oblique .. "च़ं")}
form.gsnp = {singular_oblique .. "ची"}
translit_form.gsnp = {m_translit.tr(singular_oblique .. "ची")}
form.gsms = {singular_oblique .. "च़ा"}
translit_form.gsms = {m_translit.tr(singular_oblique .. "च़ा")}
form.gsmp = {singular_oblique .. "च़े"}
translit_form.gsmp = {m_translit.tr(singular_oblique .. "च़े")}
form.gsfs = {singular_oblique .. "ची"}
translit_form.gsfs = {m_translit.tr(singular_oblique .. "ची")}
form.gsfp = {singular_oblique .. "च्या"}
translit_form.gsfp = {m_translit.tr(singular_oblique .. "च्या")}
form.gso = {singular_oblique .. "च्या"}
translit_form.gso = {m_translit.tr(singular_oblique .. "च्या")}
-- genitive plural
form.gpns = {plural_oblique .. "च़े", plural_oblique .. "च़ं"}
translit_form.gpns = {m_translit.tr(plural_oblique .. "च़े"), m_translit.tr(plural_oblique .. "च़ं")}
form.gpnp = {plural_oblique .. "ची"}
translit_form.gpnp = {m_translit.tr(plural_oblique .. "ची")}
form.gpms = {plural_oblique .. "च़ा"}
translit_form.gpms = {m_translit.tr(plural_oblique .. "च़ा")}
form.gpmp = {plural_oblique .. "च़े"}
translit_form.gpmp = {m_translit.tr(plural_oblique .. "च़े")}
form.gpfs = {plural_oblique .. "ची"}
translit_form.gpfs = {m_translit.tr(plural_oblique .. "ची")}
form.gpfp = {plural_oblique .. "च्या"}
translit_form.gpfp = {m_translit.tr(plural_oblique .. "च्या")}
form.gpo = {plural_oblique .. "च्या"}
translit_form.gpo = {m_translit.tr(plural_oblique .. "च्या")}
return form, translit_form
end
local function tcc(words)
return tc(words, ', ')
end
function export.show(frame)
local args = frame:getParent().args
local word = args or mw.title.getCurrentTitle().text
local g = args or args
local form, translit_form = export.forms(word, g, args)
data = [=[
{| class="inflection-table vsSwitcher vsToggleCategory-inflection" style="background:#FEFEFE; text-align:center; border: 1px solid #CCC; min-width:30%"
|- style="background: #d9ebff;"
! class="vsToggleElement" style="text-align: left;" colspan="4" | Declension of ]=] .. mr_format(word) .. " " .. genders
data = data .. [=[
|- class="vsShow"
| style="background:#eff7ff" | ''dir. sg.''
| ]=] .. export.wordify(tcc(form.dirs), tcc(translit_form.dirs)) .. [=[
|- class="vsShow"
| style="background:#eff7ff" | ''dir. pl.''
| ]=] .. export.wordify(tcc(form.dirp), tcc(translit_form.dirp))
data = data .. [=[
|- class="vsHide"
! style="background:#eff7ff" | nominative
| ]=] .. export.wordify(tcc(form.dirs), tcc(translit_form.dirs)) .. "||" .. export.wordify(tcc(form.dirp), tcc(translit_form.dirp))
data = data .. [=[
|- class="vsHide"
! style="background:#eff7ff" | oblique
| ]=] .. export.wordify(tcc(form.obls), tcc(translit_form.obls)) .. "||" .. export.wordify(tcc(form.oblp), tcc(translit_form.oblp))
data = data .. [=[
|- class="vsHide"
! style="background:#eff7ff" | dative
| ]=] .. export.wordify(tcc(form.dats), tcc(translit_form.dats)) .. "||" .. export.wordify(tcc(form.datp), tcc(translit_form.datp))
data = data .. [=[
|- class="vsHide"
! style="background:#eff7ff" | ergative
| ]=] .. export.wordify(tcc(form.ergs), tcc(translit_form.ergs)) .. "||" ..export.wordify(tcc(form.ergp), tcc(translit_form.ergp))
data = data .. [=[
|- class="vsHide"
! style="background:#eff7ff" | instrumental
| ]=] .. export.wordify(tcc(form.inss), tcc(translit_form.inss)) .. "||" .. export.wordify(tcc(form.insp), tcc(translit_form.insp))
data = data .. [=[
|- class="vsHide"
! style="background:#eff7ff" | locative
| ]=] .. export.wordify(tcc(form.locs), tcc(translit_form.locs)) .. "||" .. export.wordify(tcc(form.locp), tcc(translit_form.locp))
data = data .. [=[
|- class="vsHide"
! style="background:#eff7ff" | vocative
| ]=] .. export.wordify(tcc(form.vocs), tcc(translit_form.vocs)) .. "||" .. export.wordify(tcc(form.vocp), tcc(translit_form.vocp))
data = data .. [=[
|}
]=]
data = data .. [=[
{| class="inflection-table vsSwitcher vsToggleCategory-inflection" style="background:#FEFEFE; text-align:center; border: 1px solid #CCC; min-width:30
|- style="background: #d9ebff;"
! class="vsToggleElement" style="text-align: left;" colspan="8" | Genitive declension of ]=] .. mr_format(word)
data = data .. [=[
|- class="vsHide"
! style="background:#eff7ff" |
! style="background:#eff7ff" colspan=2| neuter object
! style="background:#eff7ff" colspan=2 | masculine object
! style="background:#eff7ff" colspan=2| feminine object
! style="background:#eff7ff" colspan=2| oblique
|- class="vsHide"
! style="background:#eff7ff" |
! style="background:#eff7ff" | singular<sup>*</sup>
! style="background:#eff7ff" | plural
! style="background:#eff7ff" | singular
! style="background:#eff7ff" | plural
! style="background:#eff7ff" | singular
! style="background:#eff7ff" | plural
! style="background:#eff7ff" |
|- class="vsHide"
! style="background:#eff7ff" | singular subject]=]
data = data .. [=[
|
]=]
data = data .. export.wordify(tcc(form.gsns), tcc(translit_form.gsns)) .. [=[
|
]=]
data = data .. export.wordify(tcc(form.gsnp), tcc(translit_form.gsnp)) .. [=[
|
]=]
data = data .. export.wordify(tcc(form.gsms), tcc(translit_form.gsms)) .. [=[
|
]=]
data = data .. export.wordify(tcc(form.gsmp), tcc(translit_form.gsmp)) .. [=[
|
]=]
data = data .. export.wordify(tcc(form.gsfs), tcc(translit_form.gsfs)) .. [=[
|
]=]
data = data .. export.wordify(tcc(form.gsfp), tcc(translit_form.gsfp)) .. [=[
|
]=]
data = data .. export.wordify(tcc(form.gso), tcc(translit_form.gso)) .. [=[
|- class="vsHide"
! style="background:#eff7ff" | plural subject
|
]=]
data = data .. export.wordify(tcc(form.gpns), tcc(translit_form.gpns)) .. [=[
|
]=]
data = data .. export.wordify(tcc(form.gpnp), tcc(translit_form.gpnp)) .. [=[
|
]=]
data = data .. export.wordify(tcc(form.gpms), tcc(translit_form.gpms)) .. [=[
|
]=]
data = data .. export.wordify(tcc(form.gpmp), tcc(translit_form.gpmp)) .. [=[
|
]=]
data = data .. export.wordify(tcc(form.gpfs), tcc(translit_form.gpfs)) .. [=[
|
]=]
data = data .. export.wordify(tcc(form.gpfp), tcc(translit_form.gpfp)) .. [=[
|
]=]
data = data .. export.wordify(tcc(form.gpo), tcc(translit_form.gpo)) .. [=[
|}
]=]
return data
end
return export