Module:kilta-pron: Difference between revisions
Jump to navigation
Jump to search
No edit summary |
No edit summary |
||
Line 73: | Line 73: | ||
function export.crux(term) | function export.crux(term) | ||
term = mw.ustring.lower(term) | term = mw.ustring.lower(term) | ||
local phonemic | local phonemic = term | ||
for _, rule in ipairs(phonemic_rules) do | for _, rule in ipairs(phonemic_rules) do | ||
phonemic = gsub( | phonemic = gsub(phonemic, rule[1], rule[2]) | ||
end | end | ||
phonemic = syllabicize(phonemic) | phonemic = syllabicize(phonemic) | ||
phonetic = phonemic | |||
--[[for _, rule in ipairs(phonetic_rules) do | --[[for _, rule in ipairs(phonetic_rules) do | ||
phonetic = gsub( | phonetic = gsub(phonetic, rule[1], rule[2]) | ||
end]] | end]] | ||
Revision as of 19:24, 20 April 2024
Documentation for this module may be created at Module:kilta-pron/doc
local sub = mw.ustring.sub
local find = mw.ustring.find
local gmatch = mw.ustring.gmatch
local gsub = mw.ustring.gsub
local match = mw.ustring.match
local u = mw.ustring.char
local split = mw.text.split
local gsplit = mw.text.gsplit
local A = u(0x0301) -- COMBINING ACUTE
local D = u(0x0308) -- COMBINING DIAERESIS
local lang = require("Module:languages").getByCode("kilta")
local m_IPA = require("Module:IPA")
local consonants = "[pβmtsnɾlʧkxʷʞƕː]"
local vowels = "[aeiouəꜷꜽ]"
local export = {}
local function same(foo, bar)
foo, bar = mw.ustring.toNFD(foo), mw.ustring.toNFD(bar) -- decompose diacritics
foo, bar = match(foo, "^."), match(bar, "^.") -- sort out the letter
return foo == bar and true or false
end
local function syllabicize(term)
local syllable = "(" .. consonants .. "*" .. vowels .. "ː" .. consonants .. "-)"
term = term:gsub(syllable, ".%1.")
term = term:gsub("%.%.([nlɾs])(" .. consonants .. ")", "%1.%2")
term = term:gsub("^%.", "")
term = term:gsub("%.$", "")
term = term:gsub("%.+", ".")
return term
end
local deacuter = {
["á"] = "a", ["é"] = "e", ["í"] = "i", ["ó"] = "o", ["ú"] = "u", ["ý"] = "y",
}
local phonemic_rules = {
{"%-", ""}, {"hw", "ƕ"}, {"kw", "ʞ"}, {"ch", "ʧ"}, {"au", "ꜷ"}, {"ai", "ꜽ"},
{"v", "β"}, {"r", "ɾ"}, {"h", "x"},
{"ë", "ə"}, {"ëë+", "əː"}, {"([áéíóú])", function(v) return deacuter[v] end},
{"kʞ", "ʞː"}, {"(" .. consonants .. ")(" .. consonants .. ")",
function(c1,c2) return same(c1,c2) and c1 .. "ː" or c1 .. c2 end},
}
local phonetic_rules = {
{"á", "a"}, {"", ""}, {"", ""}, {"", ""},
{"", ""}, {"", ""}, {"", ""}, {"", ""}, {"", ""},
{"", ""}, {"", ""}, {"", ""}, {"", ""}, {"", ""},
{"", ""}, {"", ""}, {"", ""}, {"", ""}, {"", ""},
{"", ""}, {"", ""}, {"", ""}, {"", ""}, {"", ""},
{"", ""}, {"", ""}, {"", ""}, {"", ""}, {"", ""},
{"", ""}, {"", ""}, {"", ""}, {"", ""}, {"", ""},
{"", ""}, {"", ""}, {"", ""}, {"", ""}, {"", ""},
{"", ""}, {"", ""}, {"", ""}, {"", ""}, {"", ""},
{"", ""}, {"", ""}, {"", ""}, {"", ""}, {"", ""},
}
local last_rules = {
{"ʞ", "kʷ"},
{"ƕ", "xʷ"},
{"ʧ", "t͡ʃ"},
{"v", "β"},
}
function export.crux(term)
term = mw.ustring.lower(term)
local phonemic = term
for _, rule in ipairs(phonemic_rules) do
phonemic = gsub(phonemic, rule[1], rule[2])
end
phonemic = syllabicize(phonemic)
phonetic = phonemic
--[[for _, rule in ipairs(phonetic_rules) do
phonetic = gsub(phonetic, rule[1], rule[2])
end]]
for _, rule in ipairs(last_rules) do
phonemic = gsub(phonemic, rule[1], rule[2])
phonetic = gsub(phonetic, rule[1], rule[2])
end
return phonemic, phonetic
end
function separate_word(term)
local phonemic, phonetic = {}, {}
for word in gsplit(term, " ") do
local phonemicEach, phoneticEach = export.crux(word)
table.insert(phonemic, phonemicEach)
table.insert(phonetic, phoneticEach)
end
return table.concat(phonemic, " "), table.concat(phonetic, " ")
end
function export.show(frame)
local parent_args = frame:getParent().args
local params = {
[1] = { default = mw.title.getCurrentTitle().nsText == 'Template' and "kílta" or mw.title.getCurrentTitle().text },
}
local args = require("Module:parameters").process(parent_args, params)
local term = args[1]
local phonemic, phonetic = separate_word(term)
local IPA_args = {{pron = '/' .. phonemic .. '/'}, {pron = '[' .. phonetic .. ']'}}
return "* " .. m_IPA.format_IPA_full(lang, IPA_args)
end
return export