Listing things with eachz and itemz > item
You don’t really need RosaeNLG to do loops: Pug has its each and while methods. But when doing NLG you often want to generate texts like A, B, C and D: there’s one general kind of separator, the comma, and another one between the two last elements, the "and".
When you have only two elements you would like to generate A and B, not A, B.
This is why you need a proper way to list elements.
- 
When the elements to list are in a javascript array, use eachz. For instance you want to list products.
 - 
When the elements to list are texts, mixins etc., use the itemz > item structure. For instance when you want to list the characteristics of a product, each characteristics of the product will have its own text.
 - 
The ways to assemble the elements are the same for the
eachzand theitemzstructures: assembly parameters. 
The eachz structure
First example
This will output A, B, C and D.
eachz has this structure:
- 
The name of the iteration variable (here
elt) - 
An array of elements to iterate on, after
inkeyword - 
An assembly structure after
withkeyword. See assembly parameters - 
And in the block anything you want ((displaying some kind of information about the element is generally a good idea).
 
Assembly parameters
| There are plenty of parameters combinations and some of them may not have been tested. | 
You can generate either:
- 
a single sentence: this is the default, you can also put
mode: 'single_sentence' - 
multiple sentences:
- 
sentences with a new HTML paragraph:
<p>…</p>: putmode: 'paragraphs' - 
without: put
mode: 'sentences' 
 - 
 
Common parameters
- 
mix: boolean. the elements of the list are randomly mixed before being listed. This is often used to add diversity to the texts. - 
separator: default separator between to elements. Often "," when mode is single sentence, often "." otherwise. - 
begin_with_general: what the sentence should begin with. Could be The products are:. Often combined withbegin_with_1andif_empty - 
begin_with_1: what the sentence should begin with when there is only one element. Could be The only products is: - 
if_empty: what the sentence should begin with when there it is empty. Defaults to nothing. Could be No products today. - 
end: what the sentence should end with when it is not empty. 
Single sentence specific parameters
- 
last_separator: the last separator. Often " and ". 
will output A, B, C and D.
Multiple sentences specific parameters
- 
begin_with_generalcan be an array. Each element of the array will be output at the beginning of each new sentence, until exhaustion. - 
begin_last: last beginning of sentence. Could be at last. - 
begin_last_1: the previous to last beginning. Could be finally. 
will output First, A. Second, B. C. As well, D. At last, E..
Classic parameters can be either string or mixins. Using a mixin is convenient when the content is variable, often for begin_with_1. These mixins can even receive parameters:
 | 
This will output X ALT_LAST_SEP Y. The name of the variable must be params.