===============================================================================
              librmm - An Internet Mail Message Parser 
              Design notes
-------------------------------------------------------------------------------
              Rik Hemsley rik@kde.org 
              Last update: Monday 6th June 2000
-------------------------------------------------------------------------------
Introduction
-------------------------------------------------------------------------------

  librmm is designed to have a class hierarchy which looks exactly the same
  as that specified by RFC 822 (see the BNF).
  
  You'll notice that in a couple of places, the code is a little strange.
  For example, RFC 822 specifies that an Address may be either a Mailbox
  OR a Group.
  
  This doesn't work well with an OO design, so an RAddress is a little smart -
  it know whether it's a Mailbox or a Group.

  Note: The classes of librmm implement the design pattern 'Proxy'.
  Actually, things are a little different, but basically creation /
  parsing / re-assembly of entities is postponed until absolutely necessary.

-------------------------------------------------------------------------------
Qt collections
-------------------------------------------------------------------------------

  librmm uses Qt collection classes. While these may be slightly slower than,
  e.g. STL, they're guaranteed to be available and consistent over the
  platforms that Qt runs on.

-------------------------------------------------------------------------------
Transparency
-------------------------------------------------------------------------------

  Parsing of string data and reassembly of string-based representations is
  handled automatically by librmm. librmm avoids doing more parsing or
  reassembly than is necessary.

-------------------------------------------------------------------------------
Construction
-------------------------------------------------------------------------------

  You may create any part in librmm by using either a string or specific
  parameters. This means that you can create an RHeader by passing
  either the header name (e.g. 'To:') and the header body as strings,
  or you can simply pass the whole header (e.g. 'To: foo@bar').

-------------------------------------------------------------------------------
Unicode
-------------------------------------------------------------------------------

  librmm uses QCString rather than QString as RFC 822 headers are ASCII.

===============================================================================
