Module:zlw-slv-IPA
Jump to navigation
Jump to search
- This module lacks a documentation subpage. Please create it.
- Useful links: subpage list • links • transclusions • testcases • sandbox
local export = {}
local m_IPA = require("Module:IPA")
local lang = require("Module:languages").getByCode("zlw-slv")
local rsub = mw.ustring.gsub
local rlower = mw.ustring.lower
local C = "[bdfɡjklmnprstvzʒxɣʃr̝]"
local V = "[aãɛəi̯iɔoõɵuʉyɪăĭŏŭy̆]"
local T = "[ptkfsʃx]"
local D = "[bdɡzʒɣ]"
local di = {
["ch"]="x", ["cz"]="tʃ", ["gh"]="ɣ", ["rz"]="r̝", ["sz"]="ʃ",
}
local phon = {
["a"]="a", ["ą"]="õ", ["õ"]="õ", ["b"]="b",
["c"]="ts", ["d"]="d", ["e"]="ɛ", ["é"]="e", ["ê"]="E",
["ë"]="ə", ["f"]="f", ["g"]="ɡ", ["h"]="x",
["i"]="i", ["j"]="j", ["k"]="k", ["l"]="l",
["m"]="m", ["n"]="n", ["ń"]="nj",
["o"]="ɔ", ["ó"]="o", ["ô"]="ɵ",
["p"]="p", ["r"]="r", ["s"]="s", ["t"]="t",
["u"]="u", ["ù"]="y", ["ú"]="ʉ", ["w"]="v", ["y"]="ɪ",
["z"]="z", ["ż"]="ʒ",
["ă"]="ă", ["ĭ"]="ĭ", ["ŏ"]="ŏ", ["ŭ"]="ŭ", ["ù̆"]="y̆", ["ā"]="aː",
}
local function phonemic(text)
text = rlower(text)
-- basic phonology
text = rsub(text, "ts", "tss")
text = rsub(text, "..", di)
text = rsub("1" .. text, "..", di)
text = rsub("1" .. text, "..", di)
text = rsub(text, "1", "")
text = rsub(text, ".", phon)
-- voicing
text = rsub(text, "b$", "p")
text = rsub(text, "d$", "t")
text = rsub(text, "ɡ$", "k")
text = rsub(text, "z$", "s")
text = rsub(text, "v$", "f")
text = rsub(text, "ʒ$", "ʃ")
text = rsub(text, "ɣ$", "x")
text = rsub(text, "br̝$", "pr̝")
text = rsub(text, "dr̝$", "tr̝")
text = rsub(text, "ɡr̝$", "kr̝")
text = rsub(text, "zr̝$", "sr̝")
text = rsub(text, "vr̝$", "fr̝")
text = rsub(text, "ʒr̝$", "ʃr̝")
text = rsub(text, "ɣr̝$", "xr̝")
local i = 0
while i <= 5 do
text = rsub(text, "b(" .. T .. ")", "p%1")
text = rsub(text, "d(" .. T .. ")", "t%1")
text = rsub(text, "ɡ(" .. T .. ")", "k%1")
text = rsub(text, "z(" .. T .. ")", "s%1")
text = rsub(text, "v(" .. T .. ")", "f%1")
text = rsub(text, "ʒ(" .. T .. ")", "ʃ%1")
text = rsub(text, "ɣ(" .. T .. ")", "x%1")
text = rsub(text, "p(" .. D .. ")", "b%1")
text = rsub(text, "t(" .. D .. ")", "d%1")
text = rsub(text, "k(" .. D .. ")", "ɡ%1")
text = rsub(text, "s(" .. D .. ")", "z%1")
text = rsub(text, "f(" .. D .. ")", "v%1")
text = rsub(text, "ʃ(" .. D .. ")", "ʒ%1")
text = rsub(text, "x(" .. D .. ")", "ɣ%1")
i = i + 1
end
text = rsub(text, "(" .. T .. ")v", "%1f")
-- stress
if mw.ustring.find(text, "'") == nil then
text = "ˈ" .. text
end
text = rsub(text, "'", "ˈ")
-- ń
text = rsub(text, "nj$", "n")
text = rsub(text, "nj(" .. T .. ")", "n%1")
-- ê
text = rsub(text, "ˈ(" .. C .. "*)E", "ˈ%1i̯ɛ")
text = rsub(text, "E", "ɛ")
-- final ê e
text = rsub(text, "ˈ(" .. C .. "*)ɛ$", "ˈ%1A")
text = rsub(text, "ɛ$", "ə")
text = rsub(text, "i̯ə", "i̯ɛ")
text = rsub(text, "A$", "ɛ")
-- affricates
text = rsub(text, "t([sɕʃ])", "t͡%1")
text = rsub(text, "d([zʑʒ])", "d͡%1")
-- suffixes
text = rsub(text, "^ˈ%-.", "-")
text = rsub(text, "-", "")
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 = "/" .. phonemic(word) .. "/" })
end
return m_IPA.format_IPA_full(lang, IPA_results)
end
return export