La documentation pour ce module peut être créée à Module:Conversion/doc
local math_mod = require "Module:Math" local formatnum = require "Module:Format".do_formatnum local params = require "Module:Conversion/Données" local defaultlang = 'fr' local p = {} local i18n = { invalidunit = 'Page avec une unité de mesure non supportée' } local function numString(val, rounding, displayformat) -- transforme un nombre en chaîne if rounding then val = math_mod._round( val, rounding ) end val = formatnum({tostring(val)}) if displayformat and displayformat.suffix then val = val .. suffix end return val end local function convert(value, sourceunitdata, targetunitdata) -- convertir une valeur numérique en son équivalent dans une autre unité de mesure if not value then return nil end if type(value) ~= 'number' then return error("bad datatype: " .. type(value)) end if (not sourceunitdata) or (not targetunitdata) then return value end return value * sourceunitdata[2] / targetunitdata[2] end function p.displayvalue(val, sourceunit, displayformat, errhandling) -- affiche une valeur formatée) -- préparation des paramètres local numval = tonumber(val) if not numval then -- si les données sont inhabituelles, on laisse la fonction appelante se débrouiller return val end if not displayformat or type(displayformat) ~= 'table' then displayformat = {} end local showunit, showlink, rounding, targetunit = displayformat.showunit, displayformat.showlink, displayformat.rounding, displayformat.targetunit -- récupération des donnnées concernant les unités if sourceunit and not targetunit then targetunit = sourceunit end local sourceunitdata, targetunitdata = sourceunit, targetunit if type(sourceunitdata) ~= 'table' then sourceunitdata = params.units[sourceunit] or params.units[params.redirects[sourceunit]] end if type(targetunitdata) ~= 'table' then targetunitdata = params.units[targetunit] or params.units[params.redirects[targetunit]] end if sourceunitdata and targetunitdata and (targetunitdata[1] ~= sourceunitdata[1]) then return error("measurement unit mismatch: " .. sourceunitdata[1] .. ' and ' .. targetunitdata[1] ) end -- partie numérique local failure = false if (sourceunit and targetunit) and (sourceunit ~= targetunit) then numval = convert(numval, sourceunitdata, targetunitdata) if (not targetunitdata) or (not targetunitdata[1]) or (not sourceunitdata) or (not sourceunitdata[1]) then failure = true end end local maintenancestr = "" if failure then maintenancestr = maintenancestr .. '[[Category:' .. i18n.invalidunit .. ']]' end if displayformat.raw == true then -- nombre non formaté chaîne convertible en nombre sauf si catégorie de maintenance return (tostring(numval) or "") .. maintenancestr end local numstr = numString(numval, rounding) -- affichage de l'unité local unitstr, link if not targetunitdata then -- pour éviter les bugs targetunitdata = {} end if showunit == 'long' then -- format long = montrer l'unité en entier if (numval or 0) > 1 then unitstr = targetunitdata[7] else unitstr = targetunitdata[6] end elseif showunit then unitstr = targetunitdata[3] end -- showlink if type( displayformat.showlink == 'string') then --liens personnalisés link = displayformat.showlink elseif displayformat.showlink == true then -- liens vers l'article dédié link = targetunitdata[5] end if unitstr and link then unitstr = '[[' .. link .. '|' .. unitstr .. ']]' end return numstr .. ' ' .. (unitstr or '') .. maintenancestr end function p.display(frame) local args = frame.args local value, origunit, targetunit = args[1], args[2], args[3] local rounding = args.rounding local showlink, showunit = args.showlink, args.showunit if showunit == 'true' then showunit = true end if showlink == 'true' then showlink = true end displayformat = {showunit = showunit, showlink = showlink, rounding = rounding, targetunit = targetunit} return p.displayvalue(value, origunit, displayformat) end return p