Modulo:Sandbox/M.casanova/SecondoLivelloItaliano

require('Module:No globals')
local getArgs = require('Module:Arguments').getArgs
local p = {}

local function agg(t, ...)
    local args = {...}
    for _, s in ipairs(args) do
        table.insert(t, s)
    end
end

local function separa(ss)
	local t = false
	if (ss:find("*") and (ss:find("*") == 1)) then
		ss = ss:sub(2)
		t = true
	end
	local dd = {}
	dd = string.gsub(ss,"([^/]+)", function(c) dd[#dd+1] = mw.text.trim(c) end)
	if (dd) then
		return { t, dd[1], dd[2] or false, dd[3] or false }
	else
		return { t, ss, false, false }
	end
end

function p.main(frame)
	local args = getArgs(frame, {
		valueFunc = function (key, value)
			if type(key) == "number" then
				if value == nil then
					return nil
				else
					value = mw.text.trim(value)
				end
			else
				if value == '' then return nil end
            end
			return value
		end
	})
	local titolo = args['titolo']
	local scorri = args['scorri'] or 's'
	local colore = args['colore'] or 'ccc'
	local numera = args['numera'] and tonumber(args['numera']) or 5
	local inizio = args['inizio'] and tonumber(args['inizio']) or 1
	inizio = inizio-1
	local ret = {}
	local n = 1
	local versi = {}
	local tt

	if (args[1]) then

		while (args[n]) do
			versi[n] = separa(args[n])
			n = n+1
		end
		n=n-1

		if (scorri ~= 's') then colore = 'fff' end
		-- scorrimento
		agg(ret,'<div style="font-size:90%;margin:10px 0;padding:0 5px;border:0;border-left:4px solid #',colore)
		if (scorri == 's') then agg(ret,';height:200px;overflow:auto') end
		agg(ret,'">')

		agg(ret,'<table cellpadding=0 cellspacing=0 style="padding:0">')

--[[
		if (versi[1][2]) then -- titoli testo/parafrasi
			agg(ret,'<tr style="background:#ddd"><th colspan=2>Testo</th><th style="width:20px">&nbsp;</th><th>Parafrasi</th></tr>')
		end
]]--
		
		if (titolo) then
			tt = separa(titolo)
			agg(ret,'<tr><td></td><td><i>',tt[2],'</i></td>')
			if (tt[3]) then
				agg(ret,'<td style="width:20px"></td><td><i>',tt[3],'</i></td>')
				if (tt[4]) then
					agg(ret,'<td style="width:20px"></td><td><i>',tt[4],'</i></td>')
				end
			end
			agg(ret,'</tr><tr><td style="line-height:8px">&nbsp;</td></tr>')
		end

		for i=1,n do
			if (versi[i][1]) then -- nuova strofa
				agg(ret,'<tr><td colspan=2 style="line-height:8px">&nbsp;</td></tr>')
			end
			agg(ret,'<tr><td',(i == 1) and ' style="width:30px"' or '')

			if ((i+inizio) % numera == 0) then -- mostra numero
				agg(ret,' align=right><small>',(i+inizio),'</small>&ensp;')
			else agg(ret,'>') end

			agg(ret,'</td><td>',versi[i][2],'</td>')
			if (versi[i][3]) then
				agg(ret,'<td',(i == 1) and ' style="width:20px"' or '','></td><td>',versi[i][3],'</td>')
				if (versi[i][4]) then
					agg(ret,'<td',(i == 1) and ' style="width:20px"' or '','></td><td>',versi[i][4],'</td>')
				end
			end
			agg(ret,'</tr>')
		end
		agg(ret,'</table></div>')
	
		return table.concat(ret)
	else
		return '<span style="color:#800">Errore nel template Poesia</span>'
	end
end

return p