/// <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; }