# HG changeset patch # User Waqas Hussain # Date 1328382380 -18000 # Node ID c0f5c78cb8177bfa98e482ae197acd6e0319da62 # Parent 694491140a67de7fd6c79ed18cbcb19145a5b7cc util.template: Refactoring to make the string->stanza conversion code more generic. diff -r 694491140a67 -r c0f5c78cb817 util/template.lua --- a/util/template.lua Thu Jan 26 18:48:21 2012 +0000 +++ b/util/template.lua Sun Feb 05 00:06:20 2012 +0500 @@ -7,6 +7,7 @@ local error = error; local loadstring = loadstring; local debug = debug; +local t_remove = table.remove; module("template") @@ -42,7 +43,6 @@ stanza:tag(name, attr); end function handler:CharacterData(data) - data = data:gsub("^%s*", ""):gsub("%s*$", ""); stanza:text(data); end function handler:EndElement(tagname) @@ -60,6 +60,19 @@ end; end)(); +local function trim_xml(stanza) + for i=#stanza,1,-1 do + local child = stanza[i]; + if child.name then + trim_xml(child); + else + child = child:gsub("^%s*", ""):gsub("%s*$", ""); + stanza[i] = child; + if child == "" then t_remove(stanza, i); end + end + end +end + local function create_string_string(str) str = ("%q"):format(str); str = str:gsub("{([^}]*)}", function(s) @@ -118,6 +131,7 @@ local function create_template(templates, text) local stanza, err = parse_xml(text); if not stanza then error(err); end + trim_xml(stanza); local info = debug.getinfo(3, "Sl"); info = info and ("template(%s:%d)"):format(info.short_src:match("[^\\/]*$"), info.currentline) or "template(unknown)";