lib/solid/tag/raw.ex

defmodule Solid.Tag.Raw do
  import NimbleParsec
  alias Solid.Parser.BaseTag

  @behaviour Solid.Tag

  @impl true
  def spec(_parser) do
    end_raw_tag =
      BaseTag.opening_tag()
      |> ignore(string("endraw"))
      |> ignore(BaseTag.closing_tag())

    ignore(BaseTag.opening_tag())
    |> ignore(string("raw"))
    |> ignore(BaseTag.closing_tag())
    |> repeat(lookahead_not(ignore(end_raw_tag)) |> utf8_char([]))
    |> ignore(end_raw_tag)
  end

  @impl true
  def render(raw, context, _options) do
    {[text: raw], context}
  end
end