stop atom parsing at feed tag close
This commit is contained in:
1 parent
cd698294c1
commit
ecc2286733
2 files changed
+6
-2
No files matched your search
@@ -17,6 +17,7 @@ defmodule FeedReader.Formats.Atom do
|
|||||||
limits: XMLResourceLimits.new(opts),
|
limits: XMLResourceLimits.new(opts),
|
||||||
frames: [],
|
frames: [],
|
||||||
feed: nil,
|
feed: nil,
|
||||||
|
root_closed: false,
|
||||||
error: nil
|
error: nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -91,10 +91,10 @@ defmodule FeedReader.Formats.Atom.Handler do
|
|||||||
defp close_element(%{name: "feed"}, feed, %{feed: nil} = state) do
|
defp close_element(%{name: "feed"}, feed, %{feed: nil} = state) do
|
||||||
state = %{state | feed: feed}
|
state = %{state | feed: feed}
|
||||||
state.event_sink.({:feed, Atom.normalize_feed(state, state.opts)})
|
state.event_sink.({:feed, Atom.normalize_feed(state, state.opts)})
|
||||||
{:ok, state}
|
halt_at_root(state)
|
||||||
end
|
end
|
||||||
|
|
||||||
defp close_element(%{name: "feed"}, _feed, state), do: {:ok, state}
|
defp close_element(%{name: "feed"}, _feed, state), do: halt_at_root(state)
|
||||||
|
|
||||||
defp close_element(frame, value, %{frames: [parent | rest]} = state) do
|
defp close_element(frame, value, %{frames: [parent | rest]} = state) do
|
||||||
children = Map.update(parent.children, frame.name, value, &(List.wrap(&1) ++ [value]))
|
children = Map.update(parent.children, frame.name, value, &(List.wrap(&1) ++ [value]))
|
||||||
@@ -104,6 +104,9 @@ defmodule FeedReader.Formats.Atom.Handler do
|
|||||||
|
|
||||||
defp close_element(_frame, _value, state), do: {:ok, state}
|
defp close_element(_frame, _value, state), do: {:ok, state}
|
||||||
|
|
||||||
|
defp halt_at_root(%{frames: []} = state), do: {:halt, %{state | root_closed: true}}
|
||||||
|
defp halt_at_root(state), do: {:ok, state}
|
||||||
|
|
||||||
defp render(frame) do
|
defp render(frame) do
|
||||||
attrs = Enum.map_join(frame.attrs, " ", fn {key, value} -> ~s(#{key}="#{value}") end)
|
attrs = Enum.map_join(frame.attrs, " ", fn {key, value} -> ~s(#{key}="#{value}") end)
|
||||||
opening = if attrs == "", do: "<#{frame.name}>", else: "<#{frame.name} #{attrs}>"
|
opening = if attrs == "", do: "<#{frame.name}>", else: "<#{frame.name} #{attrs}>"
|
||||||
|
|||||||
Reference in new issue
Block a user