Example #1
0
 public DefineFontNameTag(FlashReader reader, TagRecord header) :
     base(reader, header)
 {
     FontId = reader.ReadUInt16();
     FontName = reader.ReadNullTerminatedString();
     FontCopyright = reader.ReadNullTerminatedString();
 }
Example #2
0
        public DefineBinaryDataTag(FlashReader reader, TagRecord header)
            : base(reader, header)
        {
            CharacterId = reader.ReadUInt16();
            reader.ReadUInt32();

            BinaryData = reader.ReadBytes(header.Body.Length - 6);
        }
        public SetBackgroundColorTag(FlashReader reader, TagRecord header) :
            base(reader, header)
        {
            byte red = reader.ReadByte();
            byte green = reader.ReadByte();
            byte blue = reader.ReadByte();

            BackgroundColor =
                Color.FromArgb(red, green, blue);
        }
Example #4
0
        public DoABCTag(FlashReader reader, TagRecord header)
            : base(reader, header)
        {
            Flags = reader.ReadUInt32();
            Name = reader.ReadNullTerminatedString();

            int nameLength = (Encoding.UTF8.GetByteCount(Name) + 1);
            byte[] abcData = reader.ReadBytes(header.Body.Length - (nameLength + 4));

            ABC = new ABCFile(abcData);
        }
Example #5
0
        public ProductInfoTag(FlashReader reader, TagRecord header) :
            base(reader, header)
        {
            ProductId = (FlashProductId)reader.ReadUInt32();
            Edition = (FlashEdition)reader.ReadUInt32();

            MajorVersion = reader.ReadByte();
            MinorVersion = reader.ReadByte();

            BuildLow = reader.ReadUInt32();
            BuildHigh = reader.ReadUInt32();

            CompilationDate =
                _epoch.AddMilliseconds(reader.ReadUInt64());
        }
Example #6
0
        public SymbolClassTag(FlashReader reader, TagRecord header) :
            base(reader, header)
        {
            int symbolCount = reader.ReadUInt16();
            Symbols = new Dictionary<ushort, string>(symbolCount);

            for (int i = 0; i < symbolCount; i++)
            {
                ushort characterId = reader.ReadUInt16();
                string symbolName = reader.ReadNullTerminatedString();

                if (Symbols.ContainsKey(characterId))
                {
                    symbolName =
                        $"{Symbols[characterId]},{symbolName}";
                }
                Symbols[characterId] = symbolName;
            }
        }
Example #7
0
        public ExportAssetsTag(FlashReader reader, TagRecord header) :
            base(reader, header)
        {
            int count = reader.ReadUInt16();
            Assets = new Dictionary<ushort, string>(count);

            for (int i = 0; i < count; i++)
            {
                ushort tag = reader.ReadUInt16();
                string name = reader.ReadNullTerminatedString();

                if (Assets.ContainsKey(tag))
                {
                    throw new Exception(
                        "Duplicate tag id: " + tag);
                }
                Assets[tag] = name;
            }
        }
        public DefineBitsLossless2Tag(FlashReader reader, TagRecord header) :
            base(reader, header)
        {
            CharacterId = reader.ReadUInt16();
            BitmapFormat = reader.ReadByte();
            BitmapWidth = reader.ReadUInt16();
            BitmapHeight = reader.ReadUInt16();

            _isCompressed = true;
            switch (BitmapFormat - 3)
            {
                case 0: break;

                case 1:
                case 2:
                {
                    _compressedBitmapData =
                        reader.ReadBytes(header.Body.Length - 7);

                    break;
                }
            }
        }
Example #9
0
 public FrameLabelTag(FlashReader reader, TagRecord header) :
     base(reader, header)
 {
     Name = reader.ReadNullTerminatedString();
 }
Example #10
0
 public UnknownTag(FlashReader reader, TagRecord header) :
     base(reader, header)
 {
     reader.Position += header.Body.Length;
 }
Example #11
0
 public FlashTag(FlashTagType tagType)
 {
     Header = new TagRecord(tagType);
 }
Example #12
0
        protected override FlashTag ReadTag(FlashReader reader, TagRecord header)
        {
            FlashTag tag =
                base.ReadTag(reader, header);

            switch (tag.Header.TagType)
            {
                case FlashTagType.DoABC:
                _abcFiles.Add(((DoABCTag)tag).ABC);
                break;

                case FlashTagType.DefineBinaryData:
                _binTags.Add((DefineBinaryDataTag)tag);
                break;
            }
            return tag;
        }
Example #13
0
        protected virtual FlashTag ReadTag(FlashReader reader, TagRecord header)
        {
            FlashTag tag = null;
            switch (header.TagType)
            {
                default:
                tag = new UnknownTag(Reader, header);
                break;

                case FlashTagType.DoABC:
                tag = new DoABCTag(Reader, header);
                break;

                case FlashTagType.DefineBitsLossless2:
                tag = new DefineBitsLossless2Tag(Reader, header);
                break;

                case FlashTagType.DefineBinaryData:
                tag = new DefineBinaryDataTag(Reader, header);
                break;
            }

            var character = (tag as ICharacter);
            if (character != null)
            {
                // Add ICharacter tag to the global dictionary.
                Dictionary.Characters[
                    character.CharacterId] = character;
            }
            return tag;
        }
Example #14
0
        /// <summary>
        /// Reads the flash tags that make up the content of the Shockwave Flash(SWF) file.
        /// </summary>
        public virtual List<FlashTag> ReadTags()
        {
            Tags.Clear();
            Reader.Position = _frameEndPos;

            while (Reader.Position != Reader.Length)
            {
                var header = new TagRecord(Reader);
                int expectedPosition = (header.Body.Length + Reader.Position);

                Tags.Add(ReadTag(Reader, header));
                if (Reader.Position != expectedPosition)
                {
                    int lastTagIndex = (Tags.Count - 1);

                    throw new Exception($"Incorrect position has been reached at {Reader.Position}.\r\n" +
                        $"Expected Position: {expectedPosition} | TagType: {Tags[lastTagIndex].Header.TagType} | Tag Index: {lastTagIndex}");
                }
            }
            return Tags;
        }
Example #15
0
 public ShowFrameTag(FlashReader reader, TagRecord header) :
     base(reader, header)
 { }
Example #16
0
 public FlashTag(FlashReader reader, TagRecord header)
 {
     Header = header;
 }
Example #17
0
 public ScriptLimitsTag(FlashReader reader, TagRecord header) :
     base(reader, header)
 {
     MaxRecursionDepth = reader.ReadUInt16();
     ScriptTimeoutSeconds = reader.ReadUInt16();
 }