* sourceforge migration

** Move CVS to sourceforge (estes) %%

** test the mailing lists (estes) %%

** inform GNU folks about changeover (estes) %%

* resolve the items in the to.do directory

** expand the above into individual requests and handle those requests

** transfer to.do/Wishlist contents to top level TODO file

* the manual:

** do an end-to-end proofread of the manual (this is under way, but is
   going slowly)

** pretty up the dvi output; overflows, etc.

** faq

*** clean up the faqs section. The information is good; the texinfo
   could use some touching up.

*** index the faq entries

*** mention that it's possible to use a variable to scan matching
    brackets, nested comments etc.

*** include something about lexing/parsing fortran

** create a section on flex design, features, etc.

* address lex-replacement: document or provide an option through
   configure for creating lex and libl.a files (but remember this has
   posix implications)

* getext

** make sure all flex modules use gettext translation facilities

*subdirectories

** in examples/manual, integrate the Makefile.examples into the
    Makefile.am

* test suite

** integrate the test suite into automake's framework (note that the
   test suite can be run from the top level directory with "make
   check". Still, we want to get it completely under automake's control.)

** make test suite more complete

* generic coding

** move as much skeleton code as possible out of gen.c and into
  flex.skl

** figure out whether we want to add the capability to have
  auto-generated backout rules

** token-type and token buffer support

** check if we still need to #undef macros at the end of a header

** merge yylineno into support for location tracking

** bug where yylineno is not decremented on REJECT

** bug where yylineno is counted in trailing context

* C++

** have a separate skeleton for c++

** c++ is getting so broken and different from C, that we need to
   reevaluate the usefuleness of c++ in flex

** revisit the C++ API. We get requests to make it more complete.

* distribution

** use bootstrapper

** remove texinfo.tex from the cvs tree; it only needs to be present
   on the system where the flex release is put together

** use clcommit to manage ChangeLog

Legend:

*, **, ***: outline depth
%% at end of item: must be adressed before next major release

Local Variables:
Mode: text
mode: outline-minor
End:
