Module:section article/analyse

Définition, traduction, prononciation, anagramme et synonyme sur le dictionnaire libre Wiktionnaire.

La documentation pour ce module peut être créée à Module:section article/analyse/Documentation

-- Test liste : [[Discussion module:section article/analyse]]

b = require("Module:bases")

local titres = mw.loadData('Module:section article/data')

local p = {}

function _get_alias(code)
    aliases = {}
    for code, valeur in pairs(titres['alias']) do
        if (aliases[valeur] == nil) then aliases[valeur]={} end
        table.insert(aliases[valeur], code)
    end
    return aliases
end

function _code_de_section(section, tab)
    -- Section d'un niveau défini ?
    local niveau = tonumber(tab['niveau'])
    local egals = '=====' -- défaut si non précisé
    if niveau ~= nil then
        if niveau == 3 then
            egals = '==='
        elseif niveau == 4 then
            egals = '===='
        end
    end
    
    local ligne_code = '<code>' .. egals .. ' {{S&#124;' .. section .. '}} ' .. egals .. '</code>'
    return ligne_code
end

function p.sort_titres(tab1, tab2)
	local t1 = titres['texte'][tab1]
	local t2 = titres['texte'][tab2]
	
    if t1['niveau']..'' < t2['niveau']..'' then
        return true
    elseif t1['nom']..'' < t2['nom']..'' then
        return false
    end
end

-- Fonction qui affiche toutes les sections possibles
-- Fonction qui affiche tous les types de mot pris en compte
function p.affiche_sections()
    
    -- Récupère les clés
    local keyset={}
    local n=0
 
    for k,v in pairs(titres['texte']) do
      n=n+1
      keyset[n]=k
    end
 
    local tableaut = {"Cette liste est générée automatiquement à partir de [[Module:section article/data]].\r\n\r\nIl y a actuellement " .. n .. " titres de section dans cette liste.\r\nLa liste peut être triée."}
    
    -- Construit un tableau pour afficher les types
    entete = {'Nom', 'Code', 'Alias possibles', 'Niveau', 'Sous-section de'}
    table.insert(tableaut, b.tableau_entete(entete))
    
    -- Table inversée des alias
    aliases = _get_alias(titres['alias'])
    
    -- Tri par titre
    table.sort(keyset, p.sort_titres)
 
    for k, code in ipairs(keyset) do
    	local tab = titres['texte'][code]
        local alias = aliases and aliases[code] or {}
        table.insert(alias, 1, "'''" .. code .. "'''")
        local texte_alias = table.concat(alias, '<br />')
        local code = _code_de_section(code, tab)
        local texte_parent = ((tab['parent'] and titres['texte'][tab['parent']] and titres['texte'][tab['parent']]['nom']) and titres['texte'][tab['parent']]['nom'] or tab['parent'])
        local valeurs = {tab['nom'] or '-', code or '-', texte_alias or '-', tab['niveau'] or '-', texte_parent or '-'}
        table.insert(tableaut, b.tableau_ligne(valeurs))
    end
    table.insert(tableaut, b.tableau_fin())
    
    return table.concat(tableaut, "\r\n")
end

function p.affiche_code_remplacement_python()
    local resultat = {}
    
    local nombre = 0
    for a,b in pairs(titres['texte']) do nombre = nombre+1 end
    
    table.insert(resultat, '<pre>')
    
    -- Table inversée des alias
    aliases = _get_alias(titres['alias'])
    
    for code, t in pairs(titres['texte']) do
        local alias = aliases and aliases[code] or {}
        if #alias > 0 then
            local texte_alias = table.concat(alias, '|')
            local replacements = '(u"\\{\\{S\\|(' .. texte_alias .. ')\\}\\}", r"{{S|' .. code .. '}}"),';
            table.insert(resultat, replacements)
        end
    end
    table.insert(resultat, '</pre>')
    
    return table.concat(resultat, "\r\n")
end

return p