Skip to content

Commit 5bf423a

Browse files
committed
Fix table gen, add generator creator (_ENV)
1 parent 135ce0b commit 5bf423a

File tree

1 file changed

+13
-7
lines changed

1 file changed

+13
-7
lines changed

xml-generator.lua

Lines changed: 13 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -53,8 +53,8 @@ end
5353
---@return type | string
5454
local function typename(x)
5555
local mt = getmetatable(x)
56-
if mt and mt.__type then
57-
return mt.__type
56+
if mt and mt.__name then
57+
return mt.__name
5858
else
5959
return type(x)
6060
end
@@ -138,7 +138,7 @@ export.generator_metatable = setmetatable({}, {
138138
end
139139

140140
return setmetatable(node, {
141-
__type = "XML.Node",
141+
__name = "XML.Node",
142142

143143
__tostring = export.node_to_string,
144144

@@ -193,6 +193,11 @@ end)
193193
---@return XML.Node
194194
function export.generate_node(ctx) return ctx(export.generator_metatable) end
195195

196+
---@generic T
197+
---@param func fun(...: T): XML.Node
198+
---@return fun(...: T): XML.Node
199+
function export.declare_generator(func) return setfenv(func, table) end
200+
196201
---@param ctx fun(html: XML.GeneratorTable): table
197202
---@return string
198203
function export.generate(ctx) return tostring(export.generate_node(ctx)) end
@@ -203,16 +208,17 @@ function export.generate(ctx) return tostring(export.generate_node(ctx)) end
203208
function export.html_table(tbl)
204209
return export.generate_node(function(xml)
205210
return xml.table {
206-
function()
211+
function ()
207212
local function getval(v)
208-
if type(v) ~= "table" or (getmetatable(v) or {}).__tostring then
213+
if typename(v) ~= "table" and (typename(v) ~= "XML.Node" and (getmetatable(v) or {}).__tostring ~= nil) then
209214
return tostring(v)
210215
end
216+
211217
return export.html_table(v)
212218
end
213219

214220
for i, v in ipairs(tbl) do
215-
coroutine.yield(
221+
coroutine.yield (
216222
xml.tr {
217223
xml.td(tostring(i)),
218224
xml.td(getval(v)),
@@ -223,7 +229,7 @@ function export.html_table(tbl)
223229
end
224230

225231
for k, v in pairs(tbl) do
226-
coroutine.yield(
232+
coroutine.yield (
227233
xml.tr {
228234
xml.td(tostring(k)),
229235
xml.td(getval(v)),

0 commit comments

Comments
 (0)