Module:User:Rishabhbhat/ks-IPA

local export = {} u = mw.ustring local midvowel = { --vowel forms in the middle of the word, not mid vowel ["َ"] = "a", ["ا"] = "aː", ["آ"] = "aː", ["ٔ"] = "ə", ["أ"] = "ə", ["ٲ"] = "əː", ["ِ"] = "i", ["یٖ"] = "iː", ["ٕ"] = "ɨ", ["ٟ"] = "ɨː", ["ُ"] = "u", ["وٗ"] = "uː", ["ۆ"] = "o", ["و"] = "oː", ["ۄ"] = "ɔ", ["ۄا"] = "ɔː", ["ێ"] = "e", ["ی"] = "eː", ["ؠ"] = "ʲa", --?? ["ھ"] = "ʰ", --no, don't remove this } local endvow = { ["َہ"] = "a", ["ٔہ"] = "ə", ["ہِ"] = "i", ["ی"] = "iː", ["ہٕ"] = "ɨ", ["ے"] = "eː", ["ےٚ"] = "e", ["ھ"] = "ʰ", ["ؠ"] = "ʲ", }

local cons = { ["ب"] = "b", ["پ"] = "p", ["ت"] = "t", ["ٹ"] = "ʈ", ["ث"] = "s", ["ج"] = "d͡ʒ", ["چ"] = "t͡ʃ", ["ح"] = "h", ["خ"] = "x", ["د"] = "d", ["ڈ"] = "ɖ", ["ذ"] = "z", ["ر"] = "r", ["ڑ"] = "ɽ", ["ز"] = "z", ["ژ"] = "t͡s", ["س"] = "s", ["ش"] = "ʃ", ["ص"] = "s", ["ض"] = "z", ["ط"] = "t", ["ظ"] = "z", ["ع"] = "", --??? ["غ"] = "ɡ", ["ف"] = "f", ["ق"] = "q", ["ک"] = "k", ["گ"] = "ɡ", ["ل"] = "l", ["م"] = "m", ["ن"] = "n", ["و"] = "w", --v? ["ھ"] = "ʰ", ["ہ"] = "h", ["ی"] = "j" } local endcons = { ["ب"] = "b", ["پ"] = "p", ["ت"] = "t", ["ٹ"] = "ʈ", ["ث"] = "s", ["ج"] = "d͡ʒ", ["چ"] = "t͡ʃ", ["ح"] = "h", ["خ"] = "x", ["د"] = "d", ["ڈ"] = "ɖ", ["ذ"] = "z", ["ر"] = "r", ["ڑ"] = "ɽ", ["ز"] = "z", ["ژ"] = "t͡s", ["س"] = "s", ["ش"] = "ʃ", ["ص"] = "s", ["ض"] = "z", ["ط"] = "t", ["ظ"] = "z", ["ع"] = "", --??? ["غ"] = "ɡ", ["ف"] = "f", ["ق"] = "q", ["ک"] = "k", ["گ"] = "ɡ", ["ل"] = "l", ["م"] = "m", ["ن"] = "n", ["و"] = "w", --v? ["ے"] = "j", } local function contains_key(lst, w)	for t, _ in pairs(lst) do		if u.match(w, t) then return true end end return false end function export.syllabify(str) local out = {} local syl = "" --if u.sub(str,1,1) == "ا" then str = u.sub(str,2,#str) end local length = #str for i = 1, length do   	local c = u.sub(str, i, i) syl = syl .. c   	if contains_key(midvowel, c) then if #syl > 2 or c == "أ" or c == "آ" or i == length then local add --mw.log(u.sub(syl,1,1) == "ا");mw.log(u.sub(syl,2,#syl)) if u.sub(syl,1,1) == "ا" then add = u.sub(syl,2,#str) else add = syl end add = u.gsub(add, "[ییٛ]",{["ی"] = "ے", ["ێ"]= "ےٚ"	}) --mw.log(add) if syl ~= "" then table.insert(out, add) end syl = "" end elseif length == i then local add = u.gsub(syl, "[ییٛ]",{["ی"] = "ے", ["ێ"]= "ےٚ"	}) if syl ~= "" then table.insert(out, add) end end end return out end

function export.repl(syl) o = "" for n, s in ipairs(syl) do		local consonants; local vowels if n == #syl then --smw.log(syl) vowels = endvow consonants = endcons else vowels = midvowel consonants = cons end --mw.log(n) for c,i in pairs(consonants) do			s = u.gsub(s, c, i)		end for vow,i in pairs(vowels) do			s = u.gsub(s, vow.."$", i)		end --mw.log("syl: ", s) o = o .. s	end return o end

function export.ipa(word) out = "" for sep in u.gmatch(word, "%S+") do		local syl = export.syllabify(sep:gsub("ٛ", "")) ipa_add = export.repl(syl) mw.log(ipa_add) if not ipa_add:match("ʲ$") or ipa_add:match("ɨ$") then out = out .. " "		end out = out .. ipa_add end return out:match'^%s*(.*)' end

function export.template_ipa(params) return export.ipa(params.args[1]) end

return export