stp stands for "simple text (pre)processor". It lets you
conditionally include bits of text, have macros for commonly used
things, and stuff, thus allowing you to create dynamic text files.
It's kinda like the pre-processor you have for C/C++ (#define, #ifdef,
#include etc.).
Download it from http://www.grundell.u-net.com/stp/
It probably compiles on most Linux systems, and most modern UNIX
without much problem.
The statements
stp can process any text file. It only processes lines that begin with
'@' (at). Any others are just printed as-is.
I think it should be straight forward to use, once you know what the
'commands' are. Each are a single line, beginning on a on a new line.
You can make them span across several lines, only for readability, by
putting a '\' (back-slash) at the end of the line, like:
@define moo \
blah
which will be asumed as @define moo blah. To actually use a newline
character in a statement, use the %nl macro.
Using variables/macros
You know what they are. Here's how to use them...
@define name value
Variable/macro names are words that begin with a '%' (percent),
looking like %name. You can also do something like
blah%{somemacro}blah. Note that they are only expanded in lines that
begin with an @. You can pass arguements to macros, like
%macro(arg1,arg2), which are set as %1 and %2 within the macro. For
example, to make a macro to produce an HTML link, using the first
argument as the link destination, and the 2nd as the next, you'd do:
@define link <a href="%1">%2</a>
So %link(aaaa,moo) will produce <a href="aaaa">moo</a>.
There are several pre-defined macros, which are described later
Conditional execution
@if, @ifnot, @elseif, @elseifnot, @else and @endif. It shouldn't be
too hard to figure out what these do. Here's an example:
@if (something)
process this stuff if something is true
@elseif (something-else)
process this stuff if something is not true, but something-else is.
@else (something-else)
process this stuff if neither something or something-else is true.
@endif
Yes, you can nest @if[not]..@endif statments within each other, and
the @else* statements are optional (but only allowed inside
@if[not]..@endif pairs).
If you want, you can just use a single-lined @if[not] statement, like:
@if (something) do this
In that case, a following @endif is not needed.
Other stuff
@:text evaluates the macros in text. @exec command executes command
and includes the output. This is passed to the shell (using
system(3)). No, stp doesn't process the output of command, just
includes it as-is. You can, however, work around this with @exec echo
`command` | stp.
@include file includes file as though it is part of the current file.
The contents of these files are parsed by stp. This allows you to have
standard headers, and stuff. If you don't want stp to parse the
contents of this file, just do @exec cat file.
@eof treats this position in the file as the end, and everything else
after is is ignored... as simple as that.
Built-in macros
%date([format]) expands to the current date, in the specified format,
defaulting to what would produce "Mon Sep 25 19:02:27 2000". See the
man pages strftime(3) or date(1) for more information on the format.
%time([format]) is just the same as %date, but the default for format
being "%H:%M:%S".
%filename expands to the name of the file (as specified on the
command-line, or @include) or nothing, if reading from standard input.
%env(var) expands to the environment variable var.
%nl puts in a newline character.
%chr(num) does ascii character num.
%asc(char) is the ascii number of char.
%linenum is the current line-number of the current file.
%rand([[min,]max]) produces a random number between min and max. min
and max defaulting to 0 and 10,000 respectively.
%pwd - print working directory; simple.
%version - this version of stp.
%stdin is 1 if reading from standard input, or 0 if reading from a
file, either specified from the command line, or a @include line.
_________________________________________________________________
Copyright (c) 2000 Steve Grundell
stp@grundell.u-net.com
http://www.grundell.u-net.com/stp/