util.stanza: Don't add xmlns to tags when serializing if same as the parent tag's...
authorMatthew Wild <mwild1@gmail.com>
Sat, 17 Oct 2009 18:47:01 +0000 (19:47 +0100)
committerMatthew Wild <mwild1@gmail.com>
Sat, 17 Oct 2009 18:47:01 +0000 (19:47 +0100)
util/stanza.lua

index 4e833caad35d3f3e3bb771645035752b818bf08e..1e0b15179268d12dea0c2cb0cfcb60fb3809bfb4 100644 (file)
@@ -6,6 +6,7 @@
 -- COPYING file in the source package for more information.
 --
 
+
 local t_insert      =  table.insert;
 local t_concat      =  table.concat;
 local t_remove      =  table.remove;
@@ -130,7 +131,7 @@ do
        _M.xml_escape = xml_escape;
 end
 
-local function _dostring(t, buf, self, xml_escape)
+local function _dostring(t, buf, self, xml_escape, parentns)
        local nsid = 0;
        local name = t.name
        t_insert(buf, "<"..name);
@@ -139,7 +140,7 @@ local function _dostring(t, buf, self, xml_escape)
                        local ns, attrk = s_match(k, "^([^|]+)|(.+)$");
                        nsid = nsid + 1;
                        t_insert(buf, " xmlns:ns"..nsid.."='"..xml_escape(ns).."' ".."ns"..nsid..":"..attrk.."='"..xml_escape(v).."'");
-               else
+               elseif not(k == "xmlns" and v == parentns) then
                        t_insert(buf, " "..k.."='"..xml_escape(v).."'");
                end
        end
@@ -151,7 +152,7 @@ local function _dostring(t, buf, self, xml_escape)
                for n=1,len do
                        local child = t[n];
                        if child.name then
-                               self(child, buf, self, xml_escape);
+                               self(child, buf, self, xml_escape, t.attr.xmlns);
                        else
                                t_insert(buf, xml_escape(child));
                        end
@@ -161,7 +162,7 @@ local function _dostring(t, buf, self, xml_escape)
 end
 function stanza_mt.__tostring(t)
        local buf = {};
-       _dostring(t, buf, _dostring, xml_escape);
+       _dostring(t, buf, _dostring, xml_escape, nil);
        return t_concat(buf);
 end