Module:date et heure/bac à sable

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

La documentation pour ce module peut être créée à Module:date et heure/bac à sable/Documentation

b = require('Module:bases')
l = require('Module:langues')

local p={}

-- Met un texte en exposant.
function exposant(txt)
    return '<sup style="font-size:83%;line-height:1">'..txt..'</sup>'
end

-- formate un siècle en chiffres romains, et y ajoute le "ième" et le "siècle".
function siecle(cs)
    local texte = '<small>'..cs..'</small>'
    if cs=='I' then
        texte = texte..exposant('er')
    else
        texte = texte..exposant('e')
    end
    return texte..' siècle'
end

-- Formatage d'une chaine contenant une (au plus) date en chiffres romains.
function formate_chaine_contenant_un_siecle(txt)
    local i, j, s
    -- recherche séquence de chiffres romains suivie d'une ponctuation %p ou d'une espace %s
    -- l'espace ajoutée à txt sert à accepter aussi la fin de chaine comme telle
    i,j = mw.ustring.find(txt..' ', '[IVX]+[%s%p]')
    -- si pas trouvé, i et j valent nil
    if i then
        j = j-1 --espace ou ponctuation terminale ne fait pas partie du résultat utile
        s = siecle( mw.ustring.sub(txt,i,j) )
        if (i==1) then --contournement de bug (?) de lua
            return s..mw.ustring.sub(txt,j+1)
        else
            return mw.ustring.sub(txt,1,i-1)..s..mw.ustring.sub(txt,j+1)
        end
    else
        return txt --pas de date, pas de chocolat
    end
end

-----------------------------------------------------------------------------------------
-- Formatage d'une chaine contenant une (au plus) date en chiffres romains.
-- fonction publique, utilise le paramètre du #invoke (et non de l'appelant du modèle)
-----------------------------------------------------------------------------------------
function p.formate_un_siecle(frame)
    local txt = frame.args[1]

    -- cas de l'absence de paramètre (un paramètre égal à "?" est traité comme pas de paramètre)
    if (txt=="" or txt=="?") then
        category_name = 'Dates manquantes '
        local lang_code = frame.args["lang"]
        if lang_code == nil or lang_code == "" then
            category_name = category_name .. 'sans langue précisée'
        else
            local lang_name = l.get_nom(mw.text.trim(lang_code))
            category_name = category_name .. 'en ' .. lang_name
        end
        return "Siècle à préciser" .. b.fait_categorie_contenu(category_name)
    end

    return formate_chaine_contenant_un_siecle(txt)
end

-----------------------------------------------------------------------------------------
-- version lua de [[modéle:siècle]] (actuellement pas en ligne)
-- fonction publique, utilise les paramètres :frame:getParent()
-- et donc ne peut être appelé que depuis un modèle
-----------------------------------------------------------------------------------------
function p.modele_siecle(frame)
    local args = frame:getParent().args
    local txt1 = args[1]
    local txt2 = args[2]
end

-- publication des fonctions publiques
return p