Completed:
    can somewhat detect{} in functions..in class declaration bodies :(
    Do forward declarations:
        basic algo is to scan the supplemental members we are squishing for any type names
          then if a type if defined in the impl class..move it as the first element of the supplemental section
          otherwise maintain a unique array of types encountered and plaster them into the class
          for bonus points figure out header names to include and then produce a patch for the include section too
    Ability to blacklist headers..like nsTString
  Also need to move stuff like enums into the iface class
    algo: as strange definitions are encountered before the implementation class
        keep track of their locations, then when the stuff is refferenced look em up and plug them
          into the private section as needed
    also when outputting them later, output delete blocks for prev definitions
  Rename implementation class function definitions including parameters
  Store the patch output in a data structure such that the output would be buffered and sorted before printing to not impose limitations on the user
  Worked around Enums being printed out with a trailing comma
support static function members
rename declarators iff they contain use of impl-named param
add a flag to make functions virtual 

Issues:

      debug why some things set line # to 1
	merge includes & extraIncludes
  cleanup function printing:
          use printDeclaration
  string.txt stuff...Can't we derive from std::string and provide a (char*) conversion routine? Sup with not liking const string
  typedefs seem to be lost forever
      try using classes instead of typedefs/macros?

  implement the patch window

Macro Expansion Issues:
eg1: #define bla; targetToReplace(); foo;
eg2; DO_SOMETHING(foo,
                  targetToReplace());
I think to cure this I need to do limited macro inversion. Eg mark up the text with metadata on which parts of the cpp-expanded text were defined in the macro(plus be able to find that macro) and which parts are just macro parameters
check idl effects of nsISelection::CollapseToEnd
    
roc> also, when you modify classes with IIDs, you should probably rev the IID

blog