Next: Protection, Previous: Built-in functions, Up: Built-in functions [Contents][Index]
Several of the built-in functions expect or return a string argument.
Examples include $STRING (see $STRING), $UNQUOTE
(see $UNQUOTE), and $UNSTRING (see $UNSTRING).
In understanding the operation of those functions, it is important to
understand just what a string means in the FWEB context. As usual,
it is a vector of characters. However, those need not be
delimited by quotes, although they may be. Internally, a string is
represented by the construction sqc...cqs, where s is a special
string delimiter never seen by the user, q is an optional quote
character (either single or double quote depending on the language), and
c is an ordinary character. Whether or not the quotes are present,
the string delimiters inhibit macro expansion.
The difference between $UNQUOTE and $UNSTRING can now be
stated as follows. Given a quoted string such as "abc" (in C),
abc (and therefore is not very useful).
$UNSTRING is primarily used internally.
The built-ins $P (see $P) and $PP (see $PP), which
both generate the preprocessor character ‘#’, provide a good
illustration of the differences between $UNQUOTE and
$UNSTRING. Consider FORTRAN as an example. Essentially,
$P is defined as ‘$UNQUOTE('#')’, which is internally
s#s. When this single-character string is sent to the output, it is
treated like any other expression and therefore would appear in column 7
or greater even if the construction appeared at the very beginning of
the line. On the other hand, $PP is (essentially) defined as
‘$UNSTRING('#')’, which is internally the single character #.
Because this character is not a string, the FORTRAN output driver
treats it as a special control character, defined in this case to force
the character into the first column.
Next: Protection, Previous: Built-in functions, Up: Built-in functions [Contents][Index]