# HG changeset patch # User Daurnimator # Date 1294079468 0 # Node ID 7a2856c8ab7a9aa87c548aa0216dd3abcdec0218 # Parent 783004a1222460e9c98db5cd5adde1c79ec185c6 Tree structure now similar to prosody stanza format diff -r 783004a12224 -r 7a2856c8ab7a util/xmllex.lua --- a/util/xmllex.lua Mon Jan 03 16:47:06 2011 +0000 +++ b/util/xmllex.lua Mon Jan 03 18:31:08 2011 +0000 @@ -1,32 +1,7 @@ -a=[[ - - - - - -]] -b=[[ - - Wow, I'm green with envy! - - -

- Wow, I'm green - with envy! -

- - -
-]] - local ipairs , pairs , setmetatable = ipairs , pairs , setmetatable local strsub = string.sub local tblconcat = table.concat +local tblinsert = table.insert local function getstring ( stringindex , startmsg , startpos , finishmsg , finishpos ) if startmsg == finishmsg then --All originated in same string @@ -40,7 +15,14 @@ local m_mt = { __tostring = function ( v ) - return getstring ( v.stringindex , v.startmsg , v.starte + 1 , v.finishmsg , v.finishs - 1 ) + local str = v.stringform + if str then + return str + else + str = getstring ( v.stringindex , v.startmsg , v.start , v.finishmsg , v.finish ) + rawset ( v , "stringform" , str ) + return str + end end } @@ -108,40 +90,10 @@ return r end -local function tagindex_to_tree(indices) - local root = {} - local leaf = root - local stringindex = indices.stringindex - for k ,v in ipairs ( indices ) do - if v.selfclosed then - print("selfclosed",v) - leaf [ #leaf + 1 ] = { - parent = leaf ; - selfclosing = v ; - } - elseif v.closed then - print("close",v) - leaf.endtag = v - leaf = leaf.parent - else - print("open",v) - - local newleaf = { - parent = leaf ; - starttag = v ; - } - leaf [ #leaf + 1 ] = newleaf - leaf = newleaf - end - end - assert ( leaf == root , "Mismatched opening/closing tags" ) - return root; -end - -local function getattributes ( starttag ) +local function process_starttag ( starttag ) local str = tostring ( starttag ) + local attr = { } - local attr = { } local elem = str:match ( "[^%s=>