« 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 p = {}
Ligne 10 ⟶ 8 :
local PREFIX = 1
local SUFFIX = 2
local
--- 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
else
error("Élément de type
end
end
--- Create a link to the given root.
--- @param root string The word to link to.
--- @param languageName string The language name.
--- @return string The link.
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.
--- @param word string The affix to link to.
--- @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.
--- @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
for _, element in ipairs(elements) do
Ligne 56 ⟶ 117 :
elseif type == SUFFIX then
table.insert(suffixes, element)
elseif type ==
if final == "" then
final = element
Ligne 65 ⟶ 126 :
end
etymology, categories = formatList(etymology, categories, prefixes, languageName, languageCode, PREFIX)
if #prefixes ~= 0 and #roots ~= 0 then
etymology = etymology .. ", "
end
etymology, categories = formatList(etymology, categories, roots, languageName, languageCode, ROOT)
if (#prefixes ~= 0 or #roots ~= 0) and #suffixes ~= 0 then
etymology = etymology .. ", "
end
etymology, categories = formatList(etymology, categories, suffixes, languageName, languageCode, SUFFIX)
etymology = etymology .. " et de la finale " .. formatAffix(final, languageCode)
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, {
|