Module:ro-IPA
Appearance
- The following documentation is located at Module:ro-IPA/documentation. [edit]
- Useful links: subpage list • links • transclusions • testcases • sandbox
Romanian pronunciation module, used by {{ro-IPA}}
.
local export = {}
local m_IPA = require("Module:IPA")
local lang = require("Module:languages").getByCode("ro")
local rsub = mw.ustring.gsub
local rlower = mw.ustring.lower
local rlast = require("Module:string/replace last").replace_last
local rfind = mw.ustring.find
local V = "ʲ[aeiouəɨ]"
local C = "[bkdfɡhʒlmnprstvzʃjw]"
local X = "ʲ[bkdfɡhʒlmnprstvzʃjwaəeiɨou]"
local U = "ʲ?[aeəɨiou]"
local phon = {
["a"]="a", ["b"]="b", ["c"]="k", ["d"]="d", ["e"]="e",
["f"]="f", ["g"]="ɡ", ["h"]="h", ["i"]="i", ["j"]="ʒ",
["k"]="k", ["l"]="l", ["m"]="m", ["n"]="n", ["o"]="o",
["p"]="p", ["q"]="k", ["r"]="r", ["s"]="s", ["t"]="t",
["u"]="u", ["v"]="v", ["w"]="v", ["x"]="ks", ["y"]="ʲ",
["z"]="z", ["ă"]="ə", ["â"]="ɨ", ["î"]="ɨ", ["ș"]="ʃ",
["ț"]="ts",
}
local function phonetic(text)
text = rlower(text)
text = rsub(text, "ce", "tʃe")
text = rsub(text, "ci", "tʃi")
text = rsub(text, "ge", "dʒe")
text = rsub(text, "gi", "dʒi")
-- general phonology
text = rsub(text, ".", phon)
-- Triphthongs
local triphthongs = {
["eai"] = "e̯aj", ["eau"] = "e̯aw", ["eoa"] = "e̯o̯a",
["iai"] = "jaj", ["iau"] = "jaw", ["iei"] = "jej",
["eu"] = "jew", ["ioi"] = "joj", ["iou"] = "jow",
["oai"] = "o̯aj", ["uai"] = "waj", ["uau"] = "waw",
["uăi"] = "wəj", ["ioa"] = "jo̯a"
}
for original, replacement in pairs(triphthongs) do
text = rsub(text, original, replacement)
end
-- If no triphthong was found, try diphthongs
if text == rsub(text, ".", phon) then
local diphthongs = {
["ai"] = "aj", ["au"] = "aw", ["ei"] = "ej",
["eu"] = "ew", ["ii"] = "ij", ["iu"] = "iw",
["oi"] = "oj", ["ou"] = "ow", ["ui"] = "uj",
["uu"] = "uw", ["ăi"] = "əj", ["ău"] = "əw",
["âi"] = "ɨj", ["âu"] = "ɨw",
["ea"] = "e̯a", ["eo"] = "e̯o", ["eu"] = "e̯u",
["ia"] = "ja", ["ie"] = "je", ["io"] = "jo",
["iu"] = "ju", ["oa"] = "o̯a", ["ue"] = "we",
["ua"] = "wa", ["uă"] = "wə", ["uâ"] = "wɨ"
}
for original, replacement in pairs(diphthongs) do
text = rsub(text, original, replacement)
end
end
-- initial glide (borrowings only)
text = rsub(text, "^ʲ", "j")
text = rsub(text, "(" .. V .. ")ʲ", "%1j")
-- stress (1)
text = rsub(text, "(" .. V .. ")(" .. X .. ")$", "ˈ%1%2")
if rfind(text, "ˈ") == nil then
text = rlast(text, "(" .. V .. ")(" .. X .. ")(" .. C .. ")", "ˈ%1%2%3", 1)
end
if rfind(text, "ˈ") == nil then
text = rlast(text, "(" .. U .. ")", "ˈ%1", 1)
end
-- schwa
text = rsub(text, "(" .. C .. ")([eo])$", "%1ə")
-- stress (2)
text = rsub(text, "(" .. V .. ")ˈ(" .. V .. ")", "ˈ%1%2")
text = rsub(text, "(" .. V .. ")(" .. C .. ")ˈ", "%1ˈ%2")
text = rsub(text, "(" .. V .. ")(" .. C .. ")(" .. C .. ")ˈ", "%1%2ˈ%3")
text = rsub(text, "(" .. V .. ")(" .. C .. C .. ")(" .. C .. ")ˈ", "%1%2ˈ%3")
text = rsub(text, "^(" .. C .. ")ˈ", "ˈ%1")
text = rsub(text, "^(" .. C .. C .. ")ˈ", "ˈ%1")
if rfind(text, "^-") ~= nil then
text = rsub(text, "ˈ", "")
end
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