Invoqué dans {{siècle}}.
La documentation de ce module est générée par le modèle {{Documentation module}}.
Elle est incluse depuis la page Module:date et heure/Documentation. Veuillez placer les catégories sur cette page-là.
Les éditeurs peuvent travailler dans le bac à sable (créer).
Voir les statistiques d'appel depuis le wikicode sur l'outil wstat et les appels depuis d'autres modules.
local m_bases = require('Module:bases')
local m_langs = require('Module:langues')
local m_params = require('Module:paramètres')
local p = {}
-- TODO vérifier le format du nombre /M{0,3}(D?C{1,3}|C?)?(L?X{1,3}|X?)?(V?I{1,4}|I?)?/
--- Convertit un nombre romain en entier.
--- @param romanNumber string Le nombre romain à convertir.
--- @return number L’entier correspondant.
local function fromRoman(romanNumber)
local digitValues = {
= 1,
= 5,
= 10,
= 50,
= 100,
= 500,
= 1000,
}
local n = 0
local prevDigit = 0
for i = 1, mw.ustring.len(romanNumber) do
local digit = digitValues
n = n + digit
-- Cases: IV, IX, XL, XC, etc.
if digit == 5 * prevDigit or digit == 10 * prevDigit then
n = n - 2 * prevDigit
end
prevDigit = digit
end
return n
end
--- Formate un siècle en chiffres romains et y ajoute le "ième" et le "siècle".
--- @param romanNumber string Le siècle en chiffres romains.
--- @return string Le siècle formaté.
local function formatCentury(romanNumber)
--- Met un texte en exposant.
local function superscript(text)
return '<sup style="font-size:83%;line-height:1">' .. text .. '</sup>'
end
local text = mw.ustring.format('<abbr title="%d"><small>%s</small></abbr>', fromRoman(romanNumber), romanNumber)
if romanNumber == 'I' then
text = text .. superscript('er')
else
text = text .. superscript('e')
end
return text .. ' siècle'
end
--- Formate une chaîne contenant au plus un siècle en chiffres romains.
--- @param text string Le texte à formater.
--- @return string Le texte formaté.
local function formatStringContainingCentury(text)
local startIndex, endIndex
-- Recherche de la séquence de chiffres romains suivie d’une ponctuation (%p) ou d’une espace (%s).
-- L’espace ajoutée à la fin sert à prendre en compte la fin de ligne.
startIndex, endIndex = mw.ustring.find(text .. ' ', '+')
-- Si pas trouvé, i et j valent nil
if startIndex then
-- Espace ou ponctuation terminale ne fait pas partie du résultat utile
local s = formatCentury(mw.ustring.sub(text, startIndex, endIndex - 1))
return mw.ustring.sub(text, 1, startIndex - 1) .. s .. mw.ustring.sub(text, endIndex)
else
return text
end
end
--- Formate une chaîne contenant au plus un siècle en chiffres romains.
--- frame.args (string) : Le texte à formater.
--- frame.args (string) : La langue de la section dans laquelle se trouve le modèle {{siècle}}.
--- @return string Le texte formaté.
function p.formate_un_siecle(frame)
local args = m_params.process(frame.args, {
= {},
= { checker = function(value)
return m_langs.get_nom(value) ~= nil
end },
})
local text = args
-- Cas de l’absence de paramètre (un paramètre égal à "?" est traité comme pas de paramètre).
if text == nil or text == '?' then
local categoryName = 'Dates manquantes'
local langCode = args
if langCode == nil or langCode == '' then
categoryName = categoryName .. ' sans langue précisée'
else
local langName = m_langs.get_nom(mw.text.trim(langCode))
categoryName = categoryName .. ' en ' .. langName
end
return 'Siècle à préciser' .. m_bases.fait_categorie_contenu(categoryName)
end
return formatStringContainingCentury(text)
end
return p