I have created a text processing utility that I would like to donate to the public domain as I think others might find it useful also. The basic concept is that the user provides a set of rules that use pattern matching to specify the transformation of the input file(s) to the output file(s). Each rule consists of a template to be matched against the input text and a corresponding action that produces replacement text. (This approach was inspired by W. M. Waite's STAGE2 processor, but it also has some similarities to "awk".) Text that doesn't match any pattern is copied unchanged, or optionally omitted. This provides a very general purpose mechanism that can be used for a number of purposes: * As a macro pre-processor, it can do macro substitutions like "cpp" or "m4", but is more general because it does not impose any particular syntax for what a macro call looks like. * It can search for and display selected information like "grep", but it has the advantage of being able to recognize patterns that span multiple lines, and can use more complicated selection criteria. * It can do many of the kinds of text manipulations typically done by "sed" or "awk", but it can handle multiple-line constructs and nested constructs, such as properly matching pairs of nested parentheses. * It can be used to implement translators for converting information from one programming language or data representation to another. Some features that facilitate this include: * No built-in assumptions about the language syntax. * There can be multiple sets of rules for different contexts. For example, comment bodies can be processed by a separate set of rules from those for program code. * Ignoring redundant whitespace is easy. I have used this to implement translators to HTML from LaTeX and "nroff". Complete documentation can be viewed at URL: http://www.ugcs.caltech.edu/gema/ The program, documentation, and examples may be obtained by anonymous FTP from "ftp.ugcs.caltech.edu" in directory "/pub/gema". The program is written in ANSI C and works on both Unix and MS-DOS. -- David N. Gray DGray@acm.org