Module:Hoo-ipac: Difference between revisions

RoTM94 (talk | contribs)
No edit summary
RoTM94 (talk | contribs)
No edit summary
 
(28 intermediate revisions by the same user not shown)
Line 16: Line 16:
local export = {}
local export = {}


local cons = "[pbmʋstdnlkgŋʁɬjhχ]"
local cons = "[pbfmʋstdnlkgɡŋʁɬjhχ]"
local vow = "[aiuɛeɔoʉə]"
local vow = "[ɑaiuɛeɔoʉɟə]"
 
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 translit = {
local translit = {
{"v", "ʋ"}, {"ng", "ŋ"}, {"nk", "ŋk"}, {"nk", "ŋk"}, {"r", "ʁ"}, {"ł", "ɬ"},
{"æ", "ææ"}, {"v", "ʋ"}, {"ng", "ŋ"}, {"nk", "ŋk"}, {"nk", "ŋk"}, {"r", "ʁ"}, {"ł", "ɬ"},
{"aa", "aː"}, {"ee", "eː"}, {"ii", "iː"}, {"oo", "oː"}, {"uu", "uː"}, {"åå", "oː"}, {"ææ", "eː"},
{"aa", "ɑː"}, {"ii", "iː"}, {"uu", "uː"}, {"åå", "oː"}, {"ææ", "eː"},
{"au", "aʊ"}, {"ai", "aj"}, {"å", "u"}, {"æ", "i"}, {"eʁ", "ɛʁ"}, {"e", "ə"}, {"o", "ɔ"}
{"au", "aʊ"}, {"ai", "aj"}, {"åʁ", "ɟʁ"}, {"å", "u"}, {"æ", "i"}, {"eʁ", "ɛʁ"}, {"e", "ə"}, {"o", "ɔ"}, {"əɛ", "eː"}, {"əə", "eː"}, {"ɔɔ", "oː"}
}
}


local rules = {
local rules = {
{"(" .. cons .. ")(" .. cons .. ")", function(c1,c2) return same(c1,c2) and c1 .. "ː" or c1 .. c2 end}
{"ɟʁ" ..vow, function(v1) return "uʁ"..v1 end}, {"uʁɟʁ", "uʁ"}, {"ɟʁ", "ɔʁ"}, --dealing with å
{"g(" ..vow..")", function(v1) return "ɡ"..v1 end}, {"g", "ɣ"}, {"ɣɣ", "ɡː"},
{"([ptk])("..vow..")", function(c,v) return c.."ʰ"..v end},
    {"(" .. cons .. ")(" .. cons .. ")", function(c1,c2) return same(c1,c2) and c1 .. "ː" or c1 .. c2 end}, --gemination, should go at end
    {"(" .. cons .. ")(" .. cons .. ")(" .. cons .. ")", function(c1,c2,c3) return same(c2,c3) and c1..c2.. "ː" or c1 .. c2 .. c3 end}, --gemination, should go at end
    {"([fʋsnlŋʁɬχ])([pbtdkg])("..cons..")", function(c1,c2,c3) return c1..c2.."⁽ᵊ⁾"..c3 end},
{"([fʋsnlŋʁɬχ])("..cons..")$", function(c1,c2) return c1..c2.."⁽ᵊ⁾" end},
}
}


function export.crux(term)
local postrules = {
{"ːʰ", "ː"},
{"("..cons..")("..cons..")ʰ", function(c1,c2) return c1..c2.."" end},
}
 
local makrules = {
{"ʰ", ""}, {"eː", "ɛː"}, {"oː", "ɔː"}, {"ːʰ", "ː"}, {"ɑ", "a"},
{"ʁ([ptkfsnɬə])", function(c1) return "χ"..c1 end},
}
 
local kalrules = {
{"ɡ", "ɣ"}, {"ɣː", "ɡː"}, {"u", "ʉ"},
{"i", "ɪ"}, {"ɪː", "iː"},
{"("..cons..")ː(" ..vow..")", function(c1, v1) return c1.."q"..v1 end},
{"("..vow..")ː", function(v1) return v1.."q" end}, {"ː", ""}, {"q", "ː"}
}
 
function export.crux(term, dialect)
term = mw.ustring.lower(term)
term = mw.ustring.lower(term)
for _, rule in ipairs(first_rules) do
for _, rule in ipairs(translit) do
term = gsub(term, rule[1], rule[2])
term = gsub(term, rule[1], rule[2])
end
end
term = syllabify(term)
for _, rule in ipairs(rules) do
term = gsub(term, rule[1], rule[2])
end
for _, rule in ipairs(phonetic_rules) do
if dialect == "mak" then
term = gsub(term, rule[1], rule[2])
for _, rule in ipairs(makrules) do
term = gsub(term, rule[1], rule[2])
end
elseif dialect == "kal" then
for _, rule in ipairs(kalrules) do
term = gsub(term, rule[1], rule[2])
end
else
for _, rule in ipairs(postrules) do
term = gsub(term, rule[1], rule[2])
end
end
end
Line 46: Line 87:
return term
return term
end
function separate_word(term, dialect)
local result = {}
for word in gsplit(term, " ") do
table.insert(result, export.crux(word, dialect))
end
return table.concat(result, " ")
end
end


Line 51: Line 103:
local parent_args = frame:getParent().args
local parent_args = frame:getParent().args
local params = {
local params = {
[1] = { default = mw.title.getCurrentTitle().nsText == 'Template' and "ankyu" or mw.title.getCurrentTitle().text },
[1] = { default = mw.title.getCurrentTitle().nsText == 'Template' and "hoofnisk ull" or mw.title.getCurrentTitle().text },
}
}
local args = require("Module:parameters").process(parent_args, params)
local args = require("Module:parameters").process(parent_args, params)
Line 57: Line 109:


local IPA_args = {}
local IPA_args = {}
local phonetic = separate_word(term)
local mIPA_args = {}
local kIPA_args = {}
local phonetic = separate_word(term, "standard")
local mphonetic = separate_word(term, "mak")
local kphonetic = separate_word(term, "kal")
table.insert(IPA_args, {pron = '[' .. phonetic .. ']'})
table.insert(IPA_args, {pron = '[' .. phonetic .. ']'})
table.insert(mIPA_args, {pron = '[' .. mphonetic .. ']'})
table.insert(kIPA_args, {pron = '[' .. kphonetic .. ']'})


return "* " .. m_IPA.format_IPA_full({lang = lang, items = IPA_args})
return  
"* (''Standard'') " .. m_IPA.format_IPA_full({lang = lang, items = IPA_args})..
"\n* (''Maaknuna'') " .. m_IPA.format_IPA_full({lang = lang, items = mIPA_args})..
"\n* (''Kalaalann'') " .. m_IPA.format_IPA_full({lang = lang, items = kIPA_args})
end
end