local export = {}
local m_string_utils = require("Module:string utilities")
local gsub = m_string_utils.gsub
local sub = m_string_utils.sub
local match = m_string_utils.match
local find = m_string_utils.find
local len = m_string_utils.len
local lower = m_string_utils.lower
local toNFD = mw.ustring.toNFD
function export.hrs_to_ipa(text)
local initial_conv = {
["b"] = "p", ["p"] = "pʰ", ["m"] = "m", ["f"] = "f", ["v"] = "v", ["bb"] = "b",
["d"] = "t", ["t"] = "tʰ", ["n"] = "n", ["l"] = "l",
["g"] = "k", ["k"] = "kʰ", ["ng"] = "ŋ", ["h"] = "h",
["z"] = "t͡s", ["c"] = "t͡sʰ", ["s"] = "s",
["j"] = "t͡ɕ", ["q"] = "t͡ɕʰ", ["x"] = "ɕ",
["zh"] = "t͡ʃ", ["ch"] = "t͡ʃʰ", ["sh"] = "ʃ", ["rh"] = "ʒ",
[""] = "",
}
local final_conv = {
["ii"] = "ɨ",
["i"] = "i", ["e"] = "e", ["a"] = "a", ["o"] = "o", ["u"] = "u",
["ie"] = "ie", ["eu"] = "eu", ["ieu"] = "ieu",
["ia"] = "ia", ["ua"] = "ua",
["ai"] = "ai", ["iai"] = "iai", ["uai"] = "uai",
["au"] = "au", ["iau"] = "iau",
["io"] = "io", ["oi"] = "oi", ["ioi"] = "ioi",
["iu"] = "iu", ["ui"] = "ui", ["iui"] = "iui",
["ue"] = "ue",
["iim"] = "ɨm", ["im"] = "im",
["em"] = "em", ["iem"] = "iem",
["am"] = "am", ["iam"] = "iam",
["iin"] = "ɨn", ["in"] = "in",
["en"] = "en", ["ien"] = "ien", ["uen"] = "uen",
["an"] = "an", ["ian"] = "ian", ["uan"] = "uan",
["on"] = "on", ["ion"] = "ion",
["un"] = "un", ["iun"] = "iun",
["ang"] = "aŋ", ["iang"] = "iaŋ", ["uang"] = "uaŋ",
["ong"] = "oŋ", ["iong"] = "ioŋ",
["ung"] = "uŋ", ["iung"] = "iuŋ",
["er"] = "ə",
["iib"] = "ɨp̚", ["ib"] = "ip̚",
["eb"] = "ep̚", ["ieb"] = "iep̚",
["ab"] = "ap̚", ["iab"] = "iap̚",
["iid"] = "ɨt̚", ["id"] = "it̚",
["ed"] = "et̚", ["ied"] = "iet̚", ["ued"] = "uet̚",
["ad"] = "at̚", ["iad"] = "iat̚", ["uad"] = "uat̚",
["od"] = "ot̚", ["iod"] = "iot̚",
["ud"] = "ut̚", ["iud"] = "iut̚",
["ag"] = "ak̚", ["iag"] = "iak̚", ["uag"] = "uak̚",
["og"] = "ok̚", ["iog"] = "iok̚",
["ug"] = "uk̚", ["iug"] = "iuk̚",
["m"] = "m̩", ["n"] = "n̩", ["ng"] = "ŋ̍",
}
local tone_conv = {
["Sixian"] = {
["1"] = "24", ["2"] = "31", ["3"] = "55", ["4"] = "2",
["5"] = "11", ["8"] = "5",
},
["Hailu"] = {
["1"] = "53", ["2"] = "24", ["3"] = "11", ["4"] = "5",
["5"] = "55", ["7"] = "33", ["8"] = "2",
}
}
local syllables, initial, final, tone, ipa = {}, {}, {}, {}, {}, {}
syllables = mw.text.split(text, " ")
for i, syllable in ipairs(syllables) do
syllable = gsub(syllable, ",", "")
--find initial, final, tone
initial[i] = match(syllable, "^([bpmfvdtnlgkhzcsjqxr][ghb]?)")
tone[i] = match(syllable, "([´ˇ`+])$")
final[i] = sub(syllable, len(initial[i]) + 1, -1 - len(tone[i]))
--convert initial, final, tone
initial[i] = initial_conv[initial[i]]
final[i] = final_conv[final[i]]
tone[i] = tone_conv[tone[i]]
ipa[i] = initial[i] .. final[i] .. tone[i]
end
return gsub(table.concat(ipa, " "), ",", "")
end
return export