Aller au contenu

Amṣada:types de mots

Seg Wikasegzawal
Ce module renvoie le nom standardisé des types de mots.

Ce module contient trois fonctions exportables avec les trois mêmes paramètres : un nom de type de mot ('nom' par exemple), et deux booléens pour savoir s'il s'agit d'une locution et d'une flexion.

get_nom_singulier(code, locution, flexion)
Renvoi le nom standardisé au singulier du type de mot correspondant, s'il existe.
get_nom_pluriel(code, locution, flexion)
Renvoi le nom standardisé au pluriel du type de mot correspondant, s'il existe. Utile pour les catégories.
get_abrev(code, locution, flexion)
Renvoi la version abrégée du type de mot. Utile pour les ancres vers les sections de mot.

La définition des types de mots standardisés et des alias autorisés est écrite dans Module:types de mots/data.

Les types de mot autorisés sont affichés grâce aux fonctions de Module:types de mots/analyse.

info Documentation du Amṣada:types de mots : v · d · m · h.

Catégorie:Modules Lua documentés


b = require('Module:bases')

local p = {}

-- Charge la table une fois pour toutes pour ce module
p.types = mw.loadData('Module:types de mots/data')

-- S'agit-il d'un type de mot reconnu (ou d'un alias) ?
function p.is_type(nom)
    if nom == nil then return nil end
    
    nom = b.lcfirst(nom)
    
    if (p.types['alias'][nom] or p.types['texte'][nom]) then
        return true
    else
        return false
    end
end

-- S'agit-il d'un alias?
function p.is_alias(nom)
    if nom == nil then return nil end
    
    nom = b.lcfirst(nom)
    
    if (p.types['alias'][nomb]) then
        return true
    else
        return false
    end
end

-- Crée un nom de flexion selon que le nom commence par une voyelle ou pas
function flexion_de(nom, pluriel)
    local flexnom = ''
    
    -- Forme: pluriel ou singulier
    local forme = 'forme'
    if (pluriel) then forme = 'formes' end
    
    if b.is_elidable(nom) then
        flexnom = forme .. ' d’' .. nom
    else
        flexnom = forme .. ' de ' .. nom
    end
    return flexnom
end

-- Fonction de récupération du nom standard à partir de son code et de ses propriétés
function p.get_nom(code, locution, flexion, pluriel)
    if (code == nil) then return nil end
    
    -- Pour chercher dans les listes, le texte doit être en minuscule et sans tirets
    code = b.lcfirst(code);
    
    -- Alias?
    if (p.types['alias'][code]) then
        code = p.types['alias'][code]
    end
    
    local idlocution = 'locution'
    local idmot = 'mot'
    if (pluriel) then
        idlocution = 'locution_pl'
        idmot = 'mot_pl'
    end
    
    -- Type défini?
    if (p.types['texte'][code] ~= nil) then
        local nom = ''
        if (locution and p.types['texte'][code][idlocution] ~= nil) then
            nom = p.types['texte'][code][idlocution]
        else
            nom = p.types['texte'][code][idmot]
        end
        
        -- Flexion
        if (flexion) then
            nom = flexion_de(nom, pluriel)
        end
        
        return nom;
    else
        return 'type indéfini'
    end
    return nil
end

function p.get_nom_singulier(code, locution, flexion)
    pluriel = false
    return p.get_nom(code, locution, flexion, pluriel)
end

function p.get_nom_pluriel(code, locution, flexion)
    pluriel = true
    return p.get_nom(code, locution, flexion, pluriel)
end

-- Fonction qui créé une version abrégée du nom
function p.get_abrev(nom, locution, flexion)
	if nom == nil then return 'indef' end
    nom = b.lcfirst(nom)
	
    -- Alias?
   if p.types['alias'][nom] then
    	nom = p.types['alias'][nom]
    end
    
    if (p.types['texte'][nom]) then
    	local abrev = p.types['texte'][nom]['abrev']
        if (flexion)  then abrev = 'flex-' .. abrev end
        
        return abrev
    else
        return 'indef'
    end
end

return p