diff options
Diffstat (limited to 'src/xml_stream.erl')
-rw-r--r-- | src/xml_stream.erl | 18 |
1 files changed, 11 insertions, 7 deletions
diff --git a/src/xml_stream.erl b/src/xml_stream.erl index bb377615..4d7f80d4 100644 --- a/src/xml_stream.erl +++ b/src/xml_stream.erl @@ -12,6 +12,11 @@ -export([start/1, init/1, send_text/2]). +-define(XML_START, 0). +-define(XML_END, 1). +-define(XML_CDATA, 2). +-define(XML_ERROR, 3). + start(CallbackPid) -> spawn(?MODULE, init, [CallbackPid]). @@ -22,24 +27,23 @@ init(CallbackPid) -> loop(CallbackPid, Port, Stack) -> receive {Port, {data, Bin}} -> - %CallbackPid ! binary_to_term(Bin), Data = binary_to_term(Bin), loop(CallbackPid, Port, process_data(CallbackPid, Stack, Data)); - {From, {send, Str}} -> + {_From, {send, Str}} -> Port ! {self(), {command, Str}}, loop(CallbackPid, Port, Stack) end. process_data(CallbackPid, Stack, Data) -> case Data of - {xmlstart, {Name, Attrs}} -> + {?XML_START, {Name, Attrs}} -> if Stack == [] -> gen_fsm:send_event(CallbackPid, {xmlstreamstart, Name, Attrs}); true -> true end, [{xmlelement, Name, Attrs, []} | Stack]; - {xmlend, EndName} -> + {?XML_END, EndName} -> case Stack of [{xmlelement, Name, Attrs, Els} | Tail] -> NewEl = {xmlelement, Name, Attrs, lists:reverse(Els)}, @@ -56,10 +60,10 @@ process_data(CallbackPid, Stack, Data) -> Tail end end; - {xmlcdata, CData} -> + {?XML_CDATA, CData} -> add_subelement({xmlcdata, CData}, Stack); - {xmlerror, Err} -> gen_fsm:send_event(CallbackPid, - {xmlstreamerror, Err}) + {?XML_ERROR, Err} -> gen_fsm:send_event(CallbackPid, + {xmlstreamerror, Err}) end. |