diff options
Diffstat (limited to 'doc/info/gpp.texinfo')
-rw-r--r-- | doc/info/gpp.texinfo | 254 |
1 files changed, 254 insertions, 0 deletions
diff --git a/doc/info/gpp.texinfo b/doc/info/gpp.texinfo new file mode 100644 index 0000000..fcc566a --- /dev/null +++ b/doc/info/gpp.texinfo @@ -0,0 +1,254 @@ +\input texinfo @c -*-texinfo-*- + +@c %**start of header +@setfilename gpp.info +@settitle ?{GPP} +@afourpaper +@documentencoding UTF-8 +@documentlanguage en +@finalout +@c %**end of header + + +@dircategory Development +@direntry +* ?{GPP}: (?{GPP}). Bash-based preprocessor for anything +@end direntry + + +@copying +Copyright @copyright{} 2013, 2015 Mattias Andrée + +@quotation +Permission is granted to copy, distribute and/or modify this document +under the terms of the GNU Free Documentation License, Version 1.3 or +any later version published by the Free Software Foundation; with no +Invariant Sections, with no Front-Cover Texts, and with no Back-Cover +Texts. A copy of the license is included in the section entitled +``GNU Free Documentation License''. +@end quotation +@end copying + +@ifnottex +@node Top +@top gpp -- Bash-based preprocessor for anything +@insertcopying +@end ifnottex + +@titlepage +@title gpp +@subtitle Bash-based preprocessor for anything +@author by Mattias Andrée (maandree) + +@page +@vskip 0pt plus 1filll +@insertcopying +@end titlepage + +@contents + + + +@menu +* Overview:: Brief overview of @command{?{GPP}}. +* Invoking:: Invoking @command{?{GPP}}. +* Syntax:: Syntax of @command{?{GPP}}. +* GNU Free Documentation License:: Copying and sharing this manual. +@end menu + + + +@node Overview +@chapter Overview + +General Preprocessor (gpp) is a preprocessor +based on GNU Bash that can be used for anything. + +By default an at-sign (@@) is used as prefix +for preprocessor directives, but any single +single character can be used. If the prefix +symbol is directly followed by itself it results +to the symbol itself rather than a preprocessor +directive. + +A file written with gpp contains, text that +can be in any format, gpp does not care how +it is formatted, and lines written in GNU Bash +that are executed and termine which part of +the text should be keept and how it should +be repeated. A line can also be partially +written in GNU Bash to modify it. Each line +that is not in GNU Bash as actually treated +as a echo instruction. + +The preprocessor will try to keep the lines in +the output files in the same position as in +the source files. This will however stop to +work if the processor directives includes +loops or instructions that returns multiple +lines. + + + +@node Invoking +@chapter Invoking + +Syntax for invoking @command{?{GPP}}: +@command{?{GPP} [options...]} + +Short options must not be joined and +the value for a flag must be in a +separate argument from the flag itself. + +For example, @option{--symbol=X} is not allowed, +but @option{--symbol X} is. + +@table @option +@item -s +@itemx --symbol +Set the prefix symbol for preprocessor directives. (Default: @@) + +@item -e +@itemx --encoding +Set the encoding of file. + +@item -n +@itemx --iterations +Number of iterations to run the preprocessing in. (Default: 1) + +@item -u +@itemx --unshebang +Blank out the shebang line. Notice that the line is not removed, +it is just cleared. You can use a shebang line make to gpp +preprocess the file when executed. + +If @option{--unshebang} is used twice, the second line in the +file will be moved up to the top of the file and the initial +shebang line will be removed. A blank line will be inserted +after the new top line will be added to keep the line numbers +in the output file as near as possible to the line numbers +in the input file. The intension of this option is that you +can have two shebang lines, one on the first line for preprocessing +when the file is executed, and one shebang line on the second +line for output file. + +@item -i +@itemx --input +Set the input file. (Default: /dev/stdin) + +@item -o +@itemx --output +Set the output file. (Default: /dev/stdout) + +@item -f +@itemx --file +Set both input file and output file. + +@item -D +@itemx --export +Declare a environment variable. The syntax +@code{NAME=VALUE} is used for the argument, +but if the argument does not include an +equals sign the value 1 will be used. + +@item -v +@itemx --version +Print program name and version and exit. + +@item -c +@itemx --copying +Print copyright notice and exit. + +@end table + + + +@node Syntax +@chapter Syntax + +To create a preprocess directive, begin the +line with @code{@@>}. For example, the follow +code will only keep the `Hello world' line +if the environment variable @var{HELLO} is +defined and is not empty. + +@example +@@>[ -z "$HELLO" ] && +Hello world +@end example + +If you want to write a mutliline preprocessor +directive you can begin the first line with +@code{@@<} and begin the last line with +@code{@@>}, instead of having each line start +with @code{@@>}. For example, if you want +to create a preprocess function to make a +ASCII text uppercase you can write: + +@example +@@<uppercase () @{ + lower=qwertyuiopasdfghjklzxcvbnm + upper=QWERTYUIOPASDFGHJKLZXCVBNM + sed y/$lower/$upper/ <<<"$*" +@@>@} +@end example + +Now assume that you have this @command{uppercase} +preprocessor function defined on the top of a +document. Also assume that you are logged in +as the user `twilight' and therefor have the +environment variable @var{USER} set to `twilight'. + +If you in the document, below the definition +of @command{uppercase}, insert the line + +@example +Your are logged in as @@(uppercase $USER). +@end example + +After preprocessing it will say + +@example +Your are logged in as TWILIGHT. +@end example + +@@(...) can be used inline. It executes a +command that can either be defined as a +preprocessor function or be an external program. +Preprocossor directives cannot be used inside +it, everything in it is in GNU Bash. + +@@@{...@} is another inline preprocessor directive, +you can put the name of a preprocessor variable +or environment variable inside it to get the +variable's value. For example, if you are +logged in as `twilight' + +@example +Your are logged in as @@@{USER@}. +@end example + +@noindent +will after preprocessing say + +@example +Your are logged in as twilight. +@end example + +@noindent +@command{gpp} supports all modifications to the +result that Bash does. For example, if you want +the value to be uppercased you can write + +@example +Your are logged in as @@@{USER^^@}. +@end example + + + +@node GNU Free Documentation License +@appendix GNU Free Documentation License +@include fdl.texinfo + +@bye + |