Questo modulo serve a fare delle prove...


-- Questo modulo si chiama ModuloBruno ed è stato salvato nell'ambiente principale dei moduli
-- Tutti i moduli Lua su Wikipedia devono iniziare definendo una variabile di tipo tabella che contenga
-- le funzioni accessibili dall'esterno. Può avere qualunque nome e contenere anche altri dati

--[[

Questo modulo serve a fornire l'accesso alle funzioni stringa base.

La maggior parte delle funzioni di questo modulo possono essere invocate con
parametri con nome, senza nome o con un misto di entrambi. Quando vengono usati
parametri con nome il software di Mediawiki rimuoverà ogni spazio iniziale o finale
dal parametro. A seconda dell'uso che si vuole fare della funzione può essere
vantaggioso conservare oppure rimuovere questi spazi.

Opzioni globali
    ignore_errors: se settato a 'true' o 1, ogni condizione di errore ritornerà una stringa vuota
                   piuttosto che un messaggio di errore.

    error_category: nel caso si verifichi un errore è il nome di una categoria da includere
                    insieme al messaggio di errore. La categoria di default
                    [Categoria:Errori del Module String]. (TODO:verificare)

    no_category: Se settato a 'true' o 1, non verranno aggiunte categorie in caso di errore.

Unit tests per questo modulo sono disponibili a Module:String/test.

Diverse funzioni fanno uso di pattern Lua, questi sono una forma di espressione regolare, per
maggiori informazioni vedi:
* http://www.lua.org/manual/5.1/manual.html#5.4.1
* http://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual#Patterns
* http://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual#Ustring_patterns

]]

local str = {}

--[[
len

Questa funzione ritorna la lunghezza di una stringa.

Uso:
{{#invoke:String|len|stringa|}}
O
{{#invoke:String|len|s=stringa}}

Parametri
    s: La stringa di cui ritornare la lunghezza

Se invocata usando parametri nominati, Mediawiki rimuoverà automaticamente ogni spazio iniziale
o finale dalla stringa.
]]
function str.len( frame )
    local new_args = str._getParameters( frame.args, {'s'} );
    local s = new_args['s'] or '';
    return mw.ustring.len( s )
end

--[[
sub

Questa funzione ritorna la sottostringa di una stringa bersaglio, come indicato dagli indici

Uso:
{{#invoke:String|sub|stringa_bersaglio|indice_iniziale|indice_finale}}
O
{{#invoke:String|sub|s=stringa_bersaglio|i=indice_iniziale|j=indice_finale}}

Parameters
    s: La stringa da cui estrarre una sottostringa
    i: La posizione iniziale del primo carattere della sottostringa da ritornare, se non
       specificato è 1.
    j: La posizione finale dell'ultimo carattere della sottostringa da ritornare, se non
       specificato corrisponde alla lunghezza della stringa_bersaglio (l'ultimo carattere).

I caratteri della stringa sono numerati a partire da 1. Se i o j hanno un valore negativo allora
contano la posizione contando dalla fine della stringa, -1 è l'ultimo carattere della stringa,
-2 il penultimo, ecc...

Se le posizioni sono al di fuori degli estremi della stringa viene ritornato un messaggio di
errore.
]]
function str.sub( frame )
    local new_args = str._getParameters( frame.args, { 's', 'i', 'j' } );
    local s = new_args['s'] or '';
    local i = tonumber( new_args['i'] ) or 1;
    local j = tonumber( new_args['j'] ) or -1;

    local len = mw.ustring.len( s );

    -- Convert negatives for range checking
    if i < 0 then
        i = len + i + 1;
    end
    if j < 0 then
        j = len + j + 1;
    end

    if i > len or j > len or i < 1 or j < 1 then
        return str._error( 'Indici fuori dagli estremi della stringa' );
    end
    if j < i then
        return str._error( 'Indici in ordine sbagliato' );
    end

    return mw.ustring.sub( s, i, j )
end

--[[
Questa funzione implementa tutte le caratteristiche di  {{str sub}} e viene mantenuta per motivi
di compatibilità con template più vecchi.
]]
function str.sublength( frame )
    local i = tonumber( frame.args.i ) or 0
    local len = tonumber( frame.args.len )
    return mw.ustring.sub( frame.args.s, i + 1, len and ( i + len ) )
end
return str