1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
|
-- Copyright 2012 by Till Tantau
--
-- This file may be distributed an/or modified
--
-- 1. under the LaTeX Project Public License and/or
-- 2. under the GNU Public License
--
-- See the file doc/generic/pgf/licenses/LICENSE for more information
-- @release $Header$
---
-- The |pgf| namespace lies in the global namespace. It is the only
-- global table defined by \pgfname. The whole graph drawing system,
-- in turn, lies in the table |pgf.gd|.
pgf = {}
-- Forward
local tostring_table
---
-- Writes debug info on the \TeX\ output, separating the parameters
-- by spaces. The debug information will include a complete traceback
-- of the stack, allowing you to see ``where you are'' inside the Lua
-- program.
--
-- Note that this function resides directly in the |pgf| table. The
-- reason for this is that you can ``always use it'' since |pgf| is
-- always available in the global name space.
--
-- @param ... List of parameters to write to the \TeX\ output.
function pgf.debug(...)
local stacktrace = debug.traceback("",2)
texio.write_nl(" ")
texio.write_nl("Debug called for: ")
-- this is to even print out nil arguments in between
local args = {...}
for i = 1, #args do
if i ~= 1 then texio.write(", ") end
texio.write(tostring_table(args[i], "", 5))
end
texio.write_nl('')
for w in string.gmatch(stacktrace, "/.-:.-:.-%c") do
texio.write('by ', string.match(w,".*/(.*)"))
end
end
-- Helper function
function tostring_table(t, prefix, depth)
if type(t) ~= "table" or (getmetatable(t) and getmetatable(t).__tostring) or depth <= 0 then
return type(t) == "string" and ('"' .. t .. '"') or tostring(t)
else
local r = "{\n"
for k,v in pairs(t) do
r = r .. prefix .. " " .. tostring(k) .. "=" ..
(v==t and "self" or tostring_table(v, prefix .. " ", depth-1)) .. ",\n"
end
return r .. prefix .. "}"
end
end
return pgf
|