Module:User:AmazingJus/ga
Jump to navigation
Jump to search
- The following documentation is located at Module:User:AmazingJus/ga/documentation. [edit] Categories were auto-generated by Module:documentation. [edit]
- Useful links: root page • root page’s subpages • links • transclusions • testcases • user page • user talk page • userspace
170 of 218 tests failed. (refresh)
Text | Expected | Actual | |
---|---|---|---|
![]() | acadamh | ˈakəd̪ˠəw | akad̪ˠaw |
![]() | adhairt | əiɾˠtʲ | əiɾʲtʲ |
![]() | aghaidh | əij | əij |
![]() | aidhe | əi | ajɛ |
![]() | aidhleann | ˈəilʲən̪ˠ | ajlʲanˠnˠ |
![]() | aighe | əi | ajɛ |
![]() | aighneas | əinʲəsˠ | ajnʲasˠ |
![]() | amhantar | ˈəun̪ˠt̪ˠəɾˠ | ə̃ũnˠt̪ˠaɾˠ |
![]() | bacaigh | ˈbˠakiː | bˠakaj |
![]() | bodhair | bˠəuɾʲ | bˠəuɾʲ |
![]() | bodhar | bˠəuɾˠ | bˠəuɾˠ |
![]() | bodhrán | ˈbˠəuɾˠɑːnˠ | bˠɔɣɾˠɑːnˠ |
![]() | bogha | bˠəu | bˠəu |
![]() | briseadh | ˈbʲɾʲɪʃə | bʲɾʲɪʃaɣ |
![]() | broghais | bˠɾˠəuʃ | bˠɾˠəuʃ |
![]() | caighean | kəinˠ | kajanˠ |
![]() | ciumhais | cuːʃ | cũːʃ |
![]() | cleachtaidh | ˈclʲaxt̪ˠiː | clʲaxt̪ˠaj |
![]() | coiligh | ˈkɛlʲiː | kɔɪlʲɪj |
![]() | comhar | koːɾˠ | kõːɾˠ |
![]() | creideamh | ˈcɾʲɛdʲəw | cɾʲɛdʲaw |
![]() | cumhra | ˈkuːɾˠə | kʊwɾˠa |
![]() | deagha | d̪ˠəi | dʲəi |
![]() | doghra | ˈd̪ˠəuɾˠə | d̪ˠɔɣɾˠa |
![]() | domhain | d̪ˠoːnʲ | d̪ˠõːnʲ |
![]() | Domhnach | ˈd̪ˠoːnˠəx | d̪ˠɔwnˠax |
![]() | dubh | d̪ˠʊw | d̪ˠʊ(w) |
![]() | eidheann | əin̪ˠ | əin̪ˠ |
![]() | Feabhra | ˈfʲəuɾˠə | fʲawɾˠa |
![]() | feidhm | fʲəimʲ | fʲəimʲ |
![]() | feighil | fʲəilʲ | fʲəilʲ |
![]() | feighlí | ˈfʲəilʲiː | fʲəilʲiː |
![]() | guigh | giː | ɡɪj |
![]() | leabhair | l̠ʲəuɾʲ | l̠ʲəuɾʲ |
![]() | leigheas | l̠ʲəisˠ | l̠ʲəisˠ |
![]() | ligh | l̠ʲiː | l̠ʲɪj |
![]() | lobhair | l̪ˠəuɾʲ | l̪ˠəuɾʲ |
![]() | lobhar | l̪ˠəuɾˠ | l̪ˠəuɾˠ |
![]() | lobhra | ˈl̪ˠəuɾˠə | l̪ˠɔwɾˠa |
![]() | loighic | l̪ˠəic | l̪ˠəic |
![]() | margadh | ˈmˠaɾˠəɡə | mˠaɾˠɡaɣ |
![]() | meadhg | mʲəiɡ | mʲaɣɡ |
![]() | meidhir | mʲəiɾʲ | mʲəiɾʲ |
![]() | Mumhan | ˈmˠuːnˠ | mˠũːnˠ |
![]() | oidheanna | əin̪ˠə | əin̪ˠa |
![]() | oidhre | əiɾʲə | əiɾʲɛ |
![]() | oigheann | əin̪ˠ | əin̪ˠ |
![]() | oighreach | ˈəiɾʲəx | əiɾʲax |
![]() | ramhraigh | ˈɾˠəuɾˠiː | ɾˠawɾˠaj |
![]() | sabhall | sˠəul̪ˠ | sˠəulˠlˠ |
![]() | saghsanna | ˈsˠəisˠən̪ˠə | sˠaɣsˠan̪ˠa |
![]() | Samhain | sˠəunʲ | sˠə̃ũnʲ |
![]() | tiubh | tʲʊw | tʲʊ(w) |
![]() | tuillidh | ˈt̪ˠɪl̠ʲiː | t̪ˠɪlʲlʲɪj |
![]() | aguisín | ˈaɡəʃiːnʲ | aɡɪʃiːnʲ |
![]() | agus | ˈaɡəsˠ | aɡʊsˠ |
![]() | airde | ɑːɾˠdʲə | aɾʲdʲɛ |
![]() | airne | ɑːɾˠn̠ʲə | aɾʲnʲɛ |
![]() | am | ɑːmˠ | amˠ |
![]() | ann | ɑːn̪ˠ | anˠnˠ |
![]() | anois | əˈnˠɪʃ | anˠɔɪʃ |
![]() | anseo (respelled anseò) | ənʲˈʃɔ | anˠsˠɔ |
![]() | armónach | ˈaɾˠəmˠoːnəx | aɾˠmˠoːnˠax |
![]() | baile | ˈbˠalʲə | bˠalʲɛ |
![]() | bailiú | ˈbˠalʲuː | bˠalʲuː |
![]() | barr | bˠɑːɾˠ | bˠaɾˠ |
![]() | bean | bʲanˠ | bʲanˠ |
![]() | beannaíonn | ˈbʲan̪ˠiːnˠ | bʲanˠnˠiːn̪ˠ |
![]() | bearna | ˈbʲɑːɾˠn̪ˠə | bʲaɾˠnˠa |
![]() | bior | bʲɪɾˠ | bʲɪɾˠ |
![]() | bián | ˈbʲiːɑːnˠ | bʲɪɑːnˠ |
![]() | bliain | bʲlʲiənʲ | bʲlʲiənʲ |
![]() | boicht | bˠɔxtʲ | bˠɔɪçtʲ |
![]() | bord | bˠoːɾˠd̪ˠ | bˠɔɾˠd̪ˠ |
![]() | briogáid | ˈbʲɾʲʊɡɑːdʲ | bʲɾʲʊɡɑːdʲ |
![]() | buidéal | ˈbˠɪdʲeːlˠ | bˠɪdʲeːlˠ |
![]() | burla | ˈbˠuːɾˠl̪ˠə | bˠʊɾˠlˠa |
![]() | bus (respelled bùs) | bˠɔsˠ | bˠɔsˠ |
![]() | buígh | bˠiːj | bˠiːj |
![]() | buíon | bˠiːnˠ | bˠiːnˠ |
![]() | bádóir | ˈbˠɑːd̪ˠoːrʲ | bˠɑːd̪ˠoːɾʲ |
![]() | bán | bˠɑːnˠ | bˠɑːnˠ |
![]() | caillte | ˈkɑːl̠ʲtʲə | kalʲlʲtʲɛ |
![]() | cailín | ˈkalʲiːnʲ | kalʲiːnʲ |
![]() | caisleáin | ˈkaʃl̠ʲɑːnʲ | kaʃlʲaːnʲ |
![]() | caisleán | ˈkaʃl̠ʲɑːnˠ | kaʃlʲaːnˠ |
![]() | carnán | ˈkɑːɾˠn̪ˠɑːnˠ | kaɾˠnˠɑːnˠ |
![]() | ceardaí | cɑːɾˠd̪ˠiː | caɾˠd̪ˠiː |
![]() | ceird | ceːɾˠdʲ | cɛɾʲdʲ |
![]() | ceirnín | ˈceːɾˠnʲiːnʲ | cɛɾʲnʲiːnʲ |
![]() | ceist | cɛʃtʲ | cɛʃtʲ |
![]() | ceol | coːlˠ | coːlˠ |
![]() | cill | ciːl̠ʲ | cɪl̠ʲ |
![]() | cinnte | ˈciːn̠ʲtʲə | cɪn̠ʲtʲɛ |
![]() | cion | cɪnˠ | cɪnˠ |
![]() | ciúin | cuːnʲ | cuːnʲ |
![]() | cloiche | ˈklˠɛçə | klˠɔɪçɛ |
![]() | cloisfidh | ˈkl̪ˠɔʃiː | klˠɔɪʃfʲɪj |
![]() | club (respelled clùb) | klˠɔbˠ | klˠɔbˠ |
![]() | cnoic | knˠɪc | knˠɔɪc |
![]() | coillte | ˈkəil̠ʲtʲə | kɔɪlʲlʲtʲɛ |
![]() | coimeád | ˈkɪmʲɑːd̪ˠ | kɔɪmʲaːd̪ˠ |
![]() | coirnéal | ˈkoːɾˠn̠ʲeːlˠ | kɔɪɾʲnʲeːlˠ |
![]() | cois | kɔʃ | kɔɪʃ |
![]() | conradh | ˈkʊnˠɾˠə | kɔnˠɾˠaɣ |
![]() | cosúil | ˈkɔsˠuːlʲ | kɔsˠuːlʲ |
![]() | cothrom | ˈkɔɾˠəmˠ | kɔhɾˠɔmˠ |
![]() | crainn | kɾˠɑːn̠ʲ | kɾˠan̠ʲ |
![]() | creimeadh | ˈcɾʲɪmʲə | cɾʲɛmʲaɣ |
![]() | cromóg | ˈkɾˠʊmˠoːɡ | kɾˠɔmˠoːɡ |
![]() | croíleacán | ˈkɾˠiːlʲəkɑːnˠ | kɾˠiːlʲakɑːnˠ |
![]() | croíonna | ˈkɾˠiːn̪ˠə | kɾˠiːnˠnˠa |
![]() | cruóg | ˈkɾˠuːoːɡ | kɾˠuːoːɡ |
![]() | deoch (respelled deòch) | dʲɔx/ | dʲɔx |
![]() | Diarmaid | dʲiərmədʲ | dʲiəɾˠmˠadʲ |
![]() | doirse | ˈd̪ɔɾˠʃə | d̪ˠɔɪɾʲʃɛ |
![]() | dreoilín | ˈdʲɾʲoːlʲiːnʲ | dʲɾʲoːlʲiːnʲ |
![]() | droim | d̪ˠɾˠiːmʲ | d̪ˠɾˠɔɪmʲ |
![]() | duine | ˈd̪ˠɪnʲə | d̪ˠɪnʲɛ |
![]() | duirling | ˈd̪ˠuːɾˠlʲənʲ | d̪ˠɪɾʲlʲɪnʲɟ |
![]() | duán | ˈd̪ˠuːɑːnˠ | d̪ˠuːaːnˠ |
![]() | dáil | d̪ˠɑːlʲ | d̪ˠɑːlʲ |
![]() | déanamh | ˈdʲeːnˠəw | dʲeːnˠaw |
![]() | éadroime | eːdˠɾˠəmʲə | eːd̪ˠɾˠɔɪmʲɛ |
![]() | eirleach | ˈeːɾˠl̠ʲəx | ɛɾʲlʲax |
![]() | eochair (respelled eòchair) | ˈɔxəɾʲ | ɔxaɾʲ |
![]() | eolais | ˈoːlˠəʃ | oːlˠaʃ |
![]() | fan | fˠanˠ | fˠanˠ |
![]() | faoistin | ˈfˠiːʃtʲənʲ | fˠiːʃtʲɪnʲ |
![]() | feall | fʲɑːl̪ˠ | fʲalˠlˠ |
![]() | feanntach | ˈfʲɑːn̪ˠt̪ˠəx | fʲanˠnˠt̪ˠax |
![]() | fearr | fʲɑːɾˠ | fʲaɾˠɾˠ |
![]() | fionn | fʲʊn̪ˠ | fʲɪnˠnˠ |
![]() | fios | fʲɪsˠ | fʲɪsˠ |
![]() | fliuch | fʲlʲʊx | fʲlʲʊx |
![]() | foinn | fˠiːnʲ | fˠɔɪnʲnʲ |
![]() | fonn | fˠuːn̪ˠ | fˠɔn̪ˠ |
![]() | friotháil | ˈfʲɾʲɪhɑːlʲ | fʲɾʲɪhɑːlʲ |
![]() | fuair | fˠuəɾʲ | fˠuəɾʲ |
![]() | fuar | fˠuəɾˠ | fˠuəɾˠ |
![]() | fuáil | ˈfˠuːɑːlʲ | fˠuːaːlʲ |
![]() | gabháil | ˈɡawɑːlʲ | ɡawɑːlʲ |
![]() | Gaeilge | ˈɡeːlʲɟə | ɡeːlʲɟɛ |
![]() | Gaelach | ˈɡeːlˠəx | ɡeːlʲax |
![]() | gaois | ɡiːʃ | ɡiːʃ |
![]() | garda | ˈɡɑːɾˠd̪ˠə | ɡaɾˠd̪ˠa |
![]() | giodam | ˈɟɪd̪ˠəmˠ | ɟɪd̪ˠamˠ |
![]() | giota | ˈɟɪt̪ˠə | ɟɪt̪ˠa |
![]() | gloine | ˈɡlˠɪnʲə | ɡlˠɔɪnʲɛ |
![]() | gnímh | ɟnʲiːvʲ | ɟnʲiːvʲ |
![]() | goill | gəil̠ʲ | ɡɔɪlʲlʲ |
![]() | goirt | ɡɔɾˠtʲ | ɡɔɪɾʲtʲ |
![]() | greim | ɟɾʲiːmʲ | ɟɾʲɛmʲ |
![]() | grióir | ˈɟɾʲiːoːɾʲ | ɟɾʲiːoːɾʲ |
![]() | gutaí | ˈɡʊt̪ˠiː | ɡʊt̪ˠiː |
![]() | ifreann | ˈɪfʲɾʲən̪ˠ | ɪfʲɾʲanˠnˠ |
![]() | im | iːmʲ | ɪmʲ |
![]() | inniúil | ˈɪn̠ʲuːlʲ | ɪnʲnʲuːlʲ |
![]() | ionga | ˈʊŋɡə | ɪnˠɡa |
![]() | liom | lʲʊmˠ | l̠ʲʊmˠ |
![]() | liáin | ˈl̠ʲiːɑːnʲ | l̠ʲɪɑːnʲ |
![]() | loinge | ˈl̪ˠɪɲɟə | l̪ˠɔɪnʲɟɛ |
![]() | long | l̪ˠuːŋɡ | l̪ˠɔnˠɡ |
![]() | luóige | ˈl̪ˠuːoːɟə | l̪ˠuːoːɟɛ |
![]() | mall | mˠɑːl̪ˠ | mˠal̪ˠ |
![]() | maígh | mˠiːj | mˠiːj |
![]() | meáin | mʲɑːnʲ | mʲaːnʲ |
![]() | mo | mˠə | mˠɔ |
![]() | murnán | ˈmˠuːɾˠn̪ˠɑːnˠ | mˠʊɾˠnˠɑːnˠ |
![]() | mála | ˈmˠɑːlˠə | mˠɑːlˠa |
![]() | míle | ˈmʲiːlʲə | mʲiːlʲɛ |
![]() | móin | mˠoːnʲ | mˠoːnʲ |
![]() | naoi | ˈn̪ˠiː | n̪ˠiː |
![]() | naíonán | ˈn̪ˠiːnˠɑːnˠ | n̪ˠiːnˠɑːnˠ |
![]() | oibre | ˈɛbʲɾʲə | ɔɪbʲɾʲɛ |
![]() | oird | oːɾˠdʲ | ɔɪɾʲdʲ |
![]() | oirthear | ˈɔɾˠhəɾˠ | ɔɪɾʲhaɾˠ |
![]() | ólann | ˈoːlˠən̪ˠ | oːlˠanˠnˠ |
![]() | orlach | ˈoːɾˠl̪ˠəx | ɔɾˠlˠax |
![]() | pic | pʲɪc | pʲɪc |
![]() | pióg | ˈpʲiːoːɡ | pʲiːoːɡ |
![]() | post | pˠɔsˠt̪ˠ | pˠɔsˠt̪ˠ |
![]() | puinn | pˠiːn̠ʲ | pˠɪnʲnʲ |
![]() | páipéir | ˈpˠɑːpʲeːɾʲ | pˠɑːpʲeːɾʲ |
![]() | póg | pˠoːɡ | pˠoːɡ |
![]() | roimh | ɾˠɪvʲ | ɾˠɔɪvʲ |
![]() | ruán | ˈɾˠuːɑːnˠ | ɾˠuːaːnˠ |
![]() | saol | sˠiːlˠ | sˠiːlˠ |
![]() | sceimhle | ˈʃcɪvʲlʲə | ʃcɛvʲlʲɛ |
![]() | scoil | sˠkɛlʲ | sˠkɔɪlʲ |
![]() | scéimh | ʃceːvʲ | ʃceːvʲ |
![]() | seinm | ˈʃɪnʲəmʲ | ʃɛnʲmʲ |
![]() | seisean | ˈʃɛʃənˠ | ʃɛʃanˠ |
![]() | seo (respelled seò) | ˈʃɔ | ʃɔ |
![]() | Seán | ʃɑːnˠ | ʃaːnˠ |
![]() | Siobhán | ˈʃʊwɑːnˠ | ʃʊwɑːnˠ |
![]() | siopa | ˈʃʊpˠə | ʃʊpˠa |
![]() | sióg | ˈʃiːoːɡ | ʃiːoːɡ |
![]() | siúl | ʃuːlˠ | ʃuːlˠ |
![]() | suim | sˠiːmʲ | sˠɪmʲ |
![]() | sé | ʃeː | ʃeː |
![]() | síol | ʃiːlˠ | ʃiːlˠ |
![]() | súil | suːlʲ | sˠuːlʲ |
![]() | taoiseach | ˈt̪ˠiːʃəx | t̪ˠiːʃax |
![]() | tarlú | ˈt̪ˠɑːɾˠl̪ˠuː | t̪ˠaɾˠlˠuː |
![]() | te | tʲɛ | tʲɛ |
![]() | thoir | hɛɾʲ | hɔɪɾʲ |
![]() | tiocfaidh | ˈtʲʊkiː | tʲʊkfˠaj |
![]() | tiomáin | ˈtʲʊmɑːnʲ | tʲʊmˠɑːnʲ |
![]() | toitín | ˈt̪ˠɛtʲiːnʲ | t̪ˠɔɪtʲiːnʲ |
![]() | troid | t̪ˠɾˠɛdʲ | t̪ˠɾˠɔɪdʲ |
![]() | trom | t̪ˠɾˠuːmˠ | t̪ˠɾˠɔmˠ |
![]() | tuillteanach | ˈt̪ˠiːl̠ʲtʲənˠəx | t̪ˠɪlʲlʲtʲanˠax |
![]() | tuirne | ˈt̪ˠuːɾˠn̠ʲə | t̪ˠɪɾʲnʲɛ |
![]() | tús | t̪ˠuːsˠ | t̪ˠuːsˠ |
![]() | veain | vʲanʲ | vʲanʲ |
![]() | Baile Átha Cliath (respelled Bleá Cliath) | ˌbʲlʲɑː ˈclʲiə | bʲlʲaː clʲiəh |
![]() | go raibh maith agat | ɡəɾˠəˈmˠahəɡət̪ˠ,ɡəɾˠəmˠəˈhaɡət̪ˠ | ɡɔ ɾˠavʲ mˠah aɡat̪ˠ |
local export = {}
local lang = require("Module:languages").getByCode("ga")
local sc = require("Module:scripts").getByCode("Latn")
function export.tag_text(text, face)
return require("Module:script utilities").tag_text(text, lang, sc, face)
end
function export.link(term, face)
return require("Module:links").full_link( { term = term, lang = lang, sc = sc }, face )
end
local find = mw.ustring.find
local gsub = mw.ustring.gsub
local len = mw.ustring.len
local lower = mw.ustring.lower
local match = mw.ustring.match
local sub = mw.ustring.sub
local CONS = "[bcdfghjklLmnNŋpqrRstvwxyz]h?" -- consonants
local FRNT = "eiéí" -- front vowels
local BACK = "aouáóúòù" -- back vowels
local VOWL = FRNT .. BACK -- all vowels
local SYLL = "[^" .. VOWL .. "]" -- syllable boundary (should not be a vowel)
local BROD = "ˠ" -- broad mark
local SLND = "ʲ" -- slender mark
--[[
list of various spelling-to-phoneme correspondences
dialect order: ulster, connacht, munster
]]
-- vowel substitutions
local vowel_rules = {
-- mixed vowel + consonant forms
["mixed"] = {
["e?abhai?"] = {"oː", "əu", "əu"},
["e?a[dg]hai?"] = {"eː", "əi", "əi"},
["ai?[dg]hai?"] = "əi",
["e?amhai?"] = "ə̃ũ",
["ei[dg]hi?"] = {"eː", "əi", "əi"},
["ei[dg]hea"] = {"eː", "əi", "əi"},
["oi[dg]hi?"] = "əi",
["oi[dg]hea"] = "əi",
["e?o[bdg]hai?"] = {"oː", "əu", "əu"},
["e?omhai?"] = "õː",
["i?ubh"] = {"uː", "ʊ(w)", "ʊw"},
["i?umhai?"] = "ũː"
},
-- vowel-only forms
["vowels"] = {
-- a
["aei?"] = "eː",
["aoi"] = "iː",
["aío?"] = "iː",
["ai"] = {
["r[dln]"] = "aː",
["R"] = "aː",
["[LN]"] = {"a", "aː", "əi"},
[false] = "a"
},
["ao"] = {"iː", "iː", "eː"},
["a"] = {
["r[dlnr]"] = "aː",
["[LmN]" .. SYLL] = {"a", "aː", "əu"},
[false] = "a"
},
-- e
["eai?"] = {
["r[dln]"] = "aː",
["R"] = "aː",
["[LN]"] = {"a", "aː", "əu"},
[false] = "a",
},
["eoi?"] = "oː",
["eái?"] = "aː",
["eòi?"] = "ɔ",
["ei?"] = {
["r[dln]"] = "eː",
["[mN]" .. SYLL] = {"ɪ", "iː", "əi"},
["mh?"] = "ɪ",
["n"] = "ɪ",
[false] = "ɛ"
},
-- i
["iai?"] = "iə",
["iói?"] = "iːoː",
["iúi?"] = "uː",
["io"] = {
["th"] = "ɪ",
["[dlnrst]"] = "ɪ",
["N" .. SYLL] = {"ɪ", "ʊ", "uː"},
[false] = {"ɪ", "ʊ", "ʊ"},
},
["iu"] = "ʊ",
["i"] = {
["[LmN]"] = {"ɪ", "iː", "iː"},
[false] = "ɪ",
},
-- o
["oío?"] = "iː",
["o"] = {
["r[dln]"] = "oː",
["[nm]"] = {"ɔ", "ʊ", "ʊ"},
["[mN]" .. SYLL] = {"ɔ", "uː", "əu"},
["ng" .. SYLL] = {"ɔ", "uː", "əu"},
[false] = "ɔ",
},
-- u
["uai?"] = "uə",
["uái?"] = "uːaː",
["uío?"] = "iː",
["uói?"] = "uːoː",
["ui"] = {
["r[dln]"] = {"ɪ", "uː", "uː"},
["[LmN]" .. SYLL] = {"ɪ", "iː", "iː"},
[false] = "ɪ",
},
["u"] = {
["r[dln]"] = "uː",
[false] = "ʊ",
},
["ù"] = "ɔ",
-- á
["ái?"] = {"æː", "ɑː", "ɑː"},
-- é
["é[ai]?"] = "eː",
-- í
["ío?"] = "iː",
-- ó
["ói?"] = "oː",
-- ú
["úi?"] = "uː"
}
}
-- consonant substitutions
local cons_rules = {
-- initial mutation forms
["mut"] = {
["bhf"] = "mh", -- eclipsis of f
["bp"] = "b", -- eclipsis of p
["dt"] = "d", -- eclipsis of t
["gc"] = "g", -- eclipsis of c
["mb"] = "m", -- eclipsis of b
["nd"] = "n", -- eclipsis of d
["ng"] = "ŋ", -- eclipsis of g
["ph"] = "f", -- lenition of f
["ts"] = "t", -- lenition of s after 'an'
["l"] = "L", -- /l/ is always fortis word-initially
["n"] = "N", -- /n/ is always fortis word-initially
["r"] = "R" -- /ɾ/ is always fortis word-initially
},
-- general respelling forms
["respell"] = {
["j"] = "dz",
["[kq]"] = "c",
["ll"] = "L", -- respell ll for more efficient parsing
["nn"] = "N", -- respell nn for more efficient parsing
["rr"] = "R", -- respell rr for more efficient parsing
["w"] = "v",
["x"] = "cs",
["y"] = "i",
["n([cg])"] = "ŋ%1", -- n is velarised before velar consonants
["r([dlnst])"] = "R%1", -- r is always broad before coronal consonants
},
-- parse rules (broad, slender)
["parse"] = {
["[bm]h"] = {"w", "v" .. SLND},
["ch"] = {"x", "ç"},
["[dg]h"] = {"ɣ", "j"},
["fh"] = "",
["[st]h"] = "h",
["b"] = {"b" .. BROD, "b" .. SLND},
["c"] = {"k", "c"},
["d"] = {"d̪" .. BROD, "d" .. SLND},
["f"] = {"f" .. BROD, "f" .. SLND},
["g"] = {"ɡ", "ɟ"},
["h"] = "h",
["l"] = {"l" .. BROD, "l" .. SLND},
["L"] = {"l̪" .. BROD, "l̠" .. SLND},
["m"] = {"m" .. BROD, "m" .. SLND},
["n"] = {"n" .. BROD, "n" .. SLND},
["N"] = {"n̪" .. BROD, "n̠" .. SLND},
["ŋ"] = {"ŋ", "ɲ"},
["p"] = {"p" .. BROD, "p" .. SLND},
["r"] = {"ɾ".. BROD, "ɾ" .. SLND},
["R"] = "ɾ" .. BROD,
["s"] = {"s" .. BROD, "ʃ"},
["t"] = {"t̪" .. BROD, "t" .. SLND},
["v"] = {"w", "v" .. SLND},
["z"] = {"z" .. BROD, "ʒ"},
}
}
-- rules applied after parse
local after_parse = {
["brsl"] = {
["^s" .. SLND .. "([fmpɾ])"] = "s" .. BROD .. "%1", -- /s/ is always broad word-initially before /f, m, p, ɾ/
["([dlnɾst]h?)ˠ (" .. CONS .. ")ʲ"] = "%1ʲ %2ʲ", -- broad word-final coronal consonants turn slender before a slender word-initial consonant
["([dlnɾst]h?)ʲ (" .. CONS .. ")ˠ"] = "%1ˠ %2ˠ", -- same vice versa
}
}
-- prioritise longer matches for each table
local function sort_table(tbl)
local sorted_patterns = {}
for pattern in pairs(tbl) do
table.insert(sorted_patterns, pattern)
end
table.sort(sorted_patterns, function(a, b) return #a > #b end)
return sorted_patterns
end
-- sort those tables
local vowels_sorted = sort_table(vowel_rules.vowels)
local mixed_sorted = sort_table(vowel_rules.mixed)
local cons_sorted = sort_table(cons_rules.parse)
-- determine whether following consonant is broad/slender
local function get_brsl(vowel)
return find(BACK, vowel) and "br" or "sl"
end
-- parse phonemes
local function parse(term)
local phones = {}
local i = 1
local brsl = get_brsl(match(term, "[" .. VOWL .. "]") or "")
-- loop over every character until reached word-final token
while sub(term, i, i) ~= "#" do
local pattern_matched = nil
local matched = false
-- match mixed forms first
for _, pattern in ipairs(mixed_sorted) do
local value = vowel_rules.mixed[pattern]
pattern_matched = match(sub(term, i), "^" .. pattern)
if pattern_matched then
matched = true
-- retrieve appropriate dialectal pronunciation
local replacement = type(value) == "table" and value[2] or value
table.insert(phones, replacement)
i = i + len(pattern_matched)
brsl = get_brsl(sub(pattern_matched, -1))
break
end
end
-- match vowel-only forms
if not matched then
for _, pattern in ipairs(vowels_sorted) do
local value = vowel_rules.vowels[pattern]
pattern_matched = match(sub(term, i), "^" .. pattern)
if pattern_matched then
matched = true
local replacement = type(value) == "table" and value[2] or value
if type(value) == "table" then
-- lookahead for consonant(s)
for subpattern, subvalue in pairs(value) do
if subpattern == false or match(sub(term, i + len(pattern_matched)), "^" .. subpattern) then
replacement = type(subvalue) == "table" and subvalue[2] or subvalue
break
end
end
end
table.insert(phones, replacement)
i = i + len(pattern_matched)
brsl = get_brsl(sub(pattern_matched, -1))
break
end
end
end
-- match a consonant
if not matched then
for _, pattern in ipairs(cons_sorted) do
local value = cons_rules.parse[pattern]
pattern_matched = match(sub(term, i), "^" .. pattern)
if pattern_matched then
matched = true
-- apply broad/slender rules to consonant
local replacement = type(value) == "table" and value[brsl == "br" and 1 or 2] or value
table.insert(phones, replacement)
i = i + len(pattern_matched)
break
end
end
end
-- otherwise return error
if not matched then
error("Invalid character at position" .. i .. ": " .. sub(term, i, i))
end
end
return table.concat(phones)
end
-- main export function
function export.toIPA(term)
if type(term) == "table" then
term = term.args[1]
end
-- add word-final token # for parsing and make all text lowercase
term = lower(gsub(term, "[^ ]+", "%1#"))
-- loop over every word in the string
return gsub(term, "[^ ]+", function(word)
-- apply word-initial mutation rules
for k, v in pairs(cons_rules.mut) do
word = gsub(word, "^" .. k, v)
end
-- apply general respelling forms
word = gsub(word, "..?", cons_rules.respell)
-- parse string
word = parse(word)
-- apply further mutation rules
for k, v in pairs(after_parse.brsl) do
word = gsub(word, k, v)
end
return word
end)
end
return export