Module:Gl-plural
-- Gets the plural of Galician nouns and adjectives.
local accented_letters = {'á', 'é', 'í', 'ó', 'ú'}
local remove_accent = {['á']='a', ['é']='e', ['í']='i', ['ó']='o', ['ú']='u'}
local vowels = {'a', 'e', 'i', 'o', 'u', 'á', 'é', 'í', 'ó', 'ú'}
local export = {}
function export.show(frame)
local args = frame:getParent().args
return export.get_plural(args[1])
end
-- Returns a singular’s plural if it can be safely guessed, and an empty string
-- otherwise.
function export.get_plural(lemma)
if (has_space_or_hyphen(lemma)) then return nil end
local suf3 = suffix(lemma, 3);
local pre3 = prefix(lemma, 3);
if (suf3 == "bel") then
return pre3 .. "beis"
end
local suf2 = suffix(lemma, 2);
local pre2 = prefix(lemma, 2);
local suf1 = suffix(lemma, 1);
local pre1 = prefix(lemma, 1);
if (suf1 == "l") then
if (has_multiple_vowels(lemma) and not is_accented(pre2)) then
if (suf2 == "il") then
return pre2 .. "is"
else
return pre1 .. "is"
end
else
return lemma .. "es"
end
end
if (suf1 == "z") then return pre1 .. "ces" end
if (suf1 == "r") then return lemma .. "es" end
if (suf1 == "x") then return lemma end
if (is_vowel(suf1) or suf1 == "n") then return lemma .. "s" end
if (suf1 == "s") then
local penult = mw.ustring.sub(suf2, 1, 1)
if (not is_vowel(penult)) then return lemma end
local antepenult = mw.ustring.sub(suf3, 1, 1)
if (is_vowel(antepenult)) then return lemma .. "es" end
if (is_accented(penult)) then
return pre2 .. remove_accent[penult] .. "ses"
else
return lemma
end
end
return nil
end
function suffix(word, length)
return mw.ustring.sub(word, mw.ustring.len(word) - length + 1)
end
function prefix(word, suf_length)
return mw.ustring.sub(word, 1, mw.ustring.len(word) - suf_length)
end
-- returns whether it has ´ or ^
function is_accented(word)
return word_has_letter(word, accented_letters)
end
function is_vowel(letter)
return word_has_letter(letter, vowels)
end
function has_space_or_hyphen(word)
return mw.ustring.find(word, " ") or mw.ustring.find(word, "-")
end
function word_has_letter(word, array)
for c = 1, table.getn(array) do
if (mw.ustring.find(word, array[c])) then
return true
end
end
return false
end
function has_multiple_vowels(word)
local vowels = 0;
for c = 1, mw.ustring.len(word) do
if (is_vowel(mw.ustring.sub(word, c, c))) then
vowels = vowels + 1
if (vowels >= 2) then return true end
end
end
return false
end
return export
Content Disclaimer
Informasi ini disarikan dari Wikipedia dan disajikan kembali untuk tujuan edukasi. Konten tersedia di bawah lisensi CC BY-SA 3.0. Kami tidak bertanggung jawab atas ketidakakuratan data yang bersumber dari kontribusi publik tersebut.
- The information displayed on this website is sourced in part or in whole from Wikipedia and has been adapted for the purpose of restating it. We strive to provide accurate and relevant information, however:
- There is no guarantee of absolute accuracy. Wikipedia is an open, collaborative project that can be edited by anyone, so information is subject to change.
- It is not intended to constitute professional advice. The content displayed is for informational and educational purposes only. For important decisions (e.g., medical, legal, or financial), please consult a professional.
- Content copyright. Wikipedia is licensed under the Creative Commons Attribution-ShareAlike License (CC BY-SA). This means that content may be reused with appropriate attribution and shared under a similar license.
- Responsible use. Any risk arising from the use of information from this website is entirely the responsibility of the user.