Modulo:Poem t
Descrizione
modificaIl template formatta poem teatrali; basato nella prima versione su Opere complete di Carlo Goldoni (1907), ha le seguenti caratteristiche, sul principio del template {{Al}}.
- crea un poem com margine sin:0 e padding sin:6em;
- il carattere + suddivide l'eventuale personaggio con il testo del verso;
- un numero immediatamente successivo indica lo scostamento del verso dal margine sinistro, da utilizzare nei versi spezzati.
Uso
Ricopiare il testo sottostante e modificare le parole in blu in base alle esigenze.
{{Poem t
| 1 = Testo in versi
| c = Classe (opzionale; da utilizzare con templatestyles)
}}
Nota: Al tag poem viene attribuita la classe aggiuntiva poem_t e l'eventuale classe indicata nel parametro c. Il personaggio viene inserito in uno span con classe personaggio per default. Se il parametro c non è specificato, viene attribuito il css standard utilizzato nella Commedie di Goldoni in versi (vedi Template:TemplateStyle/teatro1.css, classe .goldoni)
Esempio
modificaQuesto codice:
{{poem t| Rosimena.+11 Quando venite a cena? Maurizio.+Eccoci. Rosimena.+3 Ov’è Madama? Maurizio.+9 Madama è andata via. Rosimena.+Ho piacer; più contenta sarà la compagnia. Madama col suo muso sprizzava antipatia. }}
produce questo risultato:
Maurizio. Eccoci.
Rosimena. Ov’è Madama?
Maurizio. Madama è andata via.
Rosimena. Ho piacer; più contenta sarà la compagnia.
Madama col suo muso sprizzava antipatia.
local p={}
function teatro(verso, frame)
if frame.args["c"]==nil then
if string.match(verso,"%+") ~=nil then
local parti={}
local ind=0
parti=mw.text.split(verso,"%+")
if parti[1] ~= "" then
if parti[1]=="*" or parti[1]=="†" then
parti[1]='<span style="margin-left:0; position:absolute; left:5em;">'..parti[1]..'</span> '
else
parti[1]='<span style="margin-left:0; position:absolute; left:0; font-variant:small-caps">'..parti[1]..'</span> '
end
end
ind=string.match(parti[2],"^%d+")
if ind~=nil then
parti[2]=mw.text.trim(string.gsub(parti[2],ind,"",1))
ind='<span style="letter-spacing:'..ind..'em;"> </span>'
parti[2]=ind..parti[2]
end
verso=parti[1]..parti[2]
end
else
-- se il verso contiene un carattere + spezzarlo in due parti
if string.match(verso,"%+") ~=nil then
local parti={}
local ind=0
parti=mw.text.split(verso,"%+")
if parti[1] ~= "" then
if parti[1]=="*" or parti[1]=="†" then
-- caso asterisco
parti[1]='<span class="prefisso">'..parti[1]..'</span> '
else
parti[1]='<span class="personaggio">'..parti[1]..'</span> '
end
end
ind=string.match(parti[2],"^%d+")
if ind~=nil then
parti[2]=mw.text.trim(string.gsub(parti[2],ind,"",1))
ind='<span style="letter-spacing:'..ind..'em;"> </span> '
parti[2]=ind..parti[2]
end
verso=parti[1]..parti[2]
end
end
return verso.."<br/>\n"
end
function p.poem (frame)
frame=frame:getParent()
local testo=frame.args[1]
local nvc=frame.args["R"]
if nvc==nil then
nvc=1
end
local view=frame.args["V"]
if view==nil then
view=false
end
if string.sub(testo,1,1)=="\n" then
testo=string.sub(testo,2,#testo)
end
if string.sub(testo,-1)=="\n" then
testo=string.sub(testo,1,#testo-1)
end
local versi=mw.text.split( testo, '\n')
local verso=""
local spazi=""
if frame.args["c"]==nil then
testo='<div class="poem poem_t" style="position:relative; margin-left:0; padding-left:6em">'
else
testo='<div class="poem poem_t '..frame.args["c"]..'">'
end
nr=1
while versi[nr]~=nil do
verso=teatro(versi[nr], frame)
-- gestione spazi in testa
spazi=string.match(verso,"^ +")
if spazi~=nil then
verso=string.gsub(verso,spazi,string.rep(" ",#spazi))
end
testo=testo..verso
nr=nr+1
end
testo=testo.."</div>"
testo=string.gsub(testo,"<br>%n</p>","</p>")
return testo
end
return p