Comparison

util/stanza.lua @ 262:8c73fb2ff4a2

A treat for Linux users ;)
author Matthew Wild <mwild1@gmail.com>
date Fri, 14 Nov 2008 16:03:33 +0000
parent 251:5b6dec537914
child 338:804f5e62a41f
comparison
equal deleted inserted replaced
261:790cf21e2af7 262:8c73fb2ff4a2
8 local type = type; 8 local type = type;
9 local next = next; 9 local next = next;
10 local print = print; 10 local print = print;
11 local unpack = unpack; 11 local unpack = unpack;
12 local s_gsub = string.gsub; 12 local s_gsub = string.gsub;
13 13 local os = os;
14 local debug = debug; 14
15 local do_pretty_printing = not os.getenv("WINDIR");
16 local getstyle, getstring = require "util.termcolours".getstyle, require "util.termcolours".getstring;
17
15 local log = require "util.logger".init("stanza"); 18 local log = require "util.logger".init("stanza");
16 19
17 module "stanza" 20 module "stanza"
18 21
19 stanza_mt = {}; 22 stanza_mt = {};
155 t_insert(tags, child); 158 t_insert(tags, child);
156 end 159 end
157 end 160 end
158 stanza.tags = tags; 161 stanza.tags = tags;
159 end 162 end
160 if not stanza.last_add then
161 stanza.last_add = {};
162 end
163 end 163 end
164 164
165 return stanza; 165 return stanza;
166 end 166 end
167 167
193 193
194 function presence(attr) 194 function presence(attr)
195 return stanza("presence", attr); 195 return stanza("presence", attr);
196 end 196 end
197 197
198 if do_pretty_printing then
199 local style_attrk = getstyle("yellow");
200 local style_attrv = getstyle("red");
201 local style_tagname = getstyle("red");
202 local style_punc = getstyle("magenta");
203
204 local attr_format = " "..getstring(style_attrk, "%s")..getstring(style_punc, "=")..getstring(style_attrv, "'%s'");
205 local top_tag_format = getstring(style_punc, "<")..getstring(style_tagname, "%s").."%s"..getstring(style_punc, ">");
206 --local tag_format = getstring(style_punc, "<")..getstring(style_tagname, "%s").."%s"..getstring(style_punc, ">").."%s"..getstring(style_punc, "</")..getstring(style_tagname, "%s")..getstring(style_punc, ">");
207 local tag_format = top_tag_format.."%s"..getstring(style_punc, "</")..getstring(style_tagname, "%s")..getstring(style_punc, ">");
208 function stanza_mt.pretty_print(t)
209 local children_text = "";
210 for n, child in ipairs(t) do
211 if type(child) == "string" then
212 children_text = children_text .. xml_escape(child);
213 else
214 children_text = children_text .. child:pretty_print();
215 end
216 end
217
218 local attr_string = "";
219 if t.attr then
220 for k, v in pairs(t.attr) do if type(k) == "string" then attr_string = attr_string .. s_format(attr_format, k, tostring(v)); end end
221 end
222 return s_format(tag_format, t.name, attr_string, children_text, t.name);
223 end
224
225 function stanza_mt.pretty_top_tag(t)
226 local attr_string = "";
227 if t.attr then
228 for k, v in pairs(t.attr) do if type(k) == "string" then attr_string = attr_string .. s_format(attr_format, k, tostring(v)); end end
229 end
230 return s_format(top_tag_format, t.name, attr_string);
231 end
232 else
233 -- Sorry, fresh out of colours for you guys ;)
234 stanza_mt.pretty_print = stanza_mt.__tostring;
235 stanza_mt.pretty_top_tag = stanza_mt.top_tag;
236 end
237
198 return _M; 238 return _M;