Exuberant Ctags
===============
Author: Darren Hiebert (darren@hiwaay.net, http://fly.hiwaay.net/~darren)

This source code is released into the public domain. It is provided on an
as-is basis and no responsibility is accepted for its failure to perform
as expected. It is worth at least as much as you paid for it!

This is a reimplementation of the underused ctags(1) program and is intended
to be the mother of all ctags programs 8^). I was motivated to write this
because no currently available ctags program supported generation of tags for
all possible tag candidates, and because most were easily fooled by a number
of contructs. I am quite pleased with the result. It provides the following
features:

    Able to generate tags for all of the following objects:
	- macro definitions
	- enumeration values (those inside enum{...})
	- function definitions (and some C++ methods)
	- function prototypes (optional; intended for library header files)
	- enum, struct and union tags and C++ class names
	- typedefs
	- global variables

    Supports for both K&R style and new ANSI style function definitions.

    Supports Emacs-style tag files ("etags").

    It is very robust in parsing C code and is extremely hard to fool, even
    with conditional preprocessor contructs.

Which brings us to the most frequently asked question:

  Q: Why is it called "Exuberant" ctags?
  A: Because one of the meanings of the word is:

    exuberant : produced in extreme abundance : PLENTIFUL syn see PROFUSE

Compare the tag file produced by Exuberant Ctags with that produced by any
other ctags and you will see how appropriate the name is.

Official "Exuberant Ctags" Web site:  http://fly.hiwaay.net/~darren/ctags

Exuberant Ctags was originally derived from and inspired by the ctags program
by Steve Kirkendall (kirkenda@cs.pdx.edu) that comes with the Elvis vi clone
(though almost none of the original code remains). This, too, is freely
available.

Please report any problems you find. The two problems I expect to be most
likely are either a tag which you expected but is missing, or a tag created
in error (shouldn't really be a tag). Please include a sample of code (the
definition) for the object which misbehaves.
