Vai al contenuto

Modulo:Chiarimento/sandbox

Da Wikipedia, l'enciclopedia libera.
--[[
   Modulo che implementa le funzionalità del template {{Chiarimento}}.
   Impedisce conflitti col software Mediawiki per evitare errori HTML.
]]

local p = {}

function p.main(frame)
	local ret = {}
	local args = frame:getParent().args
	local styles = 'Modulo:Chiarimento/styles.css'

	-- individua le sequenze di testo separate da una riga vuota
	local lines = mw.text.split(mw.text.trim(args[1] or ''), '\n%s*\n')
	for k, v in ipairs(lines) do
		-- individua le sottosequenze separate da un'andata a capo
		local sublines = mw.text.split(v, '\n')
		for i, line in ipairs(sublines) do
			local prefix = ''
			local firstline = k == 1 and i == 1
			-- cerca e preserva i caratteri *, :, # a inizio sottosequenza con le
			-- dovute precauzioni alla prima sequenza assoluta per [[phab:T14974]]
			if not firstline or mw.ustring.match(sublines[2] or '', '^[%*:%#]') then
				prefix = mw.ustring.match(line, '^[%*:%#]+') or ''
				if firstline and prefix ~= '' then
					prefix = '\n' .. prefix
				end
				line = mw.ustring.gsub(line, '^[%*:%#]+', '')
			end
			local span = mw.html.create('span')
			span
				:addClass('chiarimento')
				:attr('title', args[3])
				:wikitext(line)
			sublines[i] = prefix .. tostring(span)
		end
		table.insert(ret, table.concat(sublines, '\n'))
	end

	-- genera il testo in apice tra parentesi quadre
	args[2] = '&#91;<i>' .. (args[2] or '') .. '</i>&#93;'
	local sup = mw.html.create('sup')
	sup
		:addClass('noprint chiarimento-apice')
		:attr('title', args[3])
		:wikitext(args[2])

	return frame:extensionTag{
			name = 'templatestyles',
			args = {src = styles}
		} .. table.concat(ret, '\n\n') .. tostring(sup)
end

return p