Skip to content

Placeholder Definition

Peter Johnson edited this page Feb 9, 2023 · 22 revisions

Placeholder Definition

⚠️⚠️ THIS WIKI IS BEING USED TO JOT DOWN IDEAS AT PRESENT. DON'T ASSUME ANYTHING IS FIXED. ⚠️⚠️

A Treacle place holder has the following form:

{{ source < arg1,arg2,argN > filter1 < arg1,arg2,argN > filterN < arg1,argN }}

or

{{ source: arg1,arg2,argN | filter1: arg1,arg2,argN | filterN: arg1,argN }}

Arguments (arg) are optional. If they are omitted then the preceding : or < must also be omitted. There is no limit to the number of arguments. Only @ command sources and filters take arguments. The number and type of arguments depends on the command or filter they are being used with. An argument is either given a literal value or it can take its value from a placeholder or a named variable.

There can be zero or more filters chained together. If there are no filters then the | or > must be omitted. Filters transform the value piped in and the transformed value is piped out.

in BNFish notation:

<placeholder>           ::= "{{" <source> [ <filter-chain> ] "}}" 
<source>                ::= <variable> | <command> | <literal-value>
                              | <placeholder>
<filter-chain>          ::= <filter-pipe> <filter> [ <args-group> ]
                              [ <filter-chain> ]
<args-group>            ::= <args-pipe> <args>
<args>                  ::= <arg> [ "," <args> ]
<arg>                   ::= <literal-value> | <placeholder> | <variable>
<variable>              ::= <token>
<command>               ::= "@" <token> [ <args-group> ]
<filter>                ::= <token> | <filter-command>
<filter-command>        ::= "@" <token>
<token>                 ::= <letter> [ <token-body> ]
<token-body>            ::= (<letter> | <digit> | "_" | "-") [ <token-body> ]
<literal-value>         ::= <quoted-string> | <integer> | <float>
<integer>               ::= [ <number-sign> ] <digits>
<float>                 ::= <integer> "." <digits> [ <exponent> ]
<exponent>              ::= ( "e" | "E" ) <integer>
<number-sign>           ::= "+" | "-"
<digits>                ::= <digit> [ <digits> ]
<quoted-string>         ::= <single-quoted-string> | <double-quoted-string>
<single-quoted-string>  ::= <single-quote> [ <content-text> ] <single-quote>
<double-quoted-string>  ::= <double-quote> [ <content-text> ] <double-quote>
<filter-pipe>           ::= ">" | "|"
<args-pipe>             ::= "<" | ":"
<content-text>          ::= (<escaped-text> | <placeholder>) [ <content-text> ]
<escaped-text>          ::= (<non-escaping-char> | <escape-sequence>)
                              [ <escaped-text> ]
<escape-sequence>       ::= "\" <escaping-char>
<escaping-char>         ::= "\" | <single-quote> | <double-quote> 
                              | "n" | "r" | "t"
<non-escaping-char>     ::= Any Unicode character except an <escaping-char> or a
                            control character
<digit>                 ::= "0" | "1" | "2" | "3" | "4" | "5" | "6" | "7" | "8" | "9"
<single-quote>          ::= U+0027
<double-quote>          ::= U+0022
Clone this wiki locally