local export = {}
local gsub = mw.ustring.gsub
local sub = mw.ustring.sub
local len = mw.ustring.len
local match = mw.ustring.match
local initialConv = {
= "p", = "pʰx", = "m", = "f", = "v",
= "t", = "tʰx", = "n", = "l",
= "t͡s", = "t͡sʰ", = "s", = "ʐ",
= "t͡ɕ", = "t͡ɕʰ", = "ɕ",
= "k", = "kʰx", = "ɣ", = "ŋ",
= "x", = ""
}
local finalConv = {
= "z̩",
= "i",
= "u",
= "y",
= "əɻ",
= "a", = "ia", = "ua",
= "ɤ", = "uɤ",
= "ie", = "ye",
= "ai", = "uai",
= "ei", = "uei",
= "au", = "iau",
= "əu", = "iəu",
= "æ̃", = "uæ̃",
= "ɒ̃", = "iɒ̃", = "uɒ̃",
= "aŋ", = "iaŋ", = "uaŋ",
= "ə̃ŋ",
= "ĩŋ",
= "ũŋ",
= "ỹŋ",
= "aʔ", = "iaʔ", = "uaʔ",
= "əʔ", = "iəʔ", = "uəʔ", = "yəʔ",
= "z̩ɻ",
= "iɻ",
= "uɻ",
= "yɻ",
= "ɑɻ", = "iɑɻ", = "uɑɻ",
= "ɤɻ", = "uɤɻ",
= "ieɻ", = "yeɻ",
= "ɐɻ", = "uɐɻ",
= "əɻ", = "uəɻ",
= "ɒoɻ", = "iɒoɻ",
= "əuɻ", = "iəuɻ",
= "æ̃ɻ", = "uæ̃ɻ",
= "ɒ̃ɻ", = "iɒ̃ɻ", = "uɒ̃ɻ",
= "ʌ̃ɻ",
= "ĩɻ",
= "ũɻ",
= "ỹɻ",
= "ɐɻ", = "iɐɻ", = "uɐɻ",
= "əɻ", = "ieɻ", = "uəɻ", = "yeɻ",
}
local toneConv = {
= "¹¹", = "⁵³", = "⁴⁵", = "²", = "⁵⁴", = "¹", = "⁻"
}
local toneSandhi = {
= "2-1", = "2-1",
= "4-5", = "4-5",
= "4-3", = "4-3",
= "5-4", = "5-4",
}
local neutral = {
= "⁴", = "³", = "²"
}
function export.ipa(text, feature)
if type(text) == "table" then
text = text.args
end
local syllables, initial, final, tone, ipa, result = {}, {}, {}, {}, {}, {}
local words = mw.text.split(text, "/")
for _, word in ipairs(words) do
syllables = mw.text.split(word, " ")
for index, syllable in ipairs(syllables) do
initial = match(syllable, "^??")
final = match(sub(syllable, len(initial) + 1, -1), "^*")
tone = match(syllable, "+$") or (index ~= 1 and "6" or "")
end
for index = 1, #syllables do
initial = initialConv] or error(("Tanınmayan başlangıç: \"%s\""):format(initial))
final = (match(initial, "") and final == "i") and "r" or final
final = finalConv] or error(("Tanınmayan bitiş: \"%s\""):format(final))
tone = tone == "6" and neutral] or tone
tone = feature ~= "no_sandhi" and toneSandhi.."+"..(tone or "")] or tone
tone = gsub(tone, ".", toneConv)
ipa = initial .. final .. tone
end
table.insert(result, table.concat(ipa, " "))
end
return table.concat(result, "/, /")
end
function export.rom(text)
text = gsub(text, "/", " / ")
text = gsub(text, '(+)', '<sup>%1</sup>')
return text
end
return export