查看源代码 EEx.Engine 行为 (EEx v1.16.2)

Elixir 附带的基本 EEx 引擎。

引擎需要实现以下所有回调。

此模块还附带一个默认的引擎实现,您可以委托给它。请参阅 EEx.SmartEngine 作为示例。

概要

回调

在每个嵌套的开始调用。

在每个模板的末尾调用。

在嵌套结束时调用。

针对模板的动态/代码部分调用。

针对模板的文本/静态部分调用。

在每个模板的开始调用。

函数

处理引用的表达式中的赋值。

handle_begin/1 的默认实现。

handle_body/1 的默认实现。

handle_end/1 的默认实现。

init/1 的默认实现。

类型

@type state() :: term()

回调

@callback handle_begin(state()) :: state()

在每个嵌套的开始调用。

它必须返回一个新的状态,该状态仅在嵌套内部使用。嵌套终止后,将恢复当前的 state

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

在每个模板的末尾调用。

它必须返回 Elixir 的模板引用表达式。

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

在嵌套结束时调用。

它必须返回 Elixir 的嵌套引用表达式。

链接到此回调

handle_expr(state, marker, expr)

查看源代码
@callback handle_expr(state(), marker :: String.t(), expr :: Macro.t()) :: state()

针对模板的动态/代码部分调用。

标记是紧随 <% 之后的字符。例如,<% foo %> 的标记为空,但 <%= foo %> 的标记为 "="。到目前为止,允许的标记是

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

标记 "/""|" 仅供自定义 EEx 引擎使用,默认情况下未实现。在没有适当实现的情况下使用它们会引发 EEx.SyntaxError

它必须返回更新后的状态。

链接到此回调

handle_text(state, list, text)

查看源代码
@callback handle_text(
  state(),
  [line: pos_integer(), column: pos_integer()],
  text :: String.t()
) :: state()

针对模板的文本/静态部分调用。

它必须返回更新后的状态。

@callback init(opts :: keyword()) :: state()

在每个模板的开始调用。

它必须返回初始状态。

函数

@spec handle_assign(Macro.t()) :: Macro.t()

处理引用的表达式中的赋值。

如果缺少赋值,将打印警告。将来版本将引发异常。

可以通过使用 Macro.prewalk/2 调用 handle_assign/1 将此添加到任何自定义引擎。

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

handle_begin/1 的默认实现。

handle_body/1 的默认实现。

handle_end/1 的默认实现。

链接到此函数

handle_expr(state, marker, ast)

查看源代码

handle_expr/3 的默认实现。

链接到此函数

handle_text(state, meta, text)

查看源代码

handle_text/3 的默认实现。

init/1 的默认实现。