[warning: very large patch!]
OK, here are the promised OLE2 changes, without the stream hack :)
I have moved a number of the smaller classes and files to another file, ole2_util.py, as they could potentially be used by other parsers (e.g. RawParser?, FragmentGroup?, etc.) and are also used by many of the parsers in the OLE2 suite, across many of the files. I think this is a good idea, but of course, final determination is left to haypo ;)
MSOffice parser has been significantly expanded, and it now includes parsers for the PowerPoint? Document stream and the Workbook stream from Excel.
A new class "OLE2FragmentParser" has been created, which is used as the generic template for the parsers.
Fixed a bug where the first big block would be omitted from the root entry in certain cases, resulting in broken files.
Fixed small block seeking in RootEntry? (formerly OfficeRootEntry?); this allows small blocks to be parsed correctly.
Changed RootEntry? to more closely resemble OLE2_File, as they are basically the same parser with minor changes (and of course RootEntry? lacks the DIFAT & FAT tables)
Changed the format of PROPERTY_NAME to include a parser field too; this way, streams can easily have parsers associated with them.
Summary has three new property parsers: Null, Blob and WidePascalString?32 (this last one needs a new name :P)
Large (>7MB) file support. Also, changed SECT to be a UInt32, since that's what it is according to the specification (sector numbers can be up to 4 billion in size)
DIFAT chaining, to support larger files
Very large (>2GB) file support is untested and probably doesn't work. Require support for range-lock sectors and other things (possibly)
Fix for small root entries; by definition, a root entry lives in a Big Block even if it isn't over the threshold.
...other changes which are very minor (e.g. spelling)
A patch and the file OLE2_Util.py are attached.