aboutsummaryrefslogtreecommitdiffstats
path: root/gpp.1
diff options
context:
space:
mode:
Diffstat (limited to 'gpp.1')
-rw-r--r--gpp.1197
1 files changed, 197 insertions, 0 deletions
diff --git a/gpp.1 b/gpp.1
new file mode 100644
index 0000000..3a8fae3
--- /dev/null
+++ b/gpp.1
@@ -0,0 +1,197 @@
+.TH GPP 1 gpp
+.SH NAME
+gpp - Bash-based preprocessor for anything
+
+.SH SYNOPSIS
+.R gpp
+.RI [ OPTION ]...
+
+.SH ETYMOLOGY
+gpp stands for General Preprocessor.
+
+.SH DESCRIPTION
+.B gpp
+lets a developer embed directives written in
+.B GNU Bash
+into any text document. These directives are used
+to automate the writting of parts of the document.
+.PP
+The preprocessing directives start with a symbol (or
+text string) specified by the developer. By default
+this symbol is
+.B @
+(at).
+.PP
+Any line starting with
+.B @< (where
+.B @
+is the selected symbol for preprocessing directives) or
+.BR @> ,
+or is between a line starting with
+.B @
+and a line starting with
+.BR @> ,
+is parsed as a line, written in
+.BR bash (1),
+that is executed during preprocessing. A
+.B @<
+line must have an associated
+.B @>
+line somewhere after it, all lines between them are
+parsed as preprocessing directives. A
+.B @>
+does however not need an associated
+.B @<
+line somewhere before it, making
+.B @>
+suitable for single line directives.
+.PP
+Preprocessing directives can also be inline. For this, use
+.BI @( COMMAND )
+where
+.I COMMAND
+is the
+.BR bash (1)
+code to run. Additionally,
+.B gpp
+supports variable substitution.
+.BI @{ VARIABLE }
+will be replaces by the value if the variable
+(possibility environment variable)
+.IR VARIABLE .
+.B gpp
+supports all modifiers that
+.BR bash (1)
+supports. For example, if you want the value to be
+included but uppercase you can write
+.BR @{ \fIVARIABLE\fP ^^} ,
+or
+.BI @{ VARIABLE ,,}
+for lowercase.
+.PP
+Everything that is not a preprocessing directive is
+echo verbatim.
+
+.SH OPTIONS
+.TP
+.BR \-s ,\ \-\-symbol \ \fISYMBOL\fP
+Set the prefix symbol for preprocessor directives.
+Defaults to @ (at).
+.TP
+.BR \-e ,\ \-\-encoding \ \fIENCODING\fP
+Specifies the encoding of the file.
+.TP
+.BR \-n ,\ \-\-iterations \ \fIN\fP
+Process the file recursively \fIN\fP times. Defaults to 1 time.
+.TP
+.BR \-u ,\ \-\-unshebang
+Clear the shebang line, remove it if this flag
+is used twice. If used twice, an empty line
+will be inserted after the new first line.
+.TP
+.BR \-i ,\ \-\-input \ \fIFILE\fP
+Select file to process. Defaults to /dev/stdin.
+.TP
+.BR \-o ,\ \-\-output \ \fIFILE\fP
+Select output file. Defaults to /dev/stdout.
+.TP
+.BR \-f ,\ \-\-file \ \fIFILE\fP
+Equivalent to \-i \fIFILE\fP \-o \fIFILE\fP.
+.TP
+.BR \-D ,\ \-\-export \ \fINAME\fP=\fIVALUE\fP
+Set the environment variable \fINAME\fP to hold
+the value \fIVALUE\fP.
+.TP
+.BR \-D ,\ \-\-export \ \fINAME\fP
+Set the environment variable \fINAME\fP to hold
+the value 1.
+.TP
+.BR \-v ,\ \-\-version
+Print program name and version and exit.
+.TP
+.BR \-c ,\ \-\-copying
+Print copyright notice and exit.
+.PP
+Short options must be joined. The value of a flag must
+be in a separate argument from the flag itself.
+
+.SH EXAMPLES
+.SS Conditional hello world
+This example only includes the
+.RB \(dq "Hello world" \(dq
+line if the environment variable
+.B HELLO
+is defined and is not empty.
+.PP
+.nf
+@>if [ -z "$HELLO" ]; the
+Hello world
+@>fi
+.fi
+
+.SS Mutliline preprocessor directive
+This example creates the function
+.BR uppercase ()
+that convert lower case ASCII leters to uper case.
+.PP
+.nf
+@<uppercase () {
+ lower=qwertyuiopasdfghjklzxcvbnm
+ upper=QWERTYUIOPASDFGHJKLZXCVBNM
+ sed y/$lower/$upper/ <<<"$*"
+@>}
+.fi
+
+.SS Inline directives
+This example uses the
+.BR uppercase ()
+function above to convert the user's username
+to upper case. If the user's username is
+.BR john ,
+the code will expand to
+.B You are logged in as JOHN.
+.PP
+.nf
+You are logged in as @(uppercase $USER).
+.fi
+
+.SS Variable expansions
+In this example, if the user's username
+.BR john ,
+the code will expand to
+.B You are logged in as john.
+.PP
+.nf
+You are logged in as @{USER}.
+.fi
+
+.SS Variable expansion with substitution
+This example uses a substitution mechanism in Bash to
+convert the first letter in a variable to upper case.
+In this example, if the user's username
+.BR john ,
+the code will expand to
+.B You are logged in as John.
+.PP
+.nf
+You are logged in as @{USER^}.
+.fi
+
+.SH RATIONALE
+Programmers need more automation when we write software
+and documentation. An unrestricted preprocessor lets
+you automate just about anything. Of course, it can be
+used for anything, must just writing software and
+documentation. Preprocessing can be used for more than
+automation, it can also be used to increase the flexibility
+of the work.
+.PP
+C is one of the few languages that includes a preprocessor,
+some times it is not enough; and all languages need
+preprocessors.
+
+.SH "SEE ALSO"
+.BR bash (1),
+.BR jpp (1),
+.BR cpp (1),
+.BR env (1)