မဝ်ဂျူ:ne-IPA
Nepali IPA pronunciation module. See {{ne-IPA}}
.
Testcases
ပလေဝ်ဒါန်1 test failed. (refresh)
လိက် | ဗွဲမရံၚ်လၟဳ | မဇေတ်ဍာံ | တၚ်လညာတ်ဂမၠိုၚ် | |
---|---|---|---|---|
विवाह (vivāha) | [bibäɦä̆] | [bibäɦä̆] | ||
श्रावण (śrāwaṇ) | [sräwʌɽ̃] | [sräwʌɽ̃] | ||
हलो (halo) | [ɦʌlo] | [ɦʌlo] | ||
अक्षर (akṣar) | [ʌk̚t͡sʰer] | [ʌk̚t͡sʰer] | ||
क्षेत्री (kṣetrī) | [t͡sʰet̪ri] | [t͡sʰet̪ri] | ||
त्यस (tyas) | [t̪es] | [t̪es] | ||
विश्व (viśwa) | [bisːo] | [bisːo] | ||
पेय (peya) | [pejʌ] | [pejʌ] | ||
अन्तर्राष्ट्रिय (antarrāṣṭriya) | [ʌ̃n̪t̪ʌrːäs̠t̠rie̞] | [ʌ̃n̪t̪ʌrːäs̠t̠rie̞] | dental assimilation | |
सय (saya) | [sʌe̞] | [sʌe̞] | non-initial ya before before consonants | |
सत्य (satya) | [sʌt̪t̪e] | [sʌt̪t̪e] | gemination of preceding consonant and replacement with e | |
यस (yas) | [es] | [es] | Initial ya replacement with e | |
विश्वास (viśvās) | [biswäs] | [biswäs] | w to b before certain vowels and glides | |
विश्व (viśwa) | [bisːo] | [bisːo] | ||
वरिपरि (waripari) | [wʌɾipʌɾi] | [wʌɾipʌɾi] | w elsewhere | |
घरको (gharko) | [ɡʱʌ̤rko] | [ɡʱʌ̤rko] | breathy vowel after voiced aspirates | |
अर्थ (artha) | [ʌrt̪ʰʌ] | [ʌrt̪ʰʌ] | ||
अर्को (arko) | [ʌrko] | [ʌrko] | ||
तारा (tārā) | [t̪äɾä] | [t̪äɾä] | tapped r intervocalically | |
घोडा (ghoḍā) | [ɡʱo̤ɽä] | [ɡʱo̤ɽä] | retroflex tap postvocalically | |
डर (ḍar) | [ɖʌr] | [ɖʌr] | ḍ elsewhere | |
कस्को (kasko) | [kʌsko] | [kʌsko] | ||
कसको (kasko) | [kʌsko] | [kʌsko] | ||
लर्क (larka) | [lʌrkʌ] | [lʌrkʌ] | ||
सम्म (samma) | [sʌ̃mːʌ] | [sʌ̃mːʌ] | ||
संस्था (sansthā) | [sʌ̃nst̪ʰä] | [sʌ̃nst̪ʰä] | ||
रुची (rucī) | [rut͡si] | [rut͡si] | ||
आहा (āhā) | [äɦä] | [äɦä] | ||
हाम्रो (hāmro) | [ɦä̃mro] | [ɦä̃mro] | ||
बाह्र (bāhra) | [bäɾʌ] | [bäɾʌ] | ||
बाह्रखरी (bāhrakharī) | [bäɾʌk̞ʰʌɾi] | [bäɾʌk̞ʰʌɾi] | ||
चर्चा (carcā) | [t͡sʌrt͡sä] | [t͡sʌrt͡sä] | ||
रचना (racanā) | [rʌt͡sʌ̃nä] | [rʌt͡sʌ̃nä] | ||
टर्रो (ṭarro) | [ʈʌrːo] | [ʈʌrːo] | ||
आर (ār) | [är] | [är] | ||
ईर् (īr) | [ir] | [ir] | ||
रातो (rāto) | [rät̪o] | [rät̪o] | ||
उर (ura) | [ur] | [uɾʌ] | ||
दुई (duī) | [d̪ui̯] | [d̪ui̯] | ||
चप्पल (cappal) | [t͡sʌp̚pʌl] | [t͡sʌp̚pʌl] | ||
पक्का (pakkā) | [pʌk̚kä] | [pʌk̚kä] | ||
ऑस्ट्रेलिया (ŏsṭreliyā) | [ɒs̠t̠relijä] | [ɒs̠t̠relijä] | ||
टेलिव़िश़न (ṭeliVižan) | [ʈeliviʒʌ̃n] | [ʈeliviʒʌ̃n] | ||
व़िझ़न (Vižan) | [viʒʌ̃n] | [viʒʌ̃n] | ||
ॲप (ĕp) | [æp] | [æp] | ||
ज़ू (zū) | [zu] | [zu] | ||
द़िस (ðis) | [ðis] | [ðis] | ||
थ़िक (θik) | [θik] | [θik] |
local export = {}
local lang = require("Module:languages").getByCode("ne")
local sc = require("Module:scripts").getByCode("Deva")
local m_IPA = require("Module:IPA")
local gsub = mw.ustring.gsub
local gmatch = mw.ustring.gmatch
local find = mw.ustring.find
local correspondences = {
["ṅ"] = "ŋ", ["g"] = "ɡ",
["c"] = "t͡s", ["j"] = "d͡z", ["ċ"] = "t͡s", ["j̈"] = "d͡z", ["ñ"] = "n",
["ṭ"] = "ʈ", ["ḍ"] = "ɖ", ["ṇ"] = "ɳ",
["t"] = "t̪", ["d"] = "d̪",
["y"] = "j", ["v"] = "b", ["w"] = "w", ["l"] = "l",
["ś"] = "s", ["ṣ"] = "s", ["h"] = "ɦ",
["ṛ"] = "ɽ", ["n"] = "n", ["ž"] = "ʒ", ["z"] = "z", ["ġ"] = "ɣ", ["q"] = "q", ["x"] = "x", ["θ"] = "θ", ["ð"] = "ð", ["f"] = "f", ["ḻ"] = "ɭ", ["ṟ"] = "ɹ", ["r̥"] = "ri", ["ṃ"] = "̃", ["ॽ"] = "", ["'"] = "", [","] = ",", ["r"] = "r", ["ỹ"] = "j̃", ["V"] = "v",
["a"] = "ʌ", ["ā"] = "a", ["i"] = "i",
["ī"] = "i", ["o"] = "o", ["e"] = "e",
["u"] = "u", ["ū"] = "u", ["ai"] = "ʌi̯", ["au"] = "ʌu̯", ["ŏ"] = "ɒ", ["ĕ"] = "æ", ["āu"] = "āu̯", ["āi"] = "āi̯",
["ũ"] = "ũ", ["õ"] = "õ", ["ã"] = "ʌ̃", ["ā̃"] = "ã", ["ẽ"] = "ẽ",
["ḥ"] = "ɦʌ", [" "] = " ",
}
local vowels = "aāā̃ẽõiīuūi̯u̯e̞eī̃ū̃ĩoää̃ʌʌ̃ãũŏĕ̤"
local weak_h_c = "gjdḍd̪ṇɽbṛvrṟwy"
local primary_stress = "ˈ"
local secondary_stress = "ˌ"
local weak_h = "([" .. weak_h_c .. "])h"
local aspirate = "([kctṭt̪p])"
local syllabify_pattern = "([" .. vowels .. "]+)([^" .. vowels .. "%.]+)([" .. vowels .."]+)"
local function find_consonants(text)
local current = ""
local cons = {}
for cc in mw.ustring.gcodepoint(text .. " ") do
local ch = mw.ustring.char(cc)
if find(current .. ch, "^[kgṅcjñṭḍṇɽtdnpbmɽ̃yrlɳwvɾjwśṣshqxġzžḻṛṟfθðṉ]$") or find(current .. ch, "^[kgcjṭḍṇtɽdɽ̃pbṛṟ]h$") then
current = current .. ch
else
table.insert(cons, current)
current = ch
end
end
return cons
end
local function syllabify(text)
for count = 1, 2 do
text = gsub(text, syllabify_pattern, function(a, b, c)
b_set = find_consonants(b)
table.insert(b_set, #b_set > 1 and 2 or 1, "")
return a .. table.concat(b_set) .. c
end)
end
return text
end
local identical = "knlsfzθð"
for character in gmatch(identical, ".") do
correspondences[character] = character
end
local function transliterate(text)
return lang:transliterate(text)
end
function export.link(term)
return require("Module:links").full_link{ term = term, lang = lang, sc = sc }
end
function export.toIPA(text, phonetic)
local translit = transliterate(text)
if not translit then
error('The term "' .. Nepali .. '" could not be transliterated.')
end
if phonetic then
translit = gsub(translit, 'ā([iuĩũīū])', 'ä%1̯') -- syllabicity
translit = gsub(translit, 'ā', 'ä') -- narrower transcription of a
---translit = gsub(translit, 'ś', 's')
---translit = gsub(translit, 'ṣ', 's')
---translit = gsub(translit, 'ñ', 'n')
translit = gsub(translit, '([aäāiīuūeaioauŏĕ])([nl])([td])', '%1%2̪%3') -- dental assimilation
translit = gsub(translit, '([aäāiīuūeaioauŏĕ])ṇ([ṭyḍ])', '%1ɳ%2')
translit = gsub(translit, '([aäāiīuūeaioauŏĕ])n([ṭḍ])', '%1ɳ%2') -- retroflex assimilation 2nd
translit = gsub(translit, 'ṇ', 'ɽ̃')
translit = gsub(translit, 'ॽ', 'ʔ')
translit = gsub(translit, "'", "ʔ")
-- ɡlottal stop
translit = gsub(translit, '(h?)r̥', 'ɾi') -- hr̥ ligature initially
translit = gsub(translit, '([aäāiīuūr̥])kṣ', '%1k̚t͡sʰy') -- kṣ ligature
translit = gsub(translit, '()kṣ', 't͡sʰ') -- kṣ initially
translit = gsub(translit, '([a])h([iīĩī̃])', '%1%2̯') -- h dropping
translit = gsub(translit, '([a])h([āä])', '%2̆ɦ%2̤') -- breathy and vowel changes
translit = gsub(translit, '([äoāe])h([iīuūĩũī̃ū̃])', '%1%2̯') -- h dropping 2nd case
translit = gsub(translit, '([äā])h([a])', '%1ɦ%1̆') -- vowel change 2nd
translit = gsub(translit, '([ʌäaāiīuūe̞eo])([nmṅɳŋɲñṇ])', '%1̃%2')
translit = gsub(translit, '([ʌäaāiīuūe̞eo])h([nml])', '%1%2%2')
translit = gsub(translit, '([ʌäaāiīuūe̞eo])hr([ʌäaāiīuūe̞eo])', '%1ɾ%2')
translit = gsub(translit, '([ʌäaāiīuūe̞eo])hy([ʌäaāiīuūe̞eo])', '%1i̯y%2')
translit = gsub(translit, '([ñnl])([cj])', '%1̻%2')
translit = gsub(translit, '([śṣs])([ṭ])(h)', 's̠t̠ʰ')
translit = gsub(translit, '([śṣs])([ḍ])(h)', 's̠d̠ʱ')
translit = gsub(translit, '([śṣs])([ṭ])', 's̠t̠')
translit = gsub(translit, '([śṣs])([ḍ])', 's̠d̠')
translit = gsub(translit, '([l])([ṭʈɖḍ])', 'ɭ%2')
translit = gsub(translit, '([ṭḍʈɖ])(h?)([l])', '%1%2ɭ')
translit = gsub(translit, '([ṭʈḍ])(h?)([n])', '%1%2ɳ')
translit = gsub(translit, '([td])(h?)([n])', '%1%2%3̪')
translit = gsub(translit, '([n])([ʌäaā])([tdṭs])', '%1%2̃%3')
translit = gsub(translit, '([nmṅɳŋɲñṇ])([ʌäaā])([cj])', '%1%2̃%3')
translit = gsub(translit, '([nmṅɳŋɲñṇ])([iīuū])', '%1%2̃')
translit = gsub(translit, '([nmṅɳŋɲñṇ])([iīuū])([̃ṃ]?)([iīuū])([̃ṃ]?)', '%1%2̃%4̃')
translit = gsub(translit, '([ʌäaāsiīuūe̞eo])([p])([h])', '%1ɸ')
translit = gsub(translit, '([ʌäaāsiīuūe̞eo])([k])([h])', '%1k̞ʰ')
translit = gsub(translit, '([ʌäaāiīuūe̞ä̃eoe̤])([j])([h])', '%1j')
translit = gsub(translit, '([ʌäaāiīuūe̞eo])bh([ʌäaāiīuūe̞eo])', '%1β%2')
translit = gsub(translit, '([ʌäaāiīuūe̞eo])([d])([h])', '%1%2')
translit = gsub(translit, '([ʌäaāisīuūe̞eo])gh', '%1ɡ̞')
translit = gsub(translit, 'c(h?)c(h)', 't̚t͡sʰ')
translit = gsub(translit, 'cc', 't̚t͡s')
translit = gsub(translit, 'j(h?)j(h)', 'd̚d͡zʱ')
translit = gsub(translit, 'jj', 'd̚d͡z')
translit = gsub(translit, "([kɡtdʈṭpb])(̪?)([ʰʱ]?)([ %.ˈ]?)([kɡtdṭʈpb])([ʰʱ]?)", "%1%2%3̚%4%5%6") -- no audible release
translit = gsub(translit, '([iī])h([äāe])', '(%1)y%2') -- vowel change 3rd
translit = gsub(translit, '([aāäiīuā̃ũĩū̃ī̃ä̃ū])ya', '%1e̞') -- ya to e before vowel
translit = gsub(translit, '([e])ya', '%1yʌ') -- ya remains same
translit = gsub(translit, '([aāiīuūãä̃ĩī̃ũū̃ā̃õẽeoä])([gbtṭdmhncjvwṛṛ̃ṅɽśṣɳslkpḍ])([wv])a', '%1%2%2o') -- gemination of preceding consonant
translit = gsub(translit, '()([gbtṭdmhncjvwṇṅɽśṣɳslkpḍ])([wv])a', '%2o')
translit = gsub(translit, '([aāiīuūãä̃ĩī̃ũū̃ā̃õẽeoä])([grbtṭdmncjvwṇṅśṣɳslkp])(h?)ya', '%1%2%2%3e') -- gemination of preceding consonant
translit = gsub(translit, '()([grbtṭdmncjvwṅśṣɳslkpḍ])ya', '%2e') -- no gemination
translit = gsub(translit, '()ya', 'e') -- ya to e initially
translit = gsub(translit, '([ʌäaāiīuãä̃ĩī̃ũū̃ā̃õẽūeo])ḍ(h?)(y?)', '%1ɽ%3') -- postvocalic allophone of ḍ and ḍh
translit = gsub(translit, '([bdgjḍ])h([ʌäaāiīuūeeoo])', '%1ʱ%2̤') -- breathy voice
-- force final schwa
translit = gsub(translit, "a~$", "ʌ")
translit = gsub(translit, 'a$', 'ʌ') -- final schwa retention
translit = gsub(translit, '(...)a ', '%1ʌ ') -- final schwa retenti
translit = gsub(translit, '([ʌäaāiīuūəeeo̯o ̤])r([ʌäaāiīəuūeoeo̯ ̤])', '%1ɾ%2') -- intervocalic allophone of r
translit = gsub(translit, "m̐", "ːm")
end
local result = gsub(translit, ".", correspondences)
translit = gsub(translit, "͠", "̃")
---translit = gmatch(translit, '^[^-]') and ('ˈ' .. gsub(translit, ' ', ' ˈ'))
translit = gsub(translit, "(...)*$", "%1ʌ") -- second person mid-respect verb form
translit = gsub(translit, "m̐", "m")
translit = gsub(translit, "rr̥", "ri")
translit = gsub(translit, '()([śsnlcjzkhptdgb])([vw])([aāäiīuūoeĩ])([cspdtngkbrjyṇṣśṇɾṅñṃ])', '%2w%4%5')
--translit = gsub(translit, 'ā([iuĩũīū])', 'ā%1̯') -- syllabicity
translit = gsub(translit, "([aāäiīuūeoʌ])([̤]?)(̃?)([ṃ]?)([iīūu])(̃?)([ṃ]?)", "%1%2%3%4%5̯%6%7")
translit = gsub(translit, "%-", " ")
translit = gsub(translit, "r̥", "ri")
translit = syllabify(translit)
-- aspiration rules
translit = gsub(translit, aspirate .. "h", '%1ʰ')
translit = gsub(translit, weak_h, '%1ʱ')
translit = gsub(translit, '([' .. weak_h_c .. '])%.h', '.%1ʱ')
translit = gsub(translit, aspirate .. '%.h', '.%1ʰ')
translit = gsub(translit, "%.ː", "ː.")
local result = gsub(translit, ".", correspondences)
-- formatting
result = gsub(result, "ː̃", "̃ː")
result = gsub(result, "ː.̃", "̃ː.")
result = gsub(result, "([snmrfv])%1", "%1ː")
result = gsub(result, "t̪͡s", "t͡s")
result = gsub(result, "t̪̠", "t̠")
result = gsub(result, "d̪̠", "d̠")
result = gsub(result, "i̯̯", "i̯")
result = gsub(result, "u̯̯", "u̯")
result = gsub(result, "%. ", " ")
result = gsub(result, "%.$", " ")
result = gsub(result, "%.?%-", ".")
result = gsub(result, "t̪̚t͡s", "t̚t͡s")
result = gsub(result, "([ʌäaāiīuūe̞eo]̃)̃", "%1")
result = gsub(result, "ĩ̯̯̃", "ĩ̯")
result = gsub(result, "d̪̚d̪͡z", "d̚d͡z")
result = gsub(result, "ː%.̃", "̃ː.")
return result
end
function export.make(frame)
local args = frame:getParent().args
local pagetitle = mw.title.getCurrentTitle().text
local p, results = {}, {}
if args[1] then
for index, item in ipairs(args) do
table.insert(p, (item ~= "") and item or nil)
end
else
p = { pagetitle }
end
for _, Nepali in ipairs(p) do
table.insert(results, { pron = "/" .. export.toIPA(Nepali) .. "/" })
if export.toIPA(Nepali, true) ~= export.toIPA(Nepali) then
table.insert(results, { pron = "[" .. export.toIPA(Nepali, true) .. "]" })
end
end
return m_IPA.format_IPA_full(lang, results)
end
return export