+-- Prosody IM v0.2
+-- Copyright (C) 2008 Matthew Wild
+-- Copyright (C) 2008 Waqas Hussain
+--
+-- This program is free software; you can redistribute it and/or
+-- modify it under the terms of the GNU General Public License
+-- as published by the Free Software Foundation; either version 2
+-- of the License, or (at your option) any later version.
+--
+-- This program is distributed in the hope that it will be useful,
+-- but WITHOUT ANY WARRANTY; without even the implied warranty of
+-- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+-- GNU General Public License for more details.
+--
+-- You should have received a copy of the GNU General Public License
+-- along with this program; if not, write to the Free Software
+-- Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+--
+
+
local t_insert = table.insert;
+local t_concat = table.concat;
local t_remove = table.remove;
+local t_concat = table.concat;
local s_format = string.format;
local tostring = tostring;
local setmetatable = setmetatable;
local ipairs = ipairs;
local type = type;
local next = next;
-local print = print;
+local print = print;
local unpack = unpack;
local s_gsub = string.gsub;
-local os = os;
+local os = os;
local do_pretty_printing = not os.getenv("WINDIR");
local getstyle, getstring = require "util.termcolours".getstyle, require "util.termcolours".getstring;
function stanza_mt:query(xmlns)
return self:tag("query", { xmlns = xmlns });
end
+
+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);
(self.last_add[#self.last_add] or self):add_direct_child(s);
local xml_escape = xml_escape;
-function stanza_mt.__tostring(t)
- local children_text = "";
+local function dostring(t, buf, self, xml_escape)
+ t_insert(buf, "<");
+ t_insert(buf, t.name);
+ for k, v in pairs(t.attr) do if type(k) == "string" then
+ t_insert(buf, " ");
+ t_insert(buf, k);
+ t_insert(buf, "='");
+ t_insert(buf, (xml_escape(tostring(v))));
+ t_insert(buf, "'");
+ end end
+ t_insert(buf, ">");
for n, child in ipairs(t) do
- if type(child) == "string" then
- children_text = children_text .. xml_escape(child);
+ if child.name then
+ self(child, buf, self, xml_escape);
else
- children_text = children_text .. tostring(child);
+ t_insert(buf, (xml_escape(child)));
end
end
+ t_insert(buf, "</");
+ t_insert(buf, t.name);
+ t_insert(buf, ">");
+end
- local attr_string = "";
- if t.attr then
- for k, v in pairs(t.attr) do if type(k) == "string" then attr_string = attr_string .. s_format(" %s='%s'", k, xml_escape(tostring(v))); end end
- end
- return s_format("<%s%s>%s</%s>", t.name, attr_string, children_text, t.name);
+function stanza_mt.__tostring(t)
+ local buf = {};
+ dostring(t, buf, dostring, xml_escape);
+ return t_concat(buf);
end
+
function stanza_mt.top_tag(t)
local attr_string = "";
if t.attr then