Modulo:Poem
Documentazione
modificaIl template {{Poem}} (che chiama questo modulo) accetta i seguenti parametri:
- R: numero verso iniziale (default 1)
- V: visualizzazione numeri versi.
- parametro V assente: nessuna visualizzazione
- parametro V = numero: visualizza ogni numero numeri (ogni 3, ogni 4....)
- parametro V= fs: visualizza sul verso a fine strofa (in questo momento qualsiasi altra stringa non numerica produce lo stesso risultato)
- Il codice {R-}, in qualsiasi punto del verso, esclude il verso dal conteggio.
- Se il testo contiene il carattere + viene attivata la formattazione opzionale Teatro, attualmente gestita da tl|Poem t.
Esempi
modifica{{Poem|R=1| ... versi }}
I versi sono numerati da 1 ma i numeri non compariono
{{Poem|R=1|V=4| ... versi }}
I versi sono numerari da 1 e compaiono i numeri verso 4, 8....
{{Poem|R=15|V=fs| ... versi }}
I versi sono numerari da 15 e i numeri verso compaiono a fine strofa
Esempio completo
modifica
Terra che 'l Serio bagna e 'l Brembo inonda,
che monti e valli mostri a l'una mano
ed a l'altra il tuo verde e largo piano
or ampia ed or sublime ed or profonda;4
perch'io cercassi pur di sponda in sponda
Nilo, Istro, Gange o s'altro è piú lontano,
o mar da terren chiuso o l'oceano
che d'ogni intorno lui cinge e circonda,8
riveder non potrei parte piú cara
e gradita di te, da cui mi venne
in riva al gran Tirren famoso padre,11
che fra l'arme cantò rime leggiadre;
benché la fama tua pur si rischiara
e Si dispiega al ciel con altre penne.14
local p={}
function teatro(verso)
if string.match(verso,"%+") ~=nil then
local parti={}
local ind=0
parti=mw.text.split(verso,"%+")
if parti[1] ~= "" then
parti[1]='<span style="margin-left:0; position:absolute; left:0; font-variant:small-caps">'..parti[1]..'</span>'
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
return verso
end
function indent(verso)
local nsb=0
local ndp=0
ndp=string.len(string.match(verso,"^:*"))
verso=string.gsub(verso,string.rep(":",ndp),string.rep(" ",ndp),1)
nsb=string.len(string.match(verso,"^%s*"))
verso=string.gsub(verso,string.rep(" ",nsb),string.rep(" ",nsb),1)
return verso
end
function rsp (versi, nr, nvc, view) -- versi[nr] è il testo raw di un verso, nvc è numero verso corrente
local incr=1
local nbs=0
local verso=versi[nr]
if string.gsub(verso," ","")=="" then
verso="<br />\n"
incr=0
return verso,nvc
end
if string.match(verso,"{R%-}")~=nil then
verso=string.gsub(verso,"{R%-}","")
verso=indent(verso)
return verso,nvc
else
verso=indent(verso)
verso='<span id="v'..nvc..'" title="verso '..nvc..'" class="Citazione verso v'..nvc..'">'..verso..'</span>'
if view then
if string.match(view,"%d+")==view then
if nvc%view==0 then
local numeroVerso='<span class="numeroriga" id="riga'..nvc..'" style="position:absolute; left:45em; color:#666; font-size:70%">'..nvc..'</span>'
verso=verso..numeroVerso
end
elseif type(view)=="string" then
if versi[nr+1]~=nil and string.gsub(versi[nr+1]," ","")=="" then
local numeroVerso='<span class="numeroriga" id="riga'..nvc..'" style="position:absolute; left:45em; color:#666; font-size:70%">'..nvc..'</span>'
verso=verso..numeroVerso
end
end
end
verso=verso.."<br />\n"
nvc=nvc+1
return verso, nvc
end
return
end
function p.poem (frame)
frame=frame:getParent()
local testoRaw=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
local versi=mw.text.split( testoRaw, '\n')
local verso=""
local spazi=""
local duepunti=""
if string.match(testoRaw,"%+")~=nil then
testo='<div class="poem" style="position:relative; margin-left:0; padding-left:6em">\n<p>'
else
testo='<div class="poem">\n<p>'
end
nr=1
while versi[nr]~=nil do
versi[nr]=teatro(versi[nr]) -- test
verso,nvc=rsp(versi,nr,nvc,view)
testo=testo..verso
nr=nr+1
end
testo=testo.."</p></div>"
return testo
end
return p