模組:Yrk-IPA
外观
local export = {}
local m_IPA = require("Module:IPA")
local lang = require("Module:languages").getByCode("yrk")
local rsub = mw.ustring.gsub
local rlower = mw.ustring.lower
local V = "[ʌɐɑaɤeɨioɵuʉəæE]ː?"
local F = "[ɐaeiɵʉE]ː?"
local C = "[mpbwntdsjlrŋkɡxʒʃɕfhɣz]"
local P = "[mpbwntdsjlrŋkɡxʒʃɕfhɣɫz]ʲ?"
local phon = {
-- consonants
["м"]="m", ["п"]="p", ["б"]="b", ["в"]="w", ["н"]="n", ["т"]="t",
["д"]="d", ["ц"]="ts", ["с"]="s", ["й"]="j", ["л"]="l", ["р"]="r",
["ӈ"]="ŋ", ["к"]="k", ["г"]="ɡ", ["х"]="x", ["ˮ"]="ʔ", ["ʼ"]="ʔ",
["ж"]="ʒ", ["ч"]="tɕ", ["ш"]="ʃ", ["щ"]="ɕ", ["ф"]="f", ["з"]="z",
-- vowels
["а"]="ʌ", ["е"]="e", ["и"]="i", ["о"]="o", ["у"]="u",
["я"]="ɐ", ["э"]="æ", ["ы"]="ɨ", ["ё"]="ɵ", ["ю"]="ʉ",
["ь"]="ʲ", ["ъ"]="ъ",
}
local function phonetic(text)
text = rlower(text)
text = rsub(text, "э̇", "ɤ")
text = rsub(text, "ӑ", "аB")
text = rsub(text, "̆", "B")
text = rsub(text, "ӣ", "иM")
text = rsub(text, "ӯ", "уM")
text = rsub(text, "̄", "M")
-- general phonology
text = rsub(text, ".", phon)
-- vowel length
text = rsub(text, "([iɨuʉ])̄", "%1ː")
text = rsub(text, "([iɨuʉ])M", "%1ː")
text = rsub(text, "ʌB", "ə")
text = rsub(text, "ɐB", "E")
text = rsub(text, "ʌM", "ɑ")
text = rsub(text, "ɐM", "a")
-- palatalisation
text = rsub(text, "([ʲʌɐɑaɤeɨioɵuʉəæъEʔ]ː?)(" .. F .. ")", "%1j%2")
text = rsub(text, "(" .. C .. ")(" .. F .. ")", "%1ʲ%2")
text = rsub(text, "^(" .. F .. ")", "j%1")
text = rsub(text, "ъ", "")
text = rsub(text, "l([^ʲ])", "ɫ%1")
text = rsub(text, "jʲ", "j")
text = rsub(text, "E", "ə")
-- word-final schwa
text = rsub(text, "(" .. P .. ")$", "%1(ə̥)")
text = rsub(text, "(" .. P .. ")ʔ$", "%1ˀ")
-- /x/
text = rsub(text, "^x", "h")
text = rsub(text, "(" .. V .. ")x(" .. V .. ")", "%1ɣ%2")
text = rsub(text, "[xh]ʲ", "ç")
--[[ vowel reduction
text = rsub(text, "([^ˈ])[ou]", "%1ʊ")
text = rsub(text, "^[ou]", "ʊ")
text = rsub(text, "([^ˈ])[ae]", "%1ə")
text = rsub(text, "^[ae]", "ə")
]]--
-- affricates
text = rsub(text, "tɕʲ", "tɕ")
text = rsub(text, "ts", "t͡s")
text = rsub(text, "tɕ", "t͡ɕ")
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 = "[" .. phonetic(word) .. "]" })
end
return m_IPA.format_IPA_full { lang = lang, items = IPA_results }
end
return export