Vai al contenuto

Modulo:Versi

Da Wikiquote, aforismi e citazioni in libertà.

Modulo Lua che implementa le funzionalità del template:Versi.


local p = {}

local function escape(pattern)
	return pattern:gsub('([%(%)%.%%%+%-%*%?%[%^%$%]])', '%%%1')
end

local function insertTag(str, i, tag)
	return str:sub(0, i) .. tag .. str:sub(i + 1, #str)
end

local function italicize(text)
	local t = { '[...]', '[…]' } -- eccezioni
	local bad_offsets = {}

	for _, pattern in ipairs(t) do
		pattern = '%s*' .. escape(pattern) .. '%s*'

		local i, j = nil, 0

		while true do
			i, j = text:find(pattern, i == j and j + 1 or j)

			if not i then break end

			for n = i, j do
				bad_offsets[n] = true
			end
		end
	end

	for i = #text, 1, -1 do
		if not bad_offsets[i] then
			if bad_offsets[i + 1] or i == #text then
				text = insertTag(text, i, '</i>')
			end
			if bad_offsets[i - 1] or i == 1 then
				text = insertTag(text, i - 1, '<i>')
			end
		end
	end

	return text
end

function p.main(frame)
	local ret = ''
	local args = {}

	for k, v in pairs(frame:getParent().args) do
		if type(k) == 'number' then
			v = mw.text.trim(v)

			if v ~= '' then
				args[k] = v
			end
		end
	end

	for i, v in pairs(args) do
		v = italicize(v)

		if args[i - 1] then
			v = ' | ' .. v
		elseif i ~= 1 then
			v = ' || ' .. v
		end

		ret = ret .. v
	end

	return ret
end

return p