- This module sandbox lacks a documentation subpage. You may create it.
- Useful links: root page • root page’s subpages • links • transclusions • tested module • user page • user talk page • userspace
This is a private module sandbox of AmazingJus, for his own experimentation. Items in this module may be added and removed at AmazingJus's discretion; do not rely on this module's stability.
local tests = require('Module:UnitTests')
local m_IPA = require('Module:User:AmazingJus/sco')
local link = require("Module:links")
local lang = require("Module:languages").getByCode("gd")
local sc = require("Module:scripts").getByCode("Latn")
local gsub = mw.ustring.gsub
local decomp = mw.ustring.toNFD
local recomp = mw.ustring.toNFC
local u = require("Module:string/char")
local function tag_IPA(IPA)
return '<span class="IPA">' .. IPA .. '</span>'
end
local function input_to_term(input)
-- decompose term from its accents
local term = decomp(input)
-- remove certain punctuation marks and combining accents, excluding grave and acute accents
term = gsub(term, "[%$%^%*_=̂-ͯ]", "") -- FIXME: use unicode codepoints instead
-- replace acute accents with graves
term = gsub(term, u(0x0301), u(0x0300))
-- recompose all accents
return recomp(term)
end
function tests:check_output(term, expected, input, pos, etyl)
if not input then
input, term = term, input_to_term(term)
end
if input == term then
input = nil
end
local actual = input or term
term = link.full_link({ term = term, lang = lang, sc = sc } )
return tests:equals(
term ..
(input and " (input: <code>" .. input .. "</code>)" or "") ..
(pos and " <code>pos=" .. pos .. "</code>" or "") ..
(etyl and " <code>etyl=" .. etyl .. "</code>" or ""),
tag_IPA(m_IPA.toIPA(actual, pos, etyl)),
tag_IPA(expected)
)
end
function tests:test_pron()
local list = {
-- misc
{ "á", "ˈa" },
{ "acras", "ˈaʰkɾəs̪" },
{ "ailp", "ˈalp" },
{ "ailt", "ˈaltʲ" },
{ "aingeal", "ˈaiŋʲɡʲəl̪ˠ" },
{ "aird", "ˈaːɾʃt̪" },
{ "àite", "ˈaːʰtʲə" },
{ "àlainn", "ˈaːl̪ˠɪɲ" },
{ "ann", "ˈaun̪ˠ" },
{ "baile", "ˈpalə" },
{ "bainne", "ˈpaɲə" },
{ "balach", "ˈpal̪ˠəx" },
{ "balla", "ˈpal̪ˠə" },
{ "bann", "ˈpaun̪ˠ" },
{ "barr", "ˈpaːrˠ" },
{ "barra", "ˈparˠə" },
{ "bàta", "ˈpaːʰt̪ə" },
{ "beagan", "ˈpekan" },
{ "bealach", "ˈpjal̪ˠəx" },
{ "bealltainn", "ˈpjaul̪ˠt̪ɪɲ" },
{ "bean", "ˈpɛn" },
{ "beò", "ˈpjɔː" },
{ "bigein", "ˈpikʲəɲ" },
{ "bó", "ˈpoː" },
{ "bòid", "ˈpɔːtʲ" },
{ "borb", "ˈpɔɾɔp" },
{ "bord", "ˈpɔːɾʃt̪" },
{ "bràmar", "ˈpɾaːməɾ" },
{ "brice", "ˈpɾʲiʰkʲə" },
{ "broinn", "ˈpɾəiɲ" },
{ "cadal", "ˈkʰat̪əl̪ˠ" },
{ "caibe", "ˈkʰapə" },
{ "càil", "ˈkʰaːl" },
{ "caill", "ˈkʰaiʎ" },
{ "cailleach", "ˈkʰaʎəx" },
{ "caillte", "ˈkʰaiʎtʲə" },
{ "cainnt", "ˈkʰaiɲtʲ" },
{ "càise", "ˈkʰaːʃə" },
{ "cait", "ˈkʰɛʰtʲ" },
{ "calltainn", "ˈkʰaul̪ˠt̪ɪɲ" },
{ "cam", "ˈkʰaum" },
{ "campa", "ˈkʰaumpə" },
{ "cana", "ˈkʰanə" },
{ "cànanan", "ˈkʰananən", nil, "pl" },
{ "caraich", "ˈkʰaɾɪç" },
{ "caran", "ˈkʰaɾan" },
{ "cas", "ˈkʰas̪" },
{ "casan", "ˈkʰas̪an" },
{ "ceannaich", "ˈkʰʲan̪ˠɪç" },
{ "ceannard", "ˈkʰʲan̪ˠəɾʃt̪" },
{ "cearr", "ˈkʰʲaːrˠ" },
{ "céile", "ˈkʰʲeːlə" },
{ "ceist", "ˈkʰʲeʃtʲ" },
{ "ceòl", "ˈkʰʲɔːl̪ˠ" },
{ "ceu$d", "ˈkʰʲiat̪" },
{ "ceum", "ˈkʰʲeːm" },
{ "ciall", "ˈkʰʲiəl̪ˠ" },
{ "cìoch", "ˈkʰʲiəx" },
{ "cipean", "ˈkʰʲiʰpan" },
{ "cìr", "ˈkʰʲiːɾʲ" },
{ "ciùil", "ˈkʰʲuːl" },
{ "ciurr", "ˈkʰʲuːrˠ" },
{ "cneap", "ˈkʰɾʲɛʰp" },
{ "cneasta", "ˈkʰɾʲes̪t̪ə" },
{ "cnèatag", "ˈkʰɾʲiaʰt̪ak" },
{ "cóig", "ˈkʰoːkʲ" },
{ "coi^leach", "ˈkʰɤləx" },
{ "coi^re", "ˈkʰɤɾʲə" },
{ "coire", "ˈkʰɔɾʲə" },
{ "corc", "ˈkʰɔɾʰk" },
{ "crè", "ˈkʰɾʲɛː" },
{ "creagan", "ˈkʰɾʲekən", nil, "pl" },
{ "cuan", "ˈkʰuan" },
{ "cuilc", "ˈkʰulʰkʲ" },
{ "cuilean", "ˈkʰulan" },
{ "cuine", "ˈkʰuɲə" },
{ "cuip", "ˈkʰuiʰp" },
{ "cuir", "ˈkʰuɾʲ" },
{ "cùis", "ˈkʰuːʃ" },
{ "cuideĭgin", "ˈkʰutʲekʲɪn" },
{ "cum", "ˈkʰuːm" },
{ "cumail", "ˈkʰumal" },
{ "cupa", "ˈkʰuʰpə" },
{ "dé", "ˈtʲeː" },
{ "dèan", "ˈtʲian" },
{ "dearg", "ˈtʲɛɾak" },
{ "deich", "ˈtʲeç" },
{ "deoch", "ˈtʲɔx" },
{ "dia^", "ˈtʲia" },
{ "dìcheall", "ˈtʲiːçəl̪ˠ" },
{ "diù", "ˈtʲuː" },
{ "diùid", "ˈtʲuːtʲ" },
{ "dòchas", "ˈt̪ɔːxəs̪" },
{ "dona", "ˈt̪ɔnə" },
{ "dornan", "ˈt̪ɔːɾnan" },
{ "dorra", "ˈt̪ɔrˠə" },
{ "druim", "ˈt̪ɾɯim" },
{ "duais", "ˈt̪uəʃ" },
{ "duine", "ˈt̪ɯɲə" },
{ "eadar", "ˈet̪əɾ" },
{ "eallach", "ˈjal̪ˠəx" },
{ "earrach", "ˈjarˠəx" },
{ "earrann", "ˈjarˠən̪ˠ" },
{ "eòin", "ˈjɔːɲ" },
{ "eòlas", "ˈjɔːl̪ˠəs̪" },
{ "eu^dail", "ˈeːt̪al" },
{ "fada", "ˈfat̪ə" },
{ "faoileag", "ˈfɯːlak" },
{ "farsaing", "ˈfaɾs̪ɪŋʲɡʲ" },
{ "fear", "ˈfɛɾ" },
{ "fearna", "ˈfjaːɾnə" },
{ "féill", "ˈfeːʎ" },
{ "feòl", "ˈfjɔːl̪ˠ" },
{ "feur", "ˈfiaɾ" },
{ "fionnar", "ˈfjun̪ˠəɾ" },
{ "fionntach", "ˈfjuːn̪ˠt̪əx" },
{ "fios", "ˈfis̪" },
{ "fiùran", "ˈfjuːɾan" },
{ "fliuch", "ˈflux" },
{ "follais", "ˈfɔl̪ˠɪʃ" },
{ "fuirich", "ˈfuɾʲɪç" },
{ "fulang", "ˈful̪ˠəŋɡ" },
{ "gad", "ˈkat̪" },
{ "gafann", "ˈkafən̪ˠ" },
{ "gille", "ˈkʲiʎə" },
{ "gnè", "ˈkɾʲɛː" },
{ "gob", "ˈkop" },
{ "goid", "ˈkɤtʲ" },
{ "greim", "ˈkɾʲeim" },
{ "guib", "ˈkɤp", "goi^b" },
{ "Hearach", "ˈhɛɾəx" },
{ "ionnsaich", "ˈjuːn̪ˠs̪ɪç" },
{ "lachan", "ˈl̪ˠaxən", nil, "pl" },
{ "lainnir", "ˈl̪ˠaɲɪɾʲ" },
{ "le", "le" },
{ "leig", "ˈʎekʲ" },
{ "leum", "ˈʎeːm" },
{ "lice", "ˈʎiʰkʲə" },
{ "lionn", "ˈʎuːn̪ˠ" },
{ "lionntachd", "ˈʎuːn̪ˠt̪əxk" },
{ "lios", "ˈʎis̪" },
{ "litir", "ˈʎiʰtʲɪɾʲ" },
{ "loch", "ˈl̪ˠɔx" },
{ "lochan", "ˈl̪ˠɔxan" },
{ "luchag", "ˈl̪ˠuxak" },
{ "mac", "ˈmaʰk" },
{ "maise", "ˈmaʃə" },
{ "màla", "ˈmaːl̪ˠə" },
{ "maol", "ˈmɯːl̪ˠ" },
{ "meall", "ˈmjaul̪ˠ" },
{ "meòg", "ˈmjɔːk" },
{ "meòir", "ˈmjɔːɾʲ" },
{ "mic", "ˈmiʰkʲ" },
{ "milis", "ˈmilɪʃ" },
{ "mill", "ˈmiːʎ" },
{ "mìltean", "ˈmiːltʲən", nil, "pl" },
{ "mìos", "ˈmiəs̪" },
{ "molta", "ˈmɔl̪ˠt̪ə" },
{ "mucan", "ˈmuʰkən", nil, "pl" },
{ "muinntir", "ˈmɯiɲtʲɪɾʲ" },
{ "mura", "ˈmuɾə" },
{ "murn", "ˈmuːɾn" },
{ "neart", "ˈɲɛɾʃt̪" },
{ "neul", "ˈɲial̪ˠ" },
{ "norrag", "ˈn̪ˠɔrˠak" },
{ "oillt", "ˈəiʎtʲ" },
{ "òir", "ˈɔːɾʲ" },
{ "pài^pear", "ˈpʰɛːʰpəɾ" },
{ "peall", "ˈpʰjaul̪ˠ" },
{ "peann", "ˈpʰjaun̪ˠ" },
{ "peasair", "ˈpʰes̪ɪɾʲ" },
{ "peinnsean", "ˈpʰeiɲʃan" },
{ "post", "ˈpʰɔs̪t̪" },
{ "put", "ˈpʰuʰt̪" },
{ "rinnear", "ˈrˠiɲəɾ" },
{ "rionnag", "ˈrˠun̪ˠak" },
{ "rudeigin", "ˈrˠut̪əkʲɪn" },
{ "sàr", "ˈs̪aːɾ" },
{ "sean", "ˈʃɛn" },
{ "seinneadair", "ˈʃeɲət̪ɪɾʲ" },
{ "seòl", "ˈʃɔːl̪ˠ" },
{ "Seumas", "ˈʃeːməs̪" },
{ "sgia^n", "ˈs̪kʲian" },
{ "sinnsear", "ˈʃiːɲʃəɾ" },
{ "sionnach", "ˈʃun̪ˠəx" },
{ "siùcair", "ˈʃuːʰkɪɾʲ" },
{ "siursach", "ˈʃuːɾs̪əx" },
{ "sràc", "ˈs̪t̪ɾaːʰk" },
{ "strì", "ˈs̪t̪ɾʲiː" },
{ "sùil", "ˈs̪uːl" },
{ "sunndach", "ˈs̪uːn̪ˠt̪əx" },
{ "tasdan", "ˈt̪ʰas̪t̪an" },
{ "teanga", "ˈtʰʲɛŋɡə" },
{ "teannta", "ˈtʰʲaun̪ˠt̪ə" },
{ "teine", "ˈtʰʲenə" },
{ "till", "ˈtʰʲiːʎ" },
{ "tìm", "ˈtʰʲiːm" },
{ "tinn", "ˈtʰʲiːɲ" },
{ "tinneas", "ˈtʰʲiɲəs̪" },
{ "toil", "ˈt̪ʰɔl" },
{ "tolltach", "ˈt̪ʰɔul̪ˠt̪əx" },
{ "tom", "ˈt̪ʰɔum" },
{ "torr", "ˈt̪ʰɔːrˠ" },
{ "treu^n", "ˈt̪ʰɾʲeːn" },
{ "tui$t", "ˈt̪ʰuʰtʲ" },
{ "uaine", "ˈuaɲə" },
{ "ugan", "ˈukan" },
{ "uiseag", "ˈɯʃak" },
{ "uisge", "ˈɯʃkʲə" },
-- lenited combinations
{ "adhbran", "ˈɤːpɾan" },
{ "aghaidh", "ˈɤː.ɪ" },
{ "aibhne", "ˈaivɲə" },
{ "aimhreid", "ˈaivɾʲɪtʲ" },
{ "àmhainn", "ˈaːvɪɲ" },
{ "an-diugh", "ˈəɲˈtʲu" },
{ "aoibhneas", "ˈɯivɲəs̪" },
{ "bacadh", "ˈpaʰkəɣ" },
{ "beatha", "ˈpɛhə" },
{ "bogha", "ˈpo.ə" },
{ "buidhe", "ˈpɯi.ə" },
{ "cabhag", "ˈkʰavak" },
{ "cabhlach", "ˈkʰaul̪ˠəx" },
{ "càineadh", "ˈkʰaːɲəɣ" },
{ "caoimhin", "ˈkʰɯːvɪɲ" },
{ "caoimhneas", "ˈkʰɯivɲəs̪" },
{ "caomh", "ˈkʰɯːv" },
{ "carnadh", "ˈkʰaːɾnəɣ" },
{ "cladhadh", "ˈkʰl̪ˠɤ.əɣ" },
{ "cluinneadh", "ˈkl̪ˠɯɲəɣ" },
{ "cnòthan", "ˈkɾɔː.ən", nil, "pl" },
{ "comhairle", "ˈkʰo.əɾlə" },
{ "cuimhne", "ˈkʰuiɲə" },
{ "cuimhneachadh", "ˈkʰuiɲəxəɣ" },
{ "cuireadh", "ˈkʰuɾʲəɣ" },
{ "dearrsadh", "ˈtʲaːrˠs̪əɣ" },
{ "dhà", "ˈɣaː" },
{ "dhìol", "ˈʝiəl̪ˠ" },
{ "dhìth", "ˈʝiː" },
{ "dhuibh", "ˈɣɯiv" },
{ "dibhe", "ˈtʲivə" },
{ "doimhne", "ˈt̪ɔiɲə" },
{ "doimhneachd", "ˈt̪ɔiɲəxk" },
{ "doirbh", "ˈt̪ɤɾʲɤv" },
{ "dragh", "ˈt̪ɾɤɣ" },
{ "dubh", "ˈt̪u" },
{ "fathan", "ˈfahan" },
{ "feadh", "ˈfjɤɣ" },
{ "fh=athast", "ˈha.əs̪t̪" },
{ "fh=éin", "ˈheːn" },
{ "fhios", "ˈis̪" },
{ "fh=uair", "ˈhuəɾʲ" },
{ "fiughar", "ˈfju.əɾ" },
{ "foghnaidh", "ˈfoːnɪ" },
{ "Gài^dheal", "ˈkɛː.əl̪ˠ" },
{ "gealladh", "ˈkʲal̪ˠəɣ" },
{ "geamhradh", "ˈkʲɛuɾəɣ" },
{ "goibhle", "ˈkɤilə" },
{ "goibhnean", "ˈkɤinən", nil, "pl" },
{ "iarraidh", "ˈiərˠɪ" },
{ "ioghnadh", "ˈiənəɣ" },
{ "iubhar", "ˈju.əɾ" },
{ "ladhran", "ˈl̪ˠɤːɾan" },
{ "lagh", "ˈl̪ˠɤɣ" },
{ "laghail", "ˈl̪ˠɤɣal" },
{ "làimh", "ˈl̪ˠaiv" },
{ "leabaidh", "ˈʎɛpɪ" },
{ "leamhrag", "ˈʎɛuɾak" },
{ "leotha", "ˈlɔ.ə" },
{ "leth", "ˈʎe" },
{ "liath", "ˈʎiə" },
{ "maighdean", "ˈmɤitʲən" },
{ "mholainn", "ˈvɔl̪ˠɪɲ" },
{ "modh", "ˈmɔɣ" },
{ "modhail", "ˈmɔɣal" },
{ "nàbaidh", "ˈn̪ˠaːpɪ" },
{ "nigh", "ˈɲiː" },
{ "nigheann", "ˈɲiː.an̪ˠ" },
{ "odhar", "ˈo.ər" },
{ "oighre", "ˈɤiɾʲə" },
{ "piuthar", "ˈpʰju.əɾ" },
{ "pòsaidh", "ˈpʰɔːs̪ɪ" },
{ "ràmh", "ˈrˠaːv" },
{ "rìbhinn", "ˈrˠiːvɪɲ" },
{ "ro bheò", "ˈrɔ vjɔː" },
{ "ro thinn", "ˈrˠɔ hiːɲ" },
{ "roghnaich", "ˈrˠoːnɪç" },
{ "sàbh", "ˈs̪aːv" },
{ "saighdear", "ˈs̪ɤitʲəɾ" },
{ "samhradh", "ˈs̪auɾəɣ" },
{ "seagh", "ˈʃɤɣ" },
{ "sèimh", "ˈʃɛːv" },
{ "siubhal", "ˈʃu.əl̪ˠ" },
{ "sloighre", "ˈs̪l̪ˠɤiɾʲə" },
{ "snaidhm", "ˈs̪n̪ˠaim" },
{ "strath", "ˈs̪t̪ɾa" },
{ "suidhe", "ˈs̪ɯi.ə" },
{ "teth", "ˈtʰʲe" },
{ "thig", "ˈhikʲ" },
{ "tìodhlaic", "ˈtʰʲiəl̪ˠɪʰkʲ" },
{ "tiugh", "ˈtʰʲu" },
{ "tuagh", "ˈt̪ʰuəɣ" },
{ "tuilleadh", "ˈt̪ʰɯʎəɣ" },
{ "tumadh", "ˈt̪ʰuməɣ" },
{ "ubh", "ˈu" },
-- irregular epenthesis
{ "cal*pa", "ˈkʰal̪ˠapə" },
{ "ean*raich", "ˈɛnaɾɪç" },
{ "for*fhais", "ˈfɔɾɔhɪʃ" },
{ "Glas*chu", "ˈkl̪ˠas̪əxu" },
{ "on*fhadh", "ˈɔnɔhəɣ" },
{ "ul*fhart", "ˈul̪ˠuhəɾʃt̪" },
-- non-initial stress
{ "buntàta", "pən̪ˠˈt̪aːʰt̪ə" },
{ "hăló", "haˈloː" },
-- irregular pronunciations
{ "Aŏnghas", "ˈɯnɯ.əs̪" },
{ "banrigh", "ˈpaun̪ˠrɪ", "bannrigh" },
{ "banrighinn", "ˈpaun̪ˠrɪ.ɪɲ", "bannrighinn" },
{ "bliadhna", "ˈpliən̪ˠə", "bliadhnna" },
{ "bràth", "ˈpɾaːx", "bràch" },
{ "ceangal", "ˈkʲʰɛ.əl̪ˠ", "ceamhal" },
{ "cothrom", "ˈkʰɔrˠəm", "cothrrom" },
-- ...
-- multiword
{ "a a a", "ə‿ə‿ə" },
{ "a dh'aithghearr", "ə‿ˈɣɛçər̪ˠ" },
{ "a fharadh", "arəɣ" },
{ "a h-athair", "ə‿ˈhahɪɾʲ" },
{ "a h-uile", "ə‿ˈxulə", "a ch-uile" },
{ "a laoidh", "ə‿ˈl̪ˠɯj" },
{ "a mhàthair", "ə‿ˈvaːhɪɾʲ" },
{ "a sheòladh", "ə‿ˈhjɔːl̪ˠəɣ" },
{ "air an fhéill", "eɾʲ‿əɲ‿ˈeːʎ" },
{ "air neo", "eɾʲ‿ɲɔː", "air neò" },
{ "an duine agad", "ən̪ˠ‿ˈd̪ɯɲ‿ˈakət̪" },
{ "bainne bainne, bainne", "ˈpaɲə ˈpaɲə | ˈpaɲə" },
{ "bho leac", "vɔ‿lɛʰk" },
{ "bho nàbaidh", "vɔ‿naːpɪ" },
{ "bho phàiste", "vɔ‿faːʃtʲə" },
{ "bho réic", "vɔ‿ɾeːʰkʲ" },
{ "cuid-eigin", "ˈkʰutʲekʲɪn" },
{ "dà bhealltainn", "t̪aː vjaul̪ˠt̪ɪɲ" },
{ "dà leabaidh", "t̪aː ˈlɛpɪ" },
{ "dà mheall", "t̪aː vjaul̪ˠ" },
{ "dà nead", "t̪aː nɛt̪" },
{ "dà pheasair", "t̪aː fes̪ɪɾʲ" },
{ "dà shìl", "t̪aː hiːʎ" },
{ "de shiùcair", "tʲe hjuːʰkɪɾʲ" },
{ "do mhealladh", "t̪ɔ vjal̪ˠəɣ" },
{ "do rùn", "tɔ ˈɾuːn" },
{ "do thaigh", "t̪ə hɤj" },
{ "do thaigh", "t̪ɔ hɤʝ" },
{ "do theaghlach", "t̪ə hjɤːl̪ˠəx" },
{ "do theaghlach", "t̪ɔ hjɔːl̪ˠəx" },
{ "glé shean", "kleː ˈhɛn" },
{ "glé shoilleir", "kleː ˈhɤʎɪɾʲ" },
{ "glé thiugh", "kleː ˈhju" },
{ "gu bràth", "kə‿ˈpɾaːx", "gu bràch" },
{ "mo ghille", "mə ʝiʎə" },
{ "mo ghoc", "mə ɣɔʰk" },
{ "mo nàire", "mɔ naːɾʲɪ" },
{ "mo nighean", "mɔ ni.an" },
{ "mo pheata", "mɔ fɛʰt̪ə" },
{ "mo phiuthar", "mɔ fju.əɾ" },
{ "mo thòn", "mɔ hɔːn" },
{ "ro shalach", "ɾɔ hal̪ˠəx" },
{ "sa pheann", "s̪ə fjaun̪ˠ" },
{ "sa phost", "s̪ə fɔs̪t̪" }
}
self:iterate(list, "check_output")
end
--[[
Additions take this form –
{ "entry name", "ˈIPA" },
{ "", "ˈ" },
or, if you are generating IPA from a respelling of the term –
{ "respelling", "ˈIPA", "ˈentry name" }
{ "", "ˈ", "ˈ" },
Make sure to include the comma, or the module will return an error.
]]--
return tests