Packages
surface
0.12.2
0.12.3
0.12.2
0.12.1
0.12.0
0.11.5
0.11.4
0.11.3
0.11.2
0.11.1
0.11.0
0.10.0
0.9.5
0.9.4
0.9.3
0.9.2
0.9.1
0.9.0
0.8.4
0.8.3
0.8.2
0.8.1
0.8.0
0.7.6
0.7.5
0.7.4
0.7.3
0.7.2
0.7.1
0.7.0
0.6.1
0.6.0
0.5.2
0.5.1
0.5.0
0.4.1
0.4.0
0.3.2
0.3.1
0.3.0
0.2.1
0.2.0
0.1.1
0.1.0
0.1.0-alpha.2
0.1.0-alpha.1
0.1.0-alpha.0
A component based library for Phoenix LiveView
Current section
Files
Jump to
Current section
Files
lib/surface/compiler/node_translator.ex
defmodule Surface.Compiler.NodeTranslator do
@moduledoc false
alias Surface.Compiler.Tokenizer
@type context :: term()
@typedoc """
A node translator can return anything to represent the node, or use `:ignore` to
indicate that this node should be removed entirely from the result.
"""
@type result :: term() | :ignore
@callback context_for_node(name :: binary(), Tokenizer.tag_metadata(), Parser.state()) ::
context()
@callback context_for_block(name :: binary(), Tokenizer.block_metadata(), Parser.state()) ::
context()
@callback context_for_subblock(
Tokenizer.block_name(),
Tokenizer.block_metadata(),
Parser.state(),
parent_context :: context()
) ::
context()
@callback handle_attribute(
Tokenizer.attribute_name(),
value :: binary() | Tokenizer.expression(),
Tokenizer.attribute_metadata(),
Parser.state(),
context :: context()
) :: result()
@callback handle_block_expression(
Tokenizer.block_name(),
nil | Tokenizer.expression(),
Parser.state(),
context :: context()
) :: result()
@callback handle_init(Parser.state()) :: Parser.state()
@callback handle_text(value :: binary(), Parser.state()) :: {result(), Parser.state()}
@callback handle_comment(
comment :: binary(),
meta :: Tokenizer.comment_metadata(),
Parser.state()
) ::
{result(), Parser.state()}
@callback handle_node(
name :: Tokenizer.tag_name(),
attrs :: list(result()),
children :: list(result()),
meta :: Tokenizer.tag_metadata(),
Parser.state(),
context :: context()
) :: {result(), Parser.state()}
@callback handle_block(
Tokenizer.block_name(),
nil | result(),
children :: list(result()),
Tokenizer.block_metadata(),
Parser.state(),
context :: context()
) :: {result(), Parser.state()}
@callback handle_subblock(
Tokenizer.block_name(),
nil | result(),
children :: list(result()),
Tokenizer.block_metadata(),
Parser.state(),
context :: context()
) :: {result(), Parser.state()}
@callback handle_expression(
expression :: binary(),
meta :: Tokenizer.metadata(),
Parser.state()
) :: {result(), Parser.state()}
@callback handle_tagged_expression(
marker :: binary(),
expression :: binary(),
meta :: Tokenizer.metadata(),
Parser.state()
) :: {result(), Parser.state()}
end