Module:qlu-pron: Difference between revisions

No edit summary
Tag: Reverted
No edit summary
Tag: Manual revert
Line 73: Line 73:


local function syllabify(word)
local function syllabify(word)
local syll_pats = {
word = gsub(word, "(ː)(" .. vowels .. ")", "%1·%2")
{"(ː)(" .. vowels .. ")", "%1·%2"},
word = gsub(word, "(" .. consonants .. "*)(" .. vowels .. "*)", "%1%2·")
{"(" .. consonants .. "*)(" .. vowels .. "*)", "%1%2·"},
word = gsub(word, "··", "·"); word = gsub(word, "·$", ""); word = gsub(word, "^·", "")
{"··", "·"}, {"·$", ""}, {"^·", ""},
word = gsub(word, "·(" .. consonants .. ")(" .. consonants .. ")(" .. vowels .. "*)", "%1·%2%3")
{"·(" .. consonants .. ")(" .. consonants .. ")(" .. vowels .. "*)", "%1·%2%3"},
word = gsub(word, "·(" .. consonants .. ")$", "%1")
{"·(" .. consonants .. ")$", "%1"}, {"·(" .. consonants .. ")·", "%1·"},
word = gsub(word, "·(" .. consonants .. ")·", "%1·")
}
word = gsub(word, "(" .. consonants .. ")·(" .. consonants .. ")([pbmvstdnrɾlkɡŋhxçʤʧçx])", "%1%2·%3")
word = gsub(word, "a·ʊ", "aʊ·")
for _, rule in ipairs(syll_pats) do
word = gsub(word, rule[1], rule[2])
end
local syllables = split(word, "·");
local syllables = split(word, "·");
Line 89: Line 86:
if #syllables == 1 then return table.concat(syllables) end -- account for monosyllables
if #syllables == 1 then return table.concat(syllables) end -- account for monosyllables
for i, syllable in ipairs(syllables) do
for i, syllable in ipairs(syllables) do
if match(syllable, "[áéíóú]") then -- if the user inputted manual stress, ignore all the rest
if match(syllable, "[áéíóúý]") then -- if the user inputted manual stress, ignore all the rest
table.insert(syllables, i, "ˌ")
table.insert(syllables, i, "ˈ")
return table.concat(syllables, "·")
end
end
end
end