Vai al contenuto

Modulo:Poem

'A Wikisource.

Documentazione

[cagna]

Il template Modello: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, in fase di test su it:Template:Poem t

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