asubst(3) EN Tools asubst(3)NAME
asubst - Area Substitution
SYNOPSIS
asubst [-o outputfile] [-v] [inputfile]
DESCRIPTION
The asubst program reads inputfile or from "stdin" and performs the following action: Characters and substrings are substituted according
to Perl-like substitution commands enclosed by surrounding area delimiters. The substitution commands recognized are
[[s/pattern/string/options]]
[[tr/input/output/options]]
and the areas are defined by blocks delimited via
{: ... :}
EXAMPLE
{: [[s/ae/ä/]] [[s/ue/ü/]]
Foo Bar Baz Quux with Umlauts ae and ue
:}
OPTIONS -o outputfile
This redirects the output to outputfile. Usually the output will be send to "stdout" if no such option is specified or outputfile is
""-"".
-v This sets verbose mode where some processing information will be given on the console.
AUTHOR
Ralf S. Engelschall
rse@engelschall.com
www.engelschall.com
EN Tools 2014-04-16 asubst(3)
Check Out this Related Man Page
divert(3) EN Tools divert(3)NAME
Divert - Text Diversion Filter
SYNOPSIS
divert [-o outputfile] [-q] [-v] [inputfile]
DESCRIPTION
The divert program reads inputfile or from "stdin" and applies a 2-pass diversion filter to its contents. In pass 1 all diversion locations
are accumulated and in pass 2 these locations are recursively expanded at their dump positions. The diversion filter is controlled by
directives found in the input data:
{#NAME#} (or <<NAME>>)
This defines the dump position of the location NAME. All accumulated data which finally has to been diverted to NAME is inserted at
this data position. Notice: the final data of a location NAME has not to be known at this point, because the expansion of such
location dumps are done in pass 2. You can also dump a location more than once, but the contents is always the same, independent of
the data position where the location dump tag stays. The NAME can be any symbolic name matching "[a-zA-Z][a-zA-Z0-9_]*".
{#[!]NAME[!]#: (or ..[!]NAME[!]>>)
This enters the location NAME (or diverts the data flow to it, hence the name for this filter). In other words: the data flow now goes
on at location NAME. All following data (up to end of file or the next location leave tag) gets appended to location NAME. You can nest
diversions by entering other locations at any point, because the locations are remembered on a stack. The default entered location is
named ``"main"''. The top most location is named ``"null"'' which neither can be entered nor leaved explicitly. But of course the
``"null"'' diversion can be manually dumped, for instance when using it for error messages.
There are two special features for diverting data which are controlled by the ""!"" characters preceding or following the NAME
identifier:
!NAME
This sets the data flow position to the begin of location NAME, i.e. it actually discards the current (already diverted) contents
of location NAME before entering it. Use this to overwrite a locations contents.
NAME!
This marks this location entry as overwritable, i.e. it enters location NAME but when the corresponding leave tag is found, the
data-flow position for NAME gets automatically reset to its begin. Use this if you want to set the default contents for a location
which only gets used if no other diversions occur to it (because any following diversions to this location will be overwrite the
contents). This feature is usually used for a template scheme.
!NAME!
Just the combination of the above two features. Use this to both discard the current contents of location NAME and set a new
default for it.
:#[NAME]#} (or <<[NAME]..)
This leaves the current location, i.e. enters again the location which was active when this location was entered. There is no need to
leave all locations at the end of the input data. All still entered locations are automatically left at end of file because this is
essential for a template scheme.
Notice that there are two ways of using (and thinking) about the filtering mechanism this program provides:
Macro Mechanism
This is the "predefined" way of thinking here. Use it like this:
FOO
{#BAR#}
QUUX
{#BAR#:
BAZ
:##}
Here you are thinking of the mechanism as a macro mechanism where you expand a macro at one data position while you define it via begin
and end tags.
Diversion Mechanism
This is the alternative way of thinking. Use it like this:
FOO
<<BAR>>
QUUX
..BAR>>
BAZ
<<..
In other words: You are thinking of the mechanism as a diversion mechanism where you dump a location at one data position while you
divert to it by entering end leaving the location (here BAR) at other positions.
You can even intermix both ways because both are just alternative syntax variants which are treated the same.
EXAMPLE
{#HEAD#}
{#BODY#}
{#FOOT#}
{#FOOT#:
Quux
:##}
{#BODY#:
Bar
:##}
{#HEAD#:
Foo
:##}
OPTIONS -o outputfile
This redirects the output to outputfile. Usually the output will be send to stdout if no such option is specified or outputfile is
``"-"''.
-q This sets quiet mode where warnings are suppressed.
-v This sets verbose mode where some processing information will be given on stderr.
AUTHORS
Ralf S. Engelschall
rse@engelschall.com
www.engelschall.com
Denis Barbier
barbier@engelschall.com
EN Tools 2014-04-16 divert(3)