Annotate

fallbacks/lxp.lua @ 10813:4a9ff4f61796

mod_presence: Send unavailable presence in current thread run `session:dispatch_stanza(pres)` enqueues processing of the stanza in the sessions async thread, but becasue the entire stream close handling is now in that thread it would process the presence after the stream and session was completely closed, leading to weird errors "sent to a resting session". We call core_process_stanza() since this is what :dispatch_stanza calls in the end.
author Kim Alvefur <zash@zash.se>
date Sat, 09 May 2020 00:28:10 +0200
parent 5776:bd0ff8ae98a8
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
3804
da75eb23dbba fallbacks/lxp.lua: Pure Lua pseudo-XML parser. Implements the same API as LuaExpat.
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
1
da75eb23dbba fallbacks/lxp.lua: Pure Lua pseudo-XML parser. Implements the same API as LuaExpat.
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
2 local coroutine = coroutine;
da75eb23dbba fallbacks/lxp.lua: Pure Lua pseudo-XML parser. Implements the same API as LuaExpat.
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
3 local tonumber = tonumber;
da75eb23dbba fallbacks/lxp.lua: Pure Lua pseudo-XML parser. Implements the same API as LuaExpat.
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
4 local string = string;
da75eb23dbba fallbacks/lxp.lua: Pure Lua pseudo-XML parser. Implements the same API as LuaExpat.
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
5 local setmetatable, getmetatable = setmetatable, getmetatable;
da75eb23dbba fallbacks/lxp.lua: Pure Lua pseudo-XML parser. Implements the same API as LuaExpat.
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
6 local pairs = pairs;
da75eb23dbba fallbacks/lxp.lua: Pure Lua pseudo-XML parser. Implements the same API as LuaExpat.
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
7
da75eb23dbba fallbacks/lxp.lua: Pure Lua pseudo-XML parser. Implements the same API as LuaExpat.
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
8 local deadroutine = coroutine.create(function() end);
da75eb23dbba fallbacks/lxp.lua: Pure Lua pseudo-XML parser. Implements the same API as LuaExpat.
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
9 coroutine.resume(deadroutine);
da75eb23dbba fallbacks/lxp.lua: Pure Lua pseudo-XML parser. Implements the same API as LuaExpat.
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
10
da75eb23dbba fallbacks/lxp.lua: Pure Lua pseudo-XML parser. Implements the same API as LuaExpat.
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
11 module("lxp")
da75eb23dbba fallbacks/lxp.lua: Pure Lua pseudo-XML parser. Implements the same API as LuaExpat.
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
12
da75eb23dbba fallbacks/lxp.lua: Pure Lua pseudo-XML parser. Implements the same API as LuaExpat.
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
13 local entity_map = setmetatable({
da75eb23dbba fallbacks/lxp.lua: Pure Lua pseudo-XML parser. Implements the same API as LuaExpat.
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
14 ["amp"] = "&";
da75eb23dbba fallbacks/lxp.lua: Pure Lua pseudo-XML parser. Implements the same API as LuaExpat.
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
15 ["gt"] = ">";
da75eb23dbba fallbacks/lxp.lua: Pure Lua pseudo-XML parser. Implements the same API as LuaExpat.
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
16 ["lt"] = "<";
da75eb23dbba fallbacks/lxp.lua: Pure Lua pseudo-XML parser. Implements the same API as LuaExpat.
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
17 ["apos"] = "'";
da75eb23dbba fallbacks/lxp.lua: Pure Lua pseudo-XML parser. Implements the same API as LuaExpat.
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
18 ["quot"] = "\"";
da75eb23dbba fallbacks/lxp.lua: Pure Lua pseudo-XML parser. Implements the same API as LuaExpat.
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
19 }, {__index = function(_, s)
da75eb23dbba fallbacks/lxp.lua: Pure Lua pseudo-XML parser. Implements the same API as LuaExpat.
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
20 if s:sub(1,1) == "#" then
da75eb23dbba fallbacks/lxp.lua: Pure Lua pseudo-XML parser. Implements the same API as LuaExpat.
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
21 if s:sub(2,2) == "x" then
da75eb23dbba fallbacks/lxp.lua: Pure Lua pseudo-XML parser. Implements the same API as LuaExpat.
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
22 return string.char(tonumber(s:sub(3), 16));
da75eb23dbba fallbacks/lxp.lua: Pure Lua pseudo-XML parser. Implements the same API as LuaExpat.
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
23 else
da75eb23dbba fallbacks/lxp.lua: Pure Lua pseudo-XML parser. Implements the same API as LuaExpat.
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
24 return string.char(tonumber(s:sub(2)));
da75eb23dbba fallbacks/lxp.lua: Pure Lua pseudo-XML parser. Implements the same API as LuaExpat.
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
25 end
da75eb23dbba fallbacks/lxp.lua: Pure Lua pseudo-XML parser. Implements the same API as LuaExpat.
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
26 end
da75eb23dbba fallbacks/lxp.lua: Pure Lua pseudo-XML parser. Implements the same API as LuaExpat.
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
27 end
da75eb23dbba fallbacks/lxp.lua: Pure Lua pseudo-XML parser. Implements the same API as LuaExpat.
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
28 });
da75eb23dbba fallbacks/lxp.lua: Pure Lua pseudo-XML parser. Implements the same API as LuaExpat.
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
29 local function xml_unescape(str)
da75eb23dbba fallbacks/lxp.lua: Pure Lua pseudo-XML parser. Implements the same API as LuaExpat.
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
30 return (str:gsub("&(.-);", entity_map));
da75eb23dbba fallbacks/lxp.lua: Pure Lua pseudo-XML parser. Implements the same API as LuaExpat.
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
31 end
da75eb23dbba fallbacks/lxp.lua: Pure Lua pseudo-XML parser. Implements the same API as LuaExpat.
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
32 local function parse_tag(s)
da75eb23dbba fallbacks/lxp.lua: Pure Lua pseudo-XML parser. Implements the same API as LuaExpat.
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
33 local name,sattr=(s):gmatch("([^%s]+)(.*)")();
da75eb23dbba fallbacks/lxp.lua: Pure Lua pseudo-XML parser. Implements the same API as LuaExpat.
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
34 local attr = {};
da75eb23dbba fallbacks/lxp.lua: Pure Lua pseudo-XML parser. Implements the same API as LuaExpat.
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
35 for a,b in (sattr):gmatch("([^=%s]+)=['\"]([^'\"]*)['\"]") do attr[a] = xml_unescape(b); end
da75eb23dbba fallbacks/lxp.lua: Pure Lua pseudo-XML parser. Implements the same API as LuaExpat.
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
36 return name, attr;
da75eb23dbba fallbacks/lxp.lua: Pure Lua pseudo-XML parser. Implements the same API as LuaExpat.
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
37 end
da75eb23dbba fallbacks/lxp.lua: Pure Lua pseudo-XML parser. Implements the same API as LuaExpat.
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
38
da75eb23dbba fallbacks/lxp.lua: Pure Lua pseudo-XML parser. Implements the same API as LuaExpat.
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
39 local function parser(data, handlers, ns_separator)
da75eb23dbba fallbacks/lxp.lua: Pure Lua pseudo-XML parser. Implements the same API as LuaExpat.
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
40 local function read_until(str)
da75eb23dbba fallbacks/lxp.lua: Pure Lua pseudo-XML parser. Implements the same API as LuaExpat.
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
41 local pos = data:find(str, nil, true);
da75eb23dbba fallbacks/lxp.lua: Pure Lua pseudo-XML parser. Implements the same API as LuaExpat.
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
42 while not pos do
da75eb23dbba fallbacks/lxp.lua: Pure Lua pseudo-XML parser. Implements the same API as LuaExpat.
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
43 data = data..coroutine.yield();
da75eb23dbba fallbacks/lxp.lua: Pure Lua pseudo-XML parser. Implements the same API as LuaExpat.
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
44 pos = data:find(str, nil, true);
da75eb23dbba fallbacks/lxp.lua: Pure Lua pseudo-XML parser. Implements the same API as LuaExpat.
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
45 end
da75eb23dbba fallbacks/lxp.lua: Pure Lua pseudo-XML parser. Implements the same API as LuaExpat.
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
46 local r = data:sub(1, pos);
da75eb23dbba fallbacks/lxp.lua: Pure Lua pseudo-XML parser. Implements the same API as LuaExpat.
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
47 data = data:sub(pos+1);
da75eb23dbba fallbacks/lxp.lua: Pure Lua pseudo-XML parser. Implements the same API as LuaExpat.
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
48 return r;
da75eb23dbba fallbacks/lxp.lua: Pure Lua pseudo-XML parser. Implements the same API as LuaExpat.
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
49 end
da75eb23dbba fallbacks/lxp.lua: Pure Lua pseudo-XML parser. Implements the same API as LuaExpat.
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
50 local function read_before(str)
da75eb23dbba fallbacks/lxp.lua: Pure Lua pseudo-XML parser. Implements the same API as LuaExpat.
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
51 local pos = data:find(str, nil, true);
da75eb23dbba fallbacks/lxp.lua: Pure Lua pseudo-XML parser. Implements the same API as LuaExpat.
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
52 while not pos do
da75eb23dbba fallbacks/lxp.lua: Pure Lua pseudo-XML parser. Implements the same API as LuaExpat.
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
53 data = data..coroutine.yield();
da75eb23dbba fallbacks/lxp.lua: Pure Lua pseudo-XML parser. Implements the same API as LuaExpat.
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
54 pos = data:find(str, nil, true);
da75eb23dbba fallbacks/lxp.lua: Pure Lua pseudo-XML parser. Implements the same API as LuaExpat.
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
55 end
da75eb23dbba fallbacks/lxp.lua: Pure Lua pseudo-XML parser. Implements the same API as LuaExpat.
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
56 local r = data:sub(1, pos-1);
da75eb23dbba fallbacks/lxp.lua: Pure Lua pseudo-XML parser. Implements the same API as LuaExpat.
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
57 data = data:sub(pos);
da75eb23dbba fallbacks/lxp.lua: Pure Lua pseudo-XML parser. Implements the same API as LuaExpat.
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
58 return r;
da75eb23dbba fallbacks/lxp.lua: Pure Lua pseudo-XML parser. Implements the same API as LuaExpat.
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
59 end
da75eb23dbba fallbacks/lxp.lua: Pure Lua pseudo-XML parser. Implements the same API as LuaExpat.
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
60 local function peek()
da75eb23dbba fallbacks/lxp.lua: Pure Lua pseudo-XML parser. Implements the same API as LuaExpat.
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
61 while #data == 0 do data = coroutine.yield(); end
da75eb23dbba fallbacks/lxp.lua: Pure Lua pseudo-XML parser. Implements the same API as LuaExpat.
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
62 return data:sub(1,1);
da75eb23dbba fallbacks/lxp.lua: Pure Lua pseudo-XML parser. Implements the same API as LuaExpat.
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
63 end
5776
bd0ff8ae98a8 Remove all trailing whitespace
Florian Zeitz <florob@babelmonkeys.de>
parents: 3899
diff changeset
64
3804
da75eb23dbba fallbacks/lxp.lua: Pure Lua pseudo-XML parser. Implements the same API as LuaExpat.
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
65 local ns = { xml = "http://www.w3.org/XML/1998/namespace" };
da75eb23dbba fallbacks/lxp.lua: Pure Lua pseudo-XML parser. Implements the same API as LuaExpat.
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
66 ns.__index = ns;
da75eb23dbba fallbacks/lxp.lua: Pure Lua pseudo-XML parser. Implements the same API as LuaExpat.
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
67 local function apply_ns(name, dodefault)
da75eb23dbba fallbacks/lxp.lua: Pure Lua pseudo-XML parser. Implements the same API as LuaExpat.
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
68 local prefix,n = name:match("^([^:]*):(.*)$");
da75eb23dbba fallbacks/lxp.lua: Pure Lua pseudo-XML parser. Implements the same API as LuaExpat.
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
69 if prefix and ns[prefix] then
da75eb23dbba fallbacks/lxp.lua: Pure Lua pseudo-XML parser. Implements the same API as LuaExpat.
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
70 return ns[prefix]..ns_separator..n;
da75eb23dbba fallbacks/lxp.lua: Pure Lua pseudo-XML parser. Implements the same API as LuaExpat.
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
71 end
da75eb23dbba fallbacks/lxp.lua: Pure Lua pseudo-XML parser. Implements the same API as LuaExpat.
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
72 if dodefault and ns[""] then
da75eb23dbba fallbacks/lxp.lua: Pure Lua pseudo-XML parser. Implements the same API as LuaExpat.
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
73 return ns[""]..ns_separator..name;
da75eb23dbba fallbacks/lxp.lua: Pure Lua pseudo-XML parser. Implements the same API as LuaExpat.
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
74 end
da75eb23dbba fallbacks/lxp.lua: Pure Lua pseudo-XML parser. Implements the same API as LuaExpat.
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
75 return name;
da75eb23dbba fallbacks/lxp.lua: Pure Lua pseudo-XML parser. Implements the same API as LuaExpat.
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
76 end
da75eb23dbba fallbacks/lxp.lua: Pure Lua pseudo-XML parser. Implements the same API as LuaExpat.
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
77 local function push(tag, attr)
da75eb23dbba fallbacks/lxp.lua: Pure Lua pseudo-XML parser. Implements the same API as LuaExpat.
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
78 ns = setmetatable({}, ns);
da75eb23dbba fallbacks/lxp.lua: Pure Lua pseudo-XML parser. Implements the same API as LuaExpat.
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
79 for k,v in pairs(attr) do
da75eb23dbba fallbacks/lxp.lua: Pure Lua pseudo-XML parser. Implements the same API as LuaExpat.
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
80 local xmlns = k == "xmlns" and "" or k:match("^xmlns:(.*)$");
da75eb23dbba fallbacks/lxp.lua: Pure Lua pseudo-XML parser. Implements the same API as LuaExpat.
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
81 if xmlns then
da75eb23dbba fallbacks/lxp.lua: Pure Lua pseudo-XML parser. Implements the same API as LuaExpat.
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
82 ns[xmlns] = v;
da75eb23dbba fallbacks/lxp.lua: Pure Lua pseudo-XML parser. Implements the same API as LuaExpat.
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
83 attr[k] = nil;
da75eb23dbba fallbacks/lxp.lua: Pure Lua pseudo-XML parser. Implements the same API as LuaExpat.
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
84 end
da75eb23dbba fallbacks/lxp.lua: Pure Lua pseudo-XML parser. Implements the same API as LuaExpat.
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
85 end
da75eb23dbba fallbacks/lxp.lua: Pure Lua pseudo-XML parser. Implements the same API as LuaExpat.
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
86 local newattr, n = {}, 0;
da75eb23dbba fallbacks/lxp.lua: Pure Lua pseudo-XML parser. Implements the same API as LuaExpat.
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
87 for k,v in pairs(attr) do
da75eb23dbba fallbacks/lxp.lua: Pure Lua pseudo-XML parser. Implements the same API as LuaExpat.
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
88 n = n+1;
da75eb23dbba fallbacks/lxp.lua: Pure Lua pseudo-XML parser. Implements the same API as LuaExpat.
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
89 k = apply_ns(k);
da75eb23dbba fallbacks/lxp.lua: Pure Lua pseudo-XML parser. Implements the same API as LuaExpat.
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
90 newattr[n] = k;
da75eb23dbba fallbacks/lxp.lua: Pure Lua pseudo-XML parser. Implements the same API as LuaExpat.
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
91 newattr[k] = v;
da75eb23dbba fallbacks/lxp.lua: Pure Lua pseudo-XML parser. Implements the same API as LuaExpat.
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
92 end
da75eb23dbba fallbacks/lxp.lua: Pure Lua pseudo-XML parser. Implements the same API as LuaExpat.
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
93 tag = apply_ns(tag, true);
da75eb23dbba fallbacks/lxp.lua: Pure Lua pseudo-XML parser. Implements the same API as LuaExpat.
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
94 ns[0] = tag;
da75eb23dbba fallbacks/lxp.lua: Pure Lua pseudo-XML parser. Implements the same API as LuaExpat.
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
95 ns.__index = ns;
da75eb23dbba fallbacks/lxp.lua: Pure Lua pseudo-XML parser. Implements the same API as LuaExpat.
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
96 return tag, newattr;
da75eb23dbba fallbacks/lxp.lua: Pure Lua pseudo-XML parser. Implements the same API as LuaExpat.
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
97 end
da75eb23dbba fallbacks/lxp.lua: Pure Lua pseudo-XML parser. Implements the same API as LuaExpat.
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
98 local function pop()
da75eb23dbba fallbacks/lxp.lua: Pure Lua pseudo-XML parser. Implements the same API as LuaExpat.
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
99 local tag = ns[0];
da75eb23dbba fallbacks/lxp.lua: Pure Lua pseudo-XML parser. Implements the same API as LuaExpat.
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
100 ns = getmetatable(ns);
da75eb23dbba fallbacks/lxp.lua: Pure Lua pseudo-XML parser. Implements the same API as LuaExpat.
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
101 return tag;
da75eb23dbba fallbacks/lxp.lua: Pure Lua pseudo-XML parser. Implements the same API as LuaExpat.
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
102 end
5776
bd0ff8ae98a8 Remove all trailing whitespace
Florian Zeitz <florob@babelmonkeys.de>
parents: 3899
diff changeset
103
3804
da75eb23dbba fallbacks/lxp.lua: Pure Lua pseudo-XML parser. Implements the same API as LuaExpat.
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
104 while true do
da75eb23dbba fallbacks/lxp.lua: Pure Lua pseudo-XML parser. Implements the same API as LuaExpat.
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
105 if peek() == "<" then
da75eb23dbba fallbacks/lxp.lua: Pure Lua pseudo-XML parser. Implements the same API as LuaExpat.
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
106 local elem = read_until(">"):sub(2,-2);
da75eb23dbba fallbacks/lxp.lua: Pure Lua pseudo-XML parser. Implements the same API as LuaExpat.
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
107 if elem:sub(1,1) == "!" or elem:sub(1,1) == "?" then -- neglect comments and processing-instructions
da75eb23dbba fallbacks/lxp.lua: Pure Lua pseudo-XML parser. Implements the same API as LuaExpat.
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
108 elseif elem:sub(1,1) == "/" then -- end tag
da75eb23dbba fallbacks/lxp.lua: Pure Lua pseudo-XML parser. Implements the same API as LuaExpat.
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
109 elem = elem:sub(2);
da75eb23dbba fallbacks/lxp.lua: Pure Lua pseudo-XML parser. Implements the same API as LuaExpat.
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
110 local name = pop();
da75eb23dbba fallbacks/lxp.lua: Pure Lua pseudo-XML parser. Implements the same API as LuaExpat.
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
111 handlers:EndElement(name); -- TODO check for start-end tag name match
da75eb23dbba fallbacks/lxp.lua: Pure Lua pseudo-XML parser. Implements the same API as LuaExpat.
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
112 elseif elem:sub(-1,-1) == "/" then -- empty tag
da75eb23dbba fallbacks/lxp.lua: Pure Lua pseudo-XML parser. Implements the same API as LuaExpat.
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
113 elem = elem:sub(1,-2);
da75eb23dbba fallbacks/lxp.lua: Pure Lua pseudo-XML parser. Implements the same API as LuaExpat.
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
114 local name,attr = parse_tag(elem);
da75eb23dbba fallbacks/lxp.lua: Pure Lua pseudo-XML parser. Implements the same API as LuaExpat.
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
115 name,attr = push(name,attr);
da75eb23dbba fallbacks/lxp.lua: Pure Lua pseudo-XML parser. Implements the same API as LuaExpat.
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
116 handlers:StartElement(name,attr);
da75eb23dbba fallbacks/lxp.lua: Pure Lua pseudo-XML parser. Implements the same API as LuaExpat.
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
117 name = pop();
da75eb23dbba fallbacks/lxp.lua: Pure Lua pseudo-XML parser. Implements the same API as LuaExpat.
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
118 handlers:EndElement(name);
da75eb23dbba fallbacks/lxp.lua: Pure Lua pseudo-XML parser. Implements the same API as LuaExpat.
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
119 else -- start tag
da75eb23dbba fallbacks/lxp.lua: Pure Lua pseudo-XML parser. Implements the same API as LuaExpat.
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
120 local name,attr = parse_tag(elem);
da75eb23dbba fallbacks/lxp.lua: Pure Lua pseudo-XML parser. Implements the same API as LuaExpat.
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
121 name,attr = push(name,attr);
da75eb23dbba fallbacks/lxp.lua: Pure Lua pseudo-XML parser. Implements the same API as LuaExpat.
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
122 handlers:StartElement(name,attr);
da75eb23dbba fallbacks/lxp.lua: Pure Lua pseudo-XML parser. Implements the same API as LuaExpat.
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
123 end
da75eb23dbba fallbacks/lxp.lua: Pure Lua pseudo-XML parser. Implements the same API as LuaExpat.
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
124 else
da75eb23dbba fallbacks/lxp.lua: Pure Lua pseudo-XML parser. Implements the same API as LuaExpat.
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
125 local text = read_before("<");
da75eb23dbba fallbacks/lxp.lua: Pure Lua pseudo-XML parser. Implements the same API as LuaExpat.
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
126 handlers:CharacterData(xml_unescape(text));
da75eb23dbba fallbacks/lxp.lua: Pure Lua pseudo-XML parser. Implements the same API as LuaExpat.
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
127 end
da75eb23dbba fallbacks/lxp.lua: Pure Lua pseudo-XML parser. Implements the same API as LuaExpat.
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
128 end
da75eb23dbba fallbacks/lxp.lua: Pure Lua pseudo-XML parser. Implements the same API as LuaExpat.
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
129 end
da75eb23dbba fallbacks/lxp.lua: Pure Lua pseudo-XML parser. Implements the same API as LuaExpat.
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
130
da75eb23dbba fallbacks/lxp.lua: Pure Lua pseudo-XML parser. Implements the same API as LuaExpat.
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
131 function new(handlers, ns_separator)
da75eb23dbba fallbacks/lxp.lua: Pure Lua pseudo-XML parser. Implements the same API as LuaExpat.
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
132 local co = coroutine.create(parser);
da75eb23dbba fallbacks/lxp.lua: Pure Lua pseudo-XML parser. Implements the same API as LuaExpat.
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
133 return {
da75eb23dbba fallbacks/lxp.lua: Pure Lua pseudo-XML parser. Implements the same API as LuaExpat.
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
134 parse = function(self, data)
da75eb23dbba fallbacks/lxp.lua: Pure Lua pseudo-XML parser. Implements the same API as LuaExpat.
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
135 if not data then
da75eb23dbba fallbacks/lxp.lua: Pure Lua pseudo-XML parser. Implements the same API as LuaExpat.
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
136 co = deadroutine;
da75eb23dbba fallbacks/lxp.lua: Pure Lua pseudo-XML parser. Implements the same API as LuaExpat.
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
137 return true; -- eof
da75eb23dbba fallbacks/lxp.lua: Pure Lua pseudo-XML parser. Implements the same API as LuaExpat.
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
138 end
da75eb23dbba fallbacks/lxp.lua: Pure Lua pseudo-XML parser. Implements the same API as LuaExpat.
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
139 local success, result = coroutine.resume(co, data, handlers, ns_separator);
da75eb23dbba fallbacks/lxp.lua: Pure Lua pseudo-XML parser. Implements the same API as LuaExpat.
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
140 if result then
da75eb23dbba fallbacks/lxp.lua: Pure Lua pseudo-XML parser. Implements the same API as LuaExpat.
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
141 co = deadroutine;
da75eb23dbba fallbacks/lxp.lua: Pure Lua pseudo-XML parser. Implements the same API as LuaExpat.
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
142 return nil, result; -- error
da75eb23dbba fallbacks/lxp.lua: Pure Lua pseudo-XML parser. Implements the same API as LuaExpat.
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
143 end
da75eb23dbba fallbacks/lxp.lua: Pure Lua pseudo-XML parser. Implements the same API as LuaExpat.
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
144 return true; -- success
da75eb23dbba fallbacks/lxp.lua: Pure Lua pseudo-XML parser. Implements the same API as LuaExpat.
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
145 end;
da75eb23dbba fallbacks/lxp.lua: Pure Lua pseudo-XML parser. Implements the same API as LuaExpat.
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
146 };
da75eb23dbba fallbacks/lxp.lua: Pure Lua pseudo-XML parser. Implements the same API as LuaExpat.
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
147 end
da75eb23dbba fallbacks/lxp.lua: Pure Lua pseudo-XML parser. Implements the same API as LuaExpat.
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
148
da75eb23dbba fallbacks/lxp.lua: Pure Lua pseudo-XML parser. Implements the same API as LuaExpat.
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
149 return _M;