Module:sh-IPA

local export = {}

local m_IPA = require("Module:IPA") local lang = require("Module:languages").getByCode("sh")

-- single characters that map to IPA sounds local phonetic_chars_map = { ["a"] = "a", ["а"] = "a", ["e"] = "e", ["е"] = "e", ["i"] = "i", ["и"] = "i", ["o"] = "o", ["о"] = "o", ["u"] = "u", ["у"] = "u", ["b"] = "b", ["б"] = "b", ["v"] = "ʋ", ["в"] = "ʋ", ["g"] = "ɡ", ["г"] = "ɡ", ["d"] = "d", ["д"] = "d", ["đ"] = "d͡ʑ", ["ђ"] = "d͡ʑ", ["ž"] = "ʒ", ["ж"] = "ʒ", ["z"] = "z", ["з"] = "z", ["j"] = "j", ["ј"] = "j", ["k"] = "k", ["к"] = "k", ["l"] = "l", ["л"] = "l", ["љ"] = "ʎ", ["m"] = "m", ["м"] = "m", ["n"] = "n", ["н"] = "n", ["њ"] = "ɲ", ["p"] = "p", ["п"] = "p", ["r"] = "r", ["р"] = "r", ["s"] = "s", ["с"] = "s", ["t"] = "t", ["т"] = "t", ["ć"] = "t͡ɕ", ["ћ"] = "t͡ɕ", ["f"] = "f", ["ф"] = "f", ["h"] = "x", ["х"] = "x", ["c"] = "t͡s", ["ц"] = "t͡s", ["č"] = "t͡ʃ", ["ч"] = "t͡ʃ", ["џ"] = "d͡ʒ", ["š"] = "ʃ", ["ш"] = "ʃ", ["ś"] = "ɕ", ["ź"] = "ʑ", ["ă"] = "ə", ["ь"] = "ə", ["ѕ"] = "dz", ["."] = "",	["¯"] = "ː", ["`"] = "ˇ", ["á"] = "ǎː", ["à"] = "ǎ", ["ā"] = "aː", ["ȁ"] = "â", ["ȃ"] = "âː", ["é"] = "ěː", ["è"] = "ě", ["ē"] = "eː", ["ȅ"] = "ê", ["ȇ"] = "êː", ["í"] = "ǐː", ["ì"] = "ǐ", ["ī"] = "iː", ["ȉ"] = "î", ["ȋ"] = "îː", ["ó"] = "ǒː", ["ò"] = "ǒ", ["ō"] = "oː", ["ȍ"] = "ô", ["ȏ"] = "ôː", ["ú"] = "ǔː", ["ù"] = "ǔ", ["ū"] = "uː", ["ȕ"] = "û", ["ȗ"] = "ûː", ["ŕ"] = "ř̩ː", ["ȑ"] = "r̩̂", ["ȓ"] = "r̩̂ː", ["̏"] = "ˆ", ["̑"] = "ˆː", }

-- character sequences of two that map to IPA sounds local phonetic_2chars_map = { ["lj"] = "ʎ", ["nj"] = "ɲ", ["dž"] = "d͡ʒ", ["с́"] = "ɕ", ["з́"] = "ʑ", ["а́"] = "ǎː", ["а̀"] = "ǎ", ["а̄"] = "aː", ["а̏"] = "â", ["а̑"] = "âː", ["е́"] = "ěː", ["ѐ"] = "ě", ["е̄"] = "eː", ["е̏"] = "ê", ["е̑"] = "êː", ["и́"] = "ǐː", ["ѝ"] = "ǐ", ["ӣ"] = "iː", ["и̏"] = "î", ["и̑"] = "îː", ["о́"] = "ǒː", ["о̀"] = "ǒ", ["о̄"] = "oː", ["о̏"] = "ô", ["о̑"] = "ôː", ["у́"] = "ǔː", ["у̀"] = "ǔ", ["ӯ"] = "uː", ["у̏"] = "û", ["у̑"] = "ûː", ["r̀"] = "ř̩", ["r̩̄"] = "r̩ː", ["р́"] = "ř̩ː", ["р̀"] = "ř̩", ["р̄"] = "r̩ː", ["р̏"] = "r̩̂", ["р̑"] = "r̩̂ː", }

function export.to_IPA(word) word = mw.ustring.lower(word)

local phonetic = word

for pat, repl in pairs(phonetic_2chars_map) do		phonetic = phonetic:gsub(pat, repl) end

phonetic = mw.ustring.gsub(phonetic, '.', phonetic_chars_map)

-- handle unstressed syllabic sonorants in loanwords phonetic = mw.ustring.gsub(phonetic, "%f[%a%-]([rlʎmnɲ])([bʋgdʒzkmnɲpstfxʃɕʑ])", "%1̩%2") phonetic = mw.ustring.gsub(phonetic, "([bʋgdʒzkmnɲpstfxʃɕʑ])([rlʎmnɲ])([bʋgdʒzkmnɲpstfxʃɕʑ])", "%1%2̩%3") phonetic = mw.ustring.gsub(phonetic, "([bʋgdʒzkmnɲpstfxʃɕʑ])([rlʎmnɲ])%f[%A]", "%1%2̩") phonetic = mw.ustring.gsub(phonetic, "̩̩", "̩")

-- enable use of an apostrophe to keep letters from forming digraphs, e.g. nad'žívjeti phonetic = mw.ustring.gsub(phonetic, "'", "")

return "/" .. phonetic .. "/" end

function export.pronunciation(word) if type(word) == "table" then word = word.args[1] or word:getParent.args[1] end if not word or (word == "") then error("Please put the word as the first positional parameter!") end local items = {} table.insert(items, {pron = export.to_IPA(word), note = nil}) return m_IPA.format_IPA_full { lang = lang, items = items } end

return export