99
99
--- @field [ string] XML.Node
100
100
101
101
--- @type XML.GeneratorTable
102
- export .generator_metatable = setmetatable ({}, {
102
+ export .xml = setmetatable ({}, {
103
103
--- @param _ XML.GeneratorTable
104
104
--- @param tag_name string
105
105
__index = function (_ , tag_name )
@@ -140,7 +140,9 @@ export.generator_metatable = setmetatable({}, {
140
140
return self
141
141
end ;
142
142
143
- __tostring = export .node_to_string
143
+ __tostring = export .node_to_string ;
144
+
145
+ __name = " XML.Node" ;
144
146
})
145
147
end
146
148
})
@@ -168,59 +170,51 @@ end)
168
170
169
171
```
170
172
]=]
171
- --- @param ctx fun ( html : XML.GeneratorTable ): XML.Node
172
- --- @return XML.Node
173
- function export .generate_node (ctx ) return ctx (export .generator_metatable ) end
174
173
175
174
--- @generic T
176
175
--- @param func fun ( ... : T ): XML.Node
177
176
--- @return fun ( ... : T ): XML.Node
178
- function export .declare_generator (func ) return setfenv (func , export .generator_metatable ) end
179
-
180
- --- @param ctx fun ( html : XML.GeneratorTable ): table
181
- --- @return string
182
- function export .generate (ctx ) return tostring (export .generate_node (ctx )) end
177
+ function export .declare_generator (func ) return setfenv (func , export .xml ) end
183
178
184
179
--- Turns a lua table into an html table, recursively, with multiple levels of nesting
185
180
--- @param tbl table
186
181
--- @return XML.Node
187
182
function export .html_table (tbl )
188
- return export .generate_node (function (xml )
189
- return xml .table {
190
- function ()
191
- local function getval (v )
192
- local tname = typename (v )
193
- if tname == " XML.Node" then return v end
194
-
195
- if typename (v ) ~= " table" or (getmetatable (v ) or {}).__tostring then
196
- return tostring (v )
197
- end
198
-
199
- return export .html_table (v )
183
+ local xml = export .xml
184
+ return xml .table {
185
+ function ()
186
+ local function getval (v )
187
+ local tname = typename (v )
188
+ if tname == " XML.Node" then return v end
189
+
190
+ if typename (v ) ~= " table" or (getmetatable (v ) or {}).__tostring then
191
+ return tostring (v )
200
192
end
201
193
202
- for i , v in ipairs (tbl ) do
203
- coroutine.yield (
204
- xml .tr {
205
- xml .td (tostring (i )),
206
- xml .td (getval (v )),
207
- }
208
- )
194
+ return export .html_table (v )
195
+ end
196
+
197
+ for i , v in ipairs (tbl ) do
198
+ coroutine.yield (
199
+ xml .tr {
200
+ xml .td (tostring (i )),
201
+ xml .td (getval (v )),
202
+ }
203
+ )
209
204
210
- tbl [i ] = nil
211
- end
205
+ tbl [i ] = nil
206
+ end
212
207
213
- for k , v in pairs (tbl ) do
214
- coroutine.yield (
215
- xml .tr {
216
- xml .td (tostring (k )),
217
- xml .td (getval (v )),
218
- }
219
- )
220
- end
208
+ for k , v in pairs (tbl ) do
209
+ coroutine.yield (
210
+ xml .tr {
211
+ xml .td (tostring (k )),
212
+ xml .td (getval (v )),
213
+ }
214
+ )
221
215
end
222
- }
223
- end )
216
+ end
217
+ }
224
218
end
225
219
226
220
--- @alias OptionalStringCollection string | string[]
@@ -240,7 +234,7 @@ function export.style(css)
240
234
css_str = css_str .. " }\n "
241
235
end
242
236
243
- return export .generate_node ( function ( xml ) return xml .style (css_str ) end )
237
+ return export .xml .style (css_str )
244
238
end
245
239
246
240
0 commit comments