Module:types de mots

La documentation pour ce module peut être créée à Module:types de mots/doc

-- Page de test : Utilisateur:Darkdadaah/Test:Sections
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