Saltar para o conteúdo

Módulo:Outdent

Wikisource, a biblioteca livre
Documentação do módulo[ver] [editar] [histórico] [purgar]

Implements {{Outdent}}.

local p = {}
local getArgs = require('Módulo:Arguments').getArgs

function p.outdent (frame) 
	local args = getArgs (frame)
	local count = 0
	local Start = '┌'
	local End = '┘'
	local i = 0
	local line = ''
	local outside = mw.html.create('span')
	local indentTable = {'reverter','indentar','in','r'}                           -- lista de parâmetros que significam reverter/indentar
	
	for k,v in pairs(indentTable) do                                            -- definir início e fim se revertido
		if args[v] then
			Start = '└'
			End = '┐'
		end
	end
	
	if not args[1] then args[1] = '' end                                        --  args[1] deixa de ser nil (nulo)
	
	for _ in string.gmatch(args[1],':')  do
		count = count+1                                                         --  aumentar count (contagem) para cada : (dois-pontos)
	end
	
	for _ in string.gmatch(args[1],'*') do
		count = count+1                                                         -- aumentar count para cada * (asterisco)
	end
	
	for _ in string.gmatch(args[1],'#') do
		count = count+2                                                         -- aumentar count em 2 para cada # (cerquilha)
	end
	
	if count == 0 then                                                          -- definir count para args[1] caso necessário
		count = tonumber(args[1])
	end
	
	
	if not count then
		count = 10                                                              -- 10 default
	end
	
	if count > 40 then
		count = 40                                                              -- 40 max
	end
	
	count = count * 1.6 - 0.7                                                   -- converter para width (largura)
	
	local lineMath = math.ceil(count * 1.6)
	
	while i < lineMath do                                                       -- criar linha
		line = line..'─'
		i = i+1
	end
	
	if count == - 0.7 then                                                      -- definir para pipe | se count fosse 0                                 
		line = '|'
		Start = ''
		End = ''
	end
	
	outside                                                                     -- criar tag span
		:addClass('outdent-template')
		:css('display','block')
		:css('margin-top','-0.5em')
		:css('color','#AAA;')                                                  
		:wikitext('<span style="display:inline-block; overflow:hidden;">'..Start..'</span>') -- começo
		:wikitext('<span style="display:inline-block; overflow:hidden; word-wrap:normal; width:'..count..'em;">'..line..'</span>') -- meio
		:wikitext('<span style="display:inline-block; overflow:hidden;">'..End..'</span>') -- fim
	if line ~= '|' then                                                         -- mesmo que if not pipe (|) (se não for pipe)
		outside
			:css('position','relative')                                             
			:css('left','-0.25em')  
	else
		outside
			:css('margin-top','0.25em')
	end
	
	if args['testar_largura_da_linha'] then                                             -- usado para testar largura da linha antes e depois da redução da largura
		return 'Antes:'..'<br />'..line..'<br />'..'Depois:'..'<br />'..'<span style="display:inline-block;overflow:hidden;word-wrap:normal;width:'..count..'em;">'..line..'</span>'..'<br />'..'Final:'..'<br />'..tostring(outside)
	end
	
	if args[2] then
		local note = mw.html.create('span')
		note:wikitext('([[w:Wikipédia:Indentação#Recomeço|desindentação]])&#32;')    -- adicionar (desindentação) caso necessário
		return tostring(outside)..tostring(note)
	else
		return outside
	end
	
end

return p