defmodule HAT.Compiler do @moduledoc """ The compiler for `HAT`. """ alias HAT.Compiler.Engine @doc false defmacro compile_file(path, opts \\ []) do source = File.read!(path) default_opts = [ engine: Engine, caller: __CALLER__, file: path, line: 1, trim: trim?(), source: source ] opts = Keyword.merge(default_opts, opts) EEx.compile_string(source, opts) end @doc false def compile_string(source, opts \\ []) do default_opts = [ engine: Engine, caller: :not_available, file: "nofile", line: 1, indentation: 0, trim: trim?(), source: source ] opts = Keyword.merge(default_opts, opts) EEx.compile_string(source, opts) end @doc false defdelegate __reserved_assigns__, to: Engine defp trim?, do: Application.get_env(:hat, :whitespace_trimming, true) end