Module:pi-headword
Jump to navigation
Jump to search
- The following documentation is located at Module:pi-headword/documentation. [edit] Categories were auto-generated by Module:module categorization. [edit]
- Useful links: subpage list • links • transclusions • testcases • sandbox
local export = {}
local pos_functions = {}
local links = require('Module:links')
local labels = require('Module:labels')
local m_lang = require('Module:languages')
local lang = m_lang.getByCode('pi')
local langmul
local PAGENAME = mw.title.getCurrentTitle().text
local translit = require('Module:pi-Latn-translit').tr
local Array = require "Module:array"
local ti = table.insert
function export.alt(frame)
local args = frame:getParent().args
local currentScript = lang:findBestScript(PAGENAME)
local currentScriptCode = currentScript:getCode()
local availableScripts = lang:getScripts()
local latinForm = args['Latn'] or currentScriptCode == 'Latn' and PAGENAME or error('No Latin-script form detected.')
local scriptCode
local terms, langs
local first
local ltrlang = {Latn = 'mul', Brah = 'mul', Deva = 'mul', Beng = 'mul', Sinh = 'mul',
Mymr = 'mul', Thai = 'pi', Lana = 'mul', Laoo = 'mul', Khmr = 'pi',
Cakm = 'mul'}
local output = Array('<div class="NavFrame" style="max-width:40em"><div class="NavHead" style="background:var(--wikt-palette-lightblue,#d9ebff);color:inherit">Alternative scripts</div><div class="NavContent" style="text-align:left"><ul>')
local deflang
local function lfrom(ord)
local namels = {}
ti(namels, scriptCode)
ti(namels, 'lang')
ti(namels, ord)
return args[table.concat(namels)] or deflang
end
for _, script in ipairs(availableScripts) do
scriptCode = script:getCode()
if args[scriptCode] ~= '-' then
deflang = (args.letter == '1' or args.letter == 1) and
(ltrlang[scriptCode] or 'mul')
or 'pi'
terms = { args[scriptCode], args[scriptCode..'2'], args[scriptCode..'3'],
args[scriptCode..'4'], args[scriptCode..'5'], args[scriptCode..'6'],
args[scriptCode..'7'], args[scriptCode..'8']}
langs = {lfrom(''), lfrom('2'), lfrom('3'),
lfrom('4'), lfrom('5'), lfrom('6'),
lfrom('7'), lfrom('8')}
if args.hl1 and scriptCode == 'Latn' then -- Discard argument 'Latn'
terms = {terms[2], terms[3], terms[4], terms[5], terms[6], terms[7], terms[8]}
langs = {langs[2], langs[3], langs[4], langs[5], langs[6], langs[7], langs[8]}
end
local t1, t2, t3, t4
t1 = translit(latinForm, scriptCode, {}) -- not affect Latn itself
if scriptCode == 'Thai' or scriptCode == 'Laoo' then
t2 = translit(latinForm, scriptCode, {impl='no'})
end
-- For Lao script without implicit vowels, 'y' can also be 'ຢ', but seemingly
-- not if a Buddhist Institute consonant is used.
if scriptCode == 'Laoo' then
if not mw.ustring.find(t2, '[ຆຌຏຐຑຒຓຘຠຨຩ]') then
t3 = mw.ustring.gsub(t2, 'ຍ', 'ຢ')
end
end
if scriptCode == 'Mymr' then
t2 = translit(latinForm, scriptCode, {variation='1'}) --Mon
t3 = translit(latinForm, scriptCode, {variation='2'}) --Old Shan
t4 = translit(latinForm, scriptCode, {variation='3'}) --New Shan
end
if #terms == 0 then
terms[1] = t1
if t2 and (t1 ~= t2) then ti(terms, t2) end
if t3 and (t1 ~= t3) and (t2 ~= t3) then ti(terms, t3) end
if t4 and (t1 ~= t4) and (t2 ~= t4) and (t3 ~= t4) then ti(terms, t4) end
for k = 1, 4 do langs[k] = deflang end
elseif terms[1] ~= t1 and terms[2] ~= t1 and terms[3] ~= t1 and terms[4] ~= t1 then
output:insert('[[Category:Pali terms with inconsistent transliterations]]')
end
first = true
for k, term in ipairs(terms) do
if term ~= nil and term ~= PAGENAME then
if first then
first = false
output:insert('<li>')
else
output:insert(' or ')
end
local langobj
if langs[k] == 'pi' then
langobj = lang
elseif langs[k] == 'mul' then
langmul = langmul or m_lang.getByCode('mul')
langobj = langmul
else
langobj = m_lang.getByCode(langs[k])
end
output:insert(links.full_link({lang = langobj, sc = script, term = term, tr = '-'}))
end
end
if not first then
output:insert(' ' .. labels.show_labels {
lang = lang,
labels = { script:getDisplayForm() },
} .. '</li>')
end
end
end
output:insert('</ul></div></div>')
return output:concat()
end
function export.show(frame)
local params = {
["head"] = {list = true},
["tr"] = {list = true, allow_holes = true, default = "-"},
}
local poscat = frame.args[1] or error("Part of speech has not been specified. Please pass parameter 1 to the module invocation.")
local is_noun
if poscat == "nouns" or poscat == "proper nouns" or poscat == "pronouns" or poscat == "noun forms" then
is_noun = true
params[1] = {list = "g", default = "?"}
params["m"] = {list = true}
params["f"] = {list = true}
params["n"] = {list = true}
end
if poscat == "verbs" then
params[1] = {default = "?"}
end
local args = require("Module:parameters").process(frame:getParent().args, params)
for i, v in ipairs(args.tr) do
if args.tr[i] == '+' then args.tr[i] = nil end
end
local genders = {}
if is_noun then
genders = args[1]
end
local data = {lang = lang, pos_category = poscat, categories = {},
sccat = true, heads = args.heads, genders = genders, inflections = {}, translits = args.tr
}
if is_noun then
if #args.m > 0 then
args.m.label = "masculine"
table.insert(data.inflections, args.m)
end
if #args.f > 0 then
args.f.label = "feminine"
table.insert(data.inflections, args.f)
end
if #args.n > 0 then
args.n.label = "neuter"
table.insert(data.inflections, args.n)
end
if #args.m > 0 or #args.f > 0 or #args.n > 0 then
table.insert(data.categories, "Pali nouns with other-gender equivalents")
end
end
if poscat == "verbs" then
table.insert(data.inflections, {label = "root", args[1]})
end
return require("Module:headword").full_headword(data)
end
return export