/// <summary>
///
/// </summary>
/// <param name="input"></param>
/// <returns></returns>
public bool Parse( Stream input )
{
BinaryReader2 br = new BinaryReader2( input );
bool parsingSuccess = true;
UInt16 uselessButFiddelingWithBitsThanksAdobe = br.ReadUInt16();
if ( 0 != uselessButFiddelingWithBitsThanksAdobe )
{
SwfFormatException sfe = new SwfFormatException( "Reserved 16Bit Field in CLIPACTION used" );
Log.Error(this, sfe );
throw sfe;
}
_ClipEventFlags = new ClipEventFlags( this.Version );
_ClipEventFlags.Parse( input );
_ClipActionRecords = new List<ClipActionRecord>();
//
// The ClipActionEndFlag is Version dependent!
//
while ( 0 != ( this.Version <= 5 ? br.PeekUInt16() : br.PeekUInt32() ) )
{
ClipActionRecord record = new ClipActionRecord( this.Version );
bool recordParsingResult = record.Parse( input );
_ClipActionRecords.Add( record );
parsingSuccess = recordParsingResult & parsingSuccess;
}
//
// Get the EndRecord (Version dependent) and ignore
//
UInt32 endRecord = this.Version <= 5 ? br.ReadUInt16() : br.ReadUInt32();
if ( 0 != endRecord )
{
SwfFormatException sfe = new SwfFormatException( "endRecord is not 0x00/0x0000" );
Log.Error(this, sfe );
throw sfe;
}
//Log.Debug(this, _ClipActionRecords.Count + " ClipActionRecords added" );
return parsingSuccess;
}