Modulo:Carte

Versione del 26 set 2014 alle 17:12 di Moroboshi (discussione | contributi) (test per sostituire template:carte)
(diff) ← Versione meno recente | Versione attuale (diff) | Versione più recente → (diff)

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_name = {
    ['c'] = 'cuori',
    ['f'] = 'fiori',
    ['p'] = 'picche',
    ['q'] = 'quadri'
}

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 'cartedagioco'
    local suits_color = {}
    suits_color['c'] = args['colore cuori'] or 'red'
    suits_color['p'] = args['colore picche'] or 'black'
    suits_color['d'] = 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 style="', hand_style , ';" class="manodicarte";>'})
    local pos = 1
    while continue do
        local value = 1
        local card = args[pos]
        if card then
            local suit_rank
            local card_color
            local last_character = ustring.sub(card,-1)
            local suit_code = suit_name[last_character] or symbol_code[last_character] or ''
            if suit_code then
                card_color = suits_color[suit_code]
            else
                card_color =  color_color[suit_code] or ''
            end
            if card_color then
                suit_rank = 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(hand, '<span class="cartadagioco"', (color and 'style="color:' .. card_color ..';"') or '', '>')
            if suit_rank then
                dump(hand, '<span class="valore">', suit_rank, '</span>')
            end
            if suit_code then
                dump(hand, '<span class="seme"', suit_code, '</span>')
            end
        else
            continue = false
        end
    end
    dump(output, table.concat(hand, separator))
    dump(output, '</b">')
    return table.concat(output)
end

return p