diff options
author | Matthew Wild <mwild1@gmail.com> | 2015-12-08 23:15:42 +0000 |
---|---|---|
committer | Matthew Wild <mwild1@gmail.com> | 2015-12-08 23:15:42 +0000 |
commit | dd37beeff9f229dee36da04d625d5200b69f945c (patch) | |
tree | 92b42e2b3bb371b3273c61157e86d553f20700a6 /util/stanza.lua | |
parent | bb0ad8d2a9da64ab00fa01b047031e8256554e89 (diff) | |
download | prosody-dd37beeff9f229dee36da04d625d5200b69f945c.tar.gz prosody-dd37beeff9f229dee36da04d625d5200b69f945c.zip |
util.stanza, util.xml, util.xmppstream: Add support for tracking defined namespaces and their prefix (stanza.namespaces), knowing/preserving prefix names is required for some applications (thanks daurnimator)
Diffstat (limited to 'util/stanza.lua')
-rw-r--r-- | util/stanza.lua | 15 |
1 files changed, 10 insertions, 5 deletions
diff --git a/util/stanza.lua b/util/stanza.lua index 90422a06..c682f833 100644 --- a/util/stanza.lua +++ b/util/stanza.lua @@ -40,8 +40,8 @@ local _ENV = nil; local stanza_mt = { __type = "stanza" }; stanza_mt.__index = stanza_mt; -local function stanza(name, attr) - local stanza = { name = name, attr = attr or {}, tags = {} }; +local function stanza(name, attr, namespaces) + local stanza = { name = name, attr = attr or {}, namespaces = namespaces, tags = {} }; return setmetatable(stanza, stanza_mt); end local stanza = stanza; @@ -54,8 +54,8 @@ function stanza_mt:body(text, attr) return self:tag("body", attr):text(text); end -function stanza_mt:tag(name, attrs) - local s = stanza(name, attrs); +function stanza_mt:tag(name, attr, namespaces) + local s = stanza(name, attr, namespaces); local last_add = self.last_add; if not last_add then last_add = {}; self.last_add = last_add; end (last_add[#last_add] or self):add_direct_child(s); @@ -333,7 +333,12 @@ end local function clone(stanza) local attr, tags = {}, {}; for k,v in pairs(stanza.attr) do attr[k] = v; end - local new = { name = stanza.name, attr = attr, tags = tags }; + local old_namespaces, namespaces = stanza.namespaces; + if old_namespaces then + namespaces = {}; + for k,v in pairs(old_namespaces) do namespaces[k] = v; end + end + local new = { name = stanza.name, attr = attr, namespaces = namespaces, tags = tags }; for i=1,#stanza do local child = stanza[i]; if child.name then |