Module:khb-pron
Jump to navigation
Jump to search
- The following documentation is located at Module:khb-pron/documentation. [edit] Categories were auto-generated by Module:module categorization. [edit]
- Useful links: subpage list • links • transclusions • testcases • sandbox
-- For New Tai Lue script only
local export = {}
local PAGENAME = mw.title.getCurrentTitle().text
local initials = {
['ᦀ'] = {ipa = 'ʔ', class = 'high'}, ['ᦁ'] = {ipa = 'ʔ', class = 'low'},
['ᦂ'] = {ipa = 'k', class = 'high'}, ['ᦃ'] = {ipa = 'x', class = 'high'}, ['ᦄ'] = {ipa = 'ŋ', class = 'high'},
['ᦅ'] = {ipa = 'k', class = 'low'}, ['ᦆ'] = {ipa = 'x', class = 'low'}, ['ᦇ'] = {ipa = 'ŋ', class = 'low'},
['ᦈ'] = {ipa = 't͡s', class = 'high'}, ['ᦉ'] = {ipa = 's', class = 'high'}, ['ᦊ'] = {ipa = 'j', class = 'high'},
['ᦋ'] = {ipa = 't͡s', class = 'low'}, ['ᦌ'] = {ipa = 's', class = 'low'}, ['ᦍ'] = {ipa = 'j', class = 'low'},
['ᦎ'] = {ipa = 't', class = 'high'}, ['ᦏ'] = {ipa = 'tʰ', class = 'high'}, ['ᦐ'] = {ipa = 'n', class = 'high'},
['ᦑ'] = {ipa = 't', class = 'low'}, ['ᦒ'] = {ipa = 'tʰ', class = 'low'}, ['ᦓ'] = {ipa = 'n', class = 'low'},
['ᦔ'] = {ipa = 'p', class = 'high'}, ['ᦕ'] = {ipa = 'pʰ', class = 'high'}, ['ᦖ'] = {ipa = 'm', class = 'high'},
['ᦗ'] = {ipa = 'p', class = 'low'}, ['ᦘ'] = {ipa = 'pʰ', class = 'low'}, ['ᦙ'] = {ipa = 'm', class = 'low'},
['ᦚ'] = {ipa = 'f', class = 'high'}, ['ᦛ'] = {ipa = 'v', class = 'high'}, ['ᦜ'] = {ipa = 'l', class = 'high'},
['ᦝ'] = {ipa = 'f', class = 'low'}, ['ᦞ'] = {ipa = 'v', class = 'low'}, ['ᦟ'] = {ipa = 'l', class = 'low'},
['ᦠ'] = {ipa = 'h', class = 'high'}, ['ᦡ'] = {ipa = 'd', class = 'high'}, ['ᦢ'] = {ipa = 'b', class = 'high'},
['ᦣ'] = {ipa = 'h', class = 'low'}, ['ᦤ'] = {ipa = 'd', class = 'low'}, ['ᦥ'] = {ipa = 'b', class = 'low'},
['ᦦ'] = {ipa = 'kʷ', class = 'high'}, ['ᦧ'] = {ipa = 'xʷ', class = 'high'},
['ᦨ'] = {ipa = 'kʷ', class = 'low'}, ['ᦩ'] = {ipa = 'xʷ', class = 'low'},
['ᦪ'] = {ipa = 'sʷ', class = 'high'}, ['ᦫ'] = {ipa = 'sʷ', class = 'low'},
['ᦈ^'] = {ipa = 't͡ɕ', class = 'high'}, ['ᦉ^'] = {ipa = 'ɕ', class = 'high'},
['ᦋ^'] = {ipa = 't͡ɕ', class = 'low'}, ['ᦌ^'] = {ipa = 'ɕ', class = 'low'},
['ᦪ^'] = {ipa = 'ɕʷ', class = 'high'}, ['ᦫ^'] = {ipa = 'ɕʷ', class = 'low'},
}
local vowels = {
[''] = 'a', ['ᦱ'] = 'aː', ['ᦲ'] = 'i', ['ᦳ'] = 'u', ['ᦴ'] = 'uː', ['ᦳ+'] = 'uː',
['ᦵ'] = 'e', ['ᦶ'] = 'ɛ', ['ᦷ'] = 'o', ['ᦸ'] = 'ɔ', ['ᦹ'] = 'ɯ', ['ᦵᦲ'] = 'ɤ',
['ᦺ'] = 'aj', ['ᦻ'] = 'aːj', ['ᦼ'] = 'uj', ['ᦽ'] = 'oj', ['ᦾ'] = 'ɔj', ['ᦿ'] = 'ɯj', ['ᦵᧀ'] = 'ɤj',
['ᦲ+'] = 'iː', ['ᦵ+'] = 'eː', ['ᦶ+'] = 'ɛː', ['ᦷ+'] = 'oː', ['ᦸ+'] = 'ɔː', ['ᦹ+'] = 'ɯː', ['ᦵᦲ+'] = 'ɤː',
-- might read differently by regions
['ᦲ?'] = 'i(ː)', ['ᦳ?'] = 'u(ː)', ['ᦴ?'] = 'u(ː)',
['ᦵ?'] = 'e(ː)', ['ᦶ?'] = 'ɛ(ː)', ['ᦷ?'] = 'o(ː)',
['ᦸ?'] = 'ɔ(ː)', ['ᦹ?'] = 'ɯ(ː)', ['ᦵᦲ?'] = 'ɤ(ː)',
}
local finals = {
[''] = '', ['ᧁ'] = 'w',
['ᧂ'] = 'ŋ', ['ᧃ'] = 'n', ['ᧄ'] = 'm',
['ᧅ'] = 'k̚', ['ᧆ'] = 't̚', ['ᧇ'] = 'p̚',
['#'] = 'ʔ', -- non-final with ᦰ
}
local tones = {
[''] = {high = '˥', low = '˥˩'},
['ᧈ'] = {high = '˧˥', low = '˧'}, -- also checked syllable
['ᧉ'] = {high = '˩˧', low = '˩'},
['$'] = {high = '', low = ''}, -- toneless syllable
}
function export.show(frame)
local args = frame:getParent().args
local text = args[1] or PAGENAME -- supports only one pronunciation
local debug = args['d'] or nil
local qualifier = args['q'] or nil
local ipa = {}
local haveToneless = false
text = mw.ustring.gsub(text, '᧞', 'ᦶᦜ')
text = mw.ustring.gsub(text, '᧟', 'ᦶᦜᧁ')
for syl in mw.text.gsplit(text, '[ %.%-]') do
syl = mw.ustring.gsub(syl, '([ᦵᦶᦷᦺ])([ᦀ-ᦫ])', '%2%1') -- for easier detection
local i, v, f, t, s = mw.ustring.match(syl, '^([ᦀ-ᦫ])([ᦱ-ᧀ%+%?]*)([ᧁ-ᧇ]?)([ᧈᧉ%$]?)(ᦰ?)$')
if mw.ustring.match(i, '^([ᦈᦉᦋᦌᦪᦫ])$') and mw.ustring.match(v, '^([ᦲᦵᦶ]%+?)$') then
i = i .. '^'
end
if f == '' then
if s == '' then
if v == '' then
t = '$'
elseif v == 'ᦳ' and t == '' then
f = '#'
t = 'ᧈ'
elseif (mw.ustring.match(v, '^([ᦲᦵᦶᦷᦸᦹ])$') or v == 'ᦵᦲ') and t ~= '$' then
v = v .. '+'
end
else --s == 'ᦰ'
f = '#'
if t == '' then
t = 'ᧈ'
end
end
end
if f == 'ᧅ' or f == 'ᧆ' or f == 'ᧇ' then
if (mw.ustring.match(v, '^([ᦲᦳᦵᦶᦷᦸᦹ])$') or v == 'ᦵᦲ') and t == 'ᧈ' then
v = v .. '+'
else
t = 'ᧈ'
end
end
if t == '$' then
haveToneless = true
end
if debug then
table.insert(ipa, '['..(i or '-')..']['..(v or '-')..']['..(f or '-')..']['..(t or '-')..']['..(s or '-')..']')
else
table.insert(ipa, initials[i].ipa .. vowels[v] .. finals[f] .. tones[t][initials[i].class])
end
end
return '* ' .. (qualifier and frame:expandTemplate{title = 'qualifier', args = {qualifier}} .. ' ' or '') .. '[[Wiktionary:International Phonetic Alphabet|IPA]]<sup>([[Appendix:Lü pronunciation|key]])</sup>: <span class="IPA">/' .. table.concat(ipa, '.') .. '/</span>[[Category:Lü terms with IPA pronunciation]]' .. (#ipa > 0 and '[[Category:Lü ' .. #ipa .. '-syllable words]]' or '') .. (haveToneless and '[[Category:Lü terms with toneless syllable]]' or '')
end
return export