local p = require("Module:UnitTests")
local m_pron = require("Module:cmn-pron")
local gsub = mw.ustring.gsub
local toNFC = mw.ustring.toNFC
local u = mw.ustring.char
local raw_pinyin = {"a!", "a!i", "a!n", "a!ng", "a!o", "ba!", "ba!i", "ba!n", "ba!ng", "ba!o", "be!", "bê!", "be!i", "be!n", "be!ng", "bi!", "bia!n", "bia!ng", "bia!o", "bie!", "bi!n", "bi!ng", "biu!", "bo!", "bo!ng", "bu!", "ca!", "ca!i", "ca!n", "ca!ng", "ca!o", "ce!", "cê!", "ce!i", "ce!n", "ce!ng", "cha!", "cha!i", "cha!n", "cha!ng", "cha!o", "che!", "che!n", "che!ng", "chi!", "cho!ng", "cho!u", "chu!", "chua!", "chua!i", "chua!n", "chua!ng", "chui!", "chu!n", "chuo!", "ci!", "co!ng", "co!u", "cu!", "cua!n", "cüa!n", "cui!", "cu!n", "cuo!", "da!", "da!i", "da!n", "da!ng", "da!o", "de!", "dê!", "de!i", "de!n", "de!ng", "di!", "dia!", "dia!n", "dia!ng", "dia!o", "die!", "di!ng", "diu!", "do!", "do!ng", "do!u", "du!", "dua!n", "dua!ng", "dui!", "du!n", "duo!", "e!", "ê!", "e!i", "e!n", "e!ng", "e!r", "fa!", "fa!i", "fa!n", "fa!ng", "fe!i", "fe!n", "fe!ng", "fia!o", "fo!", "fo!ng", "fo!u", "fu!", "ga!", "ga!i", "ga!n", "ga!ng", "ga!o", "ge!", "gê!", "ge!i", "ge!n", "ge!ng", "gi!", "gi!ng", "go!ng", "go!u", "gu!", "gua!", "gua!i", "gua!n", "gua!ng", "gui!", "gu!n", "guo!", "ha!", "ha!i", "ha!n", "ha!ng", "ha!o", "he!", "he!i", "he!n", "he!ng", "hm!", "hn!g", "ho!ng", "ho!u", "hu!", "hua!", "hua!i", "hua!n", "hua!ng", "hui!", "hu!n", "huo!", "ji!", "jia!", "jia!i", "jia!n", "jia!ng", "jia!o", "jie!", "ji!n", "ji!ng", "jio!", "jio!ng", "jiu!", "ju!", "jua!n", "jue!", "ju!n", "ka!", "ka!i", "ka!n", "ka!ng", "ka!o", "ke!", "kê!", "ke!i", "ke!n", "ke!ng", "kia!", "kia!ng", "kiu!", "ko!ng", "ko!u", "ku!", "kua!", "kua!i", "kua!n", "kua!ng", "kui!", "ku!n", "kuo!", "la!", "la!i", "la!n", "la!ng", "la!o", "le!", "le!i", "le!n", "le!ng", "li!", "lia!", "lia!n", "lia!ng", "lia!o", "lie!", "li!n", "li!ng", "liu!", "lo!", "lo!ng", "lo!u", "lu!", "lü!", "lua!n", "lüa!n", "lüe!", "lui!", "lu!n", "lü!n", "luo!", "m!", "ma!", "ma!i", "ma!n", "ma!ng", "ma!o", "me!", "me!i", "me!n", "mê!n", "me!ng", "mi!", "mia!n", "mia!o", "mie!", "mi!n", "mi!ng", "miu!", "mo!", "mo!u", "mu!", "mua!", "n!", "na!", "na!i", "na!n", "na!ng", "na!o", "ne!", "nê!", "ne!i", "ne!n", "ne!ng", "n!g", "ni!", "nia!", "nia!n", "nia!ng", "nia!o", "nie!", "ni!n", "ni!ng", "niu!", "no!ng", "no!u", "nu!", "nü!", "nua!n", "nüe!", "nu!n", "nuo!", "o!", "o!ng", "o!u", "pa!", "pa!i", "pa!n", "pa!ng", "pa!o", "pe!", "pê!", "pe!i", "pe!n", "pe!ng", "pi!", "pia!", "pia!n", "pia!o", "pie!", "pi!n", "pi!ng", "po!", "po!u", "pu!", "pu!n", "qi!", "qia!", "qia!n", "qia!ng", "qia!o", "qie!", "qi!n", "qi!ng", "qio!", "qio!ng", "qiu!", "qu!", "qua!n", "que!", "qu!n", "quo!", "ra!n", "ra!ng", "ra!o", "re!", "re!n", "re!ng", "ri!", "ro!ng", "ro!u", "ru!", "rua!", "rua!n", "rui!", "ru!n", "ruo!", "sa!", "sa!i", "sa!n", "sa!ng", "sa!o", "se!", "se!i", "se!n", "se!ng", "sha!", "sha!i", "sha!n", "sha!ng", "sha!o", "she!", "shê!", "she!i", "she!n", "she!ng", "shi!", "sho!", "sho!u", "shu!", "shua!", "shua!i", "shua!n", "shua!ng", "shui!", "shu!n", "shuo!", "si!", "sia!o", "si!ng", "so!ng", "so!u", "su!", "sua!n", "sui!", "su!n", "suo!", "ta!", "ta!i", "ta!n", "ta!ng", "ta!o", "te!", "tê!", "te!i", "te!ng", "ti!", "tia!n", "tia!o", "tie!", "ti!ng", "to!ng", "to!u", "tu!", "tua!n", "tui!", "tu!n", "tuo!", "vo!", "vê!", "vu!", "wa!", "wa!i", "wa!n", "wa!ng", "wê!", "we!i", "we!n", "we!ng", "wo!", "wu!", "xi!", "xia!", "xia!n", "xia!ng", "xia!o", "xie!", "xi!n", "xi!ng", "xio!ng", "xiu!", "xu!", "xua!n", "xue!", "xu!n", "ya!", "ya!i", "ya!n", "ya!ng", "ya!o", "ye!", "yi!", "yi!n", "yi!ng", "yo!", "yo!ng", "yo!u", "yu!", "yua!n", "yue!", "yu!n", "za!", "za!i", "za!n", "za!ng", "za!o", "ze!", "zê!", "ze!i", "ze!n", "ze!ng", "zha!", "zha!i", "zha!n", "zha!ng", "zha!o", "zhe!", "zhê!", "zhe!i", "zhe!n", "zhe!ng", "zhi!", "zho!", "zho!ng", "zho!u", "zhu!", "zhua!", "zhua!i", "zhua!n", "zhua!ng", "zhui!", "zhu!n", "zhuo!", "zi!", "zio!", "zo!", "zo!ng", "zo!u", "zu!", "zua!n", "zui!", "zu!n", "zuo!"}
local raw_pinyin_erhua = {}
for k, v in ipairs(raw_pinyin) do
if v == "e!" then
table.insert(raw_pinyin_erhua, v .. "'r")
elseif v == "e!r" then
table.insert(raw_pinyin_erhua, v)
else
table.insert(raw_pinyin_erhua, v .. "r")
end
end
local pinyin_tones = {u(0x304), u(0x301), u(0x30C), u(0x300), ""}
local pinyin = {}
setmetatable(pinyin, {
__index = function(t, k)
local v = raw_pinyin[math.ceil(k/5)]
local tone = pinyin_tones[(k - 1) % 5 + 1]
v = v:gsub("!", tone)
return toNFC(v)
end}
)
local pinyin_erhua = {}
setmetatable(pinyin_erhua, {
__index = function(t, k)
local v = raw_pinyin_erhua[math.ceil(k/5)]
local tone = pinyin_tones[(k - 1) % 5 + 1]
v = v:gsub("!", tone)
return toNFC(v)
end}
)
function p:check_convert(text, expected)
self:equals(text, m_pron.py_zhuyin(text), expected)
end
function p:check_diacr2num(text, expected)
self:equals(text, m_pron.py_transform(text,true), expected)
end
function p:iterate_conversions(examples, tests, func, name)
local fail, total = 0, 0
for i, expected in ipairs(examples) do
local ok, actual = pcall(func, tests[i])
if not (ok and actual == expected) then
fail = fail + 1
self:display_difference(false, tests[i], ok and actual or "[error]", expected, {show_difference = true})
else
self.total_tests = self.total_tests + 1
end
total = total + 1
end
self:header(name .. ": " .. tostring(fail) .. " of " .. tostring(total) .. " tests failed.")
end
function p:zhuyin_py(text, expected)
self:equals(text, m_pron.zhuyin_py(text), expected)
end
function p:gwoyeu(text, expected)
self:equals(text, m_pron.py_gwoyeu(text), expected)
end
function p:py_wg(text, expected)
self:equals(text, m_pron.py_wg(text), expected)
end
function p:yale(text, expected)
self:equals(text, m_pron.py_yale(text), expected)
end
function p:palladius(text, expected)
self:equals(text, m_pron.py_palladius(text), expected)
end
function p:test_convert_diacritics()
local examples = {
{'ōyō','ㄛ ㄧㄛ'},
--èr, ěr and apostrophe
{'ěrduo','ㄦˇ ˙ㄉㄨㄛ'},
{'èr','ㄦˋ'},
{"dì'èr shǒu","ㄉㄧˋ ㄦˋ ㄕㄡˇ"},
{'Běijīng','ㄅㄟˇ ㄐㄧㄥ'},
{'Zhōngguó','ㄓㄨㄥ ㄍㄨㄛˊ'},
{'biān ... biān ...','ㄅㄧㄢ ... ㄅㄧㄢ ...'},
{'bùyóu fēnshuō','ㄅㄨˋ ㄧㄡˊ ㄈㄣ ㄕㄨㄛ'},
--erhua (???)
{'wánr','ㄨㄢˊㄦ'},
{'dàir','ㄉㄞˋㄦ'},
-- neutral tone
{'fèiyong','ㄈㄟˋ ˙ㄩㄥ'},
{'zhùyīn','ㄓㄨˋ ㄧㄣ'},
{'fúhào','ㄈㄨˊ ㄏㄠˋ'},
{'Dōngnán-Yà','ㄉㄨㄥ ㄋㄢˊ ㄧㄚˋ'},
}
self:iterate(examples, 'check_convert')
end
function p:test_diacritics_to_numeric()
local examples = {
{'Běijīng','bei3 jing1'},
{'Zhōngguó','zhong1 guo2'},
{'zhong','zhong5'},
}
self:iterate(examples, 'check_diacr2num')
end
function p:test_convert_pinyin()
local examples = {
{'ㄉㄧˋ ㄦˋ ㄕㄡˇ', "dì èr shǒu"},
--erhua
{'ㄨㄢˊㄦ', 'wánr'},
{'ㄉㄞˋㄦ', 'dàir'}
}
self:iterate(examples, 'zhuyin_py')
end
function p:test_gwoyeu_romatzyh()
local examples = {
{'qīnghǎi','chinghae'},
{'fújiàn','fwujiann'},
{'guǎngdōng','goangdong'},
{'héběi','herbeei'},
{'húnán','hwunan'},
{'zhèjiāng','jehjiang'},
{'nèiménggǔ','neymengguu'},
{'shǎnxī','shaanshi'},
{'xīnjiāng','shinjiang'},
{'xīzàng','shitzanq'},
{'sìchuān','syhchuan'},
{'yě','yee'},
{'yǐn','yiin'},
{'biě','biee'},
{'wǒ','woo'},
{'duǒ','duoo'},
{'cí','tsyr'},
{'yù','yuh'},
{'jù','jiuh'},
{'yīdiǎnr','ideal'},
{'nǚháir','neuharl'},
{'huìr','huell'},
{'ér','erl'},
{'ěr','eel'},
{'èr','ell'},
{'chēr',"che'l"},
{'kér',"ker'l"},
{'gěr',"gee'l"},
{'gèr','gehl'},
{'yuēr',"iue'l"},
{'jiér',"jye'l"},
{'jiěr',"jieel"},
{'yèr','yell'},
{'yàngr','yanql'},
{'diàor','diawl'},
{'húr','hwul'},
{'wǔr','wuul'},
{'tùr','tull'},
{'wùr','wull'},
{'le','.le'},
}
self:iterate(examples, 'gwoyeu')
end
function p:test_py_ipa()
local raw_examples = {"ˀä", "ˀaɪ̯", "ˀän", "ˀɑŋ", "ˀɑʊ̯", "pä", "paɪ̯", "pän", "pɑŋ", "pɑʊ̯", "pɤ", "pɛ", "peɪ̯", "pən", "pɤŋ", "pi", "pi̯ɛn", "pi̯ɑŋ", "pi̯ɑʊ̯", "pi̯ɛ", "pin", "piŋ", "pi̯oʊ̯", "pu̯ɔ", "pʊŋ", "pu", "t͡sʰä", "t͡sʰaɪ̯", "t͡sʰän", "t͡sʰɑŋ", "t͡sʰɑʊ̯", "t͡sʰɤ", "t͡sʰɛ", "t͡sʰeɪ̯", "t͡sʰən", "t͡sʰɤŋ", "ʈ͡ʂʰä", "ʈ͡ʂʰaɪ̯", "ʈ͡ʂʰän", "ʈ͡ʂʰɑŋ", "ʈ͡ʂʰɑʊ̯", "ʈ͡ʂʰɤ", "ʈ͡ʂʰən", "ʈ͡ʂʰɤŋ", "ʈ͡ʂʰʐ̩", "ʈ͡ʂʰʊŋ", "ʈ͡ʂʰoʊ̯", "ʈ͡ʂʰu", "ʈ͡ʂʰu̯ä", "ʈ͡ʂʰu̯aɪ̯", "ʈ͡ʂʰu̯än", "ʈ͡ʂʰu̯ɑŋ", "ʈ͡ʂʰu̯eɪ̯", "ʈ͡ʂʰu̯ən", "ʈ͡ʂʰu̯ɔ", "t͡sʰz̩", "t͡sʰʊŋ", "t͡sʰoʊ̯", "t͡sʰu", "t͡sʰu̯än", "t͡sʰy̯ɛn", "t͡sʰu̯eɪ̯", "t͡sʰu̯ən", "t͡sʰu̯ɔ", "tä", "taɪ̯", "tän", "tɑŋ", "tɑʊ̯", "tɤ", "tɛ", "teɪ̯", "tən", "tɤŋ", "ti", "ti̯ä", "ti̯ɛn", "ti̯ɑŋ", "ti̯ɑʊ̯", "ti̯ɛ", "tiŋ", "ti̯oʊ̯", "tɔ", "tʊŋ", "toʊ̯", "tu", "tu̯än", "tu̯ɑŋ", "tu̯eɪ̯", "tu̯ən", "tu̯ɔ", "ˀɤ", "ˀɛ", "ˀeɪ̯", "ˀən", "ˀɤŋ", "ˀɤɻ", "fä", "faɪ̯", "fän", "fɑŋ", "feɪ̯", "fən", "fɤŋ", "fi̯ɑʊ̯", "fu̯ɔ", "fʊŋ", "foʊ̯", "fu", "kä", "kaɪ̯", "kän", "kɑŋ", "kɑʊ̯", "kɤ", "kɛ", "keɪ̯", "kən", "kɤŋ", "ki", "kiŋ", "kʊŋ", "koʊ̯", "ku", "ku̯ä", "ku̯aɪ̯", "ku̯än", "ku̯ɑŋ", "ku̯eɪ̯", "ku̯ən", "ku̯ɔ", "xä", "xaɪ̯", "xän", "xɑŋ", "xɑʊ̯", "xɤ", "xeɪ̯", "xən", "xɤŋ", "xm̩", "xŋ̍", "xʊŋ", "xoʊ̯", "xu", "xu̯ä", "xu̯aɪ̯", "xu̯än", "xu̯ɑŋ", "xu̯eɪ̯", "xu̯ən", "xu̯ɔ", "t͡ɕi", "t͡ɕi̯ä", "t͡ɕi̯aɪ̯", "t͡ɕi̯ɛn", "t͡ɕi̯ɑŋ", "t͡ɕi̯ɑʊ̯", "t͡ɕi̯ɛ", "t͡ɕin", "t͡ɕiŋ", "t͡ɕi̯ɔ", "t͡ɕi̯ʊŋ", "t͡ɕi̯oʊ̯", "t͡ɕy", "t͡ɕy̯ɛn", "t͡ɕy̯ɛ", "t͡ɕyn", "kʰä", "kʰaɪ̯", "kʰän", "kʰɑŋ", "kʰɑʊ̯", "kʰɤ", "kʰɛ", "kʰeɪ̯", "kʰən", "kʰɤŋ", "kʰi̯ä", "kʰi̯ɑŋ", "kʰi̯oʊ̯", "kʰʊŋ", "kʰoʊ̯", "kʰu", "kʰu̯ä", "kʰu̯aɪ̯", "kʰu̯än", "kʰu̯ɑŋ", "kʰu̯eɪ̯", "kʰu̯ən", "kʰu̯ɔ", "lä", "laɪ̯", "län", "lɑŋ", "lɑʊ̯", "lɤ", "leɪ̯", "lən", "lɤŋ", "li", "li̯ä", "li̯ɛn", "li̯ɑŋ", "li̯ɑʊ̯", "li̯ɛ", "lin", "liŋ", "li̯oʊ̯", "lɔ", "lʊŋ", "loʊ̯", "lu", "ly", "lu̯än", "ly̯ɛn", "ly̯ɛ", "lu̯eɪ̯", "lu̯ən", "lyn", "lu̯ɔ", "m̩", "mä", "maɪ̯", "män", "mɑŋ", "mɑʊ̯", "mɤ", "meɪ̯", "mən", "mɛn", "mɤŋ", "mi", "mi̯ɛn", "mi̯ɑʊ̯", "mi̯ɛ", "min", "miŋ", "mi̯oʊ̯", "mu̯ɔ", "moʊ̯", "mu", "mu̯ä", "n̩", "nä", "naɪ̯", "nän", "nɑŋ", "nɑʊ̯", "nɤ", "nɛ", "neɪ̯", "nən", "nɤŋ", "ŋ̍", "ni", "ni̯ä", "ni̯ɛn", "ni̯ɑŋ", "ni̯ɑʊ̯", "ni̯ɛ", "nin", "niŋ", "ni̯oʊ̯", "nʊŋ", "noʊ̯", "nu", "ny", "nu̯än", "ny̯ɛ", "nu̯ən", "nu̯ɔ", "ˀɔ", "ˀʊŋ", "ˀoʊ̯", "pʰä", "pʰaɪ̯", "pʰän", "pʰɑŋ", "pʰɑʊ̯", "pʰɤ", "pʰɛ", "pʰeɪ̯", "pʰən", "pʰɤŋ", "pʰi", "pʰi̯ä", "pʰi̯ɛn", "pʰi̯ɑʊ̯", "pʰi̯ɛ", "pʰin", "pʰiŋ", "pʰu̯ɔ", "pʰoʊ̯", "pʰu", "pʰu̯ən", "t͡ɕʰi", "t͡ɕʰi̯ä", "t͡ɕʰi̯ɛn", "t͡ɕʰi̯ɑŋ", "t͡ɕʰi̯ɑʊ̯", "t͡ɕʰi̯ɛ", "t͡ɕʰin", "t͡ɕʰiŋ", "t͡ɕʰi̯ɔ", "t͡ɕʰi̯ʊŋ", "t͡ɕʰi̯oʊ̯", "t͡ɕʰy", "t͡ɕʰy̯ɛn", "t͡ɕʰy̯ɛ", "t͡ɕʰyn", "t͡ɕʰy̯ɔ", "ʐän", "ʐɑŋ", "ʐɑʊ̯", "ʐɤ", "ʐən", "ʐɤŋ", "ʐ̩", "ʐʊŋ", "ʐoʊ̯", "ʐu", "ʐu̯ä", "ʐu̯än", "ʐu̯eɪ̯", "ʐu̯ən", "ʐu̯ɔ", "sä", "saɪ̯", "sän", "sɑŋ", "sɑʊ̯", "sɤ", "seɪ̯", "sən", "sɤŋ", "ʂä", "ʂaɪ̯", "ʂän", "ʂɑŋ", "ʂɑʊ̯", "ʂɤ", "ʂɛ", "ʂeɪ̯", "ʂən", "ʂɤŋ", "ʂʐ̩", "ʂɔ", "ʂoʊ̯", "ʂu", "ʂu̯ä", "ʂu̯aɪ̯", "ʂu̯än", "ʂu̯ɑŋ", "ʂu̯eɪ̯", "ʂu̯ən", "ʂu̯ɔ", "sz̩", "si̯ɑʊ̯", "siŋ", "sʊŋ", "soʊ̯", "su", "su̯än", "su̯eɪ̯", "su̯ən", "su̯ɔ", "tʰä", "tʰaɪ̯", "tʰän", "tʰɑŋ", "tʰɑʊ̯", "tʰɤ", "tʰɛ", "tʰeɪ̯", "tʰɤŋ", "tʰi", "tʰi̯ɛn", "tʰi̯ɑʊ̯", "tʰi̯ɛ", "tʰiŋ", "tʰʊŋ", "tʰoʊ̯", "tʰu", "tʰu̯än", "tʰu̯eɪ̯", "tʰu̯ən", "tʰu̯ɔ", "vu̯ɔ", "vɛ", "vu", "wä", "waɪ̯", "wän", "wɑŋ", "wɛ", "weɪ̯", "wən", "wəŋ", "wɔ", "u", "ɕi", "ɕi̯ä", "ɕi̯ɛn", "ɕi̯ɑŋ", "ɕi̯ɑʊ̯", "ɕi̯ɛ", "ɕin", "ɕiŋ", "ɕi̯ʊŋ", "ɕi̯oʊ̯", "ɕy", "ɕy̯ɛn", "ɕy̯ɛ", "ɕyn", "jä", "jaɪ̯", "jɛn", "jɑŋ", "jɑʊ̯", "jɛ", "i", "in", "iŋ", "jɔ", "jʊŋ", "joʊ̯", "y", "ɥɛn", "ɥɛ", "yn", "t͡sä", "t͡saɪ̯", "t͡sän", "t͡sɑŋ", "t͡sɑʊ̯", "t͡sɤ", "t͡sɛ", "t͡seɪ̯", "t͡sən", "t͡sɤŋ", "ʈ͡ʂä", "ʈ͡ʂaɪ̯", "ʈ͡ʂän", "ʈ͡ʂɑŋ", "ʈ͡ʂɑʊ̯", "ʈ͡ʂɤ", "ʈ͡ʂɛ", "ʈ͡ʂeɪ̯", "ʈ͡ʂən", "ʈ͡ʂɤŋ", "ʈ͡ʂʐ̩", "ʈ͡ʂɔ", "ʈ͡ʂʊŋ", "ʈ͡ʂoʊ̯", "ʈ͡ʂu", "ʈ͡ʂu̯ä", "ʈ͡ʂu̯aɪ̯", "ʈ͡ʂu̯än", "ʈ͡ʂu̯ɑŋ", "ʈ͡ʂu̯eɪ̯", "ʈ͡ʂu̯ən", "ʈ͡ʂu̯ɔ", "t͡sz̩", "t͡si̯ɔ", "t͡sɔ", "t͡sʊŋ", "t͡soʊ̯", "t͡su", "t͡su̯än", "t͡su̯eɪ̯", "t͡su̯ən", "t͡su̯ɔ"}
local examples = {}
local ipa_tones = {"⁵⁵", "³⁵", "²¹⁴", "⁵¹", ""}
local ipa_tl_subs = {
{"ɤ$", "^t͡ɕ([^ʰ])", "^ʈ͡ʂ([^ʰ])", "^t͡s([^ʰ])", "^p([^ʰ])", "^t([^ʰ͡])", "^k([^ʰ])"},
{"ə", "d͡ʑ̥%1", "ɖ͡ʐ̥%1", "d͡z̥%1", "b̥%1", "d̥%1", "g̊%1"}
}
local iter = function (t, k)
k = k + 1
local v = raw_examples[math.ceil(k/5)]
if v then
local tone = ipa_tones[(k - 1) % 5 + 1]
if tone == "" then
for i, from in ipairs(ipa_tl_subs[1]) do
v = gsub(v, from, ipa_tl_subs[2][i])
end
return k, v
else
return k, v .. tone
end
end
end
local mt = {
__ipairs = function(t)
return iter, t, 0
end
}
setmetatable(examples, mt)
self:iterate_conversions(examples, pinyin, m_pron.py_ipa, "Monosyllables")
end
function p:test_py_zhuyin()
local raw_examples = {"ㄚ", "ㄞ", "ㄢ", "ㄤ", "ㄠ", "ㄅㄚ", "ㄅㄞ", "ㄅㄢ", "ㄅㄤ", "ㄅㄠ", "ㄅㄜ", "ㄅㄝ", "ㄅㄟ", "ㄅㄣ", "ㄅㄥ", "ㄅㄧ", "ㄅㄧㄢ", "ㄅㄧㄤ", "ㄅㄧㄠ", "ㄅㄧㄝ", "ㄅㄧㄣ", "ㄅㄧㄥ", "ㄅㄧㄡ", "ㄅㄛ", "ㄅㄨㄥ", "ㄅㄨ", "ㄘㄚ", "ㄘㄞ", "ㄘㄢ", "ㄘㄤ", "ㄘㄠ", "ㄘㄜ", "ㄘㄝ", "ㄘㄟ", "ㄘㄣ", "ㄘㄥ", "ㄔㄚ", "ㄔㄞ", "ㄔㄢ", "ㄔㄤ", "ㄔㄠ", "ㄔㄜ", "ㄔㄣ", "ㄔㄥ", "ㄔ", "ㄔㄨㄥ", "ㄔㄡ", "ㄔㄨ", "ㄔㄨㄚ", "ㄔㄨㄞ", "ㄔㄨㄢ", "ㄔㄨㄤ", "ㄔㄨㄟ", "ㄔㄨㄣ", "ㄔㄨㄛ", "ㄘ", "ㄘㄨㄥ", "ㄘㄡ", "ㄘㄨ", "ㄘㄨㄢ", "ㄘㄩㄢ", "ㄘㄨㄟ", "ㄘㄨㄣ", "ㄘㄨㄛ", "ㄉㄚ", "ㄉㄞ", "ㄉㄢ", "ㄉㄤ", "ㄉㄠ", "ㄉㄜ", "ㄉㄝ", "ㄉㄟ", "ㄉㄣ", "ㄉㄥ", "ㄉㄧ", "ㄉㄧㄚ", "ㄉㄧㄢ", "ㄉㄧㄤ", "ㄉㄧㄠ", "ㄉㄧㄝ", "ㄉㄧㄥ", "ㄉㄧㄡ", "ㄉㄛ", "ㄉㄨㄥ", "ㄉㄡ", "ㄉㄨ", "ㄉㄨㄢ", "ㄉㄨㄤ", "ㄉㄨㄟ", "ㄉㄨㄣ", "ㄉㄨㄛ", "ㄜ", "ㄝ", "ㄟ", "ㄣ", "ㄥ", "ㄦ", "ㄈㄚ", "ㄈㄞ", "ㄈㄢ", "ㄈㄤ", "ㄈㄟ", "ㄈㄣ", "ㄈㄥ", "ㄈㄧㄠ", "ㄈㄛ", "ㄈㄨㄥ", "ㄈㄡ", "ㄈㄨ", "ㄍㄚ", "ㄍㄞ", "ㄍㄢ", "ㄍㄤ", "ㄍㄠ", "ㄍㄜ", "ㄍㄝ", "ㄍㄟ", "ㄍㄣ", "ㄍㄥ", "ㄍㄧ", "ㄍㄧㄥ", "ㄍㄨㄥ", "ㄍㄡ", "ㄍㄨ", "ㄍㄨㄚ", "ㄍㄨㄞ", "ㄍㄨㄢ", "ㄍㄨㄤ", "ㄍㄨㄟ", "ㄍㄨㄣ", "ㄍㄨㄛ", "ㄏㄚ", "ㄏㄞ", "ㄏㄢ", "ㄏㄤ", "ㄏㄠ", "ㄏㄜ", "ㄏㄟ", "ㄏㄣ", "ㄏㄥ", "ㄏㄇ", "ㄏㄫ", "ㄏㄨㄥ", "ㄏㄡ", "ㄏㄨ", "ㄏㄨㄚ", "ㄏㄨㄞ", "ㄏㄨㄢ", "ㄏㄨㄤ", "ㄏㄨㄟ", "ㄏㄨㄣ", "ㄏㄨㄛ", "ㄐㄧ", "ㄐㄧㄚ", "ㄐㄧㄞ", "ㄐㄧㄢ", "ㄐㄧㄤ", "ㄐㄧㄠ", "ㄐㄧㄝ", "ㄐㄧㄣ", "ㄐㄧㄥ", "ㄐㄧㄛ", "ㄐㄩㄥ", "ㄐㄧㄡ", "ㄐㄩ", "ㄐㄩㄢ", "ㄐㄩㄝ", "ㄐㄩㄣ", "ㄎㄚ", "ㄎㄞ", "ㄎㄢ", "ㄎㄤ", "ㄎㄠ", "ㄎㄜ", "ㄎㄝ", "ㄎㄟ", "ㄎㄣ", "ㄎㄥ", "ㄎㄧㄚ", "ㄎㄧㄤ", "ㄎㄧㄡ", "ㄎㄨㄥ", "ㄎㄡ", "ㄎㄨ", "ㄎㄨㄚ", "ㄎㄨㄞ", "ㄎㄨㄢ", "ㄎㄨㄤ", "ㄎㄨㄟ", "ㄎㄨㄣ", "ㄎㄨㄛ", "ㄌㄚ", "ㄌㄞ", "ㄌㄢ", "ㄌㄤ", "ㄌㄠ", "ㄌㄜ", "ㄌㄟ", "ㄌㄣ", "ㄌㄥ", "ㄌㄧ", "ㄌㄧㄚ", "ㄌㄧㄢ", "ㄌㄧㄤ", "ㄌㄧㄠ", "ㄌㄧㄝ", "ㄌㄧㄣ", "ㄌㄧㄥ", "ㄌㄧㄡ", "ㄌㄛ", "ㄌㄨㄥ", "ㄌㄡ", "ㄌㄨ", "ㄌㄩ", "ㄌㄨㄢ", "ㄌㄩㄢ", "ㄌㄩㄝ", "ㄌㄨㄟ", "ㄌㄨㄣ", "ㄌㄩㄣ", "ㄌㄨㄛ", "ㄇ", "ㄇㄚ", "ㄇㄞ", "ㄇㄢ", "ㄇㄤ", "ㄇㄠ", "ㄇㄜ", "ㄇㄟ", "ㄇㄣ", "ㄇㄝㄋ", "ㄇㄥ", "ㄇㄧ", "ㄇㄧㄢ", "ㄇㄧㄠ", "ㄇㄧㄝ", "ㄇㄧㄣ", "ㄇㄧㄥ", "ㄇㄧㄡ", "ㄇㄛ", "ㄇㄡ", "ㄇㄨ", "ㄇㄨㄚ", "ㄋ", "ㄋㄚ", "ㄋㄞ", "ㄋㄢ", "ㄋㄤ", "ㄋㄠ", "ㄋㄜ", "ㄋㄝ", "ㄋㄟ", "ㄋㄣ", "ㄋㄥ", "ㄫ", "ㄋㄧ", "ㄋㄧㄚ", "ㄋㄧㄢ", "ㄋㄧㄤ", "ㄋㄧㄠ", "ㄋㄧㄝ", "ㄋㄧㄣ", "ㄋㄧㄥ", "ㄋㄧㄡ", "ㄋㄨㄥ", "ㄋㄡ", "ㄋㄨ", "ㄋㄩ", "ㄋㄨㄢ", "ㄋㄩㄝ", "ㄋㄨㄣ", "ㄋㄨㄛ", "ㄛ", "ㄛㄥ", "ㄡ", "ㄆㄚ", "ㄆㄞ", "ㄆㄢ", "ㄆㄤ", "ㄆㄠ", "ㄆㄜ", "ㄆㄝ", "ㄆㄟ", "ㄆㄣ", "ㄆㄥ", "ㄆㄧ", "ㄆㄧㄚ", "ㄆㄧㄢ", "ㄆㄧㄠ", "ㄆㄧㄝ", "ㄆㄧㄣ", "ㄆㄧㄥ", "ㄆㄛ", "ㄆㄡ", "ㄆㄨ", "ㄆㄨㄣ", "ㄑㄧ", "ㄑㄧㄚ", "ㄑㄧㄢ", "ㄑㄧㄤ", "ㄑㄧㄠ", "ㄑㄧㄝ", "ㄑㄧㄣ", "ㄑㄧㄥ", "ㄑㄧㄛ", "ㄑㄩㄥ", "ㄑㄧㄡ", "ㄑㄩ", "ㄑㄩㄢ", "ㄑㄩㄝ", "ㄑㄩㄣ", "ㄑㄩㄛ", "ㄖㄢ", "ㄖㄤ", "ㄖㄠ", "ㄖㄜ", "ㄖㄣ", "ㄖㄥ", "ㄖ", "ㄖㄨㄥ", "ㄖㄡ", "ㄖㄨ", "ㄖㄨㄚ", "ㄖㄨㄢ", "ㄖㄨㄟ", "ㄖㄨㄣ", "ㄖㄨㄛ", "ㄙㄚ", "ㄙㄞ", "ㄙㄢ", "ㄙㄤ", "ㄙㄠ", "ㄙㄜ", "ㄙㄟ", "ㄙㄣ", "ㄙㄥ", "ㄕㄚ", "ㄕㄞ", "ㄕㄢ", "ㄕㄤ", "ㄕㄠ", "ㄕㄜ", "ㄕㄝ", "ㄕㄟ", "ㄕㄣ", "ㄕㄥ", "ㄕ", "ㄕㄛ", "ㄕㄡ", "ㄕㄨ", "ㄕㄨㄚ", "ㄕㄨㄞ", "ㄕㄨㄢ", "ㄕㄨㄤ", "ㄕㄨㄟ", "ㄕㄨㄣ", "ㄕㄨㄛ", "ㄙ", "ㄙㄧㄠ", "ㄙㄧㄥ", "ㄙㄨㄥ", "ㄙㄡ", "ㄙㄨ", "ㄙㄨㄢ", "ㄙㄨㄟ", "ㄙㄨㄣ", "ㄙㄨㄛ", "ㄊㄚ", "ㄊㄞ", "ㄊㄢ", "ㄊㄤ", "ㄊㄠ", "ㄊㄜ", "ㄊㄝ", "ㄊㄟ", "ㄊㄥ", "ㄊㄧ", "ㄊㄧㄢ", "ㄊㄧㄠ", "ㄊㄧㄝ", "ㄊㄧㄥ", "ㄊㄨㄥ", "ㄊㄡ", "ㄊㄨ", "ㄊㄨㄢ", "ㄊㄨㄟ", "ㄊㄨㄣ", "ㄊㄨㄛ", "ㄪㄛ", "ㄪㄝ", "ㄪㄨ", "ㄨㄚ", "ㄨㄞ", "ㄨㄢ", "ㄨㄤ", "ㄨㄝ", "ㄨㄟ", "ㄨㄣ", "ㄨㄥ", "ㄨㄛ", "ㄨ", "ㄒㄧ", "ㄒㄧㄚ", "ㄒㄧㄢ", "ㄒㄧㄤ", "ㄒㄧㄠ", "ㄒㄧㄝ", "ㄒㄧㄣ", "ㄒㄧㄥ", "ㄒㄩㄥ", "ㄒㄧㄡ", "ㄒㄩ", "ㄒㄩㄢ", "ㄒㄩㄝ", "ㄒㄩㄣ", "ㄧㄚ", "ㄧㄞ", "ㄧㄢ", "ㄧㄤ", "ㄧㄠ", "ㄧㄝ", "ㄧ", "ㄧㄣ", "ㄧㄥ", "ㄧㄛ", "ㄩㄥ", "ㄧㄡ", "ㄩ", "ㄩㄢ", "ㄩㄝ", "ㄩㄣ", "ㄗㄚ", "ㄗㄞ", "ㄗㄢ", "ㄗㄤ", "ㄗㄠ", "ㄗㄜ", "ㄗㄝ", "ㄗㄟ", "ㄗㄣ", "ㄗㄥ", "ㄓㄚ", "ㄓㄞ", "ㄓㄢ", "ㄓㄤ", "ㄓㄠ", "ㄓㄜ", "ㄓㄝ", "ㄓㄟ", "ㄓㄣ", "ㄓㄥ", "ㄓ", "ㄓㄛ", "ㄓㄨㄥ", "ㄓㄡ", "ㄓㄨ", "ㄓㄨㄚ", "ㄓㄨㄞ", "ㄓㄨㄢ", "ㄓㄨㄤ", "ㄓㄨㄟ", "ㄓㄨㄣ", "ㄓㄨㄛ", "ㄗ", "ㄗㄧㄛ", "ㄗㄛ", "ㄗㄨㄥ", "ㄗㄡ", "ㄗㄨ", "ㄗㄨㄢ", "ㄗㄨㄟ", "ㄗㄨㄣ", "ㄗㄨㄛ"}
local examples = {}
local zhuyin_tones = {"", "ˊ", "ˇ", "ˋ", "˙"}
local iter = function (t, k)
k = k + 1
local v = raw_examples[math.ceil(k/5)]
if v then
local tone = zhuyin_tones[(k - 1) % 5 + 1]
if tone == "˙" then
return k, tone .. v
else
return k, v .. tone
end
end
end
local mt = {
__ipairs = function(t)
return iter, t, 0
end
}
setmetatable(examples, mt)
self:iterate_conversions(examples, pinyin, m_pron.py_zhuyin, "Monosyllables")
iter = function (t, k)
k = k + 1
local v = raw_examples[math.ceil(k/5)]
if v then
local tone, ret = zhuyin_tones[(k - 1) % 5 + 1]
if tone == "˙" then
ret = tone .. v
else
ret = v .. tone
end
if v == "ㄦ" then
return k, ret
else
return k, ret .. "ㄦ"
end
end
end
self:iterate_conversions(examples, pinyin_erhua, m_pron.py_zhuyin, "Erhua monosyllables")
end
function p:test_py_tongyong()
local raw_examples = {"a!", "a!i", "a!n", "a!ng", "a!o", "ba!", "ba!i", "ba!n", "ba!ng", "ba!o", "be!", "bê!", "be!i", "be!n", "be!ng", "bi!", "bia!n", "bia!ng", "bia!o", "bie!", "bi!n", "bi!ng", "bio!u", "bo!", "bo!ng", "bu!", "ca!", "ca!i", "ca!n", "ca!ng", "ca!o", "ce!", "cê!", "ce!i", "ce!n", "ce!ng", "cha!", "cha!i", "cha!n", "cha!ng", "cha!o", "che!", "che!n", "che!ng", "chi!h", "cho!ng", "cho!u", "chu!", "chua!", "chua!i", "chua!n", "chua!ng", "chue!i", "chu!n", "chuo!", "ci!h", "co!ng", "co!u", "cu!", "cua!n", "cyua!n", "cue!i", "cu!n", "cuo!", "da!", "da!i", "da!n", "da!ng", "da!o", "de!", "dê!", "de!i", "de!n", "de!ng", "di!", "dia!", "dia!n", "dia!ng", "dia!o", "die!", "di!ng", "dio!u", "do!", "do!ng", "do!u", "du!", "dua!n", "dua!ng", "due!i", "du!n", "duo!", "e!", "ê!", "e!i", "e!n", "e!ng", "e!r", "fa!", "fa!i", "fa!n", "fa!ng", "fe!i", "fe!n", "fo!ng", "fia!o", "fo!", "fo!ng", "fo!u", "fu!", "ga!", "ga!i", "ga!n", "ga!ng", "ga!o", "ge!", "gê!", "ge!i", "ge!n", "ge!ng", "gi!", "gi!ng", "go!ng", "go!u", "gu!", "gua!", "gua!i", "gua!n", "gua!ng", "gue!i", "gu!n", "guo!", "ha!", "ha!i", "ha!n", "ha!ng", "ha!o", "he!", "he!i", "he!n", "he!ng", "hm!", "hn!g", "ho!ng", "ho!u", "hu!", "hua!", "hua!i", "hua!n", "hua!ng", "hue!i", "hu!n", "huo!", "ji!", "jia!", "jia!i", "jia!n", "jia!ng", "jia!o", "jie!", "ji!n", "ji!ng", "jio!", "jyo!ng", "jio!u", "jyu!", "jyua!n", "jyue!", "jyu!n", "ka!", "ka!i", "ka!n", "ka!ng", "ka!o", "ke!", "kê!", "ke!i", "ke!n", "ke!ng", "kia!", "kia!ng", "kio!u", "ko!ng", "ko!u", "ku!", "kua!", "kua!i", "kua!n", "kua!ng", "kue!i", "ku!n", "kuo!", "la!", "la!i", "la!n", "la!ng", "la!o", "le!", "le!i", "le!n", "le!ng", "li!", "lia!", "lia!n", "lia!ng", "lia!o", "lie!", "li!n", "li!ng", "lio!u", "lo!", "lo!ng", "lo!u", "lu!", "lyu!", "lua!n", "lyua!n", "lyue!", "lue!i", "lu!n", "lyu!n", "luo!", "m!", "ma!", "ma!i", "ma!n", "ma!ng", "ma!o", "me!", "me!i", "me!n", "mê!n", "me!ng", "mi!", "mia!n", "mia!o", "mie!", "mi!n", "mi!ng", "mio!u", "mo!", "mo!u", "mu!", "mua!", "n!", "na!", "na!i", "na!n", "na!ng", "na!o", "ne!", "nê!", "ne!i", "ne!n", "ne!ng", "n!g", "ni!", "nia!", "nia!n", "nia!ng", "nia!o", "nie!", "ni!n", "ni!ng", "nio!u", "no!ng", "no!u", "nu!", "nyu!", "nua!n", "nyue!", "nu!n", "nuo!", "o!", "o!ng", "o!u", "pa!", "pa!i", "pa!n", "pa!ng", "pa!o", "pe!", "pê!", "pe!i", "pe!n", "pe!ng", "pi!", "pia!", "pia!n", "pia!o", "pie!", "pi!n", "pi!ng", "po!", "po!u", "pu!", "pu!n", "ci!", "cia!", "cia!n", "cia!ng", "cia!o", "cie!", "ci!n", "ci!ng", "cio!", "cyo!ng", "cio!u", "cyu!", "cyua!n", "cyue!", "cyu!n", "cyuo!", "ra!n", "ra!ng", "ra!o", "re!", "re!n", "re!ng", "ri!h", "ro!ng", "ro!u", "ru!", "rua!", "rua!n", "rue!i", "ru!n", "ruo!", "sa!", "sa!i", "sa!n", "sa!ng", "sa!o", "se!", "se!i", "se!n", "se!ng", "sha!", "sha!i", "sha!n", "sha!ng", "sha!o", "she!", "shê!", "she!i", "she!n", "she!ng", "shi!h", "sho!", "sho!u", "shu!", "shua!", "shua!i", "shua!n", "shua!ng", "shue!i", "shu!n", "shuo!", "si!h", "sia!o", "si!ng", "so!ng", "so!u", "su!", "sua!n", "sue!i", "su!n", "suo!", "ta!", "ta!i", "ta!n", "ta!ng", "ta!o", "te!", "tê!", "te!i", "te!ng", "ti!", "tia!n", "tia!o", "tie!", "ti!ng", "to!ng", "to!u", "tu!", "tua!n", "tue!i", "tu!n", "tuo!", "vo!", "vê!", "vu!", "wa!", "wa!i", "wa!n", "wa!ng", "wê!", "we!i", "wu!n", "wo!ng", "wo!", "wu!", "si!", "sia!", "sia!n", "sia!ng", "sia!o", "sie!", "si!n", "si!ng", "syo!ng", "sio!u", "syu!", "syua!n", "syue!", "syu!n", "ya!", "ya!i", "ya!n", "ya!ng", "ya!o", "ye!", "yi!", "yi!n", "yi!ng", "yo!", "yo!ng", "yo!u", "yu!", "yua!n", "yue!", "yu!n", "za!", "za!i", "za!n", "za!ng", "za!o", "ze!", "zê!", "ze!i", "ze!n", "ze!ng", "jha!", "jha!i", "jha!n", "jha!ng", "jha!o", "jhe!", "jhê!", "jhe!i", "jhe!n", "jhe!ng", "jhi!h", "jho!", "jho!ng", "jho!u", "jhu!", "jhua!", "jhua!i", "jhua!n", "jhua!ng", "jhue!i", "jhu!n", "jhuo!", "zi!h", "zio!", "zo!", "zo!ng", "zo!u", "zu!", "zua!n", "zue!i", "zu!n", "zuo!"}
local examples = {}
local tongyong_tones = {"", u(0x301), u(0x30C), u(0x300), u(0x30A)}
local iter = function (t, k)
k = k + 1
local v = raw_examples[math.ceil(k/5)]
if v then
local tone = tongyong_tones[(k - 1) % 5 + 1]
v = v:gsub("!", tone)
return k, toNFC(v)
end
end
local mt = {
__ipairs = function(t)
return iter, t, 0
end
}
setmetatable(examples, mt)
self:iterate_conversions(examples, pinyin, m_pron.py_tongyong, "Monosyllables")
end
function p:test_py_wg()
local raw_examples = {"a", "ai", "an", "ang", "ao", "pa", "pai", "pan", "pang", "pao", "pê", "peh", "pei", "pên", "pêng", "pi", "pien", "piang", "piao", "pieh", "pin", "ping", "piu", "po", "pung", "pu", "tsʻa", "tsʻai", "tsʻan", "tsʻang", "tsʻao", "tsʻê", "tsʻeh", "tsʻei", "tsʻên", "tsʻêng", "chʻa", "chʻai", "chʻan", "chʻang", "chʻao", "chʻê", "chʻên", "chʻêng", "chʻih", "chʻung", "chʻou", "chʻu", "chʻua", "chʻuai", "chʻuan", "chʻuang", "chʻui", "chʻun", "chʻo", "tzʻŭ", "tsʻung", "tsʻou", "tsʻu", "tsʻuan", "tsʻüan", "tsʻui", "tsʻun", "tsʻo", "ta", "tai", "tan", "tang", "tao", "tê", "teh", "tei", "tên", "têng", "ti", "tia", "tien", "tiang", "tiao", "tieh", "ting", "tiu", "to", "tung", "tou", "tu", "tuan", "tuang", "tui", "tun", "to", "o", "eh", "ei", "ên", "êng", "êrh", "fa", "fai", "fan", "fang", "fei", "fên", "fêng", "fiao", "fo", "fung", "fou", "fu", "ka", "kai", "kan", "kang", "kao", "ko", "keh", "kei", "kên", "kêng", "ki", "king", "kung", "kou", "ku", "kua", "kuai", "kuan", "kuang", "kuei", "kun", "kuo", "ha", "hai", "han", "hang", "hao", "ho", "hei", "hên", "hêng", "hm", "hng", "hung", "hou", "hu", "hua", "huai", "huan", "huang", "hui", "hun", "huo", "chi", "chia", "chiai", "chien", "chiang", "chiao", "chieh", "chin", "ching", "chio", "chiung", "chiu", "chü", "chüan", "chüeh", "chün", "kʻa", "kʻai", "kʻan", "kʻang", "kʻao", "kʻo", "kʻeh", "kʻei", "kʻên", "kʻêng", "kʻia", "kʻiang", "kʻiu", "kʻung", "kʻou", "kʻu", "kʻua", "kʻuai", "kʻuan", "kʻuang", "kʻuei", "kʻun", "kʻuo", "la", "lai", "lan", "lang", "lao", "lê", "lei", "lên", "lêng", "li", "lia", "lien", "liang", "liao", "lieh", "lin", "ling", "liu", "lo", "lung", "lou", "lu", "lü", "luan", "lüan", "lüeh", "lui", "lun", "lün", "lo", "m", "ma", "mai", "man", "mang", "mao", "mê", "mei", "mên", "mehn", "mêng", "mi", "mien", "miao", "mieh", "min", "ming", "miu", "mo", "mou", "mu", "mua", "n", "na", "nai", "nan", "nang", "nao", "nê", "neh", "nei", "nên", "nêng", "ng", "ni", "nia", "nien", "niang", "niao", "nieh", "nin", "ning", "niu", "nung", "nou", "nu", "nü", "nuan", "nüeh", "nun", "no", "o", "ung", "ou", "pʻa", "pʻai", "pʻan", "pʻang", "pʻao", "pʻê", "pʻeh", "pʻei", "pʻên", "pʻêng", "pʻi", "pʻia", "pʻien", "pʻiao", "pʻieh", "pʻin", "pʻing", "pʻo", "pʻou", "pʻu", "pʻun", "chʻi", "chʻia", "chʻien", "chʻiang", "chʻiao", "chʻieh", "chʻin", "chʻing", "chʻio", "chʻiung", "chʻiu", "chʻü", "chʻüan", "chʻüeh", "chʻün", "chʻüo", "jan", "jang", "jao", "jê", "jên", "jêng", "jih", "jung", "jou", "ju", "jua", "juan", "jui", "jun", "jo", "sa", "sai", "san", "sang", "sao", "sê", "sei", "sên", "sêng", "sha", "shai", "shan", "shang", "shao", "shê", "sheh", "shei", "shên", "shêng", "shih", "sho", "shou", "shu", "shua", "shuai", "shuan", "shuang", "shui", "shun", "shuo", "ssŭ", "siao", "sing", "sung", "sou", "su", "suan", "sui", "sun", "so", "tʻa", "tʻai", "tʻan", "tʻang", "tʻao", "tʻê", "tʻeh", "tʻei", "tʻêng", "tʻi", "tʻien", "tʻiao", "tʻieh", "tʻing", "tʻung", "tʻou", "tʻu", "tʻuan", "tʻui", "tʻun", "tʻo", "vo", "veh", "vu", "wa", "wai", "wan", "wang", "weh", "wei", "wên", "wêng", "wo", "wu", "hsi", "hsia", "hsien", "hsiang", "hsiao", "hsieh", "hsin", "hsing", "hsiung", "hsiu", "hsü", "hsüan", "hsüeh", "hsün", "ya", "yai", "yen", "yang", "yao", "yeh", "i", "yin", "ying", "yo", "yung", "yu", "yü", "yüan", "yüeh", "yün", "tsa", "tsai", "tsan", "tsang", "tsao", "tsê", "tseh", "tsei", "tsên", "tsêng", "cha", "chai", "chan", "chang", "chao", "chê", "cheh", "chei", "chên", "chêng", "chih", "cho", "chung", "chou", "chu", "chua", "chuai", "chuan", "chuang", "chui", "chun", "cho", "tzŭ", "tsio", "tso", "tsung", "tsou", "tsu", "tsuan", "tsui", "tsun", "tso"}
local examples = {}
local iter = function (t, k)
k = k + 1
local v = raw_examples[math.ceil(k/5)]
if v then
local tone = (k - 1) % 5 + 1
return k, v .. "<sup>" .. tone .. "</sup>"
end
end
local mt = {
__ipairs = function(t)
return iter, t, 0
end
}
setmetatable(examples, mt)
self:iterate_conversions(examples, pinyin, m_pron.py_wg, "Monosyllables")
iter = function (t, k)
k = k + 1
local v = raw_examples[math.ceil(k/5)]
if v then
local tone = (k - 1) % 5 + 1
if v == "êrh" then
return k, v .. "<sup>" .. tone .. "</sup>"
else
return k, v .. "<sup>" .. tone .. "</sup>-ʼrh"
end
end
end
self:iterate_conversions(examples, pinyin_erhua, m_pron.py_wg, "Erhua monosyllables")
end
function p:test_py_yale()
local raw_examples = {"a!", "a!i", "a!n", "a!ng", "a!u", "ba!", "ba!i", "ba!n", "ba!ng", "ba!u", "be!", "be!", "be!i", "be!n", "be!ng", "bi!", "bya!n", "bya!ng", "bya!u", "bye!", "bi!n", "bi!ng", "byo!u", "bwo!", "bu!ng", "bu!", "tsa!", "tsa!i", "tsa!n", "tsa!ng", "tsa!u", "tse!", "tse!", "tse!i", "tse!n", "tse!ng", "cha!", "cha!i", "cha!n", "cha!ng", "cha!u", "che!", "che!n", "che!ng", "chr!", "chu!ng", "cho!u", "chu!", "chwa!", "chwa!i", "chwa!n", "chwa!ng", "chwe!i", "chwu!n", "chwo!", "tsz!", "tsu!ng", "tso!u", "tsu!", "tswa!n", "tsywa!n", "tswe!i", "tswu!n", "tswo!", "da!", "da!i", "da!n", "da!ng", "da!u", "de!", "de!", "de!i", "de!n", "de!ng", "di!", "dya!", "dya!n", "dya!ng", "dya!u", "dye!", "di!ng", "dyo!u", "do!", "du!ng", "do!u", "du!", "dwa!n", "dwa!ng", "dwe!i", "dwu!n", "dwo!", "e!", "e!", "e!i", "e!n", "e!ng", "e!r", "fa!", "fa!i", "fa!n", "fa!ng", "fe!i", "fe!n", "fe!ng", "fya!u", "fwo!", "fu!ng", "fo!u", "fu!", "ga!", "ga!i", "ga!n", "ga!ng", "ga!u", "ge!", "ge!", "ge!i", "ge!n", "ge!ng", "gi!", "gi!ng", "gu!ng", "go!u", "gu!", "gwa!", "gwa!i", "gwa!n", "gwa!ng", "gwe!i", "gwu!n", "gwo!", "ha!", "ha!i", "ha!n", "ha!ng", "ha!u", "he!", "he!i", "he!n", "he!ng", "hm!", "hn!g", "hu!ng", "ho!u", "hu!", "hwa!", "hwa!i", "hwa!n", "hwa!ng", "hwe!i", "hwu!n", "hwo!", "ji!", "jya!", "jya!i", "jya!n", "jya!ng", "jya!u", "jye!", "ji!n", "ji!ng", "jyo!", "jyu!ng", "jyo!u", "jyu!", "jywa!n", "jywe!", "jyu!n", "ka!", "ka!i", "ka!n", "ka!ng", "ka!u", "ke!", "ke!", "ke!i", "ke!n", "ke!ng", "kya!", "kya!ng", "kyo!u", "ku!ng", "ko!u", "ku!", "kwa!", "kwa!i", "kwa!n", "kwa!ng", "kwe!i", "kwu!n", "kwo!", "la!", "la!i", "la!n", "la!ng", "la!u", "le!", "le!i", "le!n", "le!ng", "li!", "lya!", "lya!n", "lya!ng", "lya!u", "lye!", "li!n", "li!ng", "lyo!u", "lo!", "lu!ng", "lo!u", "lu!", "lyu!", "lwa!n", "lywa!n", "lywe!", "lwe!i", "lwu!n", "lyu!n", "lwo!", "m!", "ma!", "ma!i", "ma!n", "ma!ng", "ma!u", "me!", "me!i", "me!n", "me!n", "me!ng", "mi!", "mya!n", "mya!u", "mye!", "mi!n", "mi!ng", "myo!u", "mwo!", "mo!u", "mu!", "mwa!", "n!", "na!", "na!i", "na!n", "na!ng", "na!u", "ne!", "ne!", "ne!i", "ne!n", "ne!ng", "n!g", "ni!", "nya!", "nya!n", "nya!ng", "nya!u", "nye!", "ni!n", "ni!ng", "nyo!u", "nu!ng", "no!u", "nu!", "nyu!", "nwa!n", "nywe!", "nwu!n", "nwo!", "o!", "u!ng", "o!u", "pa!", "pa!i", "pa!n", "pa!ng", "pa!u", "pe!", "pe!", "pe!i", "pe!n", "pe!ng", "pi!", "pya!", "pya!n", "pya!u", "pye!", "pi!n", "pi!ng", "pwo!", "po!u", "pu!", "pwu!n", "chi!", "chya!", "chya!n", "chya!ng", "chya!u", "chye!", "chi!n", "chi!ng", "chyo!", "chyu!ng", "chyo!u", "chyu!", "chywa!n", "chywe!", "chyu!n", "chywo!", "ra!n", "ra!ng", "ra!u", "re!", "re!n", "re!ng", "r!", "ru!ng", "ro!u", "ru!", "rwa!", "rwa!n", "rwe!i", "rwu!n", "rwo!", "sa!", "sa!i", "sa!n", "sa!ng", "sa!u", "se!", "se!i", "se!n", "se!ng", "sha!", "sha!i", "sha!n", "sha!ng", "sha!u", "she!", "she!", "she!i", "she!n", "she!ng", "shr!", "sho!", "sho!u", "shu!", "shwa!", "shwa!i", "shwa!n", "shwa!ng", "shwe!i", "shwu!n", "shwo!", "sz!", "sya!u", "si!ng", "su!ng", "so!u", "su!", "swa!n", "swe!i", "swu!n", "swo!", "ta!", "ta!i", "ta!n", "ta!ng", "ta!u", "te!", "te!", "te!i", "te!ng", "ti!", "tya!n", "tya!u", "tye!", "ti!ng", "tu!ng", "to!u", "tu!", "twa!n", "twe!i", "twu!n", "two!", "vwo!", "ve!", "vu!", "wa!", "wa!i", "wa!n", "wa!ng", "we!", "we!i", "we!n", "we!ng", "wo!", "wu!", "syi!", "sya!", "sya!n", "sya!ng", "sya!u", "sye!", "syi!n", "syi!ng", "syu!ng", "syo!u", "syu!", "sywa!n", "sywe!", "syu!n", "ya!", "ya!i", "ya!n", "ya!ng", "ya!u", "ye!", "yi!", "yi!n", "yi!ng", "yo!", "yu!ng", "yo!u", "yu!", "ywa!n", "ywe!", "yu!n", "dza!", "dza!i", "dza!n", "dza!ng", "dza!u", "dze!", "dze!", "dze!i", "dze!n", "dze!ng", "ja!", "ja!i", "ja!n", "ja!ng", "ja!u", "je!", "je!", "je!i", "je!n", "je!ng", "jr!", "jo!", "ju!ng", "jo!u", "ju!", "jwa!", "jwa!i", "jwa!n", "jwa!ng", "jwe!i", "jwu!n", "jwo!", "dz!", "dzyo!", "dzo!", "dzu!ng", "dzo!u", "dzu!", "dzwa!n", "dzwe!i", "dzwu!n", "dzwo!"}
local examples = {}
local yale_tones = pinyin_tones
local iter = function (t, k)
k = k + 1
local v = raw_examples[math.ceil(k/5)]
if v then
local tone = yale_tones[(k - 1) % 5 + 1]
v = v:gsub("!", tone)
return k, toNFC(v)
end
end
local mt = {
__ipairs = function(t)
return iter, t, 0
end
}
setmetatable(examples, mt)
self:iterate_conversions(examples, pinyin, m_pron.py_yale, "Monosyllables")
end
function p:test_py_gwoyeu()
local examples = {"a", "ar", "aa", "ah", ".a", "ai", "air", "ae", "ay", ".ai", "an", "arn", "aan", "ann", ".an", "ang", "arng", "aang", "anq", ".ang", "au", "aur", "ao", "aw", ".au", "ba", "bar", "baa", "bah", ".ba", "bai", "bair", "bae", "bay", ".bai", "ban", "barn", "baan", "bann", ".ban", "bang", "barng", "baang", "banq", ".bang", "bau", "baur", "bao", "baw", ".bau", "be", "ber", "bee", "beh", ".be", "bè", "bèr", "bèè", "bèh", ".bè", "bei", "beir", "beei", "bey", ".bei", "ben", "bern", "been", "benn", ".ben", "beng", "berng", "beeng", "benq", ".beng", "bi", "byi", "bii", "bih", ".bi", "bian", "byan", "bean", "biann", ".bian", "biang", "byang", "beang", "bianq", ".biang", "biau", "byau", "beau", "biaw", ".biau", "bie", "bye", "biee", "bieh", ".bie", "bin", "byn", "biin", "binn", ".bin", "bing", "byng", "biing", "binq", ".bing", "biou", "byou", "beou", "biow", ".biou", "bo", "bor", "boo", "boh", ".bo", "bong", "borng", "boong", "bonq", ".bong", "bu", "bwu", "buu", "buh", ".bu", "tsa", "tsar", "tsaa", "tsah", ".tsa", "tsai", "tsair", "tsae", "tsay", ".tsai", "tsan", "tsarn", "tsaan", "tsann", ".tsan", "tsang", "tsarng", "tsaang", "tsanq", ".tsang", "tsau", "tsaur", "tsao", "tsaw", ".tsau", "tse", "tser", "tsee", "tseh", ".tse", "tsè", "tsèr", "tsèè", "tsèh", ".tsè", "tsei", "tseir", "tseei", "tsey", ".tsei", "tsen", "tsern", "tseen", "tsenn", ".tsen", "tseng", "tserng", "tseeng", "tsenq", ".tseng", "cha", "char", "chaa", "chah", ".cha", "chai", "chair", "chae", "chay", ".chai", "chan", "charn", "chaan", "chann", ".chan", "chang", "charng", "chaang", "chanq", ".chang", "chau", "chaur", "chao", "chaw", ".chau", "che", "cher", "chee", "cheh", ".che", "chen", "chern", "cheen", "chenn", ".chen", "cheng", "cherng", "cheeng", "chenq", ".cheng", "chy", "chyr", "chyy", "chyh", ".chy", "chong", "chorng", "choong", "chonq", ".chong", "chou", "chour", "choou", "chow", ".chou", "chu", "chwu", "chuu", "chuh", ".chu", "chua", "chwa", "choa", "chuah", ".chua", "chuai", "chwai", "choai", "chuay", ".chuai", "chuan", "chwan", "choan", "chuann", ".chuan", "chuang", "chwang", "choang", "chuanq", ".chuang", "chuei", "chwei", "choei", "chuey", ".chuei", "chuen", "chwen", "choen", "chuenn", ".chuen", "chuo", "chwo", "chuoo", "chuoh", ".chuo", "tsy", "tsyr", "tsyy", "tsyh", ".tsy", "tsong", "tsorng", "tsoong", "tsonq", ".tsong", "tsou", "tsour", "tsoou", "tsow", ".tsou", "tsu", "tswu", "tsuu", "tsuh", ".tsu", "tsuan", "tswan", "tsoan", "tsuann", ".tsuan", "tsiuan", "tsyuan", "tseuan", "tsiuann", ".tsiuan", "tsuei", "tswei", "tsoei", "tsuey", ".tsuei", "tsuen", "tswen", "tsoen", "tsuenn", ".tsuen", "tsuo", "tswo", "tsuoo", "tsuoh", ".tsuo", "da", "dar", "daa", "dah", ".da", "dai", "dair", "dae", "day", ".dai", "dan", "darn", "daan", "dann", ".dan", "dang", "darng", "daang", "danq", ".dang", "dau", "daur", "dao", "daw", ".dau", "de", "der", "dee", "deh", ".de", "dè", "dèr", "dèè", "dèh", ".dè", "dei", "deir", "deei", "dey", ".dei", "den", "dern", "deen", "denn", ".den", "deng", "derng", "deeng", "denq", ".deng", "di", "dyi", "dii", "dih", ".di", "dia", "dya", "dea", "diah", ".dia", "dian", "dyan", "dean", "diann", ".dian", "diang", "dyang", "deang", "dianq", ".diang", "diau", "dyau", "deau", "diaw", ".diau", "die", "dye", "diee", "dieh", ".die", "ding", "dyng", "diing", "dinq", ".ding", "diou", "dyou", "deou", "diow", ".diou", "do", "dor", "doo", "doh", ".do", "dong", "dorng", "doong", "donq", ".dong", "dou", "dour", "doou", "dow", ".dou", "du", "dwu", "duu", "duh", ".du", "duan", "dwan", "doan", "duann", ".duan", "duang", "dwang", "doang", "duanq", ".duang", "duei", "dwei", "doei", "duey", ".duei", "duen", "dwen", "doen", "duenn", ".duen", "duo", "dwo", "duoo", "duoh", ".duo", "e", "er", "ee", "eh", ".e", "è", "èr", "èè", "èh", ".è", "ei", "eir", "eei", "ey", ".ei", "en", "ern", "een", "enn", ".en", "eng", "erng", "eeng", "enq", ".eng", "el", "erl", "eel", "ell", ".el", "fa", "far", "faa", "fah", ".fa", "fai", "fair", "fae", "fay", ".fai", "fan", "farn", "faan", "fann", ".fan", "fang", "farng", "faang", "fanq", ".fang", "fei", "feir", "feei", "fey", ".fei", "fen", "fern", "feen", "fenn", ".fen", "feng", "ferng", "feeng", "fenq", ".feng", "fiau", "fyau", "feau", "fiaw", ".fiau", "fo", "for", "foo", "foh", ".fo", "fong", "forng", "foong", "fonq", ".fong", "fou", "four", "foou", "fow", ".fou", "fu", "fwu", "fuu", "fuh", ".fu", "ga", "gar", "gaa", "gah", ".ga", "gai", "gair", "gae", "gay", ".gai", "gan", "garn", "gaan", "gann", ".gan", "gang", "garng", "gaang", "ganq", ".gang", "gau", "gaur", "gao", "gaw", ".gau", "ge", "ger", "gee", "geh", ".ge", "gè", "gèr", "gèè", "gèh", ".gè", "gei", "geir", "geei", "gey", ".gei", "gen", "gern", "geen", "genn", ".gen", "geng", "gerng", "geeng", "genq", ".geng", "gi", "gyi", "gii", "gih", ".gi", "ging", "gyng", "giing", "ginq", ".ging", "gong", "gorng", "goong", "gonq", ".gong", "gou", "gour", "goou", "gow", ".gou", "gu", "gwu", "guu", "guh", ".gu", "gua", "gwa", "goa", "guah", ".gua", "guai", "gwai", "goai", "guay", ".guai", "guan", "gwan", "goan", "guann", ".guan", "guang", "gwang", "goang", "guanq", ".guang", "guei", "gwei", "goei", "guey", ".guei", "guen", "gwen", "goen", "guenn", ".guen", "guo", "gwo", "guoo", "guoh", ".guo", "ha", "har", "haa", "hah", ".ha", "hai", "hair", "hae", "hay", ".hai", "han", "harn", "haan", "hann", ".han", "hang", "harng", "haang", "hanq", ".hang", "hau", "haur", "hao", "haw", ".hau", "he", "her", "hee", "heh", ".he", "hei", "heir", "heei", "hey", ".hei", "hen", "hern", "heen", "henn", ".hen", "heng", "herng", "heeng", "henq", ".heng", "hm", "hmr", "hmm", "hmh", ".hm", "hng", "hngr", "hnng", "hngh", ".hng", "hong", "horng", "hoong", "honq", ".hong", "hou", "hour", "hoou", "how", ".hou", "hu", "hwu", "huu", "huh", ".hu", "hua", "hwa", "hoa", "huah", ".hua", "huai", "hwai", "hoai", "huay", ".huai", "huan", "hwan", "hoan", "huann", ".huan", "huang", "hwang", "hoang", "huanq", ".huang", "huei", "hwei", "hoei", "huey", ".huei", "huen", "hwen", "hoen", "huenn", ".huen", "huo", "hwo", "huoo", "huoh", ".huo", "ji", "jyi", "jii", "jih", ".ji", "jia", "jya", "jea", "jiah", ".jia", "jiai", "jyai", "jeai", "jiay", ".jiai", "jian", "jyan", "jean", "jiann", ".jian", "jiang", "jyang", "jeang", "jianq", ".jiang", "jiau", "jyau", "jeau", "jiaw", ".jiau", "jie", "jye", "jiee", "jieh", ".jie", "jin", "jyn", "jiin", "jinn", ".jin", "jing", "jyng", "jiing", "jinq", ".jing", "jio", "jyo", "jeo", "jioh", ".jio", "jiong", "jyong", "jeong", "jionq", ".jiong", "jiou", "jyou", "jeou", "jiow", ".jiou", "jiu", "jyu", "jeu", "jiuh", ".jiu", "jiuan", "jyuan", "jeuan", "jiuann", ".jiuan", "jiue", "jyue", "jeue", "jiueh", ".jiue", "jiun", "jyun", "jeun", "jiunn", ".jiun", "ka", "kar", "kaa", "kah", ".ka", "kai", "kair", "kae", "kay", ".kai", "kan", "karn", "kaan", "kann", ".kan", "kang", "karng", "kaang", "kanq", ".kang", "kau", "kaur", "kao", "kaw", ".kau", "ke", "ker", "kee", "keh", ".ke", "kè", "kèr", "kèè", "kèh", ".kè", "kei", "keir", "keei", "key", ".kei", "ken", "kern", "keen", "kenn", ".ken", "keng", "kerng", "keeng", "kenq", ".keng", "kia", "kya", "kea", "kiah", ".kia", "kiang", "kyang", "keang", "kianq", ".kiang", "kiou", "kyou", "keou", "kiow", ".kiou", "kong", "korng", "koong", "konq", ".kong", "kou", "kour", "koou", "kow", ".kou", "ku", "kwu", "kuu", "kuh", ".ku", "kua", "kwa", "koa", "kuah", ".kua", "kuai", "kwai", "koai", "kuay", ".kuai", "kuan", "kwan", "koan", "kuann", ".kuan", "kuang", "kwang", "koang", "kuanq", ".kuang", "kuei", "kwei", "koei", "kuey", ".kuei", "kuen", "kwen", "koen", "kuenn", ".kuen", "kuo", "kwo", "kuoo", "kuoh", ".kuo", "lha", "la", "laa", "lah", ".la", "lhai", "lai", "lae", "lay", ".lai", "lhan", "lan", "laan", "lann", ".lan", "lhang", "lang", "laang", "lanq", ".lang", "lhau", "lau", "lao", "law", ".lau", "lhe", "le", "lee", "leh", ".le", "lhei", "lei", "leei", "ley", ".lei", "lhen", "len", "leen", "lenn", ".len", "lheng", "leng", "leeng", "lenq", ".leng", "lhi", "li", "lii", "lih", ".li", "lhia", "lia", "lea", "liah", ".lia", "lhian", "lian", "lean", "liann", ".lian", "lhiang", "liang", "leang", "lianq", ".liang", "lhiau", "liau", "leau", "liaw", ".liau", "lhie", "lie", "liee", "lieh", ".lie", "lhin", "lin", "liin", "linn", ".lin", "lhing", "ling", "liing", "linq", ".ling", "lhiou", "liou", "leou", "liow", ".liou", "lho", "lo", "loo", "loh", ".lo", "lhong", "long", "loong", "lonq", ".long", "lhou", "lou", "loou", "low", ".lou", "lhu", "lu", "luu", "luh", ".lu", "lhiu", "liu", "leu", "liuh", ".liu", "lhuan", "luan", "loan", "luann", ".luan", "lhiuan", "liuan", "leuan", "liuann", ".liuan", "lhiue", "liue", "leue", "liueh", ".liue", "lhuei", "luei", "loei", "luey", ".luei", "lhuen", "luen", "loen", "luenn", ".luen", "lhiun", "liun", "leun", "liunn", ".liun", "lhuo", "luo", "luoo", "luoh", ".luo", "m", "mr", "mm", "mh", ".m", "mha", "ma", "maa", "mah", ".ma", "mhai", "mai", "mae", "may", ".mai", "mhan", "man", "maan", "mann", ".man", "mhang", "mang", "maang", "manq", ".mang", "mhau", "mau", "mao", "maw", ".mau", "mhe", "me", "mee", "meh", ".me", "mhei", "mei", "meei", "mey", ".mei", "mhen", "men", "meen", "menn", ".men", "mhèn", "mèn", "mèèn", "mènn", ".mèn", "mheng", "meng", "meeng", "menq", ".meng", "mhi", "mi", "mii", "mih", ".mi", "mhian", "mian", "mean", "miann", ".mian", "mhiau", "miau", "meau", "miaw", ".miau", "mhie", "mie", "miee", "mieh", ".mie", "mhin", "min", "miin", "minn", ".min", "mhing", "ming", "miing", "minq", ".ming", "mhiou", "miou", "meou", "miow", ".miou", "mho", "mo", "moo", "moh", ".mo", "mhou", "mou", "moou", "mow", ".mou", "mhu", "mu", "muu", "muh", ".mu", "mhua", "mua", "moa", "muah", ".mua", "n", "nr", "nn", "nh", ".n", "nha", "na", "naa", "nah", ".na", "nhai", "nai", "nae", "nay", ".nai", "nhan", "nan", "naan", "nann", ".nan", "nhang", "nang", "naang", "nanq", ".nang", "nhau", "nau", "nao", "naw", ".nau", "nhe", "ne", "nee", "neh", ".ne", "nhè", "nè", "nèè", "nèh", ".nè", "nhei", "nei", "neei", "ney", ".nei", "nhen", "nen", "neen", "nenn", ".nen", "nheng", "neng", "neeng", "nenq", ".neng", "ng", "ngr", "nng", "ngh", ".ng", "nhi", "ni", "nii", "nih", ".ni", "nhia", "nia", "nea", "niah", ".nia", "nhian", "nian", "nean", "niann", ".nian", "nhiang", "niang", "neang", "nianq", ".niang", "nhiau", "niau", "neau", "niaw", ".niau", "nhie", "nie", "niee", "nieh", ".nie", "nhin", "nin", "niin", "ninn", ".nin", "nhing", "ning", "niing", "ninq", ".ning", "nhiou", "niou", "neou", "niow", ".niou", "nhong", "nong", "noong", "nonq", ".nong", "nhou", "nou", "noou", "now", ".nou", "nhu", "nu", "nuu", "nuh", ".nu", "nhiu", "niu", "neu", "niuh", ".niu", "nhuan", "nuan", "noan", "nuann", ".nuan", "nhiue", "niue", "neue", "niueh", ".niue", "nhuen", "nuen", "noen", "nuenn", ".nuen", "nhuo", "nuo", "nuoo", "nuoh", ".nuo", "o", "or", "oo", "oh", ".o", "ong", "orng", "oong", "onq", ".ong", "ou", "our", "oou", "ow", ".ou", "pa", "par", "paa", "pah", ".pa", "pai", "pair", "pae", "pay", ".pai", "pan", "parn", "paan", "pann", ".pan", "pang", "parng", "paang", "panq", ".pang", "pau", "paur", "pao", "paw", ".pau", "pe", "per", "pee", "peh", ".pe", "pè", "pèr", "pèè", "pèh", ".pè", "pei", "peir", "peei", "pey", ".pei", "pen", "pern", "peen", "penn", ".pen", "peng", "perng", "peeng", "penq", ".peng", "pi", "pyi", "pii", "pih", ".pi", "pia", "pya", "pea", "piah", ".pia", "pian", "pyan", "pean", "piann", ".pian", "piau", "pyau", "peau", "piaw", ".piau", "pie", "pye", "piee", "pieh", ".pie", "pin", "pyn", "piin", "pinn", ".pin", "ping", "pyng", "piing", "pinq", ".ping", "po", "por", "poo", "poh", ".po", "pou", "pour", "poou", "pow", ".pou", "pu", "pwu", "puu", "puh", ".pu", "puen", "pwen", "poen", "puenn", ".puen", "chi", "chyi", "chii", "chih", ".chi", "chia", "chya", "chea", "chiah", ".chia", "chian", "chyan", "chean", "chiann", ".chian", "chiang", "chyang", "cheang", "chianq", ".chiang", "chiau", "chyau", "cheau", "chiaw", ".chiau", "chie", "chye", "chiee", "chieh", ".chie", "chin", "chyn", "chiin", "chinn", ".chin", "ching", "chyng", "chiing", "chinq", ".ching", "chio", "chyo", "cheo", "chioh", ".chio", "chiong", "chyong", "cheong", "chionq", ".chiong", "chiou", "chyou", "cheou", "chiow", ".chiou", "chiu", "chyu", "cheu", "chiuh", ".chiu", "chiuan", "chyuan", "cheuan", "chiuann", ".chiuan", "chiue", "chyue", "cheue", "chiueh", ".chiue", "chiun", "chyun", "cheun", "chiunn", ".chiun", "chiuo", "chyuo", "cheuo", "chiuoh", ".chiuo", "rhan", "ran", "raan", "rann", ".ran", "rhang", "rang", "raang", "ranq", ".rang", "rhau", "rau", "rao", "raw", ".rau", "rhe", "re", "ree", "reh", ".re", "rhen", "ren", "reen", "renn", ".ren", "rheng", "reng", "reeng", "renq", ".reng", "rhy", "ry", "ryy", "ryh", ".ry", "rhong", "rong", "roong", "ronq", ".rong", "rhou", "rou", "roou", "row", ".rou", "rhu", "ru", "ruu", "ruh", ".ru", "rhua", "rua", "roa", "ruah", ".rua", "rhuan", "ruan", "roan", "ruann", ".ruan", "rhuei", "ruei", "roei", "ruey", ".ruei", "rhuen", "ruen", "roen", "ruenn", ".ruen", "rhuo", "ruo", "ruoo", "ruoh", ".ruo", "sa", "sar", "saa", "sah", ".sa", "sai", "sair", "sae", "say", ".sai", "san", "sarn", "saan", "sann", ".san", "sang", "sarng", "saang", "sanq", ".sang", "sau", "saur", "sao", "saw", ".sau", "se", "ser", "see", "seh", ".se", "sei", "seir", "seei", "sey", ".sei", "sen", "sern", "seen", "senn", ".sen", "seng", "serng", "seeng", "senq", ".seng", "sha", "shar", "shaa", "shah", ".sha", "shai", "shair", "shae", "shay", ".shai", "shan", "sharn", "shaan", "shann", ".shan", "shang", "sharng", "shaang", "shanq", ".shang", "shau", "shaur", "shao", "shaw", ".shau", "she", "sher", "shee", "sheh", ".she", "shè", "shèr", "shèè", "shèh", ".shè", "shei", "sheir", "sheei", "shey", ".shei", "shen", "shern", "sheen", "shenn", ".shen", "sheng", "sherng", "sheeng", "shenq", ".sheng", "shy", "shyr", "shyy", "shyh", ".shy", "sho", "shor", "shoo", "shoh", ".sho", "shou", "shour", "shoou", "show", ".shou", "shu", "shwu", "shuu", "shuh", ".shu", "shua", "shwa", "shoa", "shuah", ".shua", "shuai", "shwai", "shoai", "shuay", ".shuai", "shuan", "shwan", "shoan", "shuann", ".shuan", "shuang", "shwang", "shoang", "shuanq", ".shuang", "shuei", "shwei", "shoei", "shuey", ".shuei", "shuen", "shwen", "shoen", "shuenn", ".shuen", "shuo", "shwo", "shuoo", "shuoh", ".shuo", "sy", "syr", "syy", "syh", ".sy", "siau", "syau", "seau", "siaw", ".siau", "sing", "syng", "siing", "sinq", ".sing", "song", "sorng", "soong", "sonq", ".song", "sou", "sour", "soou", "sow", ".sou", "su", "swu", "suu", "suh", ".su", "suan", "swan", "soan", "suann", ".suan", "suei", "swei", "soei", "suey", ".suei", "suen", "swen", "soen", "suenn", ".suen", "suo", "swo", "suoo", "suoh", ".suo", "ta", "tar", "taa", "tah", ".ta", "tai", "tair", "tae", "tay", ".tai", "tan", "tarn", "taan", "tann", ".tan", "tang", "tarng", "taang", "tanq", ".tang", "tau", "taur", "tao", "taw", ".tau", "te", "ter", "tee", "teh", ".te", "tè", "tèr", "tèè", "tèh", ".tè", "tei", "teir", "teei", "tey", ".tei", "teng", "terng", "teeng", "tenq", ".teng", "ti", "tyi", "tii", "tih", ".ti", "tian", "tyan", "tean", "tiann", ".tian", "tiau", "tyau", "teau", "tiaw", ".tiau", "tie", "tye", "tiee", "tieh", ".tie", "ting", "tyng", "tiing", "tinq", ".ting", "tong", "torng", "toong", "tonq", ".tong", "tou", "tour", "toou", "tow", ".tou", "tu", "twu", "tuu", "tuh", ".tu", "tuan", "twan", "toan", "tuann", ".tuan", "tuei", "twei", "toei", "tuey", ".tuei", "tuen", "twen", "toen", "tuenn", ".tuen", "tuo", "two", "tuoo", "tuoh", ".tuo", "vo", "vor", "voo", "voh", ".vo", "vè", "vèr", "vèè", "vèh", ".vè", "vu", "vwu", "vuu", "vuh", ".vu", "ua", "wa", "woa", "wah", ".ua", "uai", "wai", "woai", "way", ".uai", "uan", "wan", "woan", "wann", ".uan", "uang", "wang", "woang", "wanq", ".uang", "uè", "wè", "woè", "wèh", ".uè", "uei", "wei", "woei", "wey", ".uei", "uen", "wen", "woen", "wenn", ".uen", "ueng", "weng", "woeng", "wenq", ".ueng", "uo", "wo", "woo", "woh", ".uo", "u", "wu", "wuu", "wuh", ".u", "shi", "shyi", "shii", "shih", ".shi", "shia", "shya", "shea", "shiah", ".shia", "shian", "shyan", "shean", "shiann", ".shian", "shiang", "shyang", "sheang", "shianq", ".shiang", "shiau", "shyau", "sheau", "shiaw", ".shiau", "shie", "shye", "shiee", "shieh", ".shie", "shin", "shyn", "shiin", "shinn", ".shin", "shing", "shyng", "shiing", "shinq", ".shing", "shiong", "shyong", "sheong", "shionq", ".shiong", "shiou", "shyou", "sheou", "shiow", ".shiou", "shiu", "shyu", "sheu", "shiuh", ".shiu", "shiuan", "shyuan", "sheuan", "shiuann", ".shiuan", "shiue", "shyue", "sheue", "shiueh", ".shiue", "shiun", "shyun", "sheun", "shiunn", ".shiun", "ia", "ya", "yea", "yah", ".ia", "iai", "yai", "yeai", "yay", ".iai", "ian", "yan", "yean", "yann", ".ian", "iang", "yang", "yeang", "yanq", ".iang", "iau", "yau", "yeau", "yaw", ".iau", "ie", "ye", "yee", "yeh", ".ie", "i", "yi", "yii", "yih", ".i", "in", "yn", "yiin", "yinn", ".in", "ing", "yng", "yiing", "yinq", ".ing", "io", "yo", "yeo", "yoh", ".io", "iong", "yong", "yeong", "yonq", ".iong", "iou", "you", "yeou", "yow", ".iou", "iu", "yu", "yeu", "yuh", ".iu", "iuan", "yuan", "yeuan", "yuann", ".iuan", "iue", "yue", "yeue", "yueh", ".iue", "iun", "yun", "yeun", "yunn", ".iun", "tza", "tzar", "tzaa", "tzah", ".tza", "tzai", "tzair", "tzae", "tzay", ".tzai", "tzan", "tzarn", "tzaan", "tzann", ".tzan", "tzang", "tzarng", "tzaang", "tzanq", ".tzang", "tzau", "tzaur", "tzao", "tzaw", ".tzau", "tze", "tzer", "tzee", "tzeh", ".tze", "tzè", "tzèr", "tzèè", "tzèh", ".tzè", "tzei", "tzeir", "tzeei", "tzey", ".tzei", "tzen", "tzern", "tzeen", "tzenn", ".tzen", "tzeng", "tzerng", "tzeeng", "tzenq", ".tzeng", "ja", "jar", "jaa", "jah", ".ja", "jai", "jair", "jae", "jay", ".jai", "jan", "jarn", "jaan", "jann", ".jan", "jang", "jarng", "jaang", "janq", ".jang", "jau", "jaur", "jao", "jaw", ".jau", "je", "jer", "jee", "jeh", ".je", "jè", "jèr", "jèè", "jèh", ".jè", "jei", "jeir", "jeei", "jey", ".jei", "jen", "jern", "jeen", "jenn", ".jen", "jeng", "jerng", "jeeng", "jenq", ".jeng", "jy", "jyr", "jyy", "jyh", ".jy", "jo", "jor", "joo", "joh", ".jo", "jong", "jorng", "joong", "jonq", ".jong", "jou", "jour", "joou", "jow", ".jou", "ju", "jwu", "juu", "juh", ".ju", "jua", "jwa", "joa", "juah", ".jua", "juai", "jwai", "joai", "juay", ".juai", "juan", "jwan", "joan", "juann", ".juan", "juang", "jwang", "joang", "juanq", ".juang", "juei", "jwei", "joei", "juey", ".juei", "juen", "jwen", "joen", "juenn", ".juen", "juo", "jwo", "juoo", "juoh", ".juo", "tzy", "tzyr", "tzyy", "tzyh", ".tzy", "tzio", "tzyo", "tzeo", "tzioh", ".tzio", "tzo", "tzor", "tzoo", "tzoh", ".tzo", "tzong", "tzorng", "tzoong", "tzonq", ".tzong", "tzou", "tzour", "tzoou", "tzow", ".tzou", "tzu", "tzwu", "tzuu", "tzuh", ".tzu", "tzuan", "tzwan", "tzoan", "tzuann", ".tzuan", "tzuei", "tzwei", "tzoei", "tzuey", ".tzuei", "tzuen", "tzwen", "tzoen", "tzuenn", ".tzuen", "tzuo", "tzwo", "tzuoo", "tzuoh", ".tzuo"}
self:iterate_conversions(examples, pinyin, m_pron.py_gwoyeu, "Monosyllables")
local examples_erhua = {"al", "arl", "aal", "all", ".al", "al", "arl", "aal", "all", ".al", "al", "arl", "aal", "all", ".al", "angl", "arngl", "aangl", "anql", ".angl", "aul", "aurl", "aol", "awl", ".aul", "bal", "barl", "baal", "ball", ".bal", "bal", "barl", "baal", "ball", ".bal", "bal", "barl", "baal", "ball", ".bal", "bangl", "barngl", "baangl", "banql", ".bangl", "baul", "baurl", "baol", "bawl", ".baul", "be'l", "ber'l", "bee'l", "behl", ".be'l", "be'l", "ber'l", "beel", "bell", ".be'l", "bel", "berl", "beel", "bell", ".bel", "bel", "berl", "beel", "bell", ".bel", "bengl", "berngl", "beengl", "benql", ".bengl", "biel", "byel", "bieel", "biell", ".biel", "bial", "byal", "beal", "biall", ".bial", "biangl", "byangl", "beangl", "bianql", ".biangl", "biaul", "byaul", "beaul", "biawl", ".biaul", "bie'l", "bye'l", "bieel", "biell", ".bie'l", "biel", "byel", "bieel", "biell", ".biel", "biengl", "byengl", "bieengl", "bienql", ".biengl", "bioul", "byoul", "beoul", "biowl", ".bioul", "bol", "borl", "bool", "boll", ".bol", "bongl", "borngl", "boongl", "bonql", ".bongl", "bul", "bwul", "buul", "bull", ".bul", "tsal", "tsarl", "tsaal", "tsall", ".tsal", "tsal", "tsarl", "tsaal", "tsall", ".tsal", "tsal", "tsarl", "tsaal", "tsall", ".tsal", "tsangl", "tsarngl", "tsaangl", "tsanql", ".tsangl", "tsaul", "tsaurl", "tsaol", "tsawl", ".tsaul", "tse'l", "tser'l", "tsee'l", "tsehl", ".tse'l", "tse'l", "tser'l", "tseel", "tsell", ".tse'l", "tsel", "tserl", "tseel", "tsell", ".tsel", "tsel", "tserl", "tseel", "tsell", ".tsel", "tsengl", "tserngl", "tseengl", "tsenql", ".tsengl", "chal", "charl", "chaal", "chall", ".chal", "chal", "charl", "chaal", "chall", ".chal", "chal", "charl", "chaal", "chall", ".chal", "changl", "charngl", "chaangl", "chanql", ".changl", "chaul", "chaurl", "chaol", "chawl", ".chaul", "che'l", "cher'l", "chee'l", "chehl", ".che'l", "chel", "cherl", "cheel", "chell", ".chel", "chengl", "cherngl", "cheengl", "chenql", ".chengl", "chel", "cherl", "cheel", "chell", ".chel", "chongl", "chorngl", "choongl", "chonql", ".chongl", "choul", "chourl", "chooul", "chowl", ".choul", "chul", "chwul", "chuul", "chull", ".chul", "chual", "chwal", "choal", "chuall", ".chual", "chual", "chwal", "choal", "chuall", ".chual", "chual", "chwal", "choal", "chuall", ".chual", "chuangl", "chwangl", "choangl", "chuanql", ".chuangl", "chuel", "chwel", "choel", "chuell", ".chuel", "chuel", "chwel", "choel", "chuell", ".chuel", "chuol", "chwol", "chuool", "chuoll", ".chuol", "tsel", "tserl", "tseel", "tsell", ".tsel", "tsongl", "tsorngl", "tsoongl", "tsonql", ".tsongl", "tsoul", "tsourl", "tsooul", "tsowl", ".tsoul", "tsul", "tswul", "tsuul", "tsull", ".tsul", "tsual", "tswal", "tsoal", "tsuall", ".tsual", "tsiual", "tsyual", "tseual", "tsiuall", ".tsiual", "tsuel", "tswel", "tsoel", "tsuell", ".tsuel", "tsuel", "tswel", "tsoel", "tsuell", ".tsuel", "tsuol", "tswol", "tsuool", "tsuoll", ".tsuol", "dal", "darl", "daal", "dall", ".dal", "dal", "darl", "daal", "dall", ".dal", "dal", "darl", "daal", "dall", ".dal", "dangl", "darngl", "daangl", "danql", ".dangl", "daul", "daurl", "daol", "dawl", ".daul", "de'l", "der'l", "dee'l", "dehl", ".de'l", "de'l", "der'l", "deel", "dell", ".de'l", "del", "derl", "deel", "dell", ".del", "del", "derl", "deel", "dell", ".del", "dengl", "derngl", "deengl", "denql", ".dengl", "diel", "dyel", "dieel", "diell", ".diel", "dial", "dyal", "deal", "diall", ".dial", "dial", "dyal", "deal", "diall", ".dial", "diangl", "dyangl", "deangl", "dianql", ".diangl", "diaul", "dyaul", "deaul", "diawl", ".diaul", "die'l", "dye'l", "dieel", "diell", ".die'l", "diengl", "dyengl", "dieengl", "dienql", ".diengl", "dioul", "dyoul", "deoul", "diowl", ".dioul", "dol", "dorl", "dool", "doll", ".dol", "dongl", "dorngl", "doongl", "donql", ".dongl", "doul", "dourl", "dooul", "dowl", ".doul", "dul", "dwul", "duul", "dull", ".dul", "dual", "dwal", "doal", "duall", ".dual", "duangl", "dwangl", "doangl", "duanql", ".duangl", "duel", "dwel", "doel", "duell", ".duel", "duel", "dwel", "doel", "duell", ".duel", "duol", "dwol", "duool", "duoll", ".duol", "e'l", "er'l", "ee'l", "ehl", ".e'l", "e'l", "er'l", "eel", "ell", ".e'l", "el", "erl", "eel", "ell", ".el", "el", "erl", "eel", "ell", ".el", "engl", "erngl", "eengl", "enql", ".engl", "el", "erl", "eel", "ell", ".el", "fal", "farl", "faal", "fall", ".fal", "fal", "farl", "faal", "fall", ".fal", "fal", "farl", "faal", "fall", ".fal", "fangl", "farngl", "faangl", "fanql", ".fangl", "fel", "ferl", "feel", "fell", ".fel", "fel", "ferl", "feel", "fell", ".fel", "fengl", "ferngl", "feengl", "fenql", ".fengl", "fiaul", "fyaul", "feaul", "fiawl", ".fiaul", "fol", "forl", "fool", "foll", ".fol", "fongl", "forngl", "foongl", "fonql", ".fongl", "foul", "fourl", "fooul", "fowl", ".foul", "ful", "fwul", "fuul", "full", ".ful", "gal", "garl", "gaal", "gall", ".gal", "gal", "garl", "gaal", "gall", ".gal", "gal", "garl", "gaal", "gall", ".gal", "gangl", "garngl", "gaangl", "ganql", ".gangl", "gaul", "gaurl", "gaol", "gawl", ".gaul", "ge'l", "ger'l", "gee'l", "gehl", ".ge'l", "ge'l", "ger'l", "geel", "gell", ".ge'l", "gel", "gerl", "geel", "gell", ".gel", "gel", "gerl", "geel", "gell", ".gel", "gengl", "gerngl", "geengl", "genql", ".gengl", "giel", "gyel", "gieel", "giell", ".giel", "giengl", "gyengl", "gieengl", "gienql", ".giengl", "gongl", "gorngl", "goongl", "gonql", ".gongl", "goul", "gourl", "gooul", "gowl", ".goul", "gul", "gwul", "guul", "gull", ".gul", "gual", "gwal", "goal", "guall", ".gual", "gual", "gwal", "goal", "guall", ".gual", "gual", "gwal", "goal", "guall", ".gual", "guangl", "gwangl", "goangl", "guanql", ".guangl", "guel", "gwel", "goel", "guell", ".guel", "guel", "gwel", "goel", "guell", ".guel", "guol", "gwol", "guool", "guoll", ".guol", "hal", "harl", "haal", "hall", ".hal", "hal", "harl", "haal", "hall", ".hal", "hal", "harl", "haal", "hall", ".hal", "hangl", "harngl", "haangl", "hanql", ".hangl", "haul", "haurl", "haol", "hawl", ".haul", "he'l", "her'l", "hee'l", "hehl", ".he'l", "hel", "herl", "heel", "hell", ".hel", "hel", "herl", "heel", "hell", ".hel", "hengl", "herngl", "heengl", "henql", ".hengl", "hml", "hmrl", "hmml", "hmll", ".hml", "hngl", "hngrl", "hnngl", "hngll", ".hngl", "hongl", "horngl", "hoongl", "honql", ".hongl", "houl", "hourl", "hooul", "howl", ".houl", "hul", "hwul", "huul", "hull", ".hul", "hual", "hwal", "hoal", "huall", ".hual", "hual", "hwal", "hoal", "huall", ".hual", "hual", "hwal", "hoal", "huall", ".hual", "huangl", "hwangl", "hoangl", "huanql", ".huangl", "huel", "hwel", "hoel", "huell", ".huel", "huel", "hwel", "hoel", "huell", ".huel", "huol", "hwol", "huool", "huoll", ".huol", "jiel", "jyel", "jieel", "jiell", ".jiel", "jial", "jyal", "jeal", "jiall", ".jial", "jial", "jyal", "jeal", "jiall", ".jial", "jial", "jyal", "jeal", "jiall", ".jial", "jiangl", "jyangl", "jeangl", "jianql", ".jiangl", "jiaul", "jyaul", "jeaul", "jiawl", ".jiaul", "jie'l", "jye'l", "jieel", "jiell", ".jie'l", "jiel", "jyel", "jieel", "jiell", ".jiel", "jiengl", "jyengl", "jieengl", "jienql", ".jiengl", "jiol", "jyol", "jeol", "jioll", ".jiol", "jiongl", "jyongl", "jeongl", "jionql", ".jiongl", "jioul", "jyoul", "jeoul", "jiowl", ".jioul", "jiuel", "jyuel", "jeuel", "jiuell", ".jiuel", "jiual", "jyual", "jeual", "jiuall", ".jiual", "jiue'l", "jyue'l", "jeuel", "jiuell", ".jiue'l", "jiuel", "jyuel", "jeuel", "jiuell", ".jiuel", "kal", "karl", "kaal", "kall", ".kal", "kal", "karl", "kaal", "kall", ".kal", "kal", "karl", "kaal", "kall", ".kal", "kangl", "karngl", "kaangl", "kanql", ".kangl", "kaul", "kaurl", "kaol", "kawl", ".kaul", "ke'l", "ker'l", "kee'l", "kehl", ".ke'l", "ke'l", "ker'l", "keel", "kell", ".ke'l", "kel", "kerl", "keel", "kell", ".kel", "kel", "kerl", "keel", "kell", ".kel", "kengl", "kerngl", "keengl", "kenql", ".kengl", "kial", "kyal", "keal", "kiall", ".kial", "kiangl", "kyangl", "keangl", "kianql", ".kiangl", "kioul", "kyoul", "keoul", "kiowl", ".kioul", "kongl", "korngl", "koongl", "konql", ".kongl", "koul", "kourl", "kooul", "kowl", ".koul", "kul", "kwul", "kuul", "kull", ".kul", "kual", "kwal", "koal", "kuall", ".kual", "kual", "kwal", "koal", "kuall", ".kual", "kual", "kwal", "koal", "kuall", ".kual", "kuangl", "kwangl", "koangl", "kuanql", ".kuangl", "kuel", "kwel", "koel", "kuell", ".kuel", "kuel", "kwel", "koel", "kuell", ".kuel", "kuol", "kwol", "kuool", "kuoll", ".kuol", "lhal", "lal", "laal", "lall", ".lal", "lhal", "lal", "laal", "lall", ".lal", "lhal", "lal", "laal", "lall", ".lal", "lhangl", "langl", "laangl", "lanql", ".langl", "lhaul", "laul", "laol", "lawl", ".laul", "lhe'l", "le'l", "lee'l", "lehl", ".le'l", "lhel", "lel", "leel", "lell", ".lel", "lhel", "lel", "leel", "lell", ".lel", "lhengl", "lengl", "leengl", "lenql", ".lengl", "lhiel", "liel", "lieel", "liell", ".liel", "lhial", "lial", "leal", "liall", ".lial", "lhial", "lial", "leal", "liall", ".lial", "lhiangl", "liangl", "leangl", "lianql", ".liangl", "lhiaul", "liaul", "leaul", "liawl", ".liaul", "lhie'l", "lie'l", "lieel", "liell", ".lie'l", "lhiel", "liel", "lieel", "liell", ".liel", "lhiengl", "liengl", "lieengl", "lienql", ".liengl", "lhioul", "lioul", "leoul", "liowl", ".lioul", "lhol", "lol", "lool", "loll", ".lol", "lhongl", "longl", "loongl", "lonql", ".longl", "lhoul", "loul", "looul", "lowl", ".loul", "lhul", "lul", "luul", "lull", ".lul", "lhiuel", "liuel", "leuel", "liuell", ".liuel", "lhual", "lual", "loal", "luall", ".lual", "lhiual", "liual", "leual", "liuall", ".liual", "lhiue'l", "liue'l", "leuel", "liuell", ".liue'l", "lhuel", "luel", "loel", "luell", ".luel", "lhuel", "luel", "loel", "luell", ".luel", "lhiuel", "liuel", "leuel", "liuell", ".liuel", "lhuol", "luol", "luool", "luoll", ".luol", "ml", "mrl", "mml", "mll", ".ml", "mhal", "mal", "maal", "mall", ".mal", "mhal", "mal", "maal", "mall", ".mal", "mhal", "mal", "maal", "mall", ".mal", "mhangl", "mangl", "maangl", "manql", ".mangl", "mhaul", "maul", "maol", "mawl", ".maul", "mhe'l", "me'l", "mee'l", "mehl", ".me'l", "mhel", "mel", "meel", "mell", ".mel", "mhel", "mel", "meel", "mell", ".mel", "mhe'l", "me'l", "meel", "mell", ".me'l", "mhengl", "mengl", "meengl", "menql", ".mengl", "mhiel", "miel", "mieel", "miell", ".miel", "mhial", "mial", "meal", "miall", ".mial", "mhiaul", "miaul", "meaul", "miawl", ".miaul", "mhie'l", "mie'l", "mieel", "miell", ".mie'l", "mhiel", "miel", "mieel", "miell", ".miel", "mhiengl", "miengl", "mieengl", "mienql", ".miengl", "mhioul", "mioul", "meoul", "miowl", ".mioul", "mhol", "mol", "mool", "moll", ".mol", "mhoul", "moul", "mooul", "mowl", ".moul", "mhul", "mul", "muul", "mull", ".mul", "mhual", "mual", "moal", "muall", ".mual", "nl", "nrl", "nnl", "nll", ".nl", "nhal", "nal", "naal", "nall", ".nal", "nhal", "nal", "naal", "nall", ".nal", "nhal", "nal", "naal", "nall", ".nal", "nhangl", "nangl", "naangl", "nanql", ".nangl", "nhaul", "naul", "naol", "nawl", ".naul", "nhe'l", "ne'l", "nee'l", "nehl", ".ne'l", "nhe'l", "ne'l", "neel", "nell", ".ne'l", "nhel", "nel", "neel", "nell", ".nel", "nhel", "nel", "neel", "nell", ".nel", "nhengl", "nengl", "neengl", "nenql", ".nengl", "ngl", "ngrl", "nngl", "ngll", ".ngl", "nhiel", "niel", "nieel", "niell", ".niel", "nhial", "nial", "neal", "niall", ".nial", "nhial", "nial", "neal", "niall", ".nial", "nhiangl", "niangl", "neangl", "nianql", ".niangl", "nhiaul", "niaul", "neaul", "niawl", ".niaul", "nhie'l", "nie'l", "nieel", "niell", ".nie'l", "nhiel", "niel", "nieel", "niell", ".niel", "nhiengl", "niengl", "nieengl", "nienql", ".niengl", "nhioul", "nioul", "neoul", "niowl", ".nioul", "nhongl", "nongl", "noongl", "nonql", ".nongl", "nhoul", "noul", "nooul", "nowl", ".noul", "nhul", "nul", "nuul", "null", ".nul", "nhiuel", "niuel", "neuel", "niuell", ".niuel", "nhual", "nual", "noal", "nuall", ".nual", "nhiue'l", "niue'l", "neuel", "niuell", ".niue'l", "nhuel", "nuel", "noel", "nuell", ".nuel", "nhuol", "nuol", "nuool", "nuoll", ".nuol", "ol", "orl", "ool", "oll", ".ol", "ongl", "orngl", "oongl", "onql", ".ongl", "oul", "ourl", "ooul", "owl", ".oul", "pal", "parl", "paal", "pall", ".pal", "pal", "parl", "paal", "pall", ".pal", "pal", "parl", "paal", "pall", ".pal", "pangl", "parngl", "paangl", "panql", ".pangl", "paul", "paurl", "paol", "pawl", ".paul", "pe'l", "per'l", "pee'l", "pehl", ".pe'l", "pe'l", "per'l", "peel", "pell", ".pe'l", "pel", "perl", "peel", "pell", ".pel", "pel", "perl", "peel", "pell", ".pel", "pengl", "perngl", "peengl", "penql", ".pengl", "piel", "pyel", "pieel", "piell", ".piel", "pial", "pyal", "peal", "piall", ".pial", "pial", "pyal", "peal", "piall", ".pial", "piaul", "pyaul", "peaul", "piawl", ".piaul", "pie'l", "pye'l", "pieel", "piell", ".pie'l", "piel", "pyel", "pieel", "piell", ".piel", "piengl", "pyengl", "pieengl", "pienql", ".piengl", "pol", "porl", "pool", "poll", ".pol", "poul", "pourl", "pooul", "powl", ".poul", "pul", "pwul", "puul", "pull", ".pul", "puel", "pwel", "poel", "puell", ".puel", "chiel", "chyel", "chieel", "chiell", ".chiel", "chial", "chyal", "cheal", "chiall", ".chial", "chial", "chyal", "cheal", "chiall", ".chial", "chiangl", "chyangl", "cheangl", "chianql", ".chiangl", "chiaul", "chyaul", "cheaul", "chiawl", ".chiaul", "chie'l", "chye'l", "chieel", "chiell", ".chie'l", "chiel", "chyel", "chieel", "chiell", ".chiel", "chiengl", "chyengl", "chieengl", "chienql", ".chiengl", "chiol", "chyol", "cheol", "chioll", ".chiol", "chiongl", "chyongl", "cheongl", "chionql", ".chiongl", "chioul", "chyoul", "cheoul", "chiowl", ".chioul", "chiuel", "chyuel", "cheuel", "chiuell", ".chiuel", "chiual", "chyual", "cheual", "chiuall", ".chiual", "chiue'l", "chyue'l", "cheuel", "chiuell", ".chiue'l", "chiuel", "chyuel", "cheuel", "chiuell", ".chiuel", "chiuol", "chyuol", "cheuol", "chiuoll", ".chiuol", "rhal", "ral", "raal", "rall", ".ral", "rhangl", "rangl", "raangl", "ranql", ".rangl", "rhaul", "raul", "raol", "rawl", ".raul", "rhe'l", "re'l", "ree'l", "rehl", ".re'l", "rhel", "rel", "reel", "rell", ".rel", "rhengl", "rengl", "reengl", "renql", ".rengl", "rhel", "rel", "reel", "rell", ".rel", "rhongl", "rongl", "roongl", "ronql", ".rongl", "rhoul", "roul", "rooul", "rowl", ".roul", "rhul", "rul", "ruul", "rull", ".rul", "rhual", "rual", "roal", "ruall", ".rual", "rhual", "rual", "roal", "ruall", ".rual", "rhuel", "ruel", "roel", "ruell", ".ruel", "rhuel", "ruel", "roel", "ruell", ".ruel", "rhuol", "ruol", "ruool", "ruoll", ".ruol", "sal", "sarl", "saal", "sall", ".sal", "sal", "sarl", "saal", "sall", ".sal", "sal", "sarl", "saal", "sall", ".sal", "sangl", "sarngl", "saangl", "sanql", ".sangl", "saul", "saurl", "saol", "sawl", ".saul", "se'l", "ser'l", "see'l", "sehl", ".se'l", "sel", "serl", "seel", "sell", ".sel", "sel", "serl", "seel", "sell", ".sel", "sengl", "serngl", "seengl", "senql", ".sengl", "shal", "sharl", "shaal", "shall", ".shal", "shal", "sharl", "shaal", "shall", ".shal", "shal", "sharl", "shaal", "shall", ".shal", "shangl", "sharngl", "shaangl", "shanql", ".shangl", "shaul", "shaurl", "shaol", "shawl", ".shaul", "she'l", "sher'l", "shee'l", "shehl", ".she'l", "she'l", "sher'l", "sheel", "shell", ".she'l", "shel", "sherl", "sheel", "shell", ".shel", "shel", "sherl", "sheel", "shell", ".shel", "shengl", "sherngl", "sheengl", "shenql", ".shengl", "shel", "sherl", "sheel", "shell", ".shel", "shol", "shorl", "shool", "sholl", ".shol", "shoul", "shourl", "shooul", "showl", ".shoul", "shul", "shwul", "shuul", "shull", ".shul", "shual", "shwal", "shoal", "shuall", ".shual", "shual", "shwal", "shoal", "shuall", ".shual", "shual", "shwal", "shoal", "shuall", ".shual", "shuangl", "shwangl", "shoangl", "shuanql", ".shuangl", "shuel", "shwel", "shoel", "shuell", ".shuel", "shuel", "shwel", "shoel", "shuell", ".shuel", "shuol", "shwol", "shuool", "shuoll", ".shuol", "sel", "serl", "seel", "sell", ".sel", "siaul", "syaul", "seaul", "siawl", ".siaul", "siengl", "syengl", "sieengl", "sienql", ".siengl", "songl", "sorngl", "soongl", "sonql", ".songl", "soul", "sourl", "sooul", "sowl", ".soul", "sul", "swul", "suul", "sull", ".sul", "sual", "swal", "soal", "suall", ".sual", "suel", "swel", "soel", "suell", ".suel", "suel", "swel", "soel", "suell", ".suel", "suol", "swol", "suool", "suoll", ".suol", "tal", "tarl", "taal", "tall", ".tal", "tal", "tarl", "taal", "tall", ".tal", "tal", "tarl", "taal", "tall", ".tal", "tangl", "tarngl", "taangl", "tanql", ".tangl", "taul", "taurl", "taol", "tawl", ".taul", "te'l", "ter'l", "tee'l", "tehl", ".te'l", "te'l", "ter'l", "teel", "tell", ".te'l", "tel", "terl", "teel", "tell", ".tel", "tengl", "terngl", "teengl", "tenql", ".tengl", "tiel", "tyel", "tieel", "tiell", ".tiel", "tial", "tyal", "teal", "tiall", ".tial", "tiaul", "tyaul", "teaul", "tiawl", ".tiaul", "tie'l", "tye'l", "tieel", "tiell", ".tie'l", "tiengl", "tyengl", "tieengl", "tienql", ".tiengl", "tongl", "torngl", "toongl", "tonql", ".tongl", "toul", "tourl", "tooul", "towl", ".toul", "tul", "twul", "tuul", "tull", ".tul", "tual", "twal", "toal", "tuall", ".tual", "tuel", "twel", "toel", "tuell", ".tuel", "tuel", "twel", "toel", "tuell", ".tuel", "tuol", "twol", "tuool", "tuoll", ".tuol", "vol", "vorl", "vool", "voll", ".vol", "ve'l", "ver'l", "veel", "vell", ".ve'l", "vul", "vwul", "vuul", "vull", ".vul", "ual", "wal", "woal", "wall", ".ual", "ual", "wal", "woal", "wall", ".ual", "ual", "wal", "woal", "wall", ".ual", "uangl", "wangl", "woangl", "wanql", ".uangl", "ue'l", "we'l", "woel", "well", ".ue'l", "uel", "wel", "woel", "well", ".uel", "uel", "wel", "woel", "well", ".uel", "uengl", "wengl", "woengl", "wenql", ".uengl", "uol", "wol", "wool", "woll", ".uol", "ul", "wul", "wuul", "wull", ".ul", "shiel", "shyel", "shieel", "shiell", ".shiel", "shial", "shyal", "sheal", "shiall", ".shial", "shial", "shyal", "sheal", "shiall", ".shial", "shiangl", "shyangl", "sheangl", "shianql", ".shiangl", "shiaul", "shyaul", "sheaul", "shiawl", ".shiaul", "shie'l", "shye'l", "shieel", "shiell", ".shie'l", "shiel", "shyel", "shieel", "shiell", ".shiel", "shiengl", "shyengl", "shieengl", "shienql", ".shiengl", "shiongl", "shyongl", "sheongl", "shionql", ".shiongl", "shioul", "shyoul", "sheoul", "shiowl", ".shioul", "shiuel", "shyuel", "sheuel", "shiuell", ".shiuel", "shiual", "shyual", "sheual", "shiuall", ".shiual", "shiue'l", "shyue'l", "sheuel", "shiuell", ".shiue'l", "shiuel", "shyuel", "sheuel", "shiuell", ".shiuel", "ial", "yal", "yeal", "yall", ".ial", "ial", "yal", "yeal", "yall", ".ial", "ial", "yal", "yeal", "yall", ".ial", "iangl", "yangl", "yeangl", "yanql", ".iangl", "iaul", "yaul", "yeaul", "yawl", ".iaul", "ie'l", "ye'l", "yeel", "yell", ".ie'l", "iel", "yel", "yeel", "yell", ".iel", "iel", "yel", "yeel", "yell", ".iel", "iengl", "yengl", "yeengl", "yenql", ".iengl", "iol", "yol", "yeol", "yoll", ".iol", "iongl", "yongl", "yeongl", "yonql", ".iongl", "ioul", "youl", "yeoul", "yowl", ".ioul", "iuel", "yuel", "yeuel", "yuell", ".iuel", "iual", "yual", "yeual", "yuall", ".iual", "iue'l", "yue'l", "yeuel", "yuell", ".iue'l", "iuel", "yuel", "yeuel", "yuell", ".iuel", "tzal", "tzarl", "tzaal", "tzall", ".tzal", "tzal", "tzarl", "tzaal", "tzall", ".tzal", "tzal", "tzarl", "tzaal", "tzall", ".tzal", "tzangl", "tzarngl", "tzaangl", "tzanql", ".tzangl", "tzaul", "tzaurl", "tzaol", "tzawl", ".tzaul", "tze'l", "tzer'l", "tzee'l", "tzehl", ".tze'l", "tze'l", "tzer'l", "tzeel", "tzell", ".tze'l", "tzel", "tzerl", "tzeel", "tzell", ".tzel", "tzel", "tzerl", "tzeel", "tzell", ".tzel", "tzengl", "tzerngl", "tzeengl", "tzenql", ".tzengl", "jal", "jarl", "jaal", "jall", ".jal", "jal", "jarl", "jaal", "jall", ".jal", "jal", "jarl", "jaal", "jall", ".jal", "jangl", "jarngl", "jaangl", "janql", ".jangl", "jaul", "jaurl", "jaol", "jawl", ".jaul", "je'l", "jer'l", "jee'l", "jehl", ".je'l", "je'l", "jer'l", "jeel", "jell", ".je'l", "jel", "jerl", "jeel", "jell", ".jel", "jel", "jerl", "jeel", "jell", ".jel", "jengl", "jerngl", "jeengl", "jenql", ".jengl", "jel", "jerl", "jeel", "jell", ".jel", "jol", "jorl", "jool", "joll", ".jol", "jongl", "jorngl", "joongl", "jonql", ".jongl", "joul", "jourl", "jooul", "jowl", ".joul", "jul", "jwul", "juul", "jull", ".jul", "jual", "jwal", "joal", "juall", ".jual", "jual", "jwal", "joal", "juall", ".jual", "jual", "jwal", "joal", "juall", ".jual", "juangl", "jwangl", "joangl", "juanql", ".juangl", "juel", "jwel", "joel", "juell", ".juel", "juel", "jwel", "joel", "juell", ".juel", "juol", "jwol", "juool", "juoll", ".juol", "tzel", "tzerl", "tzeel", "tzell", ".tzel", "tziol", "tzyol", "tzeol", "tzioll", ".tziol", "tzol", "tzorl", "tzool", "tzoll", ".tzol", "tzongl", "tzorngl", "tzoongl", "tzonql", ".tzongl", "tzoul", "tzourl", "tzooul", "tzowl", ".tzoul", "tzul", "tzwul", "tzuul", "tzull", ".tzul", "tzual", "tzwal", "tzoal", "tzuall", ".tzual", "tzuel", "tzwel", "tzoel", "tzuell", ".tzuel", "tzuel", "tzwel", "tzoel", "tzuell", ".tzuel", "tzuol", "tzwol", "tzuool", "tzuoll", ".tzuol"}
self:iterate_conversions(examples_erhua, pinyin_erhua, m_pron.py_gwoyeu, "Erhua monosyllables")
end
function p:test_py_palladius()
local raw_examples = {"а", "ай", "ань", "ан", "ао", "ба", "бай", "бань", "бан", "бао", "бэ", "бэй", "бэй", "бэнь", "бэн", "би", "бянь", "бян", "бяо", "бе", "бинь", "бин", "бю", "бо", "бун", "бу", "ца", "цай", "цань", "цан", "цао", "цэ", "цэй", "цэй", "цэнь", "цэн", "ча", "чай", "чань", "чан", "чао", "чэ", "чэнь", "чэн", "чи", "чун", "чоу", "чу", "чуа", "чуай", "чуань", "чуан", "чуй", "чунь", "чо", "цы", "цун", "цоу", "цу", "цуань", "цюань", "цуй", "цунь", "цо", "да", "дай", "дань", "дан", "дао", "дэ", "дэй", "дэй", "дэнь", "дэн", "ди", "дя", "дянь", "дян", "дяо", "де", "дин", "дю", "до", "дун", "доу", "ду", "дуань", "дуан", "дуй", "дунь", "до", "э", "эй", "эй", "энь", "эн", "эр", "фа", "фай", "фань", "фан", "фэй", "фэнь", "фэн", "фяо", "фо", "фун", "фоу", "фу", "га", "гай", "гань", "ган", "гао", "гэ", "гэй", "гэй", "гэнь", "гэн", "ги", "гин", "гун", "гоу", "гу", "гуа", "гуай", "гуань", "гуан", "гуй", "гунь", "го", "ха", "хай", "хань", "хан", "хао", "хэ", "хэй", "хэнь", "хэн", "хм", "хн", "хун", "хоу", "ху", "хуа", "хуай", "хуань", "хуан", "хуэй", "хунь", "хо", "цзи", "цзя", "цзяй", "цзянь", "цзян", "цзяо", "цзе", "цзинь", "цзин", "цзё", "цзюн", "цзю", "цзюй", "цзюань", "цзюэ", "цзюнь", "ка", "кай", "кань", "кан", "као", "кэ", "кэй", "кэй", "кэнь", "кэн", "кя", "кян", "кю", "кун", "коу", "ку", "куа", "куай", "куань", "куан", "куй", "кунь", "ко", "ла", "лай", "лань", "лан", "лао", "лэ", "лэй", "лэнь", "лэн", "ли", "ля", "лянь", "лян", "ляо", "ле", "линь", "лин", "лю", "ло", "лун", "лоу", "лу", "люй", "луань", "люань", "люэ", "луй", "лунь", "люнь", "ло", "м", "ма", "май", "мань", "ман", "мао", "мэ", "мэй", "мэнь", "мэйнь", "мэн", "ми", "мянь", "мяо", "ме", "минь", "мин", "мю", "мо", "моу", "му", "муа", "нь", "на", "най", "нань", "нан", "нао", "нэ", "нэй", "нэй", "нэнь", "нэн", "н", "ни", "ня", "нянь", "нян", "няо", "не", "нинь", "нин", "ню", "нун", "ноу", "ну", "нюй", "нуань", "нюэ", "нунь", "но", "о", "ун", "оу", "па", "пай", "пань", "пан", "пао", "пэ", "пэй", "пэй", "пэнь", "пэн", "пи", "пя", "пянь", "пяо", "пе", "пинь", "пин", "по", "поу", "пу", "пунь", "ци", "ця", "цянь", "цян", "цяо", "це", "цинь", "цин", "цё", "цюн", "цю", "цюй", "цюань", "цюэ", "цюнь", "цюо", "жань", "жан", "жао", "жэ", "жэнь", "жэн", "жи", "жун", "жоу", "жу", "жуа", "жуань", "жуй", "жунь", "жо", "са", "сай", "сань", "сан", "сао", "сэ", "сэй", "сэнь", "сэн", "ша", "шай", "шань", "шан", "шао", "шэ", "шэй", "шэй", "шэнь", "шэн", "ши", "шо", "шоу", "шу", "шуа", "шуай", "шуань", "шуан", "шуй", "шунь", "шо", "сы", "сяо", "син", "сун", "соу", "су", "суань", "суй", "сунь", "со", "та", "тай", "тань", "тан", "тао", "тэ", "тэй", "тэй", "тэн", "ти", "тянь", "тяо", "те", "тин", "тун", "тоу", "ту", "туань", "туй", "тунь", "то", "во", "вэй", "ву", "ва", "вай", "вань", "ван", "вэй", "вэй", "вэнь", "вэн", "во", "у", "си", "ся", "сянь", "сян", "сяо", "се", "синь", "син", "сюн", "сю", "сюй", "сюань", "сюэ", "сюнь", "я", "яй", "янь", "ян", "яо", "е", "и", "инь", "ин", "ё", "юн", "ю", "юй", "юань", "юэ", "юнь", "цза", "цзай", "цзань", "цзан", "цзао", "цзэ", "цзэй", "цзэй", "цзэнь", "цзэн", "чжа", "чжай", "чжань", "чжан", "чжао", "чжэ", "чжэй", "чжэй", "чжэнь", "чжэн", "чжи", "чжо", "чжун", "чжоу", "чжу", "чжуа", "чжуай", "чжуань", "чжуан", "чжуй", "чжунь", "чжо", "цзы", "цзё", "цзо", "цзун", "цзоу", "цзу", "цзуань", "цзуй", "цзунь", "цзо"}
local examples = {}
setmetatable(examples, {
__ipairs = function(t)
local function iter(t, k)
k = k + 1
local v = raw_examples[math.ceil(k/5)]
if v then
return k, v
end
end
return iter, t, 0
end
})
self:iterate_conversions(examples, pinyin, m_pron.py_palladius, "Monosyllables")
end
function p:test_erhua()
local examples = {
{"tuō'érsuǒ", "y", "tuō'érsuǒr"},
}
self:iterate(examples, function (self, text, erhua_pos, expected)
-- Third argument and first return value are not needed.
local _, erhua = m_pron.erhua(text, erhua_pos, "托兒所")
self:equals(text, erhua, expected)
end)
end
return p