Vai al contenuto

Modulo:Carte

Da Wikipedia, l'enciclopedia libera.

Questo modulo serve a implementare le funzionalità del Template:Carte.


local getArgs = require('Module:Arguments').getArgs
local p = {}

local function dump(t, ...)
    local args = {...}
    for _, s in ipairs(args) do
        table.insert(t, s)
    end
end

-- Notazione
-- I valori accettati sono
-- *"Vs" dove:
-- **"V" è il valore
-- **"s" è il seme  (uno dei valori "c" (cuori) "f" (fiori), "p" (picche), "q" (quadri), "r" (rosso) o "n" (nero)
-- * oppure "s": il seme (o il colore da solo), vedi lista sopra
-- * oppure "Jolly" / "Jollyr" / "Jollyn" : Jolly / Jolly (rosso) / Jolly (nero)

local suits = {
    ['c'] = { name='cuori', symbol='♥'},
    ['f'] = { name='fiori', symbol='♣'},
    ['p'] = { name='picche', symbol='♠'},
    ['q'] = { name='quadri', symbol='♦'}
}

local full_rank_name = {
    ['a'] = 'Asso',
    ['k'] = 'Re',
    ['q'] = 'Regina',
    ['j'] = 'Fante',
    ['A'] = 'Asso',
    ['K'] = 'Re',
    ['Q'] = 'Regina',
    ['J'] = 'Fante'
}

local symbol = {
    ['♥'] = 'c',
    ['♣'] = 'f',
    ['♠'] = 'p',
    ['♦'] = 'q'
}

local color_code = {
    ['n'] = 'black',
    ['r'] = 'red'
}

function p.main(frame)
local args = getArgs(frame)
return p._main(args)
end

function p._main(args)
    local output = {}
    local hand = {}
    local hand_style = args['stile mano'] or ''
    local suits_color = {}
    suits_color['c'] = args['colore cuori'] or 'red'
    suits_color['p'] = args['colore picche'] or 'black'
    suits_color['q'] = args['colore diamond'] or 'red'
    suits_color['f'] = args['colore fiori'] or 'black'
    local card_style = args['stile carte'] or ''
    local separator = args['separatore'] or ' '
    local color = (args['colore'] and color_code[args['colore']]) or ''

    dump(output, '<b ', (hand_style and 'style="' .. hand_style .. '"; " ') or '',  'class="manodicarte">')
    local pos = 1
    local continue = true
    while continue do
        local value = 1
        local card = args[pos]
        if card then
            local card_array = {}
            local suit_rank
            local card_color
            local last_character = mw.ustring.sub(card, -1)
            local suit_code
            if suits[last_character] then
                suit_code = last_character
            end
            if suit_code then
                card_color = suits_color[suit_code]
            else
                card_color =  color_code[suit_code]
            end
            if card_color then
                suit_rank = mw.ustring.sub(card, 1, -2)
            else
                suit_rank = card
            end
            if suit_rank == "Jolly" then
                if card_color == "red" then
                    suit_rank = "Jolly (rosso)"
                elseif card_color == "black" then
                    suit_rank = "Jolly (nero)"
                end
            end
            dump(card_array, '<span class="cartadagioco" ', (card_color and 'style="color:' .. card_color ..';"') or '', '>')
            if suit_rank then
                dump(card_array, '<span class="valore">', suit_rank, '</span>')
            end
            if suit_code then
                dump(card_array, '<span class="seme">', suits[suit_code].symbol, '</span>')
            end
            dump(card_array, '</span>')
            pos = pos + 1
            dump(hand, table.concat(card_array))
        else
            continue = false
        end
    end
    dump(output, table.concat(hand, separator) or '')
    dump(output, '</b>')
    return table.concat(output)
end

return p