Modulo:New Grove

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

Questo modulo serve a creare una citazione alle enciclopedie Grove tramite il template {{New Grove}}. Il modulo è un wrapper del Modulo:Citazione, che filtra i parametri aggiungendo i valori predefiniti (titolo, ISBN, curatori etc.) per le varie edizioni e rimappa i parametri posizionali, che nel template {{New Grove}} hanno un diverso ordine dai template Cita (giustificato da una sua logica).


--[[
 * Modulo impiegato dal Template:New Grove per creare una citazione alle 
 * enciclopedie Grove (vedi voce Grove Dictionary of Music and Musicians).
 * Il modulo è un wrapper che richiama il Modulo:Citazione dopo avere filtrato
 * i parametri, aggiungendo i valori predefiniti (titolo, ISBN, curatori etc.) 
 * e rimappando i parametri posizionali, che nel Template:New Grove hanno un 
 * diverso ordine dai template Cita (giustificato da una sua logica).
--]]

local p = {}

-- shallow copy di un oggetto table
local function table_shallow_copy(obj)
    local copy = {}
    if type(obj) == 'table' then
        for key, val in pairs(obj) do
            copy[key] = val
        end
    end
    return copy
end

-- parametri posizionali: {{New Grove|edizione|nome|cognome|voce|volume|pagine|cid|wl}}
-- edizioni: 1, 2, inst, opera, american, art1, art2, jazz1, jazz2

function p.citation(frame)
    
    local pargs = frame:getParent().args
    
    -- wl determina se inserire o meno un wikilink nel titolo dell'opera
    local wl = pargs['wl'] or pargs[8] or Nil
    wl = wl and wl ~= ''
    
    -- sceglie edizione (per avere i campi precompilati)
    local edition = pargs['edizione'] or pargs[1] or Nil
    
    -- shallow copy dei parametri
    local inner_args = table_shallow_copy(pargs)
    
    -- conversione parametri posizionali:
    -- il Modulo:Citazione e il Template:New Grove hanno un ordine diverso
    -- per i parametri posizionali
    inner_args['nome']    = pargs['nome']    or pargs[2]
    inner_args['cognome'] = pargs['cognome'] or pargs[3]
    inner_args['voce']    = pargs['voce']    or pargs[4]
    inner_args['volume']  = pargs['volume']  or pargs[5]
    inner_args['pagine']  = pargs['pagine']  or pargs[6]
    inner_args['cid']     = pargs['cid']     or pargs[7]
        
    -- New Grove ed. 1
    if edition == "1" then
        if wl then
            inner_args['titolo'] = "The New Grove Dictionary of Music and Musicians"
        else
            inner_args['titolo'] = "[[Grove Dictionary of Music and Musicians|The New Grove Dictionary of Music and Musicians]]"
        end
        inner_args['curatore'] = "Stanley Sadie"
        inner_args['edizione'] = "1ª ed."
        inner_args['editore']  = "MacMillian"
        inner_args['città']    = "Londra"
        inner_args['anno']     = "1980"
        inner_args['ISBN']     = "978-0333231111"
        
    -- New Grove ed. 2
    elseif edition == "2" then
        if wl then
            inner_args['titolo'] = "The New Grove Dictionary of Music and Musicians"
        else
            inner_args['titolo'] = "[[Grove Dictionary of Music and Musicians|The New Grove Dictionary of Music and Musicians]]"
        end
        inner_args['curatore']  = "Stanley Sadie"
        inner_args['curatore2'] = "John Tyrrell"
        inner_args['edizione']  = "2ª ed."
        inner_args['editore']   = "Oxford University Press"
        inner_args['anno']      = "2001"
        inner_args['ISBN']      = "978-0195170672"
        
    -- Grove Dictionary of Musical Instruments
    elseif edition == "inst" then
        inner_args['titolo']    = "The New Grove Dictionary of Musical Instruments"
        inner_args['curatore']  = "Stanley Sadie"
        inner_args['editore']   = "MacMillian"
        inner_args['città']     = "Londra"
        inner_args['anno']      = "1984"
        inner_args['ISBN']      = "0943818052"
        
    -- Grove Dictionary of Opera
    elseif edition == "opera" then
        if wl then
            inner_args['titolo'] = "[[New Grove Dictionary of Opera|The New Grove Dictionary of Opera]]"
        else
            inner_args['titolo'] = "The New Grove Dictionary of Opera"
        end
        inner_args['curatore']  = "Stanley Sadie"
        inner_args['edizione']  = "1ª ed."
        inner_args['editore']   = "MacMillian"
        inner_args['città']     = "Londra"
        inner_args['anno']      = "1992"
        inner_args['ISBN']      = "0333485521"
        
    -- Grove Dictionary of American Music
    elseif edition == "american" then
        inner_args['titolo']    = "The New Grove Dictionary of American Music"
        inner_args['curatore']  = "Stanley Sadie"
        inner_args['curatore2'] = "Hugh Wiley Hitchcock"
        inner_args['editore']   = "MacMillian"
        inner_args['città']     = "Londra"
        inner_args['anno']      = "1986"
        inner_args['ISBN']      = "0333378792"
        
    -- Grove Dictionary of Art ed. 1
    elseif edition == "art1" then
        inner_args['titolo']    = "The Grove Dictionary of Art"
        inner_args['curatore']  = "Jane Turner"
        inner_args['edizione']  = "1ª ed."
        inner_args['editore']   = "Oxford University Press"
        inner_args['anno']      = "1996"
        inner_args['ISBN']      = "1884446000"
        
    -- Grove Dictionary of Art ed. 2
    elseif edition == "art2" then
        inner_args['titolo']    = "The Grove Dictionary of Art"
        inner_args['curatore']  = "Jane Turner"
        inner_args['edizione']  = "2ª ed."
        inner_args['editore']   = "Oxford University Press"
        inner_args['anno']      = "2003"
        inner_args['ISBN']      = "0195170687"
    
    -- Grove Dictionary of Jazz ed. 1
    elseif edition == "jazz1" then
        inner_args['titolo']    = "The New Grove Dictionary of Jazz"
        inner_args['curatore']  = "Barry Kernfeld"
        inner_args['edizione']  = "1ª ed."
        inner_args['editore']   = "MacMillian"
        inner_args['anno']      = "1988"
        inner_args['ISBN']      = "0312113579"
    
    -- Grove Dictionary of Jazz ed. 2
    elseif edition == "jazz2" then
        inner_args['titolo']    = "The New Grove Dictionary of Jazz"
        inner_args['curatore']  = "Barry Kernfeld"
        inner_args['edizione']  = "2ª ed."
        inner_args['editore']   = "Oxford University Press"
        inner_args['anno']      = "2003"
        inner_args['ISBN']      = "1561592846"
    
    -- Oxford Music Online
    elseif edition == "online" then
        if wl then
            inner_args['titolo'] = "[[Oxford Music Online|Grove Music Online]]"
        else
            inner_args['titolo'] = "Grove Music Online"
        end
        inner_args['curatore']  = "Laura Macy"
        inner_args['editore']   = "Oxford University Press"
        inner_args['edizione']  = nil
        
    -- parametro edizione assente o invalido
    else
        return mw.getCurrentFrame():expandTemplate {
            title = "Errore template",
            args = {
                "edizione",
                "Citazione Grove",
                t = not edition or "r",
                cat = "Errori di compilazione del template New Grove"
            }
        }
    end
    
    -- oggetto ambiente per la chiamata del Modulo:Citazione
    local cite_object = {
        cite_module = require("Modulo:Citazione"),
        args = inner_args,
        frame = {
            args = {}
        }
    }
    function cite_object.getParent()
        return cite_object.frame
    end
    
    -- chiama la funzione citation dal Modulo:Citazione
    return cite_object.cite_module.citation(cite_object)
end

return p