« Module:racine-étymologie » : différence entre les versions

Contenu supprimé Contenu ajouté
Intégration sens racines avec Module:racine-étymologie/data-racines
formatage et doc
Ligne 2 :
local m_params = require("Module:paramètres")
local m_langs = require("Module:langues")
 
local racine_list = mw.loadData("Module:racine-étymologie/data-racines")
 
local p = {}
Ligne 10 ⟶ 8 :
local PREFIX = 1
local SUFFIX = 2
local FINALEFINAL = 3
 
--- Get the type of a word element.
--- @param element string A word element.
--- @return string The element’s type, either ROOT, PREFIX, SUFFIX or FINAL.
local function getType(element)
if mw.ustring.match(element, "^.+/$") then
Ligne 20 ⟶ 21 :
return SUFFIX
elseif mw.ustring.match(element, "^-[^-]+$") then
return FINALEFINAL
else
error("Élément de type inconnu inconnu : " .. element)
end
end
 
--- Create a link to the given root.
local function formatRoot(root, langue)
--- @param root string The word to link to.
local formatedRoot = "[[Racine:" .. langue .. "/" .. root .. "|" .. root .. "]]"
--- @param languageName string The language name.
if racine_list[root] ~= nil then
--- @return string The link.
formatedRoot = formatedRoot .. " (« " .. racine_list[root] .. " »)"
local function formatRoot(root, languageName)
local roots = mw.loadData("Module:racine-étymologie/data/roots")
local formatedRoot = mw.ustring.format("[[Racine:%s/%s|%s]]", languageName, root, root)
if roots[root] ~= nil then
formatedRoot = formatedRoot .. mw.ustring.format(" (« %s »)", roots[root])
end
return formatedRoot
end
 
--- Create a link to the given affix and language section.
local function formatWord(word, code)
--- @param word string The affix to link to.
return "[[" .. word .. "#" .. code .. "|" .. word .. "]]"
--- @param languageCode string The language code.
--- @return string The link.
local function formatAffix(word, languageCode)
return mw.ustring.format("[[%s#%s|%s]]", word, languageCode, word)
end
 
--- Format a list of word elements of a given type.
function p._generateEtymology(elements, code)
--- @param etymology string The current etymology text to append to.
--- @param categories string The categories to append to.
--- @param list table The list of elements to format.
--- @param languageName string The name of the language.
--- @param languageCode string The code of the language.
--- @param type number The type of the elements, either ROOT, PREFIX or SUFFIX.
--- @return table A table containing the updated etymology and categories.
local function formatList(etymology, categories, list, languageName, languageCode, type)
local types = {
[PREFIX] = { "du préfixe", "des préfixes", "préfixés avec" },
[SUFFIX] = { "du suffixe", "des suffixes", "suffixés avec" },
[ROOT] = { "de la racine", "des racines", "comportant la racine" },
}
local singular, plural, category = unpack(types[type])
 
local function formatItem(item)
if type == ROOT then
return formatRoot(item, languageName)
else
return formatAffix(item, languageCode)
end
end
 
if #list == 1 then
etymology = etymology .. " " .. singular .. " " .. formatItem(list[1])
categories = categories .. mw.ustring.format("[[Catégorie:Mots en %s %s %s]]", languageName, category, list[1])
elseif #list > 1 then
etymology = etymology .. " " .. plural .. " "
local i = 1
while i <= #list do
if i ~= #list then
etymology = etymology .. formatItem(list[i])
if i ~= #list - 1 then
etymology = etymology .. ", "
end
else
etymology = etymology .. " et " .. formatItem(list[i])
end
categories = categories .. mw.ustring.format("[[Catégorie:Mots en %s %s %s]]", languageName, category, list[i])
i = i + 1
end
end
 
return etymology, categories
end
 
--- Generate the etymology for the given word elements and language code.
--- @param elements table The word elements.
--- @param languageCode string The language code.
--- @return string The formatted etymology.
function p._generateEtymology(elements, languageCode)
local etymology = "Composé"
local roots = {}
Ligne 45 ⟶ 106 :
local final = ""
local categories = ""
local languagelanguageName = m_langs.get_nom(codelanguageCode)
 
for _, element in ipairs(elements) do
Ligne 56 ⟶ 117 :
elseif type == SUFFIX then
table.insert(suffixes, element)
elseif type == FINALEFINAL then
if final == "" then
final = element
Ligne 65 ⟶ 126 :
end
 
etymology, categories = formatList(etymology, categories, prefixes, languageName, languageCode, PREFIX)
-- Gestion des préfixes
if #prefixes == 1 then
etymology = etymology .. " du préfixe " .. formatWord(prefixes[1], code)
categories = categories .. "[[Catégorie:Mots en " .. language .. " préfixés avec " .. prefixes[1] .. "]]"
elseif #prefixes > 1 then
etymology = etymology .. " des préfixes "
local i = 1
while i <= #prefixes do
if i ~= #prefixes then
etymology = etymology .. formatWord(prefixes[i], code)
if i ~= #prefixes - 1 then
etymology = etymology .. ", "
end
else
etymology = etymology .. " et " .. formatWord(prefixes[i], language)
end
categories = categories .. "[[Catégorie:Mots en " .. language .. " préfixés avec " .. prefixes[i] .. "]]"
i = i + 1
end
end
 
if #prefixes ~= 0 and #roots ~= 0 then
etymology = etymology .. ", "
end
 
etymology, categories = formatList(etymology, categories, roots, languageName, languageCode, ROOT)
-- Gestion des racines
if #roots == 1 then
etymology = etymology .. " de la racine " .. formatRoot(roots[1], language)
categories = categories .. "[[Catégorie:Mots en " .. language .. " comportant la racine " .. roots[1] .. "]]"
elseif #roots > 1 then
etymology = etymology .. " des racines "
local i = 1
while i <= #roots do
if i ~= #roots then
etymology = etymology .. formatRoot(roots[i], language)
if i ~= #roots - 1 then
etymology = etymology .. ", "
end
else
etymology = etymology .. " et " .. formatRoot(roots[i], language)
end
categories = categories .. "[[Catégorie:Mots en " .. language .. " comportant la racine " .. roots[i] .. "]]"
i = i + 1
end
end
 
if (#prefixes ~= 0 or #roots ~= 0) and #suffixes ~= 0 then
etymology = etymology .. ", "
end
 
etymology, categories = formatList(etymology, categories, suffixes, languageName, languageCode, SUFFIX)
-- Gestion des suffixes
if #suffixes == 1 then
etymology = etymology .. " du suffixe " .. formatWord(suffixes[1], code)
categories = categories .. "[[Catégorie:Mots en " .. language .. " suffixés avec " .. suffixes[1] .. "]]"
elseif #suffixes > 1 then
etymology = etymology .. " des suffixes "
local i = 1
while i <= #suffixes do
if i ~= #suffixes then
etymology = etymology .. formatWord(suffixes[i], code)
if i ~= #suffixes - 1 then
etymology = etymology .. ", "
end
else
etymology = etymology .. " et " .. formatWord(suffixes[i], code)
end
categories = categories .. "[[Catégorie:Mots en " .. language .. " suffixés avec " .. suffixes[i] .. "]]"
i = i + 1
end
end
 
etymology = etymology .. " et de la finale " .. formatAffix(final, languageCode)
-- Gestion de la finale
etymology = etymology .. " et de la finale " .. formatWord(final, code)
 
return etymology .. (m_bases.page_principale() and categories or "")
end
 
--- Generates an etymology for an Esperanto word.
--- frame.args[1] (string): The language code.
--- parent.args (list of strings): The word elements (roots, affixes and final).
--- @return string The formatted etymology.
function p.generateEtymology(frame)
local langCode = m_params.process(frame.args, {