mirror of
				https://git.haproxy.org/git/haproxy.git/
				synced 2025-10-31 16:41:01 +01:00 
			
		
		
		
	
		
			
				
	
	
		
			97 lines
		
	
	
		
			1.9 KiB
		
	
	
	
		
			Lua
		
	
	
	
	
	
			
		
		
	
	
			97 lines
		
	
	
		
			1.9 KiB
		
	
	
	
		
			Lua
		
	
	
	
	
	
| -- Copyright 2016 Thierry Fournier
 | |
| 
 | |
| function color(index, str)
 | |
| 	return "\x1b[" .. index .. "m" .. str .. "\x1b[00m"
 | |
| end
 | |
| 
 | |
| function nocolor(index, str)
 | |
| 	return str
 | |
| end
 | |
| 
 | |
| function sp(count)
 | |
| 	local spaces = ""
 | |
| 	while count > 0 do
 | |
| 		spaces = spaces .. "    "
 | |
| 		count = count - 1
 | |
| 	end
 | |
| 	return spaces
 | |
| end
 | |
| 
 | |
| function escape(str)
 | |
| 	local s = ""
 | |
| 	for i = 1, #str do
 | |
| 		local c = str:sub(i,i)
 | |
| 		local ascii = string.byte(c, 1)
 | |
| 		if ascii > 126 or ascii < 20 then
 | |
| 			s = s .. string.format("\\x%02x", ascii)
 | |
| 		else
 | |
| 			s = s .. c
 | |
| 		end
 | |
| 	end
 | |
| 	return s
 | |
| end
 | |
| 
 | |
| function print_rr(p, indent, c, wr, hist)
 | |
| 	local i = 0
 | |
| 	local nl = ""
 | |
| 
 | |
| 	if type(p) == "table" then
 | |
| 		wr(c("33", "(table)") .. " " .. c("36", tostring(p)) .. " [")
 | |
| 
 | |
| 		for idx, value in ipairs(hist) do
 | |
| 			if value == p then
 | |
| 				wr(" " .. c("35", "/* recursion */") .. " ]")
 | |
| 				return
 | |
| 			end
 | |
| 		end
 | |
| 		hist[indent + 1] = p
 | |
| 
 | |
| 		mt = getmetatable(p)
 | |
| 		if mt ~= nil then
 | |
| 			wr("\n" .. sp(indent+1) .. c("31", "METATABLE") .. ": ")
 | |
| 			print_rr(mt, indent+1, c, wr, hist)
 | |
| 		end
 | |
| 
 | |
| 		for k,v in pairs(p) do
 | |
| 			if i > 0 then
 | |
| 				nl = "\n"
 | |
| 			else
 | |
| 				wr("\n")
 | |
| 			end
 | |
| 			wr(nl .. sp(indent+1))
 | |
| 			if type(k) == "number" then
 | |
| 				wr(c("32", tostring(k)))
 | |
| 			else
 | |
| 				wr("\"" .. c("32", escape(tostring(k))) .. "\"")
 | |
| 			end
 | |
| 			wr(": ")
 | |
| 			print_rr(v, indent+1, c, wr, hist)
 | |
| 			i = i + 1
 | |
| 		end
 | |
| 		if i == 0 then
 | |
| 			wr(" " .. c("35", "/* empty */") .. " ]")
 | |
| 		else
 | |
| 			wr("\n" .. sp(indent) .. "]")
 | |
| 		end
 | |
| 
 | |
| 		hist[indent + 1] = nil
 | |
| 
 | |
| 	elseif type(p) == "string" then
 | |
| 		wr(c("33", "(string)") .. " \"" .. c("36", escape(p)) .. "\"")
 | |
| 	else
 | |
| 		wr(c("33", "(" .. type(p) .. ")") .. " " .. c("36", tostring(p)))
 | |
| 	end
 | |
| end
 | |
| 
 | |
| function print_r(p, col, wr)
 | |
| 	if col == nil then col = true end
 | |
| 	if wr == nil then wr = function(msg) io.stdout:write(msg) end end
 | |
| 	local hist = {}
 | |
| 	if col == true then
 | |
| 		print_rr(p, 0, color, wr, hist)
 | |
| 	else
 | |
| 		print_rr(p, 0, nocolor, wr, hist)
 | |
| 	end
 | |
| 	wr("\n")
 | |
| end
 |