local p =
function attachTone(a, n) n = tonumber(n) if a
1 then return "ā" end if n
3 then return "ǎ" end if n
"A" then if n
2 then return "Á" end if n
4 then return "À" end return a end if a
1 then return "ē" end if n
3 then return "ě" end if n
"E" then if n
2 then return "É" end if n
4 then return "È" end return a end if a
1 then return "ī" end if n
3 then return "ǐ" end if n
"O" then if n
2 then return "Ó" end if n
4 then return "Ò" end return a end if a
1 then return "ō" end if n
3 then return "ǒ" end if n
"u" then if n
2 then return "ú" end if n
4 then return "ù" end return a end if (a
"ü") then if n
2 then return "ǘ" end if n
4 then return "ǜ" end return "ü" end if a
1 then return "Ê̄" end if n
3 then return "Ê̌" end if n
"ê" then if n
2 then return "ế" end if n
4 then return "ề" end return a end if a
2 then return "Ń" end if n
4 then return "Ǹ" end return a end if a
2 then return "ń" end if n
4 then return "ǹ" end return a end if a
2 then return "Ḿ" end if n
"m" then if n
4 then return "m̀" end return a end return a end
function selectVowel(chara, n) if not chara then return end
if chara:find('^.*A') then return chara:gsub("A", attachTone("A", n)) end if chara:find('^.*a') then return chara:gsub("a", attachTone("a", n)) end
if chara:find('^.*E') then return chara:gsub("E", attachTone("E", n)) end if chara:find('^.*e') then return chara:gsub("e", attachTone("e", n)) end if chara:find('^.*Ê') then return chara:gsub("Ê", attachTone("Ê", n)) end if chara:find('^.*ê') then return chara:gsub("ê", attachTone("ê", n)) end if chara:find('^.*iu') then return chara:gsub("iu", "i"..attachTone("u", n)) end if chara:find('^.*i') then return chara:gsub("i", attachTone("i", n)) end
if chara:find('^.*O') then return chara:gsub("O", attachTone("O", n)) end if chara:find('^.*o') then return chara:gsub("o", attachTone("o", n)) end if chara:find('^.*u') then return chara:gsub("u", attachTone("u", n)) end if chara:find('^.*v') then return chara:gsub("v", attachTone("v", n)) end if chara:find('^.*ü') then return chara:gsub("ü", attachTone("ü", n)) end
if chara:find('^.*N') then return chara:gsub("N", attachTone("N", n)) end if chara:find('^.*n') then return chara:gsub("n", attachTone("n", n)) end
if chara:find('^.*M') then return chara:gsub("M", attachTone("M", n)) end if chara:find('^.*m') then return chara:gsub("m", attachTone("m", n)) endend
function p.pinyin(frame) local input = frame.args[1] if not input then return end local ve = input:gsub("nue", "nve"):gsub("lue", "lve") local out = ve:gsub("([%aüÊê]+)(%d)", selectVowel) return (out:gsub("v", "ü"))end
return p