defmodule Liquid do use Application def start(_type, _args), do: start() def start do Liquid.Filters.add_filter_modules() Liquid.Supervisor.start_link() end def stop, do: {:ok, "stopped"} def filter_arguments, do: ~r/(?::|,)\s*(#{quoted_fragment()})/ def single_quote, do: "'" def double_quote, do: "\"" def quote_matcher, do: ~r/#{single_quote()}|#{double_quote()}/ def any_starting_tag, do: "(){{()|(){%()" def quoted_string, do: "\"[^\"]*\"|'[^']*'" def quoted_fragment, do: "#{quoted_string()}|(?:[^\s,\|'\"]|#{quoted_string()})+" def tag_attributes, do: ~r/(\w+)\s*\:\s*(#{quoted_fragment()})/ def variable_parser, do: ~r/\[[^\]]+\]|[\w\-]+/ def filter_parser, do: ~r/(?:\||(?:\s*(?!(?:\|))(?:#{quoted_fragment()}|\S+)\s*)+)/ defmodule List do def even_elements([_, h | t]) do [h] ++ even_elements(t) end def even_elements([]), do: [] end defmodule Atomizer do def to_existing_atom(string) do try do String.to_existing_atom(string) rescue ArgumentError -> nil end end end end