local export = {}
local s = mw.ustring.gsub
local m = mw.ustring.match
local C = "[ʔbdɡχklmnpqrsʃtwjz]"
local V = "[aeiuāēīūâêîû]"
local c = {
[1] = {"ṭ", "tˤ"},
[2] = {"ṣ", "sˤ"},
[3] = {"š", "ʃ"},
[4] = {"y", "j"},
[5] = {"g", "ɡ"},
[6] = {"ḫ", "χ"},
[7] = {"'", "ʔ"},
[8] = {"(" .. V .. C .. "?ˤ?)(" .. C .. "ˤ?)%f" .. V, "%1.%2"}
}
local d = {
[1] = {"[āâ]", "aː"},
[2] = {"[ēê]", "eː"},
[3] = {"[īî]", "iː"},
[4] = {"[ūû]", "uː"}
}
function export.pronunciation_phonemic(word)
word = mw.ustring.lower(word)
for a = 1, #c do
word = s(word, c[a][1], c[a][2])
end
local N = {}
local i = 0
for a in string.gmatch(word, "%S+") do
i = i+1
N[i] = a
end
for a = 1, #N do
if m(N[a], C .. "?ˤ?[âêîû]$") ~= nil then
N[a] = s(N[a], "%.?(" .. C .. "?ˤ?[âêîû])$", "ˈ%1")
elseif m(N[a], C .. "?ˤ?[āēīūâêîû]" .. C .. "ˤ?$") ~= nil then
N[a] = s(N[a], "%.?(" .. C .. "?ˤ?[āēīūâêîû]" .. C .. "ˤ?)$", "ˈ%1")
elseif m(s(N[a], C .. "ˤ?" .. V .. C .. "?ˤ?$", ""), C .. "?ˤ?" .. "[āēīūâêîû]%.") ~= nil or m(s(N[a], C .. "ˤ?" .. V .. C .. "?ˤ?$", ""), C .. "?ˤ?" .. "[aeiuāēīū]" .. C .. "ˤ?%.") ~= nil then
local n = ""
for b = 1, 5 do--arbitrary, find how to count that
N[a] = s(N[a], "%.?(" .. C .. "?ˤ?" .. "[āēīūâêîû]%." .. n .. C .. "ˤ?" .. V .. C .. "?ˤ?)$", "ˈ%1")
N[a] = s(s(N[a], "%.?(" .. C .. "?ˤ?" .. "[aeiuāēīū]" .. C .. "ˤ?%." .. n .. C .. "ˤ?" .. V .. C .. "?ˤ?)$", "ˈ%1"), "ˈˈ", "ˈ")
n = n .. C .. "ˤ?[aeiu]%."
end
else
N[a] = s(N[a], "^( ?)(" .. C .. "?ˤ?[aeiu]%.)", "%1ˈ%2")
end
end
word = table.concat(N, " ")
for a = 1, #d do
word = s(word, d[a][1], d[a][2])
end
return word
end
function export.show(frame)
local results = {}
table.insert(results, {pron = "/" .. export.pronunciation_phonemic(mw.title.getCurrentTitle().text) .. "/"})
return "* " .. require("Module:IPA").format_IPA_full(require("Module:languages").getByCode("akk"), results)
end
return export