Modulo:Poem t

Da Wikisource.


Descrizione[modifica]

Il template formatta poem teatrali; basato nella prima versione su Opere complete di Carlo Goldoni (1907), ha le seguenti caratteristiche, sul principio del template {{Al}}.

  1. crea un poem com margine sin:0 e padding sin:6em;
  2. il carattere + suddivide l'eventuale personaggio con il testo del verso;
  3. 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[modifica]

Questo 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:

Rosimena.   Quando venite a cena?

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;">&nbsp;</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;">&nbsp;</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("&nbsp;",#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