snor v0.2.0 Snor.Parser
Convert a string into an intermediate representation - a list of nodes.
A node could be one of (mainly) -
- A plaintext node
- A function node
- A block node
Link to this section Summary
Types
An argument pair
A block node
A function node
An interpolation node
The result of a parse_*
operation
A parsed node
A plaintext node
Represents remaining tokens after a node was parsed and extracted
A grapheme from the template that was passed in
Functions
Parse a string into a list of nodes
Parse an argument pair
Parse a block
Parse an interpolation node
Parse an interpolation/block node
Link to this section Types
An argument pair
block_node()
block_node() :: %{ with_scope: String.t(), children: [parsed_node()], negative: boolean() }
A block node
function_node()
function_node() :: %{function: String.t(), arguments: [argument_pair()]}
A function node
An interpolation node
parse_result()
parse_result() :: {:error, String.t()} | {:ok, parsed_node(), remaining_tokens()}
The result of a parse_*
operation
parsed_node()
parsed_node() :: plaintext_node() | interpolation_node() | block_node() | function_node()
A parsed node
A plaintext node
Represents remaining tokens after a node was parsed and extracted
A grapheme from the template that was passed in
Link to this section Functions
Parse a string into a list of nodes
Examples
iex> Snor.Parser.parse("Hello")
[%{plaintext: "Hello"}]
iex> Snor.Parser.parse("{{name}}")
[%{interpolation: "name"}]
iex> Snor.Parser.parse("{{upcase item='Jane'}}")
[%{arguments: [%{key: "item", value: [%{plaintext: "Jane"}]}], function: "upcase"}]
iex> Snor.Parser.parse("{{#person}}{{name}}{{/person}}")
[%{children: [%{interpolation: "name"}, %{plaintext: ""}], negative: false, with_scope: "person"}]
parse_argument(tokens, nodes)
parse_argument([token()], [parsed_node()]) :: {:ok, argument_pair(), remaining_tokens()}
Parse an argument pair
parse_block(tokens, nodes)
parse_block([token()], [parsed_node()]) :: parse_result()
Parse a block
parse_interpolation(tokens, nodes)
parse_interpolation([token()], [parsed_node()]) :: parse_result()
Parse an interpolation node
parse_node(tokens, nodes)
parse_node([token()], [parsed_node()]) :: {:error, String.t()} | {:ok, parsed_node(), remaining_tokens()}
Parse an interpolation/block node