Modulo:Formatnum retrocompatibile
Aspetto
Istruzioni per l'uso
Questo è un modulo scritto in Lua. Le istruzioni che seguono sono contenute nella sottopagina Modulo:Formatnum retrocompatibile/man (modifica · cronologia)
Sandbox: Modulo:Formatnum retrocompatibile/sandbox (modifica · cronologia) · Sottopagine: lista · Test: Modulo:Formatnum retrocompatibile/test (modifica · cronologia · Esegui)
Questo è un modulo scritto in Lua. Le istruzioni che seguono sono contenute nella sottopagina Modulo:Formatnum retrocompatibile/man (modifica · cronologia)
Sandbox: Modulo:Formatnum retrocompatibile/sandbox (modifica · cronologia) · Sottopagine: lista · Test: Modulo:Formatnum retrocompatibile/test (modifica · cronologia · Esegui)
Questo modulo serve a formattare i numeri nel parametro in input. Il risultato è molto simile alla funzione parser formatnum, che il modulo utilizza internamente, con le seguenti differenze:
- Se l'argomento è un numero avente solo virgole come separatore, viene lasciato inalterato;
- Se l'argomento è un numero avente solo spazi ed evenutalmente punti come separatori, converte gli spazi in spazi indivisibili (come separatori delle migliaia);
- In caso di intervalli numerici (ad es. "123-456"), il trattino non viene convertito in un segno meno (U+2212).
Il modulo va utilizzato solamente nei parametri dei template che si aspettano un numero da formattare, ma a cui molte voci passano un valore non strettamente numerico. Poiché passare argomenti non numerici a formatnum è deprecato, la pagina verrebbe categorizzata in Categoria:Pagine con argomenti di formatnum non numerici. Il modulo cerca di evitarlo, aggiungendo invece delle categorie di tracciamento più specifiche che permettono di capire meglio come viene usato il parametro:
- Categoria:Modulo formatnum usato con virgole
- Categoria:Modulo formatnum usato con spazi
- Categoria:Modulo formatnum usato con intervallo
- Categoria:Modulo formatnum usato con testo prima del numero
- Categoria:Modulo formatnum usato con testo e intervallo
- Categoria:Modulo formatnum usato con qualcosa di imprevisto, per tutti i casi non coperti sopra; in questo caso viene aggiunta anche Categoria:Pagine con argomenti di formatnum non numerici.
local p = {}
local function add_cat(cat)
cat = '[[Categoria:' .. cat .. ']]'
return mw.title.getCurrentTitle().namespace == 0 and cat or ''
end
function p.main(frame)
local str = frame.args[1]
if str == '' then
-- Stringa vuota, ad esempio in caso di parametro opzionale etc.
return ''
elseif mw.ustring.match( str, "^%-?[%d.]+$" ) then
-- Caso semplice, un numero nel formato corretto
return p._formatnum( str )
elseif mw.ustring.match( str, "^%-?[%d.,]+,[%d.,]+$" ) then
-- Numero con virgole, lasciamo inalterato
return str .. add_cat('Modulo formatnum usato con virgole')
elseif mw.ustring.match( str, "^%-?%d+ [%d. ]+$" ) then
-- Numero con spazi, li interpretiamo come separatori delle migliaia
return p._formatnum( mw.ustring.gsub( str, " ", "" ) ) .. add_cat('Modulo formatnum usato con spazi')
elseif mw.ustring.match( str, "^%-?[%d.]+ *[-–] *%-?[%d.]+$" ) or mw.ustring.match( str, "^[dD]a %-?[%d.]+ a %-?[%d.]+$" ) then
-- Intervallo numerico, formattiamo solo i numeri escludendo eventuali trattino e segni meno
return ( mw.ustring.gsub( str, "[%d.]+", p._formatnum ) ) .. add_cat('Modulo formatnum usato con intervallo')
elseif mw.ustring.match( str, "^%a+%.? %-?[%d.]+$" ) then
-- Parola seguita dal numero (ad es. "circa 123"), formattiamo il numero
return ( mw.ustring.gsub( str, "%-?[%d.]+", p._formatnum ) ) .. add_cat('Modulo formatnum usato con testo prima del numero')
elseif mw.ustring.match( str, "^%a+ %-?[%d.]+ *[-–] *[%d.]+$" ) then
-- Parola seguita da intervallo, formattiamo i numeri escludendo il trattino
return ( mw.ustring.gsub( str, "[%d.]+", p._formatnum ) ) .. add_cat('Modulo formatnum usato con testo e intervallo')
elseif mw.ustring.match( str, "^%-?[%d.]+ *\127'\"`UNIQ%w*%-+ref%-%w*%-QINU`\"'\127$" ) then
-- Numero seguito da nota, possiamo applicare il formatnum perché ignora le note
return p._formatnum( str )
else
-- Tutto il resto. Usiamo formatnum direttamente
return p._formatnum( str ) .. add_cat('Modulo formatnum usato con qualcosa di imprevisto')
end
end
function p._formatnum( str )
return mw.getCurrentFrame():preprocess( "{{formatnum:" .. str .. "}}" )
end
return p