Module:blt-pron

local export = {} local PAGENAME = mw.title.getCurrentTitle.text local find = mw.ustring.find local gsub = mw.ustring.gsub local rhyme

local pre = { [1] = {"([ꪀ-ꪯ]ꪫ?)ꪚꪾ", "%1ꪰꪚ"}, -- no tone mark [2] = {"([ꪀ-ꪯ]ꪫ?)ꪾꪚ", "%1ꪰꪚ"}, -- no tone mark [3] = {"ꫛ", "ꪶꪁꪙ"}, [4] = {"ꫜ", "ꪙꪳ꪿ꪉ"}, [5] = {"([ꪵꪶꪹꪻꪼ])([ꪀ-ꪯ]ꪫ?)", "%2%1"}, -- for easier processing [6] = {"(.*)([꪿꫁])(.*)", "%1%3%2"}, -- for easier processing }

local initials = { ["ꪀ"] = "k", ["ꪁ"] = "k", ["ꪂ"] = "kʰ", ["ꪃ"] = "kʰ", ["ꪄ"] = "x", ["ꪅ"] = "x", ["ꪆ"] = "ɡ", ["ꪇ"] = "ɡ", ["ꪈ"] = "ŋ", ["ꪉ"] = "ŋ", ["ꪊ"] = "t͡ɕ", ["ꪋ"] = "t͡ɕ", ["ꪌ"] = "t͡ɕʰ", ["ꪍ"] = "t͡ɕʰ", ["ꪎ"] = "s", ["ꪏ"] = "s", ["ꪐ"] = "ɲ", ["ꪑ"] = "ɲ", ["ꪒ"] = "d", ["ꪓ"] = "d", ["ꪔ"] = "t", ["ꪕ"] = "t", ["ꪖ"] = "tʰ", ["ꪗ"] = "tʰ", ["ꪘ"] = "n", ["ꪙ"] = "n", ["ꪚ"] = "b", ["ꪛ"] = "b", ["ꪜ"] = "p", ["ꪝ"] = "p", ["ꪞ"] = "pʰ", ["ꪟ"] = "pʰ", ["ꪠ"] = "f", ["ꪡ"] = "f", ["ꪢ"] = "m", ["ꪣ"] = "m", ["ꪤ"] = "j", ["ꪥ"] = "j", ["ꪦ"] = "r", ["ꪧ"] = "r", ["ꪨ"] = "l", ["ꪩ"] = "l", ["ꪪ"] = "v", ["ꪫ"] = "v", ["ꪬ"] = "h", ["ꪭ"] = "h", ["ꪮ"] = "ʔ", ["ꪯ"] = "ʔ", ["ꪀꪫ"] = "kʷ", ["ꪁꪫ"] = "kʷ", ["ꪂꪫ"] = "kʷʰ", ["ꪃꪫ"] = "kʷʰ", ["ꪄꪫ"] = "xʷ", ["ꪅꪫ"] = "xʷ", ["ꪆꪫ"] = "ɡʷ", ["ꪇꪫ"] = "ɡʷ", ["ꪈꪫ"] = "ŋʷ", ["ꪉꪫ"] = "ŋʷ", }

local vowels = { ["ꪰ"] = "a", ["ꪱ"] = "aː", ["ꪲ"] = "i", ["ꪳ"] = "ɨ", ["ꪴ"] = "u", ["ꪵ"] = "ɛ", ["ꪶ"] = "o", ["ꪮ"] = "ɔ", ["ꪷ"] = "ɔ", ["ꪸ"] = "iə̯", ["ꪹ"] = "ɨə̯", ["ꪺ"] = "uə̯", ["ꪻ"] = "aɰ", ["ꪼ"] = "aj", ["ꪽ"] = "an", ["ꪾ"] = "am", ["ꪹꪱ"] = "aw", ["ꪹꪷ"] = "ə", ["ꪹꪸ"] = "e", [""] = "#", } --/aɰ/ comes from Gedney's description of Tai Dam in Hudak's (2008) book (p. 12) (William J. Gedney’s comparative Tai source book) and also from Burusphat, S. (2017). Changes in Tai Dam vowels. JSEALS, 10(2). 10-22.

local finals = { [""] = "", ["ꪀ"] = "ʔ", ["ꪒ"] = "t̚", ["ꪚ"] = "p̚", ["ꪉ"] = "ŋ", ["ꪙ"] = "n", ["ꪣ"] = "m", ["ꪥ"] = "j", ["ꪫ"] = "w", ["+ꪀ"] = "k̚", ["+ꪫ"] = "w", --force final -k and -w }

-- Checked syllables have no tone mark -- and they already sound like "mai ek" -- per -- The tone letters including the glottalization ultimately come from Gedney's description of Tai Dam in Hudak's (2008) book (p. 12) (William J. Gedney’s comparative Tai source book).

local tones = { [""] = {"˨", "˥"}, -- L 22, H 55 ["꪿"] = {"˦˥", "˦"}, -- L 45, H 44 ["꫁"] = {"˨˩ˀ", "˧˩ˀ"}, -- L 21, H 31 ["ꫀ"] = {"˦˥", "˦"}, ["ꫂ"] = {"˨˩ˀ", "˧˩ˀ"}, }

function export.show(frame)

local output = {}

table.insert(output, toIPA(frame))

-- reduced hyphenetion table.insert(output, "* Hyphenation: " .. (frame:getParent.args[1] or PAGENAME) .. " ")

-- global var trick table.insert(output, "* " .. frame:expandTemplate{title = "rhymes", args = {"blt", rhyme}})

return table.concat(output, "\n")

end

function toIPA(frame)

local args = frame:getParent.args local text = args[1] or PAGENAME -- supports only one pronunciation local debug = args["d"] or nil local ipa = {}

for syl in mw.text.gsplit(text, "[ %.%-]") do		for _, v in ipairs(pre) do			syl = gsub(syl, v[1], v[2]) end

local i, v, f, t = mw.ustring.match(syl, "^([ꪀ-ꪯ]ꪫ?)([ꪰ-ꪾꪮ]*)(%+?[ꪀꪒꪚꪉꪙꪣꪥꪫ]?)([꪿ꫀ꫁ꫂ]?)$")

if find(i, "^([ꪀꪂꪄꪆꪈꪊꪌꪎꪐꪒꪔꪖꪘꪚꪜꪞꪠꪢꪤꪦꪨꪪꪬꪮ]ꪫ?)$") then --low class tn = 1 else --high class tn = 2 end if find(f, "^(%+?[ꪀꪒꪚ])$") then --checked final t = "ꫀ" end longer = (f == "" and find(vowels[v], "^([iɨuɛoɔəe])$")) -- if no final, make it longer

if debug then table.insert(ipa, "["..(i or "-").."]["..(v or "-").."]["..(f or "-").."]["..(t or "-").."]") else table.insert(ipa, initials[i] .. vowels[v] .. (longer and "ː" or "") .. finals[f] .. tones[t][tn]) rhyme = vowels[v] .. (longer and "ː" or "") .. finals[f] -- It becomes rhyme after the last iteration end end

local ipa_final = table.concat(ipa, ".") ipa_final = "[" .. ipa_final .. "]"

return "* " .. frame:expandTemplate{title = "IPA", args = {"blt", ipa_final}} .. (#ipa > 0 and "" or "")

end

return export