Open main menu

Wiktionary β

Module:vi-pron

Pronunciation module for Vietnamese.


local export = {}
local gsub = mw.ustring.gsub
local sub = mw.ustring.sub
local match = mw.ustring.match

local tone_diacritics = {
	['[àằầèềìòồờùừỳ]'] = 2,
	['[áắấéếíóốớúứý]'] = 3,
	['[ảẳẩẻểỉỏổởủửỷ]'] = 4,
	['[ãẵẫẽễĩõỗỡũữỹ]'] = 5,
	['[ạặậẹệịọộợụựỵ]'] = 6,
}

local detone = {
	['à'] = 'a', ['ằ'] = 'ă', ['ầ'] = 'â', ['è'] = 'e', ['ề'] = 'ê', ['ì'] = 'i', ['ò'] = 'o', ['ồ'] = 'ô', ['ờ'] = 'ơ', ['ù'] = 'u', ['ừ'] = 'ư', ['ỳ'] = 'y', 
	['á'] = 'a', ['ắ'] = 'ă', ['ấ'] = 'â', ['é'] = 'e', ['ế'] = 'ê', ['í'] = 'i', ['ó'] = 'o', ['ố'] = 'ô', ['ớ'] = 'ơ', ['ú'] = 'u', ['ứ'] = 'ư', ['ý'] = 'y', 
	['ả'] = 'a', ['ẳ'] = 'ă', ['ẩ'] = 'â', ['ẻ'] = 'e', ['ể'] = 'ê', ['ỉ'] = 'i', ['ỏ'] = 'o', ['ổ'] = 'ô', ['ở'] = 'ơ', ['ủ'] = 'u', ['ử'] = 'ư', ['ỷ'] = 'y', 
	['ã'] = 'a', ['ẵ'] = 'ă', ['ẫ'] = 'â', ['ẽ'] = 'e', ['ễ'] = 'ê', ['ĩ'] = 'i', ['õ'] = 'o', ['ỗ'] = 'ô', ['ỡ'] = 'ơ', ['ũ'] = 'u', ['ữ'] = 'ư', ['ỹ'] = 'y', 
	['ạ'] = 'a', ['ặ'] = 'ă', ['ậ'] = 'â', ['ẹ'] = 'e', ['ệ'] = 'ê', ['ị'] = 'i', ['ọ'] = 'o', ['ộ'] = 'ô', ['ợ'] = 'ơ', ['ụ'] = 'u', ['ự'] = 'ư', ['ỵ'] = 'y',
}

local tone_contour = {
	['hn'] = { [1] = '˧˧', [2] = '˨˩', ['3a'] = '˧ˀ˦', [3] = '˧ˀ˦', [4] = '˧˩', [5] = '˦ˀ˥', [6] = '˧ˀ˨ʔ' },
	['hue'] = { [1] = '˧˧', [2] = '˧˧', ['3a'] = '˦˥', [3] = '˩ˀ˧', [4] = '˧˩', [5] = '˧˩', [6] = '˨ˀ˨ʔ' },
	['hcmc'] = { [1] = '˧˧', [2] = '˨˩', ['3a'] = '˦ˀ˥', [3] = '˦ˀ˥', [4] = '˨˦', [5] = '˨˦', [6] = '˨ˀ˧ʔ' },
}

local initial_ipa = {
	['b'] = { ['hn'] = 'ˀɓ', ['hue'] = 'ˀɓ', ['hcmc_w'] = 'ˀɓ', ['hcmc'] = 'ˀɓ' },
	['c'] = { ['hn'] = 'k', ['hue'] = 'k', ['hcmc_w'] = 'k', ['hcmc'] = 'k' },
	['ch'] = { ['hn'] = 'ṯɕ', ['hue'] = 'ṯɕ', ['hcmc_w'] = 'c', ['hcmc'] = 'c' },
	['d'] = { ['hn'] = 'z', ['hue'] = 'j', ['hcmc_w'] = 'j', ['hcmc'] = 'j' },
	['đ'] = { ['hn'] = 'ˀɗ', ['hue'] = 'ˀɗ', ['hcmc_w'] = 'ˀɗ', ['hcmc'] = 'ˀɗ' },
	['g'] = { ['hn'] = 'ɣ', ['hue'] = 'ɣ', ['hcmc_w'] = 'ɣ', ['hcmc'] = 'ɣ' },
	['gh'] = { ['hn'] = 'ɣ', ['hue'] = 'ɣ', ['hcmc_w'] = 'ɣ', ['hcmc'] = 'ɣ' },
	['gi'] = { ['hn'] = 'z', ['hue'] = 'j', ['hcmc_w'] = 'j', ['hcmc'] = 'j' },
	['gy'] = { ['hn'] = 'z', ['hue'] = 'j', ['hcmc_w'] = 'j', ['hcmc'] = 'j' },
	['h'] = { ['hn'] = 'h', ['hue'] = 'h', ['hcmc_w'] = '', ['hcmc'] = 'h' },
	['k'] = { ['hn'] = 'k', ['hue'] = 'k', ['hcmc_w'] = 'k', ['hcmc'] = 'k' },
	['kh'] = { ['hn'] = 'x', ['hue'] = 'x', ['hcmc_w'] = 'x', ['hcmc'] = 'x' },
	['l'] = { ['hn'] = 'l̪', ['hue'] = 'l', ['hcmc_w'] = 'lʲ', ['hcmc'] = 'lʲ' },
	['m'] = { ['hn'] = 'm', ['hue'] = 'm', ['hcmc_w'] = 'm', ['hcmc'] = 'm' },
	['n'] = { ['hn'] = 'n', ['hue'] = 'n', ['hcmc_w'] = 'n', ['hcmc'] = 'n' },
	['ng'] = { ['hn'] = 'ŋ', ['hue'] = 'ŋ', ['hcmc_w'] = 'ŋ', ['hcmc'] = 'ŋ' },
	['ngh'] = { ['hn'] = 'ŋ', ['hue'] = 'ŋ', ['hcmc_w'] = 'ŋ', ['hcmc'] = 'ŋ' },
	['nh'] = { ['hn'] = 'ɲ', ['hue'] = 'ɲ', ['hcmc_w'] = 'ɲ', ['hcmc'] = 'ɲ' },
	['p'] = { ['hn'] = 'p', ['hue'] = 'p', ['hcmc_w'] = 'p', ['hcmc'] = 'p' }, -- foreign
	['ph'] = { ['hn'] = 'f', ['hue'] = 'f', ['hcmc_w'] = 'f', ['hcmc'] = 'f' },
	['q'] = { ['hn'] = 'k', ['hue'] = 'k', ['hcmc_w'] = '', ['hcmc'] = 'k' },
	['r'] = { ['hn'] = 'z', ['hue'] = 'ʐ', ['hcmc_w'] = 'ɹ', ['hcmc'] = 'ɹ' },
	['ŕ'] = { ['hn'] = 'ɹ', ['hue'] = 'ɹ', ['hcmc_w'] = 'ɹ', ['hcmc'] = 'ɹ' },
	['s'] = { ['hn'] = 's̪', ['hue'] = 'ʂ', ['hcmc_w'] = 'ʂ', ['hcmc'] = 'ʂ' },
	['t'] = { ['hn'] = 't', ['hue'] = 't', ['hcmc_w'] = 't', ['hcmc'] = 't' },
	['th'] = { ['hn'] = 'tʰ', ['hue'] = 'tʰ', ['hcmc_w'] = 'tʰ', ['hcmc'] = 'tʰ' },
	['tr'] = { ['hn'] = 'ṯɕ', ['hue'] = 'ʈ', ['hcmc_w'] = 'ʈ', ['hcmc'] = 'ʈ' },
	['v'] = { ['hn'] = 'v', ['hue'] = 'v', ['hcmc_w'] = 'vʲ', ['hcmc'] = 'vʲ' },
	['x'] = { ['hn'] = 's̪', ['hue'] = 's̪', ['hcmc_w'] = 's̪', ['hcmc'] = 's̪' },
	[''] = { ['hn'] = 'ʔ', ['hue'] = 'ʔ', ['hcmc_w'] = 'ʔ', ['hcmc'] = 'ʔ' },
}

local mvi_initial_ipa = {
	['ꞗ'] = 'β', ['Ꞗ'] = 'β',
	['b'] = 'ɓ',
	['c'] = 'k', ['ch'] = 'c',
	['d'] = 'ð', ['đ'] = 'ɗ',
	['g'] = 'ɣ', ['gh'] = 'ɣ', ['gi'] = 'ʝ',
	['h'] = 'h',
	['k'] = 'k', ['kh'] = 'kʰ',
	['l'] = 'l',
	['m'] = 'm',
	['n'] = 'n', ['ng'] = 'ŋ', ['ngh'] = 'ŋ', ['nh'] = 'ɲ',
	['p'] = 'p', ['ph'] = 'pʰ',
	['r'] = 'ɹ',
	['s'] = 'ʂ',
	['t'] = 't', ['th'] = 'tʰ', ['tr'] = 'ʈ',
	['v'] = 'w',
	['x'] = 'ɕ',
}

local final_ipa = {
	['a'] = { ['hn'] = 'aː', ['hue'] = 'aː', ['hcmc'] = 'aː' },
	['ac'] = { ['hn'] = 'aːk̚', ['hue'] = 'aːk̚', ['hcmc'] = 'aːk̚' },
	['ach'] = { ['hn'] = 'ajk̟̚', ['hue'] = 'at̚', ['hcmc'] = 'at̚' },
	['ai'] = { ['hn'] = 'aːj', ['hue'] = 'aːj', ['hcmc'] = 'aːj' },
	['am'] = { ['hn'] = 'aːm', ['hue'] = 'aːm', ['hcmc'] = 'aːm' },
	['an'] = { ['hn'] = 'aːn', ['hue'] = 'aːŋ', ['hcmc'] = 'aːŋ' },
	['ang'] = { ['hn'] = 'aːŋ', ['hue'] = 'aːŋ', ['hcmc'] = 'aːŋ' },
	['anh'] = { ['hn'] = 'ajŋ̟', ['hue'] = 'an', ['hcmc'] = 'an' },
	['ao'] = { ['hn'] = 'aːw', ['hue'] = 'aːw', ['hcmc'] = 'aːw' },
	['ap'] = { ['hn'] = 'aːp̚', ['hue'] = 'aːp̚', ['hcmc'] = 'aːp̚' },
	['at'] = { ['hn'] = 'aːt̚', ['hue'] = 'aːk̚', ['hcmc'] = 'aːk̚' },
	['au'] = { ['hn'] = 'aw', ['hue'] = 'aw', ['hcmc'] = 'aw' },
	['ay'] = { ['hn'] = 'aj', ['hue'] = 'aj', ['hcmc'] = 'aj' },
	['ăc'] = { ['hn'] = 'aʔk̚', ['hue'] = 'ak̚', ['hcmc'] = 'ak̚' },
	['ăm'] = { ['hn'] = 'am', ['hue'] = 'am', ['hcmc'] = 'am' },
	['ăn'] = { ['hn'] = 'an', ['hue'] = 'aŋ', ['hcmc'] = 'aŋ' },
	['ăng'] = { ['hn'] = 'aŋ', ['hue'] = 'aŋ', ['hcmc'] = 'aŋ' },
	['ăp'] = { ['hn'] = 'aʔp̚', ['hue'] = 'ap̚', ['hcmc'] = 'ap̚' },
	['ăt'] = { ['hn'] = 'at̚', ['hue'] = 'ak̚', ['hcmc'] = 'ak̚' },
	['â'] = { ['hn'] = 'ə', ['hue'] = 'ə', ['hcmc'] = 'ə' },
	['âc'] = { ['hn'] = 'ək̚', ['hue'] = 'ək̚', ['hcmc'] = 'ək̚' },
	['âm'] = { ['hn'] = 'əm', ['hue'] = 'əm', ['hcmc'] = 'əm' },
	['ân'] = { ['hn'] = 'ən', ['hue'] = 'əŋ', ['hcmc'] = 'əŋ' },
	['âng'] = { ['hn'] = 'əŋ', ['hue'] = 'əŋ', ['hcmc'] = 'əŋ' },
	['âp'] = { ['hn'] = 'əʔp̚', ['hue'] = 'əp̚', ['hcmc'] = 'əp̚' },
	['ât'] = { ['hn'] = 'əʔt̚', ['hue'] = 'ək̚', ['hcmc'] = 'ək̚' },
	['âu'] = { ['hn'] = 'əw', ['hue'] = 'əw', ['hcmc'] = 'əw' },
	['ây'] = { ['hn'] = 'əj', ['hue'] = 'əj', ['hcmc'] = 'əj' },
	['e'] = { ['hn'] = 'ɛ', ['hue'] = 'ɛ', ['hcmc'] = 'ɛ' },
	['ec'] = { ['hn'] = 'ɛk̚', ['hue'] = 'ɛk̚', ['hcmc'] = 'ɛk̚' },
	['em'] = { ['hn'] = 'ɛm', ['hue'] = 'ɛm', ['hcmc'] = 'ɛm' },
	['en'] = { ['hn'] = 'ɛn', ['hue'] = 'ɛŋ', ['hcmc'] = 'ɛŋ' },
	['eng'] = { ['hn'] = 'ɛŋ', ['hue'] = 'ɛŋ', ['hcmc'] = 'ɛŋ' },
	['eo'] = { ['hn'] = 'ɛw', ['hue'] = 'ɛw', ['hcmc'] = 'ɛw' },
	['ep'] = { ['hn'] = 'ɛp̚', ['hue'] = 'ɛp̚', ['hcmc'] = 'ɛp̚' },
	['et'] = { ['hn'] = 'ɛt̚', ['hue'] = 'ɛt̚', ['hcmc'] = 'ɛk̚' },
	['ê'] = { ['hn'] = 'e', ['hue'] = 'ej', ['hcmc'] = 'ej' },
	['êc'] = { ['hn'] = 'eʔk̚', ['hue'] = 'ek̚', ['hcmc'] = 'ek̚' },
	['êch'] = { ['hn'] = 'əjk̟̚', ['hue'] = 'et̚', ['hcmc'] = 'əːt̚' },
	['êm'] = { ['hn'] = 'em', ['hue'] = 'em', ['hcmc'] = 'em' },
	['ên'] = { ['hn'] = 'en', ['hue'] = 'en', ['hcmc'] = 'əːn' },
	['êng'] = { ['hn'] = 'eŋ', ['hue'] = 'eŋ', ['hcmc'] = 'eŋ' },
	['ênh'] = { ['hn'] = 'əjŋ̟', ['hue'] = 'en', ['hcmc'] = 'əːn' },
	['êp'] = { ['hn'] = 'ep̚', ['hue'] = 'ep̚', ['hcmc'] = 'ep̚' },
	['êt'] = { ['hn'] = 'et̚', ['hue'] = 'et̚', ['hcmc'] = 'əːt̚' },
	['êu'] = { ['hn'] = 'ew', ['hue'] = 'ew', ['hcmc'] = 'ew' },
	['i'] = { ['hn'] = 'i', ['hue'] = 'ɪj', ['hcmc'] = 'ɪj' },
	['ia'] = { ['hn'] = 'iə', ['hue'] = 'iə', ['hcmc'] = 'iə' },
	['ic'] = { ['hn'] = 'ïʔk̟̚', ['hue'] = 'ïk̟̚', ['hcmc'] = 'ïk̟̚' },
	['ich'] = { ['hn'] = 'ïʔk̟̚', ['hue'] = 'ɨ̞̠t̚', ['hcmc'] = 'ɨ̞̠t̚' },
	['iêc'] = { ['hn'] = 'iək̚', ['hue'] = 'iək̚', ['hcmc'] = 'iək̚' },
	['iêm'] = { ['hn'] = 'iəm', ['hue'] = 'iəm', ['hcmc'] = 'iəm' },
	['iên'] = { ['hn'] = 'iən', ['hue'] = 'iəŋ', ['hcmc'] = 'iəŋ' },
	['iêng'] = { ['hn'] = 'iəŋ', ['hue'] = 'iəŋ', ['hcmc'] = 'iəŋ' },
	['iêp'] = { ['hn'] = 'iəp̚', ['hue'] = 'iəp̚', ['hcmc'] = 'iəp̚' },
	['iêt'] = { ['hn'] = 'iət̚', ['hue'] = 'iək̚', ['hcmc'] = 'iək̚' },
	['iêu'] = { ['hn'] = 'iəw', ['hue'] = 'iəw', ['hcmc'] = 'iəw' },
	['im'] = { ['hn'] = 'im', ['hue'] = 'im', ['hcmc'] = 'im' },
	['in'] = { ['hn'] = 'in', ['hue'] = 'in', ['hcmc'] = 'ɨ̞̠n' },
	['inh'] = { ['hn'] = 'ïŋ', ['hue'] = 'ɨ̞̠n', ['hcmc'] = 'ɨ̞̠n' },
	['ip'] = { ['hn'] = 'ip̚', ['hue'] = 'ip̚', ['hcmc'] = 'ip̚' },
	['it'] = { ['hn'] = 'it̚', ['hue'] = 'it̚', ['hcmc'] = 'ɨ̞̠t̚' },
	['iu'] = { ['hn'] = 'iw', ['hue'] = 'iw', ['hcmc'] = 'iw' },
	['o'] = { ['hn'] = 'ɔ', ['hue'] = 'ɔ', ['hcmc'] = 'ɔ' },
	['oa'] = { ['hn'] = 'waː', ['hue'] = 'waː', ['hcmc'] = 'waː' },
	['oac'] = { ['hn'] = 'waːʔk̚', ['hue'] = 'waːk̚', ['hcmc'] = 'waːk̚' },
	['oach'] = { ['hn'] = 'waʔjk̟̚', ['hue'] = 'wat̚', ['hcmc'] = 'wat̚' },
	['oai'] = { ['hn'] = 'waːj', ['hue'] = 'waːj', ['hcmc'] = 'waːj' },
	['oam'] = { ['hn'] = 'waːm', ['hue'] = 'waːm', ['hcmc'] = 'waːm' },
	['oan'] = { ['hn'] = 'waːn', ['hue'] = 'waːŋ', ['hcmc'] = 'waːŋ' },
	['oang'] = { ['hn'] = 'waːŋ', ['hue'] = 'waːŋ', ['hcmc'] = 'waːŋ' },
	['oanh'] = { ['hn'] = 'wajŋ̟', ['hue'] = 'wan', ['hcmc'] = 'wan' },
	['oao'] = { ['hn'] = 'waːw', ['hue'] = 'waːw', ['hcmc'] = 'waːw' },
	['oap'] = { ['hn'] = 'waːp̚', ['hue'] = 'waːp̚', ['hcmc'] = 'waːp̚' },
	['oat'] = { ['hn'] = 'waːt̚', ['hue'] = 'waːk̚', ['hcmc'] = 'waːk̚' },
	['oay'] = { ['hn'] = 'waj', ['hue'] = 'waj', ['hcmc'] = 'waj' },
	['oă'] = { ['hn'] = 'wa', ['hue'] = 'wa', ['hcmc'] = 'wa' },
	['oăc'] = { ['hn'] = 'wak̚', ['hue'] = 'wak̚', ['hcmc'] = 'wak̚' },
	['oăm'] = { ['hn'] = 'wam', ['hue'] = 'wam', ['hcmc'] = 'wam' },
	['oăn'] = { ['hn'] = 'wan', ['hue'] = 'waŋ', ['hcmc'] = 'waŋ' },
	['oăng'] = { ['hn'] = 'waŋ', ['hue'] = 'waŋ', ['hcmc'] = 'waŋ' },
	['oăt'] = { ['hn'] = 'wat̚', ['hue'] = 'wak̚', ['hcmc'] = 'wak̚' },
	['oc'] = { ['hn'] = 'awk͡p̚', ['hue'] = 'awk͡p̚', ['hcmc'] = 'awk͡p̚' },
	['oe'] = { ['hn'] = 'wɛ', ['hue'] = 'wɛ', ['hcmc'] = 'wɛ' },
	['oem'] = { ['hn'] = 'wɛm', ['hue'] = 'wɛm', ['hcmc'] = 'wɛm' },
	['oen'] = { ['hn'] = 'wɛn', ['hue'] = 'wɛŋ', ['hcmc'] = 'wɛŋ' },
	['oeo'] = { ['hn'] = 'wɛw', ['hue'] = 'wɛw', ['hcmc'] = 'wɛw' },
	['oet'] = { ['hn'] = 'wɛt̚', ['hue'] = 'wɛk̚', ['hcmc'] = 'wɛk̚' },
	['oi'] = { ['hn'] = 'ɔj', ['hue'] = 'ɔj', ['hcmc'] = 'ɔj' },
	['om'] = { ['hn'] = 'ɔm', ['hue'] = 'ɔm', ['hcmc'] = 'ɔm' },
	['on'] = { ['hn'] = 'ɔn', ['hue'] = 'ɔŋ', ['hcmc'] = 'ɔŋ' },
	['ong'] = { ['hn'] = 'awŋ͡m', ['hue'] = 'awŋ͡m', ['hcmc'] = 'awŋ͡m' },
	['ooc'] = { ['hn'] = 'ɔʔk̚', ['hue'] = 'ɔk̚', ['hcmc'] = 'ɔk̚' },
	['oong'] = { ['hn'] = 'ɔŋ', ['hue'] = 'ɔŋ͡m', ['hcmc'] = 'ɔŋ' },
	['op'] = { ['hn'] = 'ɔʔp̚', ['hue'] = 'ɔp̚', ['hcmc'] = 'ɔp̚' },
	['ot'] = { ['hn'] = 'ɔt̚', ['hue'] = 'ɔk̚', ['hcmc'] = 'ɔk̚' },
	['ô'] = { ['hn'] = 'o', ['hue'] = 'ow', ['hcmc'] = 'ow' },
	['ôc'] = { ['hn'] = 'əwk͡p̚', ['hue'] = 'əwk͡p̚', ['hcmc'] = 'əwk͡p̚' },
	['ôi'] = { ['hn'] = 'oj', ['hue'] = 'oj', ['hcmc'] = 'oj' },
	['ôm'] = { ['hn'] = 'om', ['hue'] = 'om', ['hcmc'] = 'om' },
	['ôn'] = { ['hn'] = 'on', ['hue'] = 'oŋ', ['hcmc'] = 'oŋ' },
	['ông'] = { ['hn'] = 'əwŋ͡m', ['hue'] = 'əwŋ͡m', ['hcmc'] = 'əwŋ͡m' },
	['ôôc'] = { ['hn'] = 'oʔk̚', ['hue'] = 'ok̚', ['hcmc'] = 'ok̚' },
	['ôông'] = { ['hn'] = 'oŋ', ['hue'] = 'oŋ', ['hcmc'] = 'oŋ' },
	['ôp'] = { ['hn'] = 'oʔp̚', ['hue'] = 'op̚', ['hcmc'] = 'op̚' },
	['ôt'] = { ['hn'] = 'ot̚', ['hue'] = 'ok̚', ['hcmc'] = 'ok̚' },
	['ơ'] = { ['hn'] = 'əː', ['hue'] = 'əː', ['hcmc'] = 'əː' },
	['ơi'] = { ['hn'] = 'əːj', ['hue'] = 'əːj', ['hcmc'] = 'əːj' },
	['ơm'] = { ['hn'] = 'əːm', ['hue'] = 'əːm', ['hcmc'] = 'əːm' },
	['ơn'] = { ['hn'] = 'əːn', ['hue'] = 'əːŋ', ['hcmc'] = 'əːŋ' },
	['ơng'] = { ['hn'] = 'əːŋ', ['hue'] = 'əːŋ', ['hcmc'] = 'əːŋ' },
	['ơp'] = { ['hn'] = 'əːʔp̚', ['hue'] = 'əːp̚', ['hcmc'] = 'əːp̚' },
	['ơt'] = { ['hn'] = 'əːt̚', ['hue'] = 'əːk̚', ['hcmc'] = 'əːk̚' },
	['u'] = { ['hn'] = 'u', ['hue'] = 'ʊw', ['hcmc'] = 'ʊw' },
	['ua'] = { ['hn'] = 'uə', ['hue'] = 'uə', ['hcmc'] = 'uə' },
	['uac'] = { ['hn'] = 'waːk̚', ['hue'] = 'waːk̚', ['hcmc'] = 'waːk̚' },
	['uach'] = { ['hn'] = 'waʔjk̟̚', ['hue'] = 'wat̚', ['hcmc'] = 'wat̚' },
	['uai'] = { ['hn'] = 'waːj', ['hue'] = 'waːj', ['hcmc'] = 'waːj' },
	['uan'] = { ['hn'] = 'waːn', ['hue'] = 'waːŋ', ['hcmc'] = 'waːŋ' },
	['uang'] = { ['hn'] = 'waːŋ', ['hue'] = 'waːŋ', ['hcmc'] = 'waːŋ' },
	['uanh'] = { ['hn'] = 'wajŋ̟', ['hue'] = 'wan', ['hcmc'] = 'wan' },
	['uao'] = { ['hn'] = 'waːw', ['hue'] = 'waːw', ['hcmc'] = 'waːw' },
	['uat'] = { ['hn'] = 'waːʔt̚', ['hue'] = 'waːk̚', ['hcmc'] = 'waːk̚' },
	['uau'] = { ['hn'] = 'waw', ['hue'] = 'waw', ['hcmc'] = 'wa(ː)w' },
	['uay'] = { ['hn'] = 'waj', ['hue'] = 'waj', ['hcmc'] = 'waj' },
	['uă'] = { ['hn'] = 'wa', ['hue'] = 'wa', ['hcmc'] = 'wa' },
	['uăc'] = { ['hn'] = 'wak̚', ['hue'] = 'wak̚', ['hcmc'] = 'wak̚' },
	['uăm'] = { ['hn'] = 'wam', ['hue'] = 'wam', ['hcmc'] = 'wam' },
	['uăn'] = { ['hn'] = 'wan', ['hue'] = 'waŋ', ['hcmc'] = 'waŋ' },
	['uăng'] = { ['hn'] = 'waŋ', ['hue'] = 'waŋ', ['hcmc'] = 'waŋ' },
	['uăp'] = { ['hn'] = 'waʔp̚', ['hue'] = 'wap̚', ['hcmc'] = 'wap̚' },
	['uăt'] = { ['hn'] = 'waʔt̚', ['hue'] = 'wak̚', ['hcmc'] = 'wak̚' },
	['uâ'] = { ['hn'] = 'wə', ['hue'] = 'wə', ['hcmc'] = 'wə' },
	['uâc'] = { ['hn'] = 'wəʔk̚', ['hue'] = 'wək̚', ['hcmc'] = 'wək̚' },
	['uân'] = { ['hn'] = 'wən', ['hue'] = 'wəŋ', ['hcmc'] = 'wəŋ' },
	['uâng'] = { ['hn'] = 'wəŋ', ['hue'] = 'wəŋ', ['hcmc'] = 'wəŋ' },
	['uât'] = { ['hn'] = 'wət̚', ['hue'] = 'wək̚', ['hcmc'] = 'wək̚' },
	['uây'] = { ['hn'] = 'wəj', ['hue'] = 'wəj', ['hcmc'] = 'wəj' },
	['uc'] = { ['hn'] = 'ʊwk͡p̚', ['hue'] = 'ʊwk͡p̚', ['hcmc'] = 'ʊwk͡p̚' },
	['ue'] = { ['hn'] = 'wɛ', ['hue'] = 'wɛ', ['hcmc'] = 'wɛ' },
	['uen'] = { ['hn'] = 'wɛn', ['hue'] = 'wɛŋ', ['hcmc'] = 'wɛŋ' },
	['ueo'] = { ['hn'] = 'wɛw', ['hue'] = 'wɛw', ['hcmc'] = 'wɛw' },
	['uep'] = { ['hn'] = 'wɛp̚', ['hue'] = 'wɛp̚', ['hcmc'] = 'wɛp̚' },
	['uet'] = { ['hn'] = 'wɛʔt̚', ['hue'] = 'wɛt̚', ['hcmc'] = 'wɛt̚' },
	['uê'] = { ['hn'] = 'we', ['hue'] = 'wej', ['hcmc'] = 'wej' },
	['uêch'] = { ['hn'] = 'wəʔjk̟̚', ['hue'] = 'wet̚', ['hcmc'] = 'wəːt̚' },
	['uên'] = { ['hn'] = 'wen', ['hue'] = 'wen', ['hcmc'] = 'wəːn' },
	['uênh'] = { ['hn'] = 'wəjŋ̟', ['hue'] = 'wen', ['hcmc'] = 'wəːn' },
	['uêt'] = { ['hn'] = 'weʔt̚', ['hue'] = 'wet̚', ['hcmc'] = 'wəːt̚' },
	['uêu'] = { ['hn'] = 'weu', ['hue'] = 'weu', ['hcmc'] = 'wew' },
	['ui'] = { ['hn'] = 'uj', ['hue'] = 'uj', ['hcmc'] = 'uj' },
	['uin'] = { ['hn'] = 'win', ['hue'] = 'win', ['hcmc'] = 'wɨ̞̠n' },
	['uit'] = { ['hn'] = 'wiʔt̚', ['hue'] = 'wiʔt̚', ['hcmc'] = 'wiʔt̚' },
	['um'] = { ['hn'] = 'um', ['hue'] = 'um', ['hcmc'] = 'ʊm' },
	['un'] = { ['hn'] = 'un', ['hue'] = 'un', ['hcmc'] = 'ʊwŋ͡m' },
	['ung'] = { ['hn'] = 'ʊwŋ͡m', ['hue'] = 'ʊwŋ͡m', ['hcmc'] = 'ʊwŋ͡m' },
	['unh'] = { ['hn'] = 'ujŋ̟', ['hue'] = 'un', ['hcmc'] = 'uwn' },
	['uô'] = { ['hn'] = 'uə', ['hue'] = 'uə', ['hcmc'] = 'uə' }, 
	['uôc'] = { ['hn'] = 'uək̚', ['hue'] = 'uək̚', ['hcmc'] = 'uək̚' },
	['uôi'] = { ['hn'] = 'uəj', ['hue'] = 'uj', ['hcmc'] = 'uj' },
	['uôm'] = { ['hn'] = 'uəm', ['hue'] = 'uəm', ['hcmc'] = 'uəm' },
	['uôn'] = { ['hn'] = 'uən', ['hue'] = 'uəŋ', ['hcmc'] = 'uəŋ' },
	['uông'] = { ['hn'] = 'uəŋ', ['hue'] = 'uəŋ', ['hcmc'] = 'uəŋ' },
	['uôt'] = { ['hn'] = 'uət̚', ['hue'] = 'uək̚', ['hcmc'] = 'uək̚' },
	['uơ'] = { ['hn'] = 'wəː', ['hue'] = 'wəː', ['hcmc'] = 'wəː' },
	['uơi'] = { ['hn'] = 'wəːj', ['hue'] = 'wəːj', ['hcmc'] = 'wəːj' },
	['uơn'] = { ['hn'] = 'uən', ['hue'] = 'wəŋ', ['hcmc'] = 'wəŋ' },
	['uơt'] = { ['hn'] = 'uəʔt̚', ['hue'] = 'wəʔk̚', ['hcmc'] = 'wəʔk̚' },
	['up'] = { ['hn'] = 'up̚', ['hue'] = 'up̚', ['hcmc'] = 'ʊp̚' },
	['ut'] = { ['hn'] = 'ut̚', ['hue'] = 'ʊk̚', ['hcmc'] = 'ʊk͡p̚' },
	['uy'] = { ['hn'] = 'wi', ['hue'] = 'wɪj', ['hcmc'] = 'wɪj' },
	['uya'] = { ['hn'] = 'wiə', ['hue'] = 'wiə', ['hcmc'] = 'wiə' },
	['uych'] = { ['hn'] = 'wïʔk̟̚', ['hue'] = 'wɨ̞̠k̟̚', ['hcmc'] = 'wɨ̞̠t̚' },
	['uyn'] = { ['hn'] = 'win', ['hue'] = 'win', ['hcmc'] = 'wɨ̞̠n' },
	['uich'] = { ['hn'] = 'wïʔk̟̚', ['hue'] = 'wɨ̞̠ʔk̟̚', ['hcmc'] = 'wɨ̞̠ʔt̚' },
	['uyê'] = { ['hn'] = 'wiə', ['hue'] = 'wiə', ['hcmc'] = 'wiə' },
	['uyên'] = { ['hn'] = 'wiən', ['hue'] = 'wiəŋ', ['hcmc'] = 'wiəŋ' },
	['uyênh'] = { ['hn'] = 'wiəŋ̟', ['hue'] = 'wiən', ['hcmc'] = 'wən' },
	['uyêt'] = { ['hn'] = 'wiət̚', ['hue'] = 'wiək̚', ['hcmc'] = 'wiək̚' },
	['uynh'] = { ['hn'] = 'wïŋ̟', ['hue'] = 'wɨ̞̠n', ['hcmc'] = 'wɨ̞̠n' },
	['uyp'] = { ['hn'] = 'wiʔp̚', ['hue'] = 'wiʔp̚', ['hcmc'] = 'wiʔp̚' },
	['uyt'] = { ['hn'] = 'wit̚', ['hue'] = 'wɨ̞̠t̚', ['hcmc'] = 'wɨ̞̠t̚' },
	['uyu'] = { ['hn'] = 'wiw', ['hue'] = 'wiw', ['hcmc'] = 'wiw' },
	['ư'] = { ['hn'] = 'ɨ̞̠', ['hue'] ='ɨ̞', ['hcmc'] = 'ɨ̞̠' },
	['ưa'] = { ['hn'] = 'ɨ̞̠ə', ['hue'] = 'ɨ̞̠ə', ['hcmc'] = 'ɨ̞̠ə' },
	['ưc'] = { ['hn'] = 'ɨ̞̠k̚', ['hue'] = 'ɨ̞̠k̚', ['hcmc'] = 'ɨ̞̠k̚' },
	['ưi'] = { ['hn'] = 'ɨ̞̠j', ['hue'] = 'ɨ̞̠j', ['hcmc'] = 'ɨ̞̠j' },
	['ưn'] = { ['hn'] = 'ɨ̞̠n', ['hue'] = 'ɨ̞̠ŋ', ['hcmc'] = 'ɨ̞̠ŋ' },
	['ưng'] = { ['hn'] = 'ɨ̞̠ŋ', ['hue'] = 'ɨ̞̠ŋ', ['hcmc'] = 'ɨ̞̠ŋ' },
	['ươc'] = { ['hn'] = 'ɨ̞̠ək̚', ['hue'] = 'ɨ̞̠ək̚', ['hcmc'] = 'ɨ̞̠ək̚' },
	['ươi'] = { ['hn'] = 'ɨ̞̠əj', ['hue'] = 'ɨ̞̠əj', ['hcmc'] = 'ɨ̞̠əj' },
	['ươm'] = { ['hn'] = 'ɨ̞̠əm', ['hue'] = 'ɨ̞̠əm', ['hcmc'] = 'ɨ̞̠əm' },
	['ươn'] = { ['hn'] = 'ɨ̞̠ən', ['hue'] = 'ɨ̞̠əŋ', ['hcmc'] = 'ɨ̞̠əŋ' },
	['ương'] = { ['hn'] = 'ɨ̞̠əŋ', ['hue'] = 'ɨ̞̠əŋ', ['hcmc'] = 'ɨ̞̠əŋ' },
	['ươp'] = { ['hn'] = 'ɨ̞̠əp̚', ['hue'] = 'ɨ̞̠əp̚', ['hcmc'] = 'ɨ̞̠əp̚' },
	['ươt'] = { ['hn'] = 'ɨ̞̠əʔt̚', ['hue'] = 'ɨ̞̠ək̚', ['hcmc'] = 'ɨ̞̠ək̚' },
	['ươu'] = { ['hn'] = 'iəw', ['hue'] = 'ɨ̞̠əw', ['hcmc'] = 'ɨ̞̠əw' },
	['ưt'] = { ['hn'] = 'ɨ̞̠t̚', ['hue'] = 'ɨ̞̠k̚', ['hcmc'] = 'ɨ̞̠k̚' },
	['ưu'] = { ['hn'] = 'iw', ['hue'] = 'ɨ̞̠w', ['hcmc'] = 'ɨ̞̠w' },
	['y'] = { ['hn'] = 'i', ['hue'] = 'ɪj', ['hcmc'] = 'ɪj' },
	['yêc'] = { ['hn'] = 'iək̚', ['hue'] = 'iək̚', ['hcmc'] = 'iək̚' },
	['yêm'] = { ['hn'] = 'iəm', ['hue'] = 'iəm', ['hcmc'] = 'iəm' },
	['yên'] = { ['hn'] = 'iən', ['hue'] = 'iəŋ', ['hcmc'] = 'iəŋ' },
	['yêng'] = { ['hn'] = 'iəŋ', ['hue'] = 'iəŋ', ['hcmc'] = 'iəŋ' },
	['yêp'] = { ['hn'] = 'iəp̚', ['hue'] = 'iəp̚', ['hcmc'] = 'iəp̚' },
	['yêt'] = { ['hn'] = 'iəʔt̚', ['hue'] = 'iək̚', ['hcmc'] = 'iək̚' },
	['yêu'] = { ['hn'] = 'iəw', ['hue'] = 'iəw', ['hcmc'] = 'iəw' },
}

local varieties = { 
	['hn'] = { 'Hà Nội', 1 },
	['hue'] = { 'Huế', 2 },
	['hcmc'] = { 'Hồ Chí Minh City', 3 },
}

local hcmc_opt_w = {
	['ch'] = true,
	['d'] = true,
	['l'] = true,
	['s'] = true,
	['t'] = true, ['th'] = true, ['tr'] = true,
	['x'] = true,
}

function export.ipa(frame)
	local p, output = {}, { ['hn'] = {}, ['hue'] = {}, ['hcmc'] = {} }
	local output_text = {}
	local pronunciations = { ['hn'] = {}, ['hue'] = {}, ['hcmc'] = {} }
	local pagename = gsub(gsub(mw.ustring.lower(mw.title.getCurrentTitle().text), '%-', ' '), '%,', '')
	local args = frame:getParent().args
	local mvi = frame.args["mvi"] or nil
	if args[1] then
		for index, item in ipairs(args) do
			table.insert(p, (item ~= "") and mw.ustring.lower(gsub(gsub(item, '%-', ' '), '%,', '')) or nil)
		end
	else
		table.insert(p, pagename)
	end
	for variety, _ in ipairs(varieties) do
		table.insert(pronunciations[variety], (args[variety] ~= "") and args[variety] or nil)
	end
	for i, word in ipairs(p) do
		local pronunciations = { ['hn'] = {}, ['hue'] = {}, ['hcmc'] = {} }
		for syllable in mw.text.gsplit(word, ' ', true) do
			local ipa = {}
			local initial, final, tone = nil, nil, nil, nil
			tone = 1
			for diac_pattern, tone_num in pairs(tone_diacritics) do
				if match(syllable, diac_pattern) then
					tone = tone_num
					break
				end
			end
			syllable = gsub(syllable, '[àằầèềìòồờùừỳáắấéếíóốớúứýảẳẩẻểỉỏổởủửỷãẵẫẽễĩõỗỡũữỹạặậẹệịọộợụựỵ]', detone)
			if syllable == 'gi' then
				syllable = 'giy'
			end
			initial = match(syllable, '^g[ꞗꞖbcdđgklmnpqrstvx]+') or match(syllable, '^(g[hiy])[^cmnpt]')
				or match(syllable, '^g') or match(syllable, '^[ꞗꞖbcdđghklmnpqrstvx]+') or ''
			initial = (match(syllable, '^giê.') and syllable ~= 'giên') and 'd' or initial
			final = sub(syllable, mw.ustring.len(initial) + 1, -1)
			for loc, location in pairs(varieties) do
				local ipa, initial_type, detoned = {}, loc, ''
				if match(final,'[ou][aăeâêôơy][ioyêu]?[cmntp]?[hg]?') and loc == 'hcmc' then
					initial_type = 'hcmc_w'
				end
				if mvi then
					if mvi_initial_ipa[initial] then
						table.insert(ipa, mvi_initial_ipa[initial])
					else
						local initial_cluster = ''
						for cc in mw.ustring.gcodepoint(initial) do
							local ch = mw.ustring.char(cc)
							initial_cluster = initial_cluster .. mvi_initial_ipa[ch]
						end
						table.insert(ipa, initial_cluster)
					end
				elseif initial_ipa[initial] then
					table.insert(ipa, initial_ipa[initial][initial_type])
				else
					local initial_cluster = ''
					initial = gsub(initial, 'r$', 'ŕ')
					for cc in mw.ustring.gcodepoint(initial) do
						local ch = mw.ustring.char(cc)
						initial_cluster = initial_cluster .. initial_ipa[ch][initial_type]
					end
					initial_cluster = gsub(initial_cluster, '([cgknpt]h)', function(digraph)
						return initial_ipa[digraph][initial_type] end)
					table.insert(ipa, initial_cluster)
				end
				if final_ipa[final] then
					detoned = gsub(final_ipa[final][loc], '^([wu].+)', function(nucleus)
						if initial .. final == 'qua' then
							nucleus = final_ipa['oa'][loc]
						elseif initial .. final == 'qui' then
							nucleus = final_ipa['uy'][loc]
						end
						if loc == 'hcmc' then
							if initial == 'q' then
								nucleus = gsub(nucleus, '^u', 'w')	
							end
							if hcmc_opt_w[initial] then
								nucleus = gsub(nucleus, '^w', '<sup>(</sup>ʷ<sup>)</sup>')
							end
						end
						return nucleus end)
					table.insert(ipa, detoned)
				else
					error(("Unrecognised final: \"%s\""):format(final))
				end
				if tone == 3 and match(final, '[chmngpt]') then
					tone = '3a'
				end
				table.insert(ipa, tone_contour[loc][tone])
				table.insert(pronunciations[loc], table.concat(ipa, ""))
			end
		end
		for loc, location in pairs(varieties) do
			table.insert(output[loc], table.concat(pronunciations[loc], " "))
		end
	end
	for loc, location in pairs(varieties) do
		if mvi then
			args['hue'], args['hcmc'] = '-', '-'
		end
		if args[loc] ~= '-' then
			if not args[loc] then
				args[loc] = table.concat(output[loc], "], [")
			end
			table.insert(output_text, location[2], '* (\'\'[[' .. location[1] .. '|' .. location[1] .. ']]\'\') ' .. 
				'[[Wiktionary:International Phonetic Alphabet|IPA]]<sup>([[Appendix:Vietnamese pronunciation|key]])</sup>: <span class="IPA">[' ..
					args[loc] .. ']</span>')
		end
	end
	if table.concat(p, "") ~= mw.ustring.lower(pagename) then
		table.insert(output_text, #output_text + 1, '* \'\'Phonetic\'\': ' .. table.concat(p, ", "))
	end
	return table.concat(output_text, "\n")
end

return export