Moduulin Fr:Format käyttöohje
Tämä sivu on kopio. Tätä ohjetta muokataan muokkaamalla suomenkielisessä Wikipediassa olevaa alkuperäistä versiota jonka muutokset kopioituvat automaattisesti tälle sivulle. Tämä moduuli on osa ranskankielisestä Wikipediasta kopioitua Wikidata ja Interface Wikidata -moduulikokonaisuutta (ks. ohjeet ja esimerkit). Listauksen kaikista tähän liittyvistä moduuleista löydät Ranskankielisen Wikipedian Wikidata-moduulit -sivulta.
|
-- Module dédié au formatage de texte
local fun = {}
fun.i18n = {
= "miljoona", -- fr "million"
= "miljardi" -- fr "milliard"
}
-- Mise en forme des nombres
-- Mime le comportement du mot magique formatnum, sans paramètre R
function fun.formatnum(frame)
return fun.do_formatnum(frame:getParent().args)
end
function fun.do_formatnum(arguments)
local result = ""
local number = ""
-- Vérification du paramètre
if(type(tonumber(arguments)) == "number") then
number = arguments
-- Extraction des parties du nombre
local _, _, minus, intPart, point, fracPart = string.find(number,"^(?)0*(%d*)(\.?)(%d*)$")
-- Signe moins
result = result .. minus
-- Partie entière
if(#intPart > 0) then
local index = #intPart
for digit in string.gfind(intPart, "%d") do
result = result .. digit
-- Espace tous les trois chiffres
if((index % 3) == 1 and index > 1) then
result = result .. " "
end
index = index - 1
end
else
-- Ajout d'un zéro si la partie décimale est vide
result = result .. "0"
end
-- Virgule
if(point ~= "") then
result = result .. ","
end
-- Partie fractionnaire
result = result .. fracPart
else
result = (arguments or "")
end
return result
end
-- Mise en forme des nombres avec unité
-- Basé sur Modèle:Unité, mais sans limitation de nombre d'arguments
function fun.unite(frame)
return fun.do_unite(frame:getParent().args)
end
-- Réalisation de la fonction précédente
function fun.do_unite(arguments)
local result = ""
-- Formatage de la valeur principale
if(arguments ~= nil) then
result = fun.do_formatnum{arguments}
end
-- Formatage de la puissance de 10 éventuelle
if(arguments.e ~= nil) then
result = result .. fun.do_x10{arguments.e}
end
-- Parcours des unités et exposants
local index = 2
while(arguments ~= nil) do
if (index == 2) then
-- Première unité : espace insécable
result = result .. " "
else
-- Unités suivantes : point médian
result = result .. "⋅"
end
-- Affichage de l'unité
result = result .. arguments
-- Exposant éventuel
if(arguments ~= nil) then
result = result .. fun.do_expo{arguments}
end
index = index + 2
end
-- Non-retour à la ligne
result = "<span class=\"nowrap\">" .. result .. "</span>"
return result
end
-- Mise en forme des exposants
-- Basé sur Modèle:Exp
function fun.expo(frame)
return fun.do_expo(frame:getParent().args)
end
-- Réalisation de la fonction précédente
function fun.do_expo(arguments)
local result = ""
if(arguments ~= nil) then
result = result .. arguments
end
result = "<sup>" .. result .. "</sup>"
return result
end
-- Mise en forme des puissances de 10
-- Basé sur Modèle:x10
function fun.x10(frame)
return fun.do_x10(frame:getParent().args)
end
-- Réalisation de la fonction précédente
function fun.do_x10(arguments)
local result = "×10" .. fun.do_expo{arguments}
return result
end
-- Affichage d'une valeur en parsecs
-- Basé sur Modèle:Parsec
function fun.parsec(frame)
return fun.do_parsec(frame:getParent().args)
end
-- Réalisation de la fonction précédente
function fun.do_parsec(arguments)
local result = ""
-- Unités disponibles
local units = {
pc = {"]", = {1, ""}, = {1, ""}},
kpc = {"]", = {1000, ""}, = {0.001, fun.i18n }},
mpc = {"]", = {1, fun.i18n }, = {0.001, fun.i18n}},
gpc = {"]", = {1, fun.i18n}, = {1, fun.i18n}}
}
-- Valeur principale
local resultVal = fun.do_formatnum{(arguments or "")}
-- Unité utilisée
local unitData = (units] or units.pc)
if(arguments.marge ~= nil or arguments.sup ~= nil) then
-- Marge éventuelle
if(arguments.marge ~= nil) then
local resultMarge = "" ;
if(tonumber(arguments.marge) ~= nil) then
resultMarge = "<small>±" .. arguments.marge .. "</small>"
else
resultMarge = arguments.marge
end
resultVal = resultVal .. resultMarge
end
-- Deuxième valeur éventuelle
if(arguments.sup ~= nil) then
resultVal = resultVal .. " à " .. arguments.sup
end
else
-- "Environ" si c'est une valeur brute seule
result = result .. "environ "
end
-- Affichage de la valeur
result = result .. fun.do_unite{resultVal,unitData} .. " "
-- Affichage de la conversion en années-lumière
local numVal = tonumber(arguments)
if(numVal ~= nil) then
-- On utilise un autre ordre de grandeur si la valeur est trop grande
local isBigVal = (numVal*3.2616 >= 1000)
-- Valeur en années-lumière
local alVal = numVal*unitData*3.2616
-- Première valeur
result = result .. "(∼" .. fun.do_formatnum{fun.do_chiffresSignificatifs{alVal,3}} .. " "
if(arguments.sup ~= nil and tonumber(arguments.sup) ~= nil) then
-- Deuxième valeur éventuelle
alVal = tonumber(arguments.sup)*unitData*3.2616
result = result .. "à " .. fun.do_formatnum{fun.do_chiffresSignificatifs{alVal,3}} .. " "
end
-- La dernière valeur affichée (alVal) entraîne-t-elle un pluriel ?
local unitFull = ""
if(unitData ~= "") then -- Il faut avoir un mot à mettre au pluriel
if(alVal >= 1.995) then
unitFull = "s"
end
unitFull = unitData .. unitFull .. " d'"
end
-- Affichage de l'unité
result = result .. unitFull .. "])" ;
end
return result
end
-- Affichage d'un nombre avec chiffres significatifs
function fun.chiffresSignificatifs(frame)
return fun.do_chiffresSignificatifs(frame:getParent().args)
end
-- Réalisation de la fonction précédente
-- Attention, renvoie une chaîne
-- Usage : fun.do_chiffresSignificatifs{valeur, nb de chiffres significatifs}
function fun.do_chiffresSignificatifs(arguments)
local result = ""
local value, digits = tonumber(arguments), tonumber(arguments)
if(value ~= nil and digits ~= nil) then
local logVal = math.ceil(math.log10(value))
local mult = 10^(digits-logVal)
local rounded = math.floor(value*mult+0.5)/mult
result = string.format("%." .. tostring(math.max(digits-logVal,0)) .. "f", rounded)
end
return result
end
-- Ajoute des hyperliens aux mots séparés par des virgules, comme ceux des propriétés Wikidata
function fun.ajouterLiens(frame)
local arguments = frame:getParent().args
local mots = mw.text.split(arguments, ",")
local liens = table.concat(mots, "]], [[")
if liens ~= nil and liens ~= "" then
return "]"
else
return ""
end
end
return fun