Module:siwa-noun: Difference between revisions

No edit summary
No edit summary
Line 15: Line 15:


local PAGENAME = mw.title.getCurrentTitle().text
local PAGENAME = mw.title.getCurrentTitle().text
--[[local vowels = "[aeiouyůõảẻỉỏủỷę̊]"
local HOOK = u(0x0309) -- COMBINING HOOK ABOVE ̉
 
local vowels = "[aeiouyůõảẻỉỏủỷęȯởử]"
local consonants = "[mpbvntdsṡʦʨʥŋɲcɟħðrṁṅḥkgġhłƛɬḍ]"
local consonants = "[mpbvntdsṡʦʨʥŋɲcɟħðrṁṅḥkgġhłƛɬḍ]"


local function dedigraphize(word)
local function dedigraphicize(word)
for digraph, repl in pairs(m_com.digraphs_to_single) do
for digraph, repl in pairs(m_com.digraphs_to_single) do
word = gsub(word, digraph, repl)
word = gsub(word, digraph, repl)
end
end
return word
return word
end
end


function syll_count(word)
local function syll_count(word)
word = dedigraphicize(word)
local pattern = "(" .. consonants .. "?" .. vowels .. "+ː?" .. consonants .. "*)"
local pattern = "(" .. consonants .. "?" .. vowels .. "+ː?" .. consonants .. "*)"
local syllable, n = gsub(word, pattern, "%1")
local _, n = gsub(word, pattern, "%1")
syllable = match(syllable, pattern)
return syllable, n
return n
end
end


local function stressed_components(word)
local function detect_quality(word, stressed)
local pattern = consonants .. "?(" .. vowels .. "+ː?)(" .. consonants .. "*)"
local n = syll_count(word)
local pattern2 = consonants .. "?" .. vowels .. "+ː?" .. consonants .. "*(.)"
if match(stressed, vowels .. vowels .. vowels .. "?") or match(mw.ustring.toNFD(stressed), HOOK) or n>=3 then
local v, c = match(word, pattern)
if c == "d" or c == "ġ" or c == "r" or c == "ɲ" or c == "ħ" then
c = c .. match(word, pattern2)
end
return v, c
end
 
local function detect_quality(word)
local stressed, n = syll_count(word)
if match(stressed, vowels .. vowels .. vowels .. "?") or match(stressed, "ː") or n>=3 then
return "w" -- weak nouns
return "w" -- weak nouns
elseif (match(stressed, vowels .. vowels .. vowels .. "?") or match(stressed, "ː")) and n<3 then
elseif (match(stressed, vowels .. vowels .. vowels .. "?") or match(mw.ustring.toNFD(stressed), HOOK)) and n<3 then
return "l" -- long nouns  
return "l" -- long nouns  
else return "s" -- strong nouns
else return "s" -- strong nouns
Line 53: Line 46:
end
end


local function detect_decl(word, gender, quality)
local function detect_decl(word, stressed)
local stressed = syll_count(word)
for og, repl in pairs(m_com.stressed_vowels) do
local tonic_vowel = stressed_components(word)
local decl = gsub(stressed, og, repl)
for vowel, d in pairs(stressed_vowels) do
end
tonic_vowel = gsub(tonic_vowel, vowel, d)
end
return decl
if gender and quality then
if find(word, vowels .. "$") then
local decl = gender .. "-" .. tonic_vowel .. "-" .. quality
return decl
else
return gender .. "-" .. sub(word, -1) .. "-" .. tonic_vowel
end
end
end
end


Line 77: Line 62:
local i, j = find(word, c)
local i, j = find(word, c)
return sub(word, 1, i-1) .. lenited .. sub(word, j+1)
return sub(word, 1, i-1) .. lenited .. sub(word, j+1)
end
]]
local function detect_decl(word, sv) -- stressed vowel
return m_com.stressed_vowels[sv] or "a"
end
end