Priorities are:
  1. Bug fixing.
  2. Documentation.
  3. Error handling.
  4. New features.
Stability is the key feature for adoption. Novelang will grow slowly, and won't advertise a lot until all features I think necessary are present. I don't want to harass my testers with bugs or missing features I already know about. Improvements on short term:
  • Report location on every error.
  • Try to recover on unmatched delimiter (like missing closing parenthesis).
  • Document some tricks.
Requirements for 1.0:
  • Better URLs: inside paragraphs, alt and text properties.
  • Fix potential punctuation problems.
  • Lists, ordered and unordered.
  • Images. May turn to an infinite feature list -- be careful!
  • Accolades and angled brackets (used for footnotes and index entries).
  • Identifiers. These are needed for generating table of content.
  • Bold, small caps, superscript, subscript, a few levels of headers below section.
  • "Beautiful" PDF generation with a look inspired from Manning's books, table of content, index and so on.
After release 1.0 there are two different paths to follow in parallel (will depend on feedback I suppose):
  • Improve content generation.
  • Open Novelang to other developers, as an embeddable / extensible software component.
Content generation improvements include:
  • Identifier-based inclusions.
  • Multi-document output (useful for generating web sites with several pages).
  • Resource scan for automatic copy in batch mode.
  • Some optimizations for speed / memory consumption.
Componentizing Novelang means:
  • Remove dependency to Jetty and rely on pure Servlet API.
  • Pluggable tree manipulation functions. By now such a mechanism is used internally but it deserves to get open. Would require some Generics to support custom Environment class.
  • Extensible grammars. Thanks to ANTLR 3.1 it will be possible to write a grammar reusing parts of an existing one. So developers could writer their own additions to Novelang's standard grammar, while ANTLR performs all consistency checks. By the way, making a grammar evolve is not a quiet game.
  • Extensible grammars mean redefining token list.
  • Component weaving with Guice. Guice is the coolest way to assemble components which are, basicall, functions.
  • Configurable escape codes, and whitespace triggers.
Novelang as component can be advertised through some plugin for a tool like Maven or Eclipse.

No comments: