util.stanza: Fixes for xmllex-generated stanza objects

Wed, 05 Jan 2011 03:06:47 +0000

author
daurnimator <quae@daurnimator.com>
date
Wed, 05 Jan 2011 03:06:47 +0000
changeset 3999
257d13734d32
parent 3998
13a5a8df7c34
child 4000
279a3f9f540c

util.stanza: Fixes for xmllex-generated stanza objects

util/stanza.lua file | annotate | diff | comparison | revisions
--- 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 = { ["'"] = "&apos;", ["\""] = "&quot;", ["<"] = "&lt;", [">"] = "&gt;", ["&"] = "&amp;" };
-	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

mercurial