Module:smi-pro-common
Jump to navigation
Jump to search
- The following documentation is located at Module:smi-pro-common/documentation. [edit] Categories were auto-generated by Module:module categorization. [edit]
- Useful links: subpage list • links • transclusions • testcases • sandbox
local export = {}
-- Split the word into syllables of C(C)V(V) shape
function export.split_syllables(word)
local syllables = {}
local remainder = word
while remainder ~= "" do
local syll = ""
if mw.ustring.find(remainder, "^([^aeiouāēōë%-]+)") then
syll = syll .. mw.ustring.match(remainder, "^([^aeiouāēōë%-]+)")
remainder = mw.ustring.gsub(remainder, "^([^aeiouāēōë%-]+)", "")
end
if mw.ustring.find(remainder, "^([aeiouāēōë%-]+)") then
syll = syll .. mw.ustring.match(remainder, "^([aeiouāēōë%-]+)")
remainder = mw.ustring.gsub(remainder, "^([aeiouāēōë%-]+)", "")
end
table.insert(syllables, syll)
end
-- Assume that suffixes are attached to words of at least two syllables.
if mw.ustring.find(word, "^%-") then
table.insert(syllables, 1, "")
end
return syllables
end
-- Apply gradation to a word
function export.apply_gradation(word)
local syllables = export.split_syllables(word)
for i, syll in ipairs(syllables) do
-- The first and last consonant do not gradate
if i > 1 then
-- Does the next syllable begin with more than one consonant, or does it contain no vowels (final consonant)?
if i < #syllables and (mw.ustring.find(syllables[i+1], "^[^aeiouāēōë][^aeiouāēōë]") or not mw.ustring.find(syllables[i+1], "[aeiouāēōë]")) then
syll = mw.ustring.gsub(syll, "([^aeiouāēōë])", "%1" .. mw.ustring.char(0x032F))
end
end
syllables[i] = syll
end
return table.concat(syllables, "")
end
return export