diff --git a/lib/sneeze/internals.ex b/lib/sneeze/internals.ex index cfb8e5f..1098d91 100644 --- a/lib/sneeze/internals.ex +++ b/lib/sneeze/internals.ex @@ -1,4 +1,26 @@ defmodule Sneeze.Internal do + require Sneeze.Macros + + Sneeze.Macros.define_tags_to_strings([ + :a, + :div, + :span, + :li, + :br, + :p, + :link, + :meta, + :td, + :tr, + :ul, + :h3, + :h2, + :img, + :code, + :svg, + :button + ]) + def void_tags() do [ :area, @@ -29,25 +51,25 @@ defmodule Sneeze.Internal do end def render_opening_tag(tag_name) do - ["<", to_string(tag_name), ">"] + ["<", tag_to_string(tag_name), ">"] end def render_opening_tag(tag_name, attribs) do attrib_iolist = attributes_to_iolist(attribs) - ["<", to_string(tag_name), attrib_iolist, ">"] + ["<", tag_to_string(tag_name), attrib_iolist, ">"] end def render_closing_tag(tag_name) do - [""] + [""] end def render_void_tag(tag_name) do - ["<", to_string(tag_name), " />"] + ["<", tag_to_string(tag_name), " />"] end def render_void_tag(tag_name, attribs) do attrib_iolist = attributes_to_iolist(attribs) - ["<", to_string(tag_name), attrib_iolist, " ", "/>"] + ["<", tag_to_string(tag_name), attrib_iolist, " ", "/>"] end def render_tag(tag) do diff --git a/lib/sneeze/macros.ex b/lib/sneeze/macros.ex new file mode 100644 index 0000000..1048e5f --- /dev/null +++ b/lib/sneeze/macros.ex @@ -0,0 +1,17 @@ +defmodule Sneeze.Macros do + @moduledoc false + + defmacro define_tags_to_strings(tags) do + quote bind_quoted: [tags: tags] do + Enum.each(tags, fn tagname -> + as_str = to_string(tagname) + + defp tag_to_string(unquote(tagname)) do + unquote(as_str) + end + end) + + defp tag_to_string(unknown_tag), do: to_string(unknown_tag) + end + end +end