local export = {}
local palatalisation_inducing = {
= true,
= true,
= true,
= true,
= true,
= true,
= true,
= true,
= true,
= true,
= true,
= true,
= true,
= true,
= true,
= true,
= true,
= true,
= true,
= true,
= true,
= true,
= true,
= true,
= true,
= true,
= true,
= true,
= true,
= true,
= true,
= true,
= true,
= true,
= true,
= true,
= true,
= true,
= true,
= true,
= true,
= true,
= true,
= true,
= true,
= true,
= true,
= true,
= true,
= true,
= true,
= true,
= true,
= true,
= true,
= true,
= true,
= true,
= true,
= true,
= true,
= true,
= true,
= true,
= true,
= true,
= true,
= true,
= true,
= true,
= true,
= true,
= true,
= true,
= true,
= true,
= true,
= true,
= true,
= true,
= true,
= true,
= true,
= true,
= true,
= true,
= true,
= true,
= true,
= true,
= true,
= true,
= true,
= true,
= true,
= true,
= true,
}
local labialisation_inducing = {
= true,
= true,
= true,
= true,
= true,
= true,
= true,
= true,
= true,
= true,
= true,
= true,
= true,
= true,
= true,
= true,
= true,
= true,
= true,
= true,
= true,
= true,
= true,
= true,
= true,
= true,
= true,
= true,
= true,
= true,
= true,
= true,
= true,
}
local fricativisation_inducing = {
= true,
= true,
= true,
= true,
= true,
= true,
= true,
= true,
= true,
= true,
= true,
= true,
= true,
= true,
= true,
= true,
}
local m_lenition_inducing = {
= true,
= true,
= true,
= true,
= true,
= true,
= true,
= true,
}
local r_lenition_inducing = {
= true,
= true,
= true,
}
local initial_outcomes = {
= "b", = "p", = "b", = "m",
= "d", = "t", = "d", = "n",
= "zh", = "ch", = "zh", = "n",
= "z", = "c", = "z", = "s", = "s",
= "zh", = "ch", = "zh", = "sh", = "s",
= "zh", = "ch", = "sh", = "sh", = "sh",
= "g", = "k", = "g", = "h", = "h",
= "", = "", = "", = "",
= "l", = "r",
}
local rhyme_outcomes = {
= { "eng", "ong", "-", "-", "-", "ong", "eng", "ong", "-" },
= { "eng", "ong", "ong", "ong", "ong", "iong", "ong", "ong", "ong" },
= { "u", "u", "-", "-", "-", "u", "u", "u", "-" },
= { "u", "u", "u", "u", "u", "u", "u", "ü", "u" },
= { "eng", "ong", "-", "-", "-", "ong", "-", "ong", "-" },
= { "u", "u", "-", "-", "-", "u", "u", "u", "-" },
= { "eng", "ong", "ong", "-", "ong", "iong", "ong", "ong", "ong" },
= { "u", "u", "u", "-", "u", "u", "u", "ü", "u" },
= { "ang", "-", "uang", "uang", "-", "iang", "ang", "ang", "-" },
= { "o", "-", "uo", "uo", "-", "ue", "ue", "uo", "-" },
= { "i", "i", "-", "-", "i", "i", "i", "i", "er" },
= { "-", "ui", "-", "-", "ui", "ui", "ei", "ei", "ui" },
= { "i", "-", "i", "i", "-", "i", "i", "i", "-" },
= { "-", "-", "ui", "uai", "-", "ui", "ei", "ei", "-" },
= { "i", "i", "-", "-", "i", "i", "i", "i", "er" },
= { "-", "ui", "-", "-", "ui", "ui", "ei", "ei", "ui" },
= { "i", "i", "i", "i", "i", "i", "i", "i", "-" },
= { "-", "-", "ui", "uai", "ui", "ui", "ei", "-", "-" },
= { "-", "i", "i", "i", "i", "i", "i", "i", "er" },
= { "-", "-", "-", "-", "-", "i", "i", "-", "-" },
= { "ei", "-", "-", "-", "-", "ui", "ei", "-", "-" },
= { "-", "u", "u", "u", "u", "u", "u", "ü", "u" },
= { "u", "u", "-", "-", "-", "u", "u", "u", "-" },
= { "u", "u", "u", "u", "u", "u", "u", "ü", "u" },
= { "ei", "ai", "-", "-", "-", "ai", "ai", "ai", "-" },
= { "ui", "ui", "-", "-", "-", "ui", "ei", "ei", "-" },
= { "-", "-", "-", "-", "-", "-", "i", "-", "-" },
= { "ei", "-", "-", "-", "-", "ui", "ei", "-", "-" },
= { "ai", "-", "ai", "ai", "-", "ie", "e", "-", "-" },
= { "-", "uai", "-", "uai", "-", "uai", "ai", "-", "-" },
= { "ai", "-", "ai", "ai", "-", "ia", "a", "ai", "-" },
= { "-", "-", "uai", "-", "-", "ua", "a", "-", "-" },
= { "ai", "-", "ai", "ai", "-", "ie", "e", "ai", "-" },
= { "-", "-", "uai", "uai", "-", "uai", "ai", "ai", "-" },
= { "i", "i", "-", "-", "i", "-", "i", "i", "-" },
= { "-", "ui", "-", "-", "ui", "-", "ei", "-", "ui" },
= { "-", "-", "i", "i", "-", "i", "i", "-", "-" },
= { "-", "-", "ui", "uai", "-", "ui", "ei", "-", "-" },
= { "i", "i", "-", "-", "-", "i", "i", "i", "-" },
= { "-", "-", "-", "-", "-", "ui", "ei", "-", "-" },
= { "ei", "ai", "-", "-", "-", "ai", "ai", "ai", "-" },
= { "ei", "ui", "-", "-", "-", "ui", "ei", "ei", "-" },
= { "in", "in", "-", "-", "en", "in", "in", "in", "en" },
= { "in", "-", "en", "en", "-", "in", "in", "in", "-" },
= { "-", "-", "-", "-", "-", "un", "un", "-", "-" },
= { "-", "-", "-", "en", "-", "-", "-", "-", "-" },
= { "-", "un", "un", "-", "un", "un", "un", "un", "un" },
= { "i", "i", "-", "-", "i", "i", "i", "i", "i" },
= { "i", "-", "i", "-", "-", "i", "i", "i", "-" },
= { "-", "-", "-", "-", "-", "-", "u", "-", "-" },
= { "-", "-", "-", "e", "-", "-", "-", "-", "-" },
= { "-", "u", "u", "uai", "u", "u", "u", "ü", "-" },
= { "-", "un", "-", "-", "-", "en", "en", "-", "-" },
= { "-", "-", "-", "-", "-", "e", "-", "-", "-" },
= { "en", "un", "-", "-", "-", "un", "en", "un", "-" },
= { "u", "u", "-", "-", "-", "u", "u", "u", "-" },
= { "-", "-", "-", "-", "-", "in", "in", "-", "-" },
= { "-", "-", "-", "-", "-", "i", "i", "-", "-" },
= { "en", "-", "-", "-", "-", "un", "un", "-", "-" },
= { "u", "-", "-", "-", "-", "u", "u", "-", "-" },
= { "an", "an", "-", "-", "-", "an", "an", "an", "-" },
= { "an", "uan", "-", "-", "-", "uan", "an", "uan", "-" },
= { "a", "a", "-", "-", "-", "e", "e", "a", "-" },
= { "o", "uo", "-", "-", "-", "uo", "o", "uo", "-" },
= { "-", "-", "-", "-", "-", "ian", "an", "-", "-" },
= { "an", "-", "-", "-", "-", "uan", "uan", "-", "-" },
= { "-", "-", "-", "-", "-", "ie", "e", "-", "-" },
= { "a", "-", "-", "-", "-", "ue", "ue", "-", "-" },
= { "an", "-", "an", "an", "-", "ian", "an", "an", "-" },
= { "-", "-", "-", "uan", "-", "uan", "an", "uan", "-" },
= { "a", "-", "a", "a", "-", "ia", "a", "-", "-" },
= { "-", "-", "ua", "ua", "-", "ua", "a", "a", "-" },
= { "an", "-", "an", "an", "-", "ian", "an", "an", "-" },
= { "-", "-", "-", "uan", "-", "uan", "-", "uan", "-" },
= { "a", "-", "-", "a", "-", "ia", "a", "a", "-" },
= { "-", "-", "ua", "ua", "-", "ua", "a", "a", "-" },
= { "ian", "ian", "-", "-", "an", "ian", "an", "ian", "an" },
= { "-", "uan", "-", "-", "uan", "uan", "uan", "uan", "uan" },
= { "ian", "-", "an", "an", "-", "ian", "an", "ian", "-" },
= { "-", "-", "uan", "uan", "-", "uan", "uan", "-", "-" },
= { "ie", "ie", "-", "-", "e", "-", "e", "ie", "e" },
= { "-", "ue", "-", "-", "uo", "ue", "ue", "üe", "uo" },
= { "ie", "-", "e", "e", "-", "ue", "e", "-", "-" },
= { "-", "-", "uo", "uo", "-", "ue", "ue", "üe", "-" },
= { "ian", "ian", "-", "-", "-", "ian", "an", "ian", "-" },
= { "-", "-", "-", "-", "-", "uan", "uan", "-", "-" },
= { "ie", "ie", "-", "-", "-", "ie", "e", "ie", "-" },
= { "-", "-", "-", "-", "-", "ue", "ue", "-", "-" },
= { "ao", "ao", "-", "-", "-", "ao", "ao", "ao", "-" },
= { "ao", "-", "ao", "ao", "-", "iao", "ao", "ao", "-" },
= { "iao", "iao", "-", "-", "ao", "iao", "ao", "iao", "ao" },
= { "iao", "-", "ao", "-", "-", "iao", "ao", "-", "-" },
= { "iao", "iao", "-", "-", "-", "iao", "ao", "iao", "-" },
= { "uo", "uo", "-", "-", "-", "e", "e", "uo", "-" },
= { "o", "uo", "-", "-", "-", "uo", "o", "uo", "-" },
= { "-", "-", "-", "-", "-", "ie", "-", "-", "-" },
= { "-", "ue", "-", "-", "-", "ue", "ue", "üe", "-" },
= { "a", "a", "a", "a", "-", "ia", "a", "a", "-" },
= { "-", "-", "ua", "ua", "-", "ua", "a", "-", "-" },
= { "ie", "ie", "e", "-", "e", "-", "e", "-", "e" },
= { "ang", "ang", "-", "-", "-", "ang", "ang", "ang", "-" },
= { "-", "-", "-", "-", "-", "uang", "ang", "-", "-" },
= { "o", "uo", "-", "-", "-", "e", "e", "uo", "-" },
= { "o", "uo", "-", "-", "-", "uo", "o", "uo", "-" },
= { "-", "iang", "ang", "uang", "ang", "iang", "ang", "iang", "ang" },
= { "ang", "-", "-", "-", "-", "uang", "ang", "-", "-" },
= { "-", "ue", "uo", "uo", "uo", "ue", "ue", "üe", "uo" },
= { "o", "-", "-", "-", "-", "ue", "ue", "-", "-" },
= { "eng", "eng", "eng", "eng", "-", "eng", "eng", "eng", "-" },
= { "-", "-", "-", "-", "-", "ong", "eng", "-", "-" },
= { "ing", "-", "-", "eng", "-", "ing", "ing", "-", "-" },
= { "-", "-", "-", "-", "-", "iong", "ong", "-", "-" },
= { "o", "-", "e", "a", "-", "e", "e", "-", "-" },
= { "-", "-", "-", "-", "-", "e", "o", "uo", "-" },
= { "i", "-", "-", "i", "-", "i", "i", "-", "-" },
= { "-", "-", "-", "-", "-", "-", "u", "-", "-" },
= { "eng", "-", "eng", "eng", "-", "eng", "eng", "eng", "-" },
= { "-", "-", "-", "-", "-", "ong", "eng", "-", "-" },
= { "o", "-", "e", "e", "-", "e", "e", "e", "-" },
= { "-", "-", "-", "uo", "-", "uo", "-", "-", "-" },
= { "ing", "ing", "eng", "-", "eng", "ing", "ing", "ing", "-" },
= { "-", "ing", "-", "-", "-", "iong", "ong", "-", "-" },
= { "i", "i", "i", "-", "i", "-", "i", "-", "-" },
= { "-", "u", "-", "-", "u", "u", "u", "-", "-" },
= { "ing", "ing", "-", "-", "-", "ing", "ing", "ing", "-" },
= { "-", "-", "-", "-", "-", "iong", "ong", "-", "-" },
= { "i", "i", "-", "-", "-", "i", "i", "i", "-" },
= { "-", "-", "-", "-", "-", "u", "-", "-", "-" },
= { "eng", "eng", "-", "-", "-", "eng", "-", "eng", "-" },
= { "-", "-", "-", "-", "-", "ong", "-", "-", "-" },
= { "o", "e", "-", "-", "-", "e", "e", "e", "-" },
= { "-", "-", "-", "-", "-", "uo", "-", "-", "-" },
= { "ing", "ing", "eng", "eng", "eng", "ing", "ing", "ing", "eng" },
= { "i", "i", "i", "e", "i", "i", "i", "i", "-" },
= { "-", "-", "-", "-", "-", "u", "u", "-", "-" },
= { "ou", "iu", "ou", "ou", "ou", "iu", "ou", "iu", "ou" },
= { "ou", "ou", "-", "-", "-", "ou", "ou", "ou", "-" },
= { "iao", "iu", "-", "ou", "-", "iu", "ou", "iu", "-" },
= { "-", "in", "-", "-", "en", "in", "in", "in", "en" },
= { "in", "-", "en", "en", "-", "in", "in", "in", "-" },
= { "-", "i", "-", "-", "i", "-", "i", "i", "i" },
= { "i", "-", "i", "e", "-", "i", "i", "i", "-" },
= { "an", "an", "-", "-", "-", "an", "an", "an", "-" },
= { "a", "a", "-", "-", "-", "e", "e", "a", "-" },
= { "-", "-", "-", "-", "-", "ian", "an", "-", "-" },
= { "an", "-", "uan", "-", "-", "uan", "-", "-", "-" },
= { "-", "-", "-", "-", "-", "ie", "e", "-", "-" },
= { "a", "-", "-", "-", "-", "-", "-", "-", "-" },
= { "an", "-", "-", "an", "-", "ian", "an", "-", "-" },
= { "-", "-", "a", "a", "-", "ia", "a", "-", "-" },
= { "-", "-", "an", "an", "-", "ian", "an", "an", "-" },
= { "-", "-", "a", "a", "-", "ia", "a", "a", "-" },
= { "-", "ian", "-", "-", "an", "ian", "an", "ian", "an" },
= { "-", "-", "an", "an", "-", "ian", "an", "ian", "-" },
= { "-", "ie", "-", "-", "e", "ie", "e", "ie", "e" },
= { "-", "-", "e", "e", "-", "ie", "e", "ie", "-" },
= { "ian", "ian", "-", "-", "-", "ian", "an", "ian", "-" },
= { "ie", "ie", "-", "-", "-", "ie", "-", "ie", "-" },
= { "an", "an", "-", "-", "-", "an", "an", "an", "-" },
= { "a", "a", "-", "-", "-", "e", "e", "a", "-" },
}
local initial_class = {
= 1,
= 1,
= 1,
= 1,
= 2,
= 2,
= 2,
= 2,
= 3,
= 3,
= 3,
= 8,
= 2,
= 2,
= 2,
= 2,
= 2,
= 4,
= 4,
= 4,
= 4,
= 4,
= 5,
= 5,
= 5,
= 5,
= 5,
= 6,
= 6,
= 6,
= 6,
= 6,
= 6,
= 7,
= 7,
= 7,
= 8,
= 9,
}
local devoicing_initial = {
= true,
= true,
= true,
= true,
= true,
= true,
= true,
}
local devoicing_outcomes = {
= "p",
= "t",
= "ch",
= "c",
= "ch",
= "k",
= "q",
= "f",
}
local palatalisation_outcomes = {
= "j",
= "q",
= "x",
= "j",
= "q",
= "x",
= "y",
}
local fricativisation_initial = {
= true,
= true,
= true,
}
local palatalisation_initial_dental = {
= true,
= true,
= true,
= true,
= true,
}
local palatalisation_initial_velar_glottal = {
= true,
= true,
= true,
= true,
= true,
= true,
= true,
= true,
= true,
}
local labialisation_initial = {
= true,
= true,
= true,
= true,
}
local fully_voiced_initial = {
= true,
= true,
= true,
= true,
= true,
= true,
= true,
= true,
= true,
= true,
= true,
}
local partially_voiced_initial = {
= true,
= true,
= true,
= true,
= true,
= true,
= true,
= true,
}
function export.predict_cmn(initial, final, tone)
initialClass = initial_class
initial_result = initial_outcomes
if fricativisation_inducing and fricativisation_initial then
initial_result = "f"
end
if m_lenition_inducing and initial == 4 then
initial_result = "w"
end
if palatalisation_inducing and final > 20 and palatalisation_initial_dental then
initial_result = palatalisation_outcomes
elseif palatalisation_inducing and palatalisation_initial_velar_glottal then
initial_result = palatalisation_outcomes
end
if labialisation_inducing and labialisation_initial then
initial_result = "w"
end
if tone == 1 and devoicing_initial then
initial_result = devoicing_outcomes
end
if r_lenition_inducing and initial == 38 then
initial_result = ""
end
final_result = rhyme_outcomes
if tone == 1 then
if fully_voiced_initial or partially_voiced_initial then
tone_result = 2
else
tone_result = 1
end
elseif tone == 2 then
if fully_voiced_initial then
tone_result = 4
else
tone_result = 3
end
elseif tone == 3 then
tone_result = 4
else
if fully_voiced_initial then
tone_result = 2
elseif partially_voiced_initial then
tone_result = 4
else
tone_result = ""
end
end
result = mw.ustring.gsub(initial_result .. final_result .. tone_result, "yi()", "y%1")
result = mw.ustring.gsub(result, "wu()", "w%1")
result = mw.ustring.gsub(result, "wui", "wei")
return result
end
return export