SWFProcessing.SWFModeller.SWFReader.ReadTag C# (CSharp) Method

ReadTag() private method

private ReadTag ( ) : bool
return bool
        private bool ReadTag()
        {
            int type;
            uint followingOffset;
            this.sdtr.ReadRECORDHEADER(out type, out followingOffset);
            uint startOffset = this.sdtr.Offset;

            #if DEBUG
            Tag _tag = (Tag)type;
            bool isDefine = _tag == Tag.DefineShape ||
                     _tag == Tag.DefineShape3 ||
                     _tag == Tag.DefineShape4 ||
                     _tag == Tag.DefineSprite;
            this.MarkDumpOffset(
                    "Body of " + _tag + " (" + type + ") len=" + (followingOffset - this.sdtr.Offset),
                    isDefine);
            this.binaryDumpNest++;
            this.taglog.Add(_tag.ToString());
            #endif

            switch ((Tag)type)
            {
                case Tag.End:
            #if DEBUG
                    this.binaryDumpNest--;
            #endif
                    return false;

                case Tag.ShowFrame:
            #if DEBUG
                    this.MarkDumpOffset("");
            #endif
                    this.frameCursor++;
                    break;

                case Tag.Protect:
                    this.sdtr.Align8();
                    if (followingOffset > this.sdtr.Offset)
                    {
                        /*(void)*/this.sdtr.ReadUI16(); /* Reserved. Assumed 0. */
                        this.swf.ProtectHash = this.sdtr.ReadString();
            #if DEBUG
                        this.Log("Protect hash = " + this.swf.ProtectHash);
            #endif
                    }
                    break;

                case Tag.SetBackgroundColor:
                    this.swf.BackgroundColor = this.sdtr.ReadRGB();
                    break;

                case Tag.PlaceObject:
                    this.currentTimeline.GetFrame(this.frameCursor).AddTag(this.ReadPlaceObject(followingOffset));
                    break;

                case Tag.PlaceObject2:
                    this.currentTimeline.GetFrame(this.frameCursor).AddTag(this.ReadPlaceObject2());
                    break;

                case Tag.RemoveObject2:
                    this.currentTimeline.GetFrame(this.frameCursor).AddTag(this.ReadRemoveObject2());
                    break;

                case Tag.DefineBits:
                case Tag.DefineBitsJPEG2:
                case Tag.DefineBitsLossless:
                case Tag.DefineBitsLossless2:
                    this.ReadImageBlob((Tag)type, followingOffset);
                    break;

                case Tag.JPEGTables:
                    jpegTable = new JPEGTable(this.sdtr.ReadByteBlock((int)(followingOffset - this.sdtr.Offset)));
                    break;

                case Tag.DefineSprite:
                    this.ReadSprite();
                    break;

                case Tag.DefineShape:
                case Tag.DefineShape2:
                case Tag.DefineShape3:
                case Tag.DefineShape4:
                    this.ReadDefineShapeN((Tag)type, followingOffset);
                    break;

                case Tag.DefineMorphShape:
                case Tag.DefineMorphShape2:
                    this.ReadDefineMorphShape((Tag)type, followingOffset);
                    break;

                case Tag.DefineSceneAndFrameLabelData:
                    this.ReadSceneAndFrameLabelData();
                    break;

                case Tag.DoABC:
                    this.ReadDoABC(followingOffset);
                    break;

                case Tag.SymbolClass:
                    this.ReadSymbolClass();
                    break;

                case Tag.Metadata:
                    this.ReadXMLMetadata();
                    break;

                case Tag.EnableDebugger2:
                    this.ReadEnableDebugger2();
                    break;

                case Tag.FrameLabel:
                    this.currentTimeline.GetFrame(this.frameCursor).Label = this.sdtr.ReadString();
            #if DEBUG
                    this.Log("Frame label = " + this.currentTimeline.GetFrame(this.frameCursor).Label);
            #endif

                    break;

                case Tag.DefineFont3:
                    this.ReadFont((Tag)type);
                    break;

                case Tag.DefineFontAlignZones:
                    this.ReadFontAlignZones();
                    break;

                case Tag.DefineFontName:
                    this.ReadFontName();
                    break;

                case Tag.DefineText:
                case Tag.DefineText2:
                    this.ReadText((Tag)type);
                    break;

                case Tag.DefineEditText:
                    this.ReadEditText();
                    break;

                default:
                    /* ISSUE 73 */
                    throw new SWFModellerException(
                            SWFModellerError.UnimplementedFeature,
                            @"Unsupported tag type: " + type, swf.Context);
            }

            this.FinishTag(followingOffset);
            #if DEBUG
            this.binaryDumpNest--;
            #endif

            return true;
        }