Module:umu-IPA
Appearance
- This module lacks a documentation subpage. Please create it.
- Useful links: subpage list • links • transclusions • testcases • sandbox
-- umu-IPA module
local umu_IPA = {}
local lang = require("Module:languages").getByCode("umu")
local sc = require("Module:scripts").getByCode("Latn")
local m_IPA = require("Module:IPA")
local gsub = mw.ustring.gsub
local gmatch = mw.ustring.gmatch
local replacements = {
["aa"] = "ā", ["ee"] = "ē", ["ii"] = "ī", ["oo"] = "ō",
["ch"] = "č", ["sh"] = "š", ["zh"] = "ž",
["kw"] = "ḱ", ["gw"] = "ǵ",
["mb"] = "ḅ", ["nd"] = "ḍ", ["ng"] = "ġ"
}
function umu_IPA.transliterate(text)
local output = text
-- Perform all replacements
for key, value in pairs(replacements) do
output = output:gsub(key, value)
end
return output
end
local correspondences = {
-- vowels
["á"] = "ɒ", ["é"] = "ɛ", ["í"] = "i", ["ó"] = "o", ["ú"] = "ə", --ignore accents
["à"] = "ɒ", ["è"] = "ɛ", ["ì"] = "i", ["ò"] = "o", ["ù"] = "ə",
["û"] = "",
["a"] = "ɒ", ["e"] = "ɛ", ["i"] = "i", ["o"] = "o", ["u"] = "ə",
["ā"] = "aː", ["ē"] = "ɛː", ["ī"] = "iː", ["ō"] = "oː",
--["uy"] = "ɪj", ["uw"] = "ʊw",
-- consonants
["č"] = "tʃ", ["š"] = "ʃ", ["ž"] = "ʒ", ["y"] = "j",
["ḱ"] = "kʷ", ["ǵ"] = "gʷ", -- labialized consonants
["ḅ"] = "ᵐb", ["ḍ"] = "ⁿd", ["ġ"] = "ᵑɡ" --prenasalized consonants
}
function umu_IPA.link(term)
return require("Module:links").full_link{ term = term, lang = lang, sc = sc }
end
function umu_IPA.toIPA(text)
local result = {}
local translit = umu_IPA.transliterate(text)
if not translit then
error('The term "' .. text .. '" could not be transliterated.')
end
for character in gmatch(translit, ".") do
table.insert(result, correspondences[character] or character)
end
result = table.concat(result)
return result
end
function umu_IPA.make(frame)
local args = frame.args
local p, results = {}, {}
if args[1] then
for index, item in ipairs(args) do
table.insert(p, (item ~= "") and item or nil)
end
else
p = { mw.title.getCurrentTitle().text }
end
for _, Val in ipairs(p) do
table.insert(results, { pron = "/" .. umu_IPA.toIPA(Val) .. "/" })
end
return '* ' .. m_IPA.format_IPA_full { lang = lang, items = results }
end
function umu_IPA.show(frame)
local args = frame.args
local page_title = mw.title.getCurrentTitle().text
local text = args[1] or page_title
local IPA_text = umu_IPA.toIPA(text)
return m_IPA.format_IPA_full { lang = lang, items = {{ pron = "/" .. IPA_text .. "/" }} }
end
return umu_IPA