Tutorial Developer Reference 1 Introduction 2 Interface 3 Scanner 4 Parser 5 Analyser 6 Tangle 7 Weave 8 Shell 9 Commands 10 Glossary 11 References SEARCH

3.12 Pragma: Indentation

When FunnelWeb expands a macro, it can do so in two ways. First it can treat the text it is processing as a one-dimensional stream of text, and merely insert the body of the macro in place of the macro call. Second, it can treat the text of the macro as a two dimensional object and indent each line of the macro body by the amount that the macro call itself was indented. Consider the following macros.

    @$@<Loop Structure@>@{@-
    i=1;
    while (i<=N)
       @<Loop body@>
    endwhile
    @}

    @$@<Loop body@>@{@-
    a[i]:=0;
    i:=i+1;@}

Under the regime of no indentation the loop structure macro expands to:

    i=1;
    while (i<=N)
       a[i]:=0;
    i:=i+1;
    endwhile

Under the regime of blank indentation the loop structure macro expands to:

    i=1;
    while (i<=N)
       a[i]:=0;
       i:=i+1;
    endwhile

The `indentation` pragma determines which of these two regimes will be used to expand the macros when constructing the product files. The syntax of the pragma is:

    pragma_ident = ps "indentation" s "=" s
                   ("blank" | "none")

Its two forms look like this:

    @p indentation = blank
    @p indentation = none

In the current version of FunnelWeb, the indentation regime is an attribute that is attached to an entire run of Tangle; it is not possible to bind it to particular product files or to particular macros. As a result, it doesn't matter where indentation pragmas occur in the input file or how many there are so long as they are all the same. By default FunnelWeb uses blank indentation.

Webmaster Copyright © Ross N. Williams 1992,1999. All rights reserved.