# HG changeset patch # User daurnimator # Date 1294196807 0 # Node ID 257d13734d32bceb66b4343246a2a67cb3e65ad9 # Parent 13a5a8df7c34cb7abf31915379d2efff4db00568 util.stanza: Fixes for xmllex-generated stanza objects diff -r 13a5a8df7c34 -r 257d13734d32 util/stanza.lua --- a/util/stanza.lua Wed Jan 05 03:05:13 2011 +0000 +++ b/util/stanza.lua Wed Jan 05 03:06:47 2011 +0000 @@ -180,7 +180,7 @@ local xml_escape do local escape_table = { ["'"] = "'", ["\""] = """, ["<"] = "<", [">"] = ">", ["&"] = "&" }; - function xml_escape(str) return (s_gsub(str, "['&<>\"]", escape_table)); end + function xml_escape(str) return (s_gsub(tostring(str), "['&<>\"]", escape_table)); end _M.xml_escape = xml_escape; end @@ -229,7 +229,11 @@ function stanza_mt.get_text(t) if #t.tags == 0 then - return t_concat(t); + local s = {}; + for i, v in ipairs(t) do + s[i] = tostring(v); + end + return t_concat(s); end end @@ -273,10 +277,10 @@ function preserialize(stanza) local s = { name = stanza.name, attr = stanza.attr }; for _, child in ipairs(stanza) do - if type(child) == "table" then + if child.tags then t_insert(s, preserialize(child)); else - t_insert(s, child); + t_insert(s, tostring(child)); end end return s; @@ -300,7 +304,7 @@ end setmetatable(stanza, stanza_mt); for _, child in ipairs(stanza) do - if type(child) == "table" then + if child.tags then deserialize(child); end end