# Pipe

A pipe `|`

allows for using the value of a variable to be the input value for a function. It is also possible to chain multiple functions together, so that the output of one function is used as input for the next one. Therefore a pipe can be used to modify the value of a variable in place. Several functions as well as basic mathematical operations can be used together with pipes.

## Mathematical Operations

Mathematical operations when using pipes are limited to elementary arithmetic: addition `+`

, subtraction`-`

, multiplication `*`

and division `/`

. The syntax looks like this:

```
@{ variable | +1 }
@{ variable | /2 | -5 | *2 }
```

Other variables can be used as well as operands. The following example will first set `variable`

to the value of `x`

if not defined. In a second step, the value of `y`

or a default of `5`

is added:

```
@{ variable | def (@{ x }) | +@{ y | def (5) } }
```

## Functions

The syntax for functions looks as follows:

```
@{ text | markdown }
```

Paramters can be passed to functions optionally:

```
@{ text | markdown (true) }
```

Those function parameters can be numbers, strings, boolean or even other variables. As you can see below, pipe functions can also be used for such nested variables:

```
@{ date | dateFormat (@{ format | def ('Y') }) }
```

There is also a special shorthand syntax for shortening text variables. The following example shortens the value of a variable to 100 characters whithout cutting words:

```
@{ text | 100 }
```

## Examples

The following example will first strip all markdown and HTML tags from the `textTeaser`

variable and then shorten the text to 150 characters:

```
@{ textTeaser | stripTags | 150 }
```

Note that single quotes as well as double quotes can be used to wrap strings. Both examples below will produce the same output:

```
<# Output: This is a "Test String" #>
@{ text | def ('This is a "@{ variable }"') }
@{ text | def ("This is a \"@{ variable }\"") }
```

Variables used as function parameters only need to be quoted when being combined with strings. In case you just want to use a variable, quotes can be omitted:

```
@{ text | def (@{ variable }) }
```