       TODO - List of things to do as of 2005/01/29

Suggestions for things to add are welcome, if you have a feature request you
can either post it to the forums:

http://qbnz.com/highlighter/forum.php

Or to the feature request tracker:

http://sourceforge.net/tracker/?group_id=114997&atid=670234


  TODO for version 1.0.8.x

- Rework the load_from_file method and the one for getting a file extension,
  as documented in the source.
- use analogous vars to $next_comment_regexp_pos for more GeSHi structures,
  should reduce number of functions called and hence improve performance
- make a set of default colours which can be used in the language files.
  this way we can give languages a uniform look and maybe even add "themes"
- Get better coverage in our coderepo
- README / INSTALL / ... file for phpdoc integration => take geshi-doc.*?
- rework HARDQUOTE + styles, currently this is a bit of a mess imo (milian)
- Allow per-keywordgroup AutoCaps/NoCaps
- Complete API to support latest features
    set_number_style ($key missing)
    set_string_style ($key missing)
    set_case_keywords (support for per_keywordgroup AutoCaps)


  TODO for version 1.2.0

- Rewrite engine to use remove/replace method (will hopefully almost
  eliminate the need for regular expressions except for numbers/methods
  etc). This will also assist for making different output formats [DONE]
- "Intelligent" output format - eg if the user doesn't want lines to
  wrap and wants line numbers don't use <ol>, use the <table> method
  instead. (This saves on output)
- Clear split between "public" and "private" methods [DONE]
- PHP5 version
- "Themes" for styles - basically pre-made stylesheets that can be used
  to highlight code of any language in a similar manner [DONE]
- "Dialects" for languages - eg php4, php5. One master language definition
  file, and a bunch of "specialised" dialect files for each language
  Ability to specify a "specialised" dialect as default? [DONE]
- Look at load/memory usage and try to reduce
- Make tabs into tab-stops like a normal editor [DONE]
- Ability to add more than one multiline comment or string [DONE]
- Ability to specify that strings cannot be multiline [DONE]
- Create a "wrapper" class for ultra-easy use
- Code written in a style that conforms to a phpdoc utility [DONE, PEAR]
- Dig functions/methods out of code and where they are called make an internal
  link back to their definition


  TODO for version 2.0.0

- Support for multiple output formats (XHTML, XML, PDF, RTF etc) [DONE IN 1.2]
- Support for auto-indent/code "beautifing"
- Option for "Lite" highlighting - aims for speed and low server load
- "Intelligent" highlighting inside comments, and ability to highlight
  source in multiple languages at once (eg PHP+HTML) [DONE IN 1.2]
- Perhaps a script on the GeSHi site that would map urls to appropriate
  definitions and relocate the user? (eg, java documentation is
  structured in such a way that urls are not able to be used with GeSHi.
  Instead the URL could become:
  http://qbnz.com/highlighter/redirect.php?lang=java&kw=KeyWord
  and that script would redirect to the correct location.
  [BETTER FIX IN 1.2]

              $Id: TODO 1727 2008-08-08 13:36:52Z benbe $
