Module:ky-IPA
Appearance
- The following documentation is located at Module:ky-IPA/documentation. [edit]
- Useful links: subpage list • links • transclusions • testcases • sandbox
Kyrgyz pronunciation module, powers {{ky-IPA}}
. This is under development and may contain errors; mass deployment on entries is discouraged.
TODO
[edit]- IMPORTANT: Iotated Ее handling
- Stress handling
- Initial voicing of front row K
- Exceptional short vowels pronounced with long vowels, such as in Нарын, бардыгы
local export = {}
local m_IPA = require("Module:IPA")
local lang = require("Module:languages").getByCode("ky")
local C_set = "бвгджзйклмнңпрстфхцчшщ" -- consonants
local bV_set = "аыоу"
local fV_set = "эиөү"
local iV_set = "еёюя" -- iotated vowels
local V_set = bV_set .. fV_set .. iV_set -- all vowels
local C = "[" .. C_set .. "]" -- consonants
local bV = "[" .. bV_set .. "]"
local fV = "[" .. fV_set .. "]"
local iV = "[" .. iV_set .. "]" -- iotated vowels
local V = "[" .. V_set .. "]" -- all vowels
local lowerc = {
["А"]="а", ["Б"]="б", ["В"]="в", ["Г"]="г", ["Д"]="д", ["Е"]="е",
["Ё"]="ё", ["Ж"]="ж", ["З"]="з", ["И"]="и", ["Й"]="й", ["К"]="к",
["Л"]="л", ["М"]="м", ["Н"]="н", ["Ң"]="ң", ["О"]="о", ["Ө"]="ө",
["П"]="п", ["Р"]="р", ["С"]="с", ["Т"]="т", ["У"]="у", ["Ү"]="ү",
["Ф"]="ф", ["Х"]="х", ["Ц"]="ц", ["Ч"]="ч", ["Ш"]="ш", ["Щ"]="щ",
["Ъ"]="ъ", ["Ы"]="ы", ["Ь"]="ь", ["Э"]="э", ["Ю"]="ю", ["Я"]="я"
}
local phon = {
["б"]="b", ["г"]="ɡ", ["д"]="d", ["ж"]="d͡ʒ", ["з"]="z", ["й"]="j",
["к"]="k", ["л"]="ɫ", ["м"]="m", ["н"]="n", ["ң"]="ŋ", ["п"]="p",
["р"]="r", ["с"]="s", ["т"]="t", ["ч"]="t͡ʃ", ["ш"]="ʂ", ["е"]="e",
["ё"]="jo", ["ю"]="ju", ["я"]="jɑ", ["а"]="ɑ", ["ы"]="ɯ", ["о"]="o",
["у"]="u", ["э"]="e", ["и"]="i", ["ө"]="ø", ["ү"]="y", ["в"]="v",
["ф"]="f", ["х"]="x", ["ц"]="t͡s", ["ч"]="t͡ʃ", ["щ"]="ɕ", ["ь"]="ʲ"
}
function export.phonetic(text)
text = mw.ustring.gsub(text, '.', lowerc)
-- Handle iotated Е
text = mw.ustring.gsub(text, "^е", "je")
text = mw.ustring.gsub(text, "([ " .. V_set .. "ьъ])е", "%1je")
text = mw.ustring.gsub(text, '.', phon)
-- Handle к, г uvularization rules
text = mw.ustring.gsub(text, "k[ɑɯou]", "q%1")
text = mw.ustring.gsub(text, "ɡ[ɑɯou]", "ʁ%1")
text = mw.ustring.gsub(text, "qk", "q")
text = mw.ustring.gsub(text, "ʁɡ", "ʁ")
text = mw.ustring.gsub(text, "[ɑɯou]k", "%1q")
text = mw.ustring.gsub(text, "[ɑɯou]ɡ", "%1ʁ")
text = mw.ustring.gsub(text, "kq", "q")
text = mw.ustring.gsub(text, "ɡʁ", "ʁ")
-- Handle ш rules
text = mw.ustring.gsub(text, "ʂ[eiøy]", "ʃ%1")
text = mw.ustring.gsub(text, "[eiøy]ʂ", "%1ʃ")
text = mw.ustring.gsub(text, "ʂʃ", "ʃ")
text = mw.ustring.gsub(text, "ʃʂ", "ʃ")
-- Handle l rules
text = mw.ustring.gsub(text, "l̴[eiøy]", "l%1")
text = mw.ustring.gsub(text, "[eiøy]l̴", "%1l")
text = mw.ustring.gsub(text, "ll̴", "l̴")
text = mw.ustring.gsub(text, "l̴l", "l̴")
-- Handle long vowels
text = mw.ustring.gsub(text, "[ɑ]ɑ", "ɑː")
text = mw.ustring.gsub(text, "[o]o", "oː")
text = mw.ustring.gsub(text, "[u]u", "uː")
text = mw.ustring.gsub(text, "[e]e", "eː")
text = mw.ustring.gsub(text, "[ø]ø", "øː")
text = mw.ustring.gsub(text, "[y]y", "yː")
return text
end
function export.IPA(frame)
local words = {}
for _, word in ipairs(frame:getParent().args) do
table.insert(words, word)
end
if #words == 0 then
words = {mw.title.getCurrentTitle().text}
end
local IPA_results = {}
for _, word in ipairs(words) do
table.insert(IPA_results, { pron = "/" .. export.phonetic(word) .. "/" })
end
return m_IPA.format_IPA_full { lang = lang, items = IPA_results }
end
return export