Software /
code /
prosody
Comparison
core/xmlhandlers.lua @ 2463:d9ff0190eb4a
xmlhandlers: Define ns_separator and ns_pattern to save repeating it in literal form throughout the file
author | Matthew Wild <mwild1@gmail.com> |
---|---|
date | Mon, 18 Jan 2010 19:00:18 +0000 |
parent | 2261:13d55c66bf81 |
child | 2464:0b5f0ae7a6b1 |
comparison
equal
deleted
inserted
replaced
2462:2d81cc25b5a6 | 2463:d9ff0190eb4a |
---|---|
24 module "xmlhandlers" | 24 module "xmlhandlers" |
25 | 25 |
26 local ns_prefixes = { | 26 local ns_prefixes = { |
27 ["http://www.w3.org/XML/1998/namespace"] = "xml"; | 27 ["http://www.w3.org/XML/1998/namespace"] = "xml"; |
28 } | 28 } |
29 local ns_separator = "\1"; | |
30 local ns_pattern = "^([^"..ns_separator.."]*)"..ns_separator.."?(.*)$"; | |
29 | 31 |
30 function init_xmlhandlers(session, stream_callbacks) | 32 function init_xmlhandlers(session, stream_callbacks) |
31 local ns_stack = { "" }; | 33 local ns_stack = { "" }; |
32 local curr_tag; | 34 local curr_tag; |
33 local chardata = {}; | 35 local chardata = {}; |
47 if stanza and #chardata > 0 then | 49 if stanza and #chardata > 0 then |
48 -- We have some character data in the buffer | 50 -- We have some character data in the buffer |
49 stanza:text(t_concat(chardata)); | 51 stanza:text(t_concat(chardata)); |
50 chardata = {}; | 52 chardata = {}; |
51 end | 53 end |
52 local curr_ns,name = tagname:match("^([^\1]*)\1?(.*)$"); | 54 local curr_ns,name = tagname:match(ns_pattern); |
53 if name == "" then | 55 if name == "" then |
54 curr_ns, name = "", curr_ns; | 56 curr_ns, name = "", curr_ns; |
55 end | 57 end |
56 | 58 |
57 if curr_ns ~= stream_default_ns then | 59 if curr_ns ~= stream_default_ns then |
60 | 62 |
61 -- FIXME !!!!! | 63 -- FIXME !!!!! |
62 for i=1,#attr do | 64 for i=1,#attr do |
63 local k = attr[i]; | 65 local k = attr[i]; |
64 attr[i] = nil; | 66 attr[i] = nil; |
65 local ns, nm = k:match("^([^\1]*)\1?(.*)$"); | 67 local ns, nm = k:match(ns_pattern); |
66 if nm ~= "" then | 68 if nm ~= "" then |
67 ns = ns_prefixes[ns]; | 69 ns = ns_prefixes[ns]; |
68 if ns then | 70 if ns then |
69 attr[ns..":"..nm] = attr[k]; | 71 attr[ns..":"..nm] = attr[k]; |
70 attr[k] = nil; | 72 attr[k] = nil; |
102 if stanza then | 104 if stanza then |
103 t_insert(chardata, data); | 105 t_insert(chardata, data); |
104 end | 106 end |
105 end | 107 end |
106 function xml_handlers:EndElement(tagname) | 108 function xml_handlers:EndElement(tagname) |
107 local curr_ns,name = tagname:match("^([^\1]*)\1?(.*)$"); | 109 local curr_ns,name = tagname:match(ns_pattern); |
108 if name == "" then | 110 if name == "" then |
109 curr_ns, name = "", curr_ns; | 111 curr_ns, name = "", curr_ns; |
110 end | 112 end |
111 if (not stanza) or (#stanza.last_add > 0 and name ~= stanza.last_add[#stanza.last_add].name) then | 113 if (not stanza) or (#stanza.last_add > 0 and name ~= stanza.last_add[#stanza.last_add].name) then |
112 if tagname == stream_tag then | 114 if tagname == stream_tag then |