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.5 Inserting Arbitrary Characters into the Text

While FunnelWeb does not tolerate unprintable characters in the input file (except for the end of line character), it does allow the user to specify that unprintable characters appear in the product file. The `@^` sequence inserts a single character of the user's choosing into the text. The character can be specified by giving its ASCII number in one of four bases: binary, octal, decimal, and hexadecimal. Here is the syntax:

    control_sequence = "@^" char_spec
    char_spec        = binary  | octal |
                       decimal | hexadecimal
    binary           = ("b" | "B")
                       "(" {binary_digit}8  ")"
    octal            = ("o" | "O" | "q" | "Q")
                       "(" {octal_digit}3   ")"
    decimal          = ("d" | "D")
                       "(" {decimal_digit}3 ")"
    hexadecimal      = ("h" | "H" | "x" | "X")
                       "(" {hex_digit}2     ")"
    binary_digit     = "0" | "1"
    octal_digit      = binary_digit | "2" | "3" |
                       "4" | "5" | "6" | "7"
    decimal_digit    = octal_digit | "8" | "9"
    hex_digit        = decimal_digit |
                       "A" | "B" | "C" | "D" | "E" | "F" |
                       "a" | "b" | "c" | "d" | "e" | "f"

Example:

    @! Unix Make requires that productions
    @! commence with tab characters.
    @^D(009)prog.o <- prog.c

Note that the decimal "`9`" is expressed with leading zeros as "`009`". FunnelWeb requires a fixed number of digits for each base. Eight digits for base two, three digits for base ten, three digits for base eight and two digits for base sixteen.

FunnelWeb treats the character resulting from a `@^` sequence as ordinary text in every sense. If your input file contains many instances of a particular control character, you can package it up in a macro like any other text. In particular, quick names can be used to great effect:

    @! Unix "Make" requires that productions
    @! commence with tab characters.
    @! So we define a macro with a quick name
    @! as a tab character.
    $@#T@{@^D(009)@}
    @! And use it in our productions.
    @#Tprog.o <- prog.c
    @#Ta.out <- prog.o

Warning: If you insert a Unix newline character (decimal 10) into the text, FunnelWeb will treat this as an end of line sequence regardless of what the character sequence for end of line is on the machine upon which it is running. Unix EOL is FunnelWeb's internal representation for end of line. Thus, in the current version of FunnelWeb, inserting character 10 into the text is impossible unless this also happens to be the character used by the operating system to mark the end of line.

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