EEx.Engine behaviour

Basic EEx engine that ships with Elixir.

An engine needs to implement all callbacks below.

This module also ships with a default engine implementation you can delegate to. See EEx.SmartEngine as an example.

Summary

Types

Functions

handle_assign(arg)

Handles assigns in quoted expressions.

handle_begin(state)

Default implementation for handle_begin/1.

handle_body(state)

Default implementation for handle_body/1.

handle_end(quoted)

Default implementation for handle_end/1.

handle_expr(state, marker, ast)

Default implementation for handle_expr/3.

handle_text(state, meta, text)

Default implementation for handle_text/3.

init(opts)

Default implementation for init/1.

Callbacks

handle_begin(state)

Invoked at the beginning of every nesting.

handle_body(state)

Called at the end of every template.

handle_end(state)

Invokes at the end of a nesting.

handle_expr(state, marker, expr)

Called for the dynamic/code parts of a template.

handle_text(state, list, text)

Called for the text/static parts of a template.

init(opts)

Called at the beginning of every template.

Types

state()Source

Specs

state() :: term()

Functions

handle_assign(arg)Source

Specs

handle_assign(Macro.t()) :: Macro.t()

Handles assigns in quoted expressions.

A warning will be printed on missing assigns. Future versions will raise.

This can be added to any custom engine by invoking handle_assign/1 with Macro.prewalk/2:

def handle_expr(state, token, expr) do
  expr = Macro.prewalk(expr, &EEx.Engine.handle_assign/1)
  super(state, token, expr)
end

handle_begin(state)Source

Default implementation for handle_begin/1.

handle_body(state)Source

Default implementation for handle_body/1.

handle_end(quoted)Source

Default implementation for handle_end/1.

handle_expr(state, marker, ast)Source

Default implementation for handle_expr/3.

handle_text(state, meta, text)Source

Default implementation for handle_text/3.

init(opts)Source

Default implementation for init/1.

Callbacks

handle_begin(state)Source

Specs

handle_begin(state()) :: state()

Invoked at the beginning of every nesting.

It must return a new state that is used only inside the nesting. Once the nesting terminates, the current state is resumed.

handle_body(state)Source

Specs

handle_body(state()) :: Macro.t()

Called at the end of every template.

It must return Elixir's quoted expressions for the template.

handle_end(state)Source

Specs

handle_end(state()) :: Macro.t()

Invokes at the end of a nesting.

It must return Elixir's quoted expressions for the nesting.

handle_expr(state, marker, expr)Source

Specs

handle_expr(state(), marker :: String.t(), expr :: Macro.t()) :: state()

Called for the dynamic/code parts of a template.

The marker is what follows exactly after <%. For example, <% foo %> has an empty marker, but <%= foo %> has "=" as marker. The allowed markers so far are:

  • ""
  • "="
  • "/"
  • "|"

Markers "/" and "|" are only for use in custom EEx engines and are not implemented by default. Using them without an appropriate implementation raises EEx.SyntaxError.

It must return the updated state.

handle_text(state, list, text)Source

Specs

handle_text(
  state(),
  [line: pos_integer(), column: pos_integer()],
  text :: String.t()
) :: state()

Called for the text/static parts of a template.

It must return the updated state.

init(opts)Source

Specs

init(opts :: keyword()) :: state()

Called at the beginning of every template.

It must return the initial state.

© 2012 Plataformatec
Licensed under the Apache License, Version 2.0.
https://hexdocs.pm/eex/1.12.0/EEx.Engine.html