Module:qlu-pron: Difference between revisions

No edit summary
No edit summary
 
(4 intermediate revisions by the same user not shown)
Line 78: Line 78:
local phonetic_rules = {
local phonetic_rules = {
-- Gorgia Toscana
-- Gorgia Toscana
{"(" .. vowels .. "·)p(" .. vowels .. ")", "%1ɸ%2"},
{"(" .. vowels .. "·)p(" .. vowels .. ")", "%1ɸ%2"}, {"p$", "ɸ"},
{"(" .. vowels .. "·)b(" .. vowels .. ")", "%1β%2"},
{"(" .. vowels .. "·)b(" .. vowels .. ")", "%1β%2"}, {"b$", "β"},
{"(" .. vowels .. "·)t(" .. vowels .. ")", "%1θ%2"},
{"(" .. vowels .. "·)t(" .. vowels .. ")", "%1θ%2"}, {"t$", "θ"},
{"(" .. vowels .. "·)d(" .. vowels .. ")", "%1ð%2"},
{"(" .. vowels .. "·)d(" .. vowels .. ")", "%1ð%2"}, {"d$", "ð"},
{"(" .. vowels .. "·)k(" .. vowels .. ")", "%1x%2"},
{"(" .. vowels .. "·)k(" .. vowels .. ")", "%1x%2"}, {"k$", "x"},
{"(" .. vowels .. "·)g(" .. vowels .. ")", "%1ɣ%2"},
{"(" .. vowels .. "·)g(" .. vowels .. ")", "%1ɣ%2"}, {"g$", "ɣ"},
{"I", "i"},
{"I", "i"},
Line 147: Line 147:


local paulistan_rules = {
local paulistan_rules = {
{"^([ˈˌ]?)s", "%1es"}, {"r", "ɾ"}, {"d·([ʣʤ])", "·%1"}, {"t·([ʦʧ])", "·%1"}, {"[ʧʦ]", "s"}, {"ʤ", "ʒ"},   
{"^([ˈˌ]?)s(" .. consonants .. ")", "es%1%2"}, {"r", "ɾ"}, {"d·([ʣʤ])", "·%1"}, {"t·([ʦʧ])", "·%1"}, {"[ʧʦ]", "s"}, {"ʤ", "ʒ"},   
{"(" .. consonants .. ")([ˈ·ˌ])%1", "%2%1"}, {"ð", "d"}, {"d([iĩjɪ])", "ʤ%1"}, {"t([iĩjɪ])", "ʧ%1"},
{"(" .. consonants .. ")([ˈ·ˌ])%1", "%2%1"}, {"ð", "d"}, {"d([iĩjɪ])", "ʤ%1"}, {"t([iĩjɪ])", "ʧ%1"},
{"^([ˈˌ]?)ɾ", "%1ʁ"}, {"ɾ([ˈˌ·]?)(" .. consonants .. ")", "ɹ%1%2"}, {"([pbtdkg])$", "%1ĭ"},
{"^([ˈˌ]?)ɾ", "%1ʁ"}, {"ɾ([ˈˌ·]?)(" .. consonants .. ")", "ɹ%1%2"}, {"([pbtdkg])$", "%1ĭ"},
Line 170: Line 170:
}
}


local function syllabify(word)
local function syllabify(word, no_stress)
local clusters = m_table.listToSet({
local clusters = m_table.listToSet({
"s[ptʈkfɸ]", "z[bdgβʤmnlr]",
"s[ptʈkfɸ]", "z[bdgβʤmnlr]",
Line 207: Line 207:
local syllables = split(word, "·");
local syllables = split(word, "·");
if #syllables == 1 then return dediacv(table.concat(syllables), "[" .. c.acute .. c.circ .. "]") end -- account for monosyllables
if no_stress or (#syllables == 1 and not match(word, "[" .. c.acute .. c.circ .. "]")) then
return dediacv(word, "[" .. c.acute .. c.circ .. "]")
end
local first_stress = "[âêîôû]"
local first_stress = "[âêîôû]"
Line 236: Line 238:
end
end


function export.crux(term, outputs)
function export.crux(term, no_stress, outputs)
local ret, dialects = {}, {}
local ret, dialects = {}, {}
term = mw.ustring.lower(term)
term = mw.ustring.lower(term)
Line 244: Line 246:
end
end
term = syllabify(term)
term = syllabify(term, no_stress)
term = term:gsub("·?([ˈˌ])·?", "%1")
term = term:gsub("·?([ˈˌ])·?", "%1")
term = term:gsub("ˌˌ", "ˌ")
term = term:gsub("ˌˌ", "ˌ")
Line 323: Line 325:




function separate_word(term)
function separate_word(term, no_stress)
     local phonemic, phonetic, dialects = {}, {}, {}
     local phonemic, phonetic, dialects = {}, {}, {}
local m, t, d = "", "", {}
local m, t, d = "", "", {}
Line 329: Line 331:
if match(term, " ") then
if match(term, " ") then
    for word in gsplit(term, " ") do
    for word in gsplit(term, " ") do
        local ret, d = export.crux(word)
        local ret, d = export.crux(word, no_stress)
        m = ret[1]; t = ret[2]
        m = ret[1]; t = ret[2]
         
         
Line 341: Line 343:
    end
    end
     else
     else
     return export.crux(term)
     return export.crux(term, no_stress)
     end
     end


Line 351: Line 353:
     local params = {
     local params = {
         [1] = { default = mw.title.getCurrentTitle().nsText == 'Template' and "agghiu" or mw.title.getCurrentTitle().text },
         [1] = { default = mw.title.getCurrentTitle().nsText == 'Template' and "agghiu" or mw.title.getCurrentTitle().text },
        ["rs"] = {type = 'boolean'},
     }
     }
     local args = require("Module:parameters").process(parent_args, params)
     local args = require("Module:parameters").process(parent_args, params)
     local term = args[1]
     local term = args[1]; local no_stress = args.rs
local ret, dialects = separate_word(term)
local ret, dialects = separate_word(term, no_stress)
     local phonemic = ret[1]; local phonetic = ret[2]
     local phonemic = ret[1]; local phonetic = ret[2]