Module:smi-pro-common

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