# HG changeset patch # User daurnimator # Date 1294204442 0 # Node ID 2b53b4b5d46e106e9b8b1f28305f81987eab373e # Parent ed90aace9adde7564e95a7980d5facd9f65829f4 util.xmllex, util.xmppstream: It runs diff -r ed90aace9add -r 2b53b4b5d46e util/xmllex.lua --- a/util/xmllex.lua Wed Jan 05 05:12:54 2011 +0000 +++ b/util/xmllex.lua Wed Jan 05 05:14:02 2011 +0000 @@ -1,9 +1,11 @@ -local assert, ipairs , pairs , setmetatable , rawget , rawset , tostring = - assert, ipairs , pairs , setmetatable , rawget , rawset , tostring -local strsub = string.sub +local assert , ipairs , pairs , setmetatable , rawget , rawset , tostring = + assert , ipairs , pairs , setmetatable , rawget , rawset , tostring +local strsub , strmatch = string.sub , string.match local tblconcat = table.concat local tblinsert = table.insert +local stanza_methods = require "util.stanza".stanza_mt; + local function getstring ( msgs , startpos , finishpos ) if #msgs == 1 then --All originated in same string return strsub ( msgs[1] , startpos , finishpos ) @@ -61,7 +63,7 @@ end local function handleinside ( str, r , initial ) - local c , d , selfclosing = str:find ( "(/?)>" , initial ) + local c , d , selfclosing = str:find ( "([/?]?)>" , initial ) if not c then r.state = "inside" return false @@ -70,7 +72,7 @@ local m = r[#r] m.finish = d m.finishs = c - 1 - if selfclosing == "/" then + if selfclosing == "/" or selfclosing == "?" then m.type = "selfclosing" r.depth = r.depth - 1 end @@ -117,57 +119,132 @@ return r end -local function process_starttag ( starttag ) - local str = tostring ( starttag ) +local function get_name ( str ) + return strmatch ( str , "^<([^%s>/]+)" ) +end + +local function get_attr ( str ) local attr = { } - - local elem = str:match ( "[^%s=>