forked from sbarex/SourceCodeSyntaxHighlight
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathdebug.lua
More file actions
147 lines (133 loc) · 4.44 KB
/
Copy pathdebug.lua
File metadata and controls
147 lines (133 loc) · 4.44 KB
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
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
function dump(o)
if type(o) == 'table' then
local s = '{ \n'
for k,v in pairs(o) do
if type(k) ~= 'number' then k = '"'..k..'"' end
s = s .. '['..k..'] = ' .. dump(v) .. ','
end
return s .. '} \n '
else
return tostring(o)
end
end
function print_table(node)
local cache, stack, output = {},{},{}
local depth = 1
local output_str = "{\n"
while true do
local size = 0
for k,v in pairs(node) do
size = size + 1
end
local cur_index = 1
for k,v in pairs(node) do
if (cache[node] == nil) or (cur_index >= cache[node]) then
if (string.find(output_str,"}",output_str:len())) then
output_str = output_str .. ",\n"
elseif not (string.find(output_str,"\n",output_str:len())) then
output_str = output_str .. "\n"
end
-- This is necessary for working with HUGE tables otherwise we run out of memory using concat on huge strings
table.insert(output,output_str)
output_str = ""
local key
if (type(k) == "number" or type(k) == "boolean") then
key = "["..tostring(k).."]"
else
key = "['"..tostring(k).."']"
end
if (type(v) == "number" or type(v) == "boolean") then
output_str = output_str .. string.rep('\t',depth) .. key .. " = "..tostring(v)
elseif (type(v) == "table") then
output_str = output_str .. string.rep('\t',depth) .. key .. " = {\n"
table.insert(stack,node)
table.insert(stack,v)
cache[node] = cur_index+1
break
else
output_str = output_str .. string.rep('\t',depth) .. key .. " = '"..tostring(v).."'"
end
if (cur_index == size) then
output_str = output_str .. "\n" .. string.rep('\t',depth-1) .. "}"
else
output_str = output_str .. ","
end
else
-- close the table
if (cur_index == size) then
output_str = output_str .. "\n" .. string.rep('\t',depth-1) .. "}"
end
end
cur_index = cur_index + 1
end
if (size == 0) then
output_str = output_str .. "\n" .. string.rep('\t',depth-1) .. "}"
end
if (#stack > 0) then
node = stack[#stack]
stack[#stack] = nil
depth = cache[node] == nil and depth + 1 or depth - 1
else
break
end
end
-- This is necessary for working with HUGE tables otherwise we run out of memory using concat on huge strings
table.insert(output,output_str)
output_str = table.concat(output)
print(output_str)
end
function dbg_state(state)
if state == 0 then
return 'STANDARD'
elseif state == 1 then
return 'STRING'
elseif state == 2 then
return 'NUMBER'
elseif state == 3 then
return 'SL_COMMENT'
elseif state == 4 then
return 'ML_COMMENT'
elseif state == 5 then
return 'ESC_CHAR'
elseif state == 6 then
return 'DIRECTIVE'
elseif state == 7 then
return 'DIRECTIVE_STRING'
elseif state == 8 then
return 'LINENUMBER'
elseif state == 9 then
return 'SYMBOL'
elseif state == 10 then
return 'STRING_INTERPOLATION'
elseif state == 11 then
return 'KEYWORD'
elseif state == 12 then
return 'STRING_END'
elseif state == 13 then
return 'NUMBER_END'
elseif state == 14 then
return 'SL_COMMENT_END'
elseif state == 15 then
return 'ML_COMMENT_END'
elseif state == 16 then
return 'ESC_CHAR_END'
elseif state == 17 then
return 'DIRECTIVE_END'
elseif state == 18 then
return 'SYMBOL_END'
elseif state == 19 then
return 'STRING_INTERPOLATION_END'
elseif state == 20 then
return 'KEYWORD_END'
elseif state == 21 then
return 'IDENTIFIER_BEGIN'
elseif state == 22 then
return 'IDENTIFIER_END'
elseif state == 23 then
return 'EMBEDDED_CODE_BEGIN'
elseif state == 24 then
return 'EMBEDDED_CODE_END'
else
return state
end
end