Module:ha-IPA

From Wiktionary, the free dictionary
Jump to navigation Jump to search

This module generates the IPA transcription of Hausa entries. It runs Template:ha-IPA. It displays the phonemic transcription as well as the Standard Kano Hausa phonetic transcription.

  • The first parameter is the spelling with modified letters (hook on b, d, k, tilde on r, accent and macron on vowels), and there can be as many pronunciations as needed.
  • If the parameter |niger is set to 1, the Standard Kano Hausa pronunciation is currently removed, later replaced with the Nigerien pronunciation.
  • Uppercase <R> stands for /r/. Use lowercase <r> for /ɽ/.
  • The testcases are here.
  • The sandbox has a module, a template and testcases.

References

  • Newman, Paul, Newman, Roxana Ma (2007) “Hausa Letters and Alphabetization”, in A Hausa-English Dictionary, Yale University Press, →ISBN, page x-xi
  • Schuh, Russell G., Yalwa, Lawan D. (1999) “Hausa”, in Handbook of the International Phonetic Association: A Guide to the Use of the International Phonetic Alphabet, Cambridge University Press, →ISBN, pages 90–95
  • Newman, Paul (2000) The Hausa Language: An Encyclopedic Reference Grammar (Yale language series), Yale University Press, →ISBN

local export = {} 

local m_IPA = require("Module:IPA")
local m_a = require("Module:accent qualifier")
local lang = require("Module:languages").getByCode("ha")
local s = mw.ustring.gsub
local C = "[ɡɟkTcʃSfDJjɽrʔmɓbfnɗdtzslwhpŋɲ]"
local V = "[áéíóúɛ́ɔ́àèìòùɛ̀ɔ̀âêîôûɛ̂ɔ̂]"
local i = { --mid-open realizations of <e, o> in borrowings
	{"E", "ɛ́"},
	{"Ḕ", "ɛ̀ː"},
	{"È", "ɛ̀"},
	{"Ê", "E"},--don't change this...
	{"O", "ɔ́"},
	{"Ṑ", "ɔ̀ː"},
	{"Ò", "ɔ̀"},
	{"Ô", "O"},--...see rules 62&63 of c
	{"R", "r̃"}
}
local c = { --phoneMic Correspondences (from spelling)
	{"ʼ", "'"}, 
	{"([gkƙ])%1([wy])", "%1%2%1%2"}, 
	{"tts(h?)", "ts%1ts%1"}, 
	{"ssh", "shsh"}, 
	{"ffy", "fyfy"}, 
	{"cch'", "ch'ch'"}, 
	{"''y", "'y'y"}, 
	{"gw", "ɡʷ"}, 
	{"gy", "ɟ"}, 
	{"kw", "kʷ"}, 
	{"ch'", "Tʼ"}, 
	{"c", "T"}, 
	{"ky", "c"}, 
	{"ƙw", "kʷʼ"}, 
	{"ƙy", "cʼ"}, 
	{"tsh", "Tʼ"}, 
	{"sh", "ʃ"}, 
	{"ts", "Sʼ"}, 
	{"fy", "fʲ"}, 
	{"j", "D"}, 
	{"'y", "J"}, 
	{"y", "j"}, 
	{"ƴ", "J"}, 
	{"g", "ɡ"}, 
	{"ƙ", "kʼ"}, 
	{"r̃", "R"}, 
	{"r", "ɽ"}, 
	{"R", "r"},
	{"'", "ʔ"}, 
	{"a", "á"}, 
	{"ā̀", "àː"},	
	{"ā", "áː"}, 
	{"e", "é"}, 
	{"ḕ", "èː"}, 
	{"ē", "éː"}, 
	{"i", "í"}, 	
	{"ī̀", "ìː"},
	{"ī", "íː"}, 
	{"o", "ó"}, 	
	{"ṑ", "òː"}, 
	{"ō", "óː"}, 
	{"u", "ú"}, 	
	{"ū̀", "ùː"},
	{"ū", "úː"}, 
	{"([âêîôûEO])", "%1ː"}, 
	{"^(" .. V .. ")", "ʔ%1"}, 
	{"(.[ -/])(" .. V .. ")", "%1ʔ%2"}, 
	{"(.)[-/](.)", "%1%2"},
	{"(" .. V .. "ː?" .. C .. "?[ʷʲ]?ʼ?)(" .. C .. "[ʷʲ]?ʼ?)%f" .. V, "%1.%2"}, 
	{"([áàâ]ː?)[íìî]", "%1i"},
	{"([áàâ]ː?)[úùû]", "%1u"},
	{"âː([iu])", "â%1"},
	{"([âêîôûɛ̂ɔ̂])ː(" .. C .. "[ʷʲ]?ʼ?%.)", "%1%2"},
	{"([âêîôûɛ̂ɔ̂])ː(" .. C .. "[ʷʲ]?ʼ?)$", "%1%2"},
	{"T(ʼ?)w", "Tʷ%1"},
	{"^(" .. C .. ")(ʼ?)w", "%1ʷ%2"},
	{"( " .. C .. ")(ʼ?)w", "%1ʷ%2"},
	{"T", "t͡ʃ"},
	{"S", "(t)s"}, 
	{"D", "(d)ʒ"}, 
	{"J", "j̰"},
	{"E", "ɛ̂"},
	{"O", "ɔ̂"},
}
local idk = { --turns a copy of "word" string, got after c, into an actual phoneMic tr (no phoneMic mid-open), whereas the value of "word" preserves the mid-open distinction for the phoneTic tr
	{"ɛ́", "é"},
	{"ɛ̀", "è"},
	{"ɛ̂", "ê"},
	{"ɔ́", "ó"},
	{"ɔ̀", "ò"},
	{"ɔ̂", "ô"}
}
local SKH = { --Standard Kano Hausa phoneTic correspondences (from phoneMic tr)
	{"%(d%)ʒ", "d͡ʒ"},
	{"f", "ɸ"}, 
	{"k(ʼ?[ɛ́ɛ̀ɛ̂éèêíìî])", "c%1"}, 
	{"ɡ([ɛ́ɛ̀ɛ̂éèêíìî])", "ɟ%1"}, 
	{"([kɡ])(ʼ?[ɔ́ɔ̀ɔ̂óòôúùû])", "%1ʷ%2"},
	{"d͡ʒ%.d͡ʒ", "d.d͡ʒ"},
	{"t͡ʃ%.t͡ʃ", "t.t͡ʃ"},
	{"[kɡ]%.([cɟkɡ]ʷ?ʼ?)", "%1.%1"},
	{"%(t%)sʼ", "sʼ"},
	{"n([ -%.]?[bɓmpɸw])", "m%1"},
	{"n([ -%.]?[jcɟ])", "ɲ%1"},
	{"n([ -%.]?)([lrɽ])", "%2%1%2"},
	{"n([ -%.]?[ kɡhʔ])", "ŋ%1"},
	{"[mn]$", "ŋ"},
	{"ŋ([ -%.]?[nɗdtzs])", "n%1"},
	{"á(%.?[jɲ])", "ɛ́%1"},
	{"à(%.?[jɲ])", "ɛ̀%1"},
	{"â(%.?[jɲ])", "ɛ̂%1"},
	{"([jj̰ɟc]ʼ?)á([^ː])", "%1ɛ́%2"},
	{"([jj̰ɟc]ʼ?)à([^ː])", "%1ɛ̀%2"},
	{"([jj̰ɟc]ʼ?)â([^ː])", "%1ɛ̂%2"},
	{"([jj̰ɟc]ʼ?)á$", "%1ɛ́"},
	{"([jj̰ɟc]ʼ?)à$", "%1ɛ̀"},
	{"([jj̰ɟc]ʼ?)â$", "%1ɛ̂"},
	{"([^hʔ])á([ -%.])", "%1ə́%2"},
	{"([^hʔ])à([ -%.])", "%1ə̀%2"},
	{"([^hʔ])â([ -%.])", "%1ə̂%2"},
	{"([^hʔ])á$", "%1ə́"},
	{"([^hʔ])à$", "%1ə̀"},
	{"([^hʔ])â$", "%1ə̂"},
	{"hó(" .. C .. "[ʷʲ]?ʼ?[ -%.])", "hɔ́%1"},
	{"hò(" .. C .. "[ʷʲ]?ʼ?[ -%.])", "hɔ̀%1"},
	{"hô(" .. C .. "[ʷʲ]?ʼ?[ -%.])", "hɔ̂%1"},
	{"hó(" .. C .. "[ʷʲ]?ʼ?)$", "hɔ́%1"},
	{"hò(" .. C .. "[ʷʲ]?ʼ?)$", "hɔ̀%1"},
	{"hô(" .. C .. "[ʷʲ]?ʼ?)$", "hɔ̂%1"},
	{"[éó](" .. C .. "[ʷʲ]?ʼ?[ -%.])", "á%1"},
	{"[èò](" .. C .. "[ʷʲ]?ʼ?[ -%.])", "à%1"},
	{"[êô](" .. C .. "[ʷʲ]?ʼ?[ -%.])", "â%1"},
	{"[éó](" .. C .. "[ʷʲ]?ʼ?)$", "á%1"},
	{"[èò](" .. C .. "[ʷʲ]?ʼ?)$", "à%1"},
	{"[êô](" .. C .. "[ʷʲ]?ʼ?)$", "â%1"},
	{"í([^ː])", "ɪ́%1"},
	{"ì([^ː])", "ɪ̀%1"},
	{"î([^ː])", "ɪ̂%1"},
	{"í$", "ɪ́"},
	{"ì$", "ɪ̀"},
	{"î$", "ɪ̂"},
	{"ú(%.?j)", "í%1"},
	{"ù(%.?j)", "ì%1"},
	{"û(%.?j)", "î%1"},
	{"([ʃʒɽrnɗdtzsl]ʼ?)ú([^ː])", "%1ɪ́%2"},
	{"([ʃʒɽrnɗdtzsl]ʼ?)ù([^ː])", "%1ɪ̀%2"},
	{"([ʃʒɽrnɗdtzsl]ʼ?)û([^ː])", "%1ɪ̂%2"},
	{"ɪ́(%.?w)", "ú%1"},
	{"ɪ̀(%.?w)", "ù%1"},
	{"ɪ̂(%.?w)", "û%1"},
	{"([ʃʒɽrnɗdtzsl]ʼ?)ú$", "%1ɪ́"},
	{"([ʃʒɽrnɗdtzsl]ʼ?)ù$", "%1ɪ̀"},
	{"([ʃʒɽrnɗdtzsl]ʼ?)û$", "%1ɪ̂"},
	{"ú([^ː])", "ʊ́%1"},
	{"ù([^ː])", "ʊ̀%1"},
	{"û([^ː])", "ʊ̂%1"},
	{"ú$", "ʊ́"},
	{"ù$", "ʊ̀"},
	{"û$", "ʊ̂"},
	{"([^hʔ])ái", "%1éi"},
	{"([^hʔ])ài", "%1èi"},
	{"(%.[^hʔ])âi", "%1êi"},
	{"([^hʔ])âi%.", "%1êi."},
	{"M", "m"}
}

function export.pronunciation_phonemic(word, ideo)
	if ideo == "1" then
		word = s(word, "f$", "p")
	end
	for a = 1, #i do
		word = s(word, i[a][1], i[a][2])
	end
	word = mw.ustring.lower(word)
	for a = 1, #c do
		word = s(word, c[a][1], c[a][2])
	end
	return word
end 

function export.idk(word) --see var
	for a = 1, #idk do
		word = s(word, idk[a][1], idk[a][2])
	end
	return word
end 

function export.pronunciation_phonetic(word, dialect, ideo)
	if dialect == "SKH" then --see var
		if ideo == "1" then
			word = s(word, "m$", "M")
		end
		for a = 1, #SKH do
			word = s(word, SKH[a][1], SKH[a][2])
		end
	end
	return word
end 

function export.show(frame)
	local args = frame:getParent().args
	local p, results, results_ha = {}, {}, {}
	if not args[1] or (args[1] == "") then
		error("Please put the word as the first positional parameter!")
	else
		for index, item in ipairs(args) do
			table.insert(p, (item ~= "") and item or nil)
		end
	end
	for _, word in ipairs(p) do
		word = export.pronunciation_phonemic(word, args["ideo"])
		table.insert(results, {pron = "/" .. export.idk(word) .. "/"}) --see var
		table.insert(results_ha, {pron = "[" .. export.pronunciation_phonetic(word, "SKH", args["ideo"]) .. "]"})
	end
	if args["niger"] == "1" then
		return m_IPA.format_IPA_full(lang, results)
	else
		return m_IPA.format_IPA_full(lang, results) .. "\n** " .. m_a.show({"Standard Kano Hausa"}) .. " " .. m_IPA.format_IPA_full(lang, results_ha)
end 
end 

return export