defmodule Hologram.Template do alias Hologram.Compiler.AST alias Hologram.Template.DOM alias Hologram.Template.Parser alias Hologram.Template.Tokenizer @doc """ Builds DOM AST from the given template markup. ## Examples iex> dom_ast("
content
") [{:{}, [line: 1], [:element, "div", [], [{:text, "content"}]]}] """ @spec dom_ast(String.t()) :: AST.t() def dom_ast(markup) do markup |> String.trim() |> Tokenizer.tokenize() |> Parser.parse_tokens() |> DOM.build_ast() end defmacro sigil_H({:<<>>, _meta, [markup]}, _modifiers) do build_h_sigil_ast(markup) end defmacro sigil_H(markup, _modifiers) do build_h_sigil_ast(markup) end defp build_h_sigil_ast(markup) do quote do fn var!(vars) -> # Fixes unused var warning # credo:disable-for-next-line Credo.Check.Consistency.UnusedVariableNames _ = var!(vars) unquote(dom_ast(markup)) end end end end