local export = {}
function export.show(word,LatinAmerica,phonetic,do_debug)
local debug = {}
if type(word) == 'table' then
do_debug = word.args[4]
word = word.args[1]
end
word = (word or mw.title.getCurrentTitle().text):lower()
word = mw.ustring.gsub(word,"[^abcdefghijklmnopqrstuvwxyzáéíóúüñ.]","")
table.insert(debug,word)
--determining whether "y" is a consonant or a vowel + diphthongs, "-mente" suffix
word = mw.ustring.gsub(word,"y([^aeiouáéíóú])","i%1")
word = mw.ustring.gsub(word,"y([aeiouáéíóú])","ɟ%1") -- not the real sound
word = mw.ustring.gsub(word,"hi([aeiouáéíóú])","ɟ%1")
word = mw.ustring.gsub(word,"y$","ï")
word = mw.ustring.gsub(word,"mente$","ménte")
--x
word = mw.ustring.gsub(word,"x","ks")
--"c" & "g" before "i" and "e" and all that stuff
word = mw.ustring.gsub(word,"c([ieíé])",(LatinAmerica and 's' or 'θ') .. "%1")
word = mw.ustring.gsub(word,"gü([ieíé])","ɡw%1")
word = mw.ustring.gsub(word,"ü","")
word = mw.ustring.gsub(word,"gu([ieíé])","ɡ%1")
word = mw.ustring.gsub(word,"g([ieíé])","x%1")
table.insert(debug,word)
--alphabet-to-phoneme
word = mw.ustring.gsub(word,"qu","c")
word = mw.ustring.gsub(word,"v","b")
word = mw.ustring.gsub(word,"ch","ʃ") --not the real sound
word = mw.ustring.gsub(word,'[cgjñry]',{['c']='k', ['g']='ɡ', ['j']='x', ['ñ']='ɲ', ['r']='ɾ'}) --['g']='ɡ': U+0067 LATIN SMALL LETTER G → U+0261 LATIN SMALL LETTER SCRIPT G
word = mw.ustring.gsub(word,'^ɾ','r')
word = mw.ustring.gsub(word,'ɾɾ','r')
word = mw.ustring.gsub(word,'lɾ','lr')
word = mw.ustring.gsub(word,'nɾ','nr')
word = mw.ustring.gsub(word,'ɾ([bdfɡklʎmnɲpstxzʃɟ])','r%1')
word = mw.ustring.gsub(word,'n([bm])','m%1')
word = mw.ustring.gsub(word,'ll',(LatinAmerica and 'ɟ' or 'ʎ'))
word = mw.ustring.gsub(word,'z',(LatinAmerica and 'z' or 'θ')) -- not the real LatAm sound
table.insert(debug,word)
--syllable division
word = mw.ustring.gsub(word,"([aeiouáéíóú])([^aeiouáéíóú.])([aeiouáéíóú])","%1.%2%3")
word = mw.ustring.gsub(word,"([aeiouáéíóú])([^aeiouáéíóú.])([aeiouáéíóú])","%1.%2%3")
word = mw.ustring.gsub(word,"([aeiouáéíóú])([^aeiouáéíóú.])([^aeiouáéíóú.])([aeiouáéíóú])","%1%2.%3%4")
word = mw.ustring.gsub(word,"([aeiouáéíóú])([^aeiouáéíóú.])([^aeiouáéíóú.])([aeiouáéíóú])","%1%2.%3%4")
word = mw.ustring.gsub(word,"([aeiouáéíóú])([^aeiouáéíóú.])([^aeiouáéíóú.])([^aeiouáéíóú.])([aeiouáéíóú])","%1%2.%3%4%5")
word = mw.ustring.gsub(word,"([aeiouáéíóú])([^aeiouáéíóú.])([^aeiouáéíóú.])([^aeiouáéíóú.])([aeiouáéíóú])","%1%2.%3%4%5")
word = mw.ustring.gsub(word,"([pbktdɡ])%.([lɾ])",".%1%2")
word = mw.ustring.gsub(word,"([^aeiouáéíóú.])%.s([^aeiouáéíóú.])","%1s.%2")
word = mw.ustring.gsub(word,"([aeoáéíóú])([aeoáéíóú])","%1.%2")
word = mw.ustring.gsub(word,"([ií])([ií])","%1.%2")
word = mw.ustring.gsub(word,"([uú])([uú])","%1.%2")
table.insert(debug,word)
--diphthongs
word = mw.ustring.gsub(word,'ih?([aeouáéóú])','j%1')
word = mw.ustring.gsub(word,'uh?([aeioáéíó])','w%1')
table.insert(debug,word)
--accentuation
local syllables = mw.text.split(word,"%.")
if mw.ustring.find(word,"[áéíóú]") then
for i=1,#syllables do
if mw.ustring.find(syllables[i],"[áéíóú]") then syllables[i] = "ˈ"..syllables[i] end
end
else
if mw.ustring.find(word,"[^aeiouns]$") then
syllables[#syllables] = "ˈ"..syllables[#syllables]
else
if #syllables > 1 then syllables[#syllables-1] = "ˈ"..syllables[#syllables-1] end
end
end
table.insert(debug,word)
--syllables nasalized if ending with "n", voiceless consonants in syllable-final position to voiced
for i=1,#syllables do
syllables[i] = mw.ustring.gsub(syllables[i],'[áéíóú]',{['á']='a', ['é']='e', ['í']='i', ['ó']='o', ['ú']='u'})
if phonetic and mw.ustring.find(syllables[i],'[mnɲ][^aeiou]?$') then
syllables[i] = mw.ustring.gsub(syllables[i],'([aeiou])',{['a']='ã',['e']='ẽ',['i']='ĩ',['o']='õ',['u']='ũ'})
end
syllables[i] = mw.ustring.gsub(syllables[i],'[ptk]$',{['p']='b',['t']='d',['k']='ɡ'})
end
word = table.concat(syllables)
--real sound of LatAm Z
word = mw.ustring.gsub(word,'z','s')
--secondary stress
word = mw.ustring.gsub(word,'ˈ(.+)ˈ','ˌ%1ˈ')
word = mw.ustring.gsub(word,'ˈ(.+)ˌ','ˌ%1ˌ')
word = mw.ustring.gsub(word,'ˌ(.+)ˈ(.+)ˈ','ˌ%1ˌ%2ˈ')
--phonetic transcription
if phonetic then
--θ, s, f before voiced consonants
word = mw.ustring.gsub(word,'θ([ˈˌ]?[mnɲbdɟɡlʎɾrh])','θ̬%1')
word = mw.ustring.gsub(word,'s([ˈˌ]?[mnɲbdɟɡlʎɾrh])','z%1')
word = mw.ustring.gsub(word,'f([ˈˌ]?[mnɲbdɟɡlʎrh])','v%1')
--lots of allophones going on
word = mw.ustring.gsub(word,'[bdɟɡ]',{['b']='β',['d']='ð',['ɟ']='ʝ',['ɡ']='ɣ'})
word = mw.ustring.gsub(word,'^[ˈˌ]?[βðɣʝ]',{['β']='b',['ð']='d',['ʝ']='ɟ',['ɣ']='ɡ',['ˈβ']='ˈb',['ˈð']='ˈd',['ˈʝ']='ˈɟ',['ˈɣ']='ˈɡ',['ˌβ']='ˌb',['ˌð']='ˌd',['ˌʝ']='ˌɟ',['ˌɣ']='ˌɡ'})
word = mw.ustring.gsub(word,'([mnɲ][ˈˌ]?)β','%1b')
word = mw.ustring.gsub(word,'([lʎmnɲ][ˈˌ]?)ð','%1d')
word = mw.ustring.gsub(word,'([mnɲ][ˈˌ]?)ɣ','%1ɡ')
word = mw.ustring.gsub(word,'([lʎmnɲ][ˈˌ]?)ʝ','%1ɟ')
word = mw.ustring.gsub(word,'[td]',{['t']='t̪',['d']='d̪'})
--nasal assimilation before consonants
word = mw.ustring.gsub(word,'n([ˈˌ]?[f])','ɱ%1')
word = mw.ustring.gsub(word,'n([ˈˌ]?[td])','n̪%1')
word = mw.ustring.gsub(word,'n([ˈˌ]?[θ])','n̟%1')
word = mw.ustring.gsub(word,'n([ˈˌ]?ʃ)','nʲ%1')
word = mw.ustring.gsub(word,'n([ˈˌ]?[ɟʎ])','ɲ%1')
word = mw.ustring.gsub(word,'n([ˈˌ]?[kxɡ])','ŋ%1')
--lateral assimilation before consonants
word = mw.ustring.gsub(word,'l([ˈˌ]?[td])','l̪%1')
word = mw.ustring.gsub(word,'l([ˈˌ]?[θ])','l̟%1')
--semivowels
word = mw.ustring.gsub(word,'([aeouãẽõũ][iïĩ])','%1̯')
word = mw.ustring.gsub(word,'([aeioãẽĩõ][uũ])','%1̯')
end
table.insert(debug,word)
word = mw.ustring.gsub(word,'h','') --silent "h"
word = mw.ustring.gsub(word,'ʃ','t͡ʃ') --fake "ch" to real "ch"
word = mw.ustring.gsub(word,'ɟ','ɟ͡ʝ') --fake "y" to real "y"
word = mw.ustring.gsub(word,'ï','i') --fake "y$" to real "y$"
if do_debug == 'yes' then
return word .. table.concat(debug,"")
else
return word
end
end
function export.LatinAmerica(frame)
return export.show(frame,true)
end
function export.phonetic(frame)
return export.show(frame,false,true)
end
function export.phoneticLatinAmerica(frame)
return export.show(frame,true,true)
end
return export