Expander 2, abbreviation expansion facility for macro enabled editors.

[Note from utility revisionist, Steven Haehn, Nov. 23, 2000]

  Even though NEdit does not have an automatic abbreviation mechanism, I
  have been enjoying the use of user controlled abbreviation expansion
  since version 4.x of the editor.

  I took the existing 'expander' program found in the NEdit
  contributions directory and kicked it up a notch, to borrow an Emeril
  Lagasse phrase. With this version, there is no longer a need  to
  modify the program to add new expansions. All expansion definitions
  come from data files (abbreviation dictionaries), which can be
  constructed at will, with NEdit, of course. There are already
  definition files for 'C', bourne shell, java, NEdit macro, perl, and
  TCL as illustrative examples.

  This expander program, along with NEdit macro glue and a 'perl' script
  to invoke NEdit with language context environment variables, gives one
  language specific expansions for just about any computer language
  invented, with their flavor of indents and syntactic sugar. For
  example, when I want an 'if' statement generated in perl, 'C', bash,
  or whatever, I type 'if' followed by my expansion key (which I have
  bound to control-X) and I will get an 'if' statement with the syntax
  that I specified for the given language. No longer do I have to
  remember about spacing requirements that some shell programs need, or
  the differences between similar constructs in the different languages.

  If I want to put my name in a file for documentation purposes, I type
  'me' and have it expanded. If I want the current date of the
  modification, I type in 'date' (actually 'da' because I like to
  minimize my typing) and have it expanded. Since this version of
  expander gives access to the contents of files, entire templates
  become available at a touch of the expander key.

  Other capabilities that the expander program has are:

     * Date and time expansion with the format governed by environment
       variable settings.

     * Entire file template expansions with automatic field fill-in.

     * Dynamic definition additions at time of invocation so that
       data from the NEdit buffer can be used in expansion process.

  The files that are needed to take advantage of the 'expander' package
  that I have incorporated with NEdit are as follows:

    expander            (put someplace in your executable path)
    definitions, *.def  (please edit 'me' in definitions for yourself)
    *.tpl               (expander template files)
    expander.nm         (NEdit macros providing the glue to get to expander)
    system.nm,          (supporting macros for expander.nm)
    getenv.nm           (supporting macro for expander.nm, NEdit prior 5.1.1)
    general.nm          (supporting macros for expander.nm)
    .neditmacro         (root initiator of all the NEdit macros)
    .neditutil/*.nm     (useful collection of other macros)

    align_column, align_comment (text alignment filters)
    boxcomment/unboxcomment (text commenting filter utility for NEdit)
    service             (expander $language_mode-to-definition-file map
                         and boxcomment characters, stored with definitions)

  Documentation exists in the "docs" directory for the following:
  
    expander.pod       (perl style documentation for the utility)
    NEdit-expander.doc (documentation of NEdit macro glue for expander)
    boxcomment.pod     (documentation for boxcomment and unboxcomment)
    align_comments.pod
    align_columns.pod

    There are 'man' versions (*.1) of all the .pod source documentation
    in case perl translators are unavailable. Other translations can be
    made through whatever pod2xxx programs that are available.
    A Makefile and build script are provided in the "docs" directory.
  
    INSTALL   gives expander package installation instructions.
    USAGE     gives a simple tutorial on expander usage in NEdit.
  
  The dot_neditmacro in the misc directory file is an example of how I have
  hooked in my various macros. Since all NEdit users have their own version of
  this, you should rely on this only as an example, and not a direct
  replacement. The file dot_nedit contains my particular keyboard bindings and
  is here as an example. A Makefile is supplied which uses the cc 'C' language
  compiler. Edit the file if you have a different 'C' compiler.

  The incorporation of expander into NEdit has made my editing experience
  much more pleasant than I could have imagined. I hope your experience
  with it will be the same!
  
  I would like to thank Marc Verdiesen for supplying the initial implementation
  of expander, which started the wheels rolling in my mind. I would also like to
  thank Joor Loohuis for code contribution, code testing, idea bouncing,
  expander hilight syntax, and cheerleading me to the end result.
  
  -- Steve Haehn
