[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

3.6.16 FOR - Emit a template block multiple times

This macro has a slight variation on the standard syntax:

 
FOR <value-name> [ <separator-string> ]

FOR <value-name> (...Scheme expression list)

FOR <value-name> IN "string" [ ... ]

Other than for the last form, the first macro argument must be the name of an AutoGen value. If there is no value associated with the name, the FOR template block is skipped entirely. The scope of the FOR macro extends to the corresponding ENDFOR macro. The last form will create an array of string values named <value-name> that only exists within the context of this FOR loop. With this form, in order to use a separator-string, you must code it into the end of the template block using the (last-for?) predicate function (see section last-for?’ - detect last iteration).

If there are any arguments after the value-name, the initial characters are used to determine the form. If the first character is either a semi-colon (;) or an opening parenthesis ((), then it is presumed to be a Scheme expression containing the FOR macro specific functions for-from, for-by, for-to, and/or for-sep. See section AutoGen Scheme Functions. If it consists of an ’i’ an ’n’ and separated by white space from more text, then the FOR x IN form is processed. Otherwise, the remaining text is presumed to be a string for inserting between each iteration of the loop. This string will be emitted one time less than the number of iterations of the loop. That is, it is emitted after each loop, excepting for the last iteration.

If the from/by/to functions are invoked, they will specify which copies of the named value are to be processed. If there is no copy of the named value associated with a particular index, the FOR template block will be instantiated anyway. The template must use found-for? (see section found-for?’ - is current index in list?) or other methods for detecting missing definitions and emitting default text. In this fashion, you can insert entries from a sparse or non-zero based array into a dense, zero based array.

NB: the for-from, for-to, for-by and for-sep functions are disabled outside of the context of the FOR macro. Likewise, the first-for?, last-for? for-index, and found-for? functions are disabled outside of the range of a FOR block.

Also: the <value-name> must be a single level name, not a compound name (see section Naming a value).

 
[+FOR var (for-from 0) (for-to <number>) (for-sep ",") +]
... text with various substitutions ...[+
ENDFOR var+]

this will repeat the ... text with various substitutions ... <number>+1 times. Each repetition, except for the last, will have a comma , after it.

 
[+FOR var ",\n" +]
... text with various substitutions ...[+
ENDFOR var +]

This will do the same thing, but only for the index values of var that have actually been defined.


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

This document was generated by Bruce Korb on August 21, 2015 using texi2html 1.82.