Questa pagina è protetta dallo spostamento
Questa pagina è protetta

Modulo:Conversione

Da Wikipedia, l'enciclopedia libera.
Vai alla navigazione Vai alla ricerca

Modulo per convertire un valore numerico da una unità di misura a un'altra.

Ha una sottopagina di configurazione:Modulo:Conversione/Configurazione.


--[[
* Modulo per effettuare la conversione di unità di misura.
*
* Ampiamente modificato a partire da:
* http://fr.wikipedia.org/w/index.php?title=Module:Conversion&oldid=118515752
]]--

require('strict')

localcfg=mw.loadData('Modulo:Conversione/Configurazione')
localp={}

-- Ritorna il numero arrotondato al numero di cifre decimali richiesto
-- http://lua-users.org/wiki/SimpleRound
localfunctionround(num,idp)
localmult=10^(idpor0)
returnmath.floor(num*mult+0.5)/mult
end

localfunctiongetUnit(val,targetunitdata,args)
localret,link,space

ifargs.showunitthen
ret=targetunitdata.symbol
elseifargs.showunitlongthen
-- unità per esteso
ret=val>1andtargetunitdata.name2ortargetunitdata.name1
end

ifargs.showunitlinkthen
link=targetunitdata.link
end

space=(args.showunitandtargetunitdata.nospace)and''or' '

returnspace..(linkand'[['..link..'|'..ret..']]'orret)
end

-- Ritorna il valore convertito alla unità di misura e alle opzioni specificate
functionp._main(strval,sourceunit,targetunit,args)
localval,sourceunitdata,targetunitdata,cat

val=tonumber(strval)
-- se non è un numero ritorna la stringa non modificata
ifnotvalthen
returnstrval
end
ifnotargsthen
args={}
end

ifsourceunitandnottargetunitthen
targetunit=sourceunit
end
sourceunitdata=cfg.units[sourceunit]orcfg.units[cfg.alias[sourceunit]]
targetunitdata=cfg.units[targetunit]orcfg.units[cfg.alias[targetunit]]
ifsourceunitdataandtargetunitdatathen
ifsourceunitdata.type~=targetunitdata.typethen
error('unità di misura incompatibili: '..sourceunitdata.type..' e '..targetunitdata.type)
end
ifsourceunitdata==targetunitdatathen
-- nothing
elseifsourceunitdata.type=='temperature'then
val=(val-sourceunitdata.offset)*sourceunitdata.scale
val=val/targetunitdata.scale+targetunitdata.offset
else
val=val*sourceunitdata.scale/targetunitdata.scale
end
else
cat='[[Categoria:Pagine con unità di misura non supportata]]'
end

-- arrotondamento
ifargs.roundingthen
val=round(val,args.rounding)
end

-- formatnum
ifargs.formatnumthen
val=mw.language.getContentLanguage():formatNum(val)
end

-- unità di misura
iftargetunitdataand(args.showunitorargs.showunitlong)then
val=val..getUnit(val,targetunitdata,args)
end

returnval..(cator'')
end

-- Entry-point per {{#invoke:Conversione|main|...}}
functionp.main(frame)
localargs=frame.args
returnp._main(args[1],args[2],args[3],args)
end

returnp