util/template.lua
changeset 5214 1430c6f36621
parent 4495 c0f5c78cb817
child 6780 5de6b93d0190
--- a/util/template.lua	Mon Dec 03 05:32:51 2012 +0500
+++ b/util/template.lua	Mon Dec 03 05:33:56 2012 +0500
@@ -1,6 +1,5 @@
 
-local st = require "util.stanza";
-local lxp = require "lxp";
+local stanza_mt = require "util.stanza".stanza_mt;
 local setmetatable = setmetatable;
 local pairs = pairs;
 local ipairs = ipairs;
@@ -8,58 +7,10 @@
 local loadstring = loadstring;
 local debug = debug;
 local t_remove = table.remove;
+local parse_xml = require "util.xml".parse;
 
 module("template")
 
-local parse_xml = (function()
-	local ns_prefixes = {
-		["http://www.w3.org/XML/1998/namespace"] = "xml";
-	};
-	local ns_separator = "\1";
-	local ns_pattern = "^([^"..ns_separator.."]*)"..ns_separator.."?(.*)$";
-	return function(xml)
-		local handler = {};
-		local stanza = st.stanza("root");
-		function handler:StartElement(tagname, attr)
-			local curr_ns,name = tagname:match(ns_pattern);
-			if name == "" then
-				curr_ns, name = "", curr_ns;
-			end
-			if curr_ns ~= "" then
-				attr.xmlns = curr_ns;
-			end
-			for i=1,#attr do
-				local k = attr[i];
-				attr[i] = nil;
-				local ns, nm = k:match(ns_pattern);
-				if nm ~= "" then
-					ns = ns_prefixes[ns]; 
-					if ns then 
-						attr[ns..":"..nm] = attr[k];
-						attr[k] = nil;
-					end
-				end
-			end
-			stanza:tag(name, attr);
-		end
-		function handler:CharacterData(data)
-			stanza:text(data);
-		end
-		function handler:EndElement(tagname)
-			stanza:up();
-		end
-		local parser = lxp.new(handler, "\1");
-		local ok, err, line, col = parser:parse(xml);
-		if ok then ok, err, line, col = parser:parse(); end
-		--parser:close();
-		if ok then
-			return stanza.tags[1];
-		else
-			return ok, err.." (line "..line..", col "..col..")";
-		end
-	end;
-end)();
-
 local function trim_xml(stanza)
 	for i=#stanza,1,-1 do
 		local child = stanza[i];
@@ -113,7 +64,6 @@
 	end
 	return lookup[stanza];
 end
-local stanza_mt = st.stanza_mt;
 local function create_cloner(stanza, chunkname)
 	local lookup = {};
 	local name = create_clone_string(stanza, lookup, "");