Basically, the input syntax is standard HTML with some slight
extensions. The most obvious extension are the directives.
Every directive is on a line by itself, and the line starts
with a "#".
You can have whitespace around the "#" if you want.
There are a number of directives:
Some of these directives refer to files (e.g. the include
If you specify a relative filename, it is assumed to be in the
same directory as the file which is using that name. This has
ramifications if an include file includes another include file.
- ## Comment
Any line starting with two # characters is considered
a comment. This is not elegant.
- #include FILENAME
This directive processes the named file as if it
were included at this point. Included files can also
use any of the directives including the include
directive. Note that it is possible to cause loops.
It is not productive.
The FILENAME can be surrounded by double quotes or angle brackets
to keep things similar to C.
You can also load in a portion of a file as described with the
- #localcode FILENAME
This directive is much like the include directive,
except that it reads the named file into the webc
compiler. This allows for user written functions which can
be called by the call directive.
- #define NAME VALUE
This directive allows you to associate any value with a name.
Where ever the name shows up in the original file will
be replaced with the value in the generated HTML file.
The replacement value can not contain newline characters.
Unlike more conventional languages, the NAME can include
most any character. It is also not suggested that you have
a VALUE contain some other name, as you will get inconsistant
results. The webc compiler defines
a number of NAMEs already. All of these
names are of the form __name__. Thus it is suggested
that you avoid using names with two leading and trailing underscores
for your own variables, as they conflict with future webc
names. However, you should choose names not likely to show
up in HTML text. A single leading and trailing underscore
would be a good convention.
- #call FUNCTION
It is possible to call any function in the webc
compiler. There are no parameters. There are a number of
standard functions, and you can define your
own and incorporate them using the localcode directive.
- #pragma NAME
This is a collection of hacks to get around certain issues.
The only names currently defined are nodefine which disables
turns expansion back on.
- #callable FUNCTION
This lets webc know that FUNCTION can be called anyplace
it sees FUNCTION(...). The FUNCTION is a piece of code
defined in Perl code and is passed a string with all
of the text between the parenthesis and the first
closing parenthesis. The return value of the function is
substituted in place. This doesn't deal with balanced parenthesis,
nor is it wise to make part of the argument of one function
the return value of another function.
- #split NAME
This separates the file into different logical sections.
Using #include "filename" NAME will read in only
the selected split of the file.
This was added by John Lombardo to
allow the head and tail sections to be maintained in a single
Source for this file can be found in directives.wc.