檢視原始碼 EEx.Engine 行為 (EEx v1.16.2)

Elixir 附帶的基本 EEx 引擎。

引擎需要實作以下所有回呼。

此模組也附帶您可以委派給的預設引擎實作。請參閱 EEx.SmartEngine 作為範例。

摘要

回呼

在每個巢狀的開始時呼叫。

在每個範本的結尾呼叫。

在巢狀的結尾呼叫。

呼叫範本的動態/程式碼部分。

呼叫範本的文字/靜態部分。

在每個範本的開始時呼叫。

函式

處理引號表達式中的賦值。

針對 handle_begin/1 的預設實作。

針對 handle_body/1 的預設實作。

針對 handle_end/1 的預設實作。

針對 handle_text/3 的預設實作。

針對 init/1 的預設實作。

類型

回呼

@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()

處理引號表達式中的賦值。

遺漏指定項時會印出警告。未來版本將會引發例外。

這可以透過呼叫 handle_assign/1 搭配 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/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 的預設實作。