Module:date et heure

Bonjour, vous êtes venu ici pour chercher la signification du mot Module:date et heure. Dans DICTIOUS, vous trouverez non seulement toutes les significations du dictionnaire pour le mot Module:date et heure, mais vous apprendrez également son étymologie, ses caractéristiques et comment dire Module:date et heure au singulier et au pluriel. Tout ce que vous devez savoir sur le mot Module:date et heure est ici. La définition du mot Module:date et heure vous aidera à être plus précis et correct lorsque vous parlerez ou écrirez vos textes. Connaître la définition deModule:date et heure, ainsi que celles d'autres mots, enrichit votre vocabulaire et vous fournit des ressources linguistiques plus nombreuses et de meilleure qualité.

 Documentation[voir] [modifier] [historique] [purger]

Invoqué dans {{siècle}}.

Voir aussi


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