16 prosody.platform = "windows"; |
16 prosody.platform = "windows"; |
17 elseif package.config:sub(1,1) == "/" then |
17 elseif package.config:sub(1,1) == "/" then |
18 prosody.platform = "posix"; |
18 prosody.platform = "posix"; |
19 end |
19 end |
20 |
20 |
21 local lxp = require "lxp"; |
21 local parse_xml = require "util.xml".parse; |
22 local st = require "util.stanza"; |
|
23 |
|
24 local parse_xml = (function() |
|
25 local ns_prefixes = { |
|
26 ["http://www.w3.org/XML/1998/namespace"] = "xml"; |
|
27 }; |
|
28 local ns_separator = "\1"; |
|
29 local ns_pattern = "^([^"..ns_separator.."]*)"..ns_separator.."?(.*)$"; |
|
30 return function(xml) |
|
31 local handler = {}; |
|
32 local stanza = st.stanza("root"); |
|
33 function handler:StartElement(tagname, attr) |
|
34 local curr_ns,name = tagname:match(ns_pattern); |
|
35 if name == "" then |
|
36 curr_ns, name = "", curr_ns; |
|
37 end |
|
38 if curr_ns ~= "" then |
|
39 attr.xmlns = curr_ns; |
|
40 end |
|
41 for i=1,#attr do |
|
42 local k = attr[i]; |
|
43 attr[i] = nil; |
|
44 local ns, nm = k:match(ns_pattern); |
|
45 if nm ~= "" then |
|
46 ns = ns_prefixes[ns]; |
|
47 if ns then |
|
48 attr[ns..":"..nm] = attr[k]; |
|
49 attr[k] = nil; |
|
50 end |
|
51 end |
|
52 end |
|
53 stanza:tag(name, attr); |
|
54 end |
|
55 function handler:CharacterData(data) |
|
56 stanza:text(data); |
|
57 end |
|
58 function handler:EndElement(tagname) |
|
59 stanza:up(); |
|
60 end |
|
61 local parser = lxp.new(handler, "\1"); |
|
62 local ok, err, line, col = parser:parse(xml); |
|
63 if ok then ok, err, line, col = parser:parse(); end |
|
64 --parser:close(); |
|
65 if ok then |
|
66 return stanza.tags[1]; |
|
67 else |
|
68 return ok, err.." (line "..line..", col "..col..")"; |
|
69 end |
|
70 end; |
|
71 end)(); |
|
72 |
22 |
73 ----------------------------------------------------------------------- |
23 ----------------------------------------------------------------------- |
74 |
24 |
75 package.loaded["util.logger"] = {init = function() return function() end; end} |
25 package.loaded["util.logger"] = {init = function() return function() end; end} |
76 local dm = require "util.datamanager" |
26 local dm = require "util.datamanager" |