Scroll to navigation

PREPROCESS(1) General Commands Manual PREPROCESS(1)

NAME

preprocess - Preprocess a file.

SYNOPSIS

preprocess [options...] infile

DESCRIPTION

Preprocess is like a typical C preprocessor, but it extends to multiple languages. Languages for which it works include: C++, Python, Perl, Tcl, XML, JavaScript, CSS, IDL, TeX, Fortran, PHP, Java, Shell scripts (Bash, CSH, etc.) and C#. Preprocess is usable both as a command line app and as a Python module.

OPTIONS

-h, --help
Print help text and exit.
-V, --version
Print the version info and exit.
-v, --verbose
Give verbose output for errors.
-o outfile
Write output to the given file instead of to stdout.
-f, --force
Overwrite given output file. Otherwise an IOError will be raised if outfile already exists.
-D define
Define a variable for preprocessing. define can simply be a variable name (in which case it will be true) or it can be of the form var= val. An attempt will be made to convert val to an integer so " -D FOO=0" will create a false value.
-I dir
Add a directory to the include path for #include directives.
-k, --keep-lines
Emit empty lines for preprocessor statement lines and skipped output lines. This allows line numbers to stay constant.
-s, --substitute
Substitute defines into emitted lines. By default substitution is NOT done because it currently will substitute into program strings.

MODULE USAGE


from preprocess import preprocess
preprocess(infile, outfile=sys.stdout, defines={}, force=0,
keepLines=0, includePath=[], substitute=0)
The <infile> can be marked up with special preprocessor statement lines of the form:

<comment-prefix> <preprocessor-statement> <comment-suffix>
where the <comment-prefix/suffix> are the native comment delimiters for that file type.

EXAMPLES

HTML (*.htm, *.html) or XML (*.xml, *.kpf, *.xul) files:

<!-- #if FOO -->
...
<!-- #endif -->
Python (*.py), Perl (*.pl), Tcl (*.tcl), Ruby (*.rb), Bash (*.sh), or make ([Mm]akefile*) files:

# #if defined('FAV_COLOR') and FAV_COLOR == "blue"
...
# #elif FAV_COLOR == "red"
...
# #else
...
# #endif
C (*.c, *.h), C++ (*.cpp, *.cxx, *.cc, *.h, *.hpp, *.hxx, *.hh), Java (*.java), PHP (*.php) or C# (*.cs) files:

// #define FAV_COLOR 'blue'
...
/* #ifndef FAV_COLOR */
...
// #endif
Fortran 77 (*.f) or 90/95 (*.f90) files:

C #if COEFF == 'var'
...
C #endif

PREPROCESSOR SYNTAX

Valid statements:

#define <var> [<value>]
#undef <var>
#ifdef <var>
#ifndef <var>
#if <expr>
#elif <expr>
#else
#endif
#error <error string>
#include "<file>"
where <expr> is any valid Python expression.
The expression after #if/elif may be a Python statement. It is an error to refer to a variable that has not been defined by a -D option or by an in-content #define.
Special built-in methods for expressions:

defined(varName) Return true if given variable is defined.

TIPS

A suggested file naming convention is to let input files to preprocess be of the form <basename>.p.<ext> and direct the output of preprocess to <basename>.<ext>, e.g.:

preprocess -o foo.py foo.p.py
The advantage is that other tools (esp. editors) will still recognize the unpreprocessed file as the original language.

AUTHORS

Trent Mick <trentm@gmail.com>
This manual page was written by Johannes Ring <johannr@simula.no> for the Debian GNU/Linux system (but may be used by others).