Difference between revisions of "love.errhand"

m (Fixed default function)
(Added 0.9.0 version of love.errhand)
Line 10: Line 10:
 
Nothing.
 
Nothing.
 
== Examples ==
 
== Examples ==
 +
{{newin|[[0.9.0]]|090|type=variant}}
 +
=== The default function used if you don't supply your own. ===
 +
<source lang="lua">
 +
local function error_printer(msg, layer)
 +
print((debug.traceback("Error: " .. tostring(msg), 1+(layer or 1)):gsub("\n[^\n]+$", "")))
 +
end
 +
 +
function love.errhand(msg)
 +
msg = tostring(msg)
 +
 +
error_printer(msg, 2)
 +
 +
if not love.window or not love.graphics or not love.event then
 +
return
 +
end
 +
 +
if not love.graphics.isCreated() or not love.window.isCreated() then
 +
if not pcall(love.window.setMode, 800, 600) then
 +
return
 +
end
 +
end
 +
 +
-- Load.
 +
if love.audio then love.audio.stop() end
 +
love.graphics.reset()
 +
love.graphics.setBackgroundColor(89, 157, 220)
 +
local font = love.graphics.newFont(14)
 +
love.graphics.setFont(font)
 +
 +
love.graphics.setColor(255, 255, 255, 255)
 +
 +
local trace = debug.traceback()
 +
 +
love.graphics.clear()
 +
love.graphics.origin()
 +
 +
local err = {}
 +
 +
table.insert(err, "Error\n")
 +
table.insert(err, msg.."\n\n")
 +
 +
for l in string.gmatch(trace, "(.-)\n") do
 +
if not string.match(l, "boot.lua") then
 +
l = string.gsub(l, "stack traceback:", "Traceback\n")
 +
table.insert(err, l)
 +
end
 +
end
 +
 +
local p = table.concat(err, "\n")
 +
 +
p = string.gsub(p, "\t", "")
 +
p = string.gsub(p, "%[string \"(.-)\"%]", "%1")
 +
 +
local function draw()
 +
love.graphics.clear()
 +
love.graphics.printf(p, 70, 70, love.graphics.getWidth() - 70)
 +
love.graphics.present()
 +
end
 +
 +
while true do
 +
love.event.pump()
 +
 +
for e, a, b, c in love.event.poll() do
 +
if e == "quit" then
 +
return
 +
end
 +
if e == "keypressed" and a == "escape" then
 +
return
 +
end
 +
end
 +
 +
draw()
 +
 +
if love.timer then
 +
love.timer.sleep(0.1)
 +
end
 +
end
 +
end
 +
</source>
 +
----
 +
{{oldin|[[0.9.0]]|090|type=variant|text=This variant is not used in that and later versions.}}
 
=== The default function used if you don't supply your own. ===
 
=== The default function used if you don't supply your own. ===
 
<source lang="lua">
 
<source lang="lua">

Revision as of 23:22, 11 August 2013

The error handler, used to display error messages.

Function

Synopsis

love.errhand( msg )

Arguments

string msg
The error message.

Returns

Nothing.

Examples

Available since LÖVE 0.9.0
This variant is not supported in earlier versions.

The default function used if you don't supply your own.

local function error_printer(msg, layer)
	print((debug.traceback("Error: " .. tostring(msg), 1+(layer or 1)):gsub("\n[^\n]+$", "")))
end

function love.errhand(msg)
	msg = tostring(msg)

	error_printer(msg, 2)

	if not love.window or not love.graphics or not love.event then
		return
	end

	if not love.graphics.isCreated() or not love.window.isCreated() then
		if not pcall(love.window.setMode, 800, 600) then
			return
		end
	end

	-- Load.
	if love.audio then love.audio.stop() end
	love.graphics.reset()
	love.graphics.setBackgroundColor(89, 157, 220)
	local font = love.graphics.newFont(14)
	love.graphics.setFont(font)

	love.graphics.setColor(255, 255, 255, 255)

	local trace = debug.traceback()

	love.graphics.clear()
	love.graphics.origin()

	local err = {}

	table.insert(err, "Error\n")
	table.insert(err, msg.."\n\n")

	for l in string.gmatch(trace, "(.-)\n") do
		if not string.match(l, "boot.lua") then
			l = string.gsub(l, "stack traceback:", "Traceback\n")
			table.insert(err, l)
		end
	end

	local p = table.concat(err, "\n")

	p = string.gsub(p, "\t", "")
	p = string.gsub(p, "%[string \"(.-)\"%]", "%1")

	local function draw()
		love.graphics.clear()
		love.graphics.printf(p, 70, 70, love.graphics.getWidth() - 70)
		love.graphics.present()
	end

	while true do
		love.event.pump()

		for e, a, b, c in love.event.poll() do
			if e == "quit" then
				return
			end
			if e == "keypressed" and a == "escape" then
				return
			end
		end

		draw()

		if love.timer then
			love.timer.sleep(0.1)
		end
	end
end

Removed in LÖVE 0.9.0
This variant is not used in that and later versions..

The default function used if you don't supply your own.

local function error_printer(msg, layer)
	print((debug.traceback("Error: " .. tostring(msg), 1+(layer or 1)):gsub("\n[^\n]+$", "")))
end

function love.errhand(msg)
	msg = tostring(msg)

	error_printer(msg, 2)

	if not love.graphics or not love.event or not love.graphics.isCreated() then
		return
	end

	-- Load.
	if love.audio then love.audio.stop() end
	love.graphics.reset()
	love.graphics.setBackgroundColor(89, 157, 220)
	local font = love.graphics.newFont(14)
	love.graphics.setFont(font)

	love.graphics.setColor(255, 255, 255, 255)

	local trace = debug.traceback()

	love.graphics.clear()

	local err = {}

	table.insert(err, "Error\n")
	table.insert(err, msg.."\n\n")

	for l in string.gmatch(trace, "(.-)\n") do
		if not string.match(l, "boot.lua") then
			l = string.gsub(l, "stack traceback:", "Traceback\n")
			table.insert(err, l)
		end
	end

	local p = table.concat(err, "\n")

	p = string.gsub(p, "\t", "")
	p = string.gsub(p, "%[string \"(.-)\"%]", "%1")

	local function draw()
		love.graphics.clear()
		love.graphics.printf(p, 70, 70, love.graphics.getWidth() - 70)
		love.graphics.present()
	end

	draw()

	local e, a, b, c
	while true do
		e, a, b, c = love.event.wait()

		if e == "quit" then
			return
		end
		if e == "keypressed" and a == "escape" then
			return
		end

		draw()

	end

end

See Also


Other Languages