SwfTagBase ISwfTagVisitor <ISwfStreamReader, SwfTagBase> .Visit(DefineEditTextTag tag, ISwfStreamReader reader) { tag.CharacterID = reader.ReadUInt16(); tag.Bounds = reader.ReadRect(); var hasText = reader.ReadBit(); tag.WordWrap = reader.ReadBit(); tag.Multiline = reader.ReadBit(); tag.Password = reader.ReadBit(); tag.ReadOnly = reader.ReadBit(); var hasTextColor = reader.ReadBit(); var hasMaxLength = reader.ReadBit(); tag.HasFont = reader.ReadBit(); tag.HasFontClass = reader.ReadBit(); tag.AutoSize = reader.ReadBit(); tag.HasLayout = reader.ReadBit(); tag.NoSelect = reader.ReadBit(); tag.Border = reader.ReadBit(); tag.WasStatic = reader.ReadBit(); tag.HTML = reader.ReadBit(); tag.UseOutlines = reader.ReadBit(); if (tag.HasFont) { tag.FontID = reader.ReadUInt16(); } if (tag.HasFontClass) { tag.FontClass = reader.ReadString(); } if (tag.HasFont) { tag.FontHeight = reader.ReadUInt16(); } if (hasTextColor) { tag.TextColor = reader.ReadRGBA(); } if (hasMaxLength) { tag.MaxLength = reader.ReadUInt16(); } if (tag.HasLayout) { tag.Align = reader.ReadByte(); tag.LeftMargin = reader.ReadUInt16(); tag.RightMargin = reader.ReadUInt16(); tag.Indent = reader.ReadUInt16(); tag.Leading = reader.ReadSInt16(); } tag.VariableName = reader.ReadString(); if (hasText) { tag.InitialText = reader.ReadString(); } return(tag); }
SwfTagData ISwfTagVisitor <ISwfStreamWriter, SwfTagData> .Visit(DefineEditTextTag tag, ISwfStreamWriter writer) { writer.WriteUInt16(tag.CharacterID); writer.WriteRect(tag.Bounds); writer.WriteBit(tag.InitialText != null); writer.WriteBit(tag.WordWrap); writer.WriteBit(tag.Multiline); writer.WriteBit(tag.Password); writer.WriteBit(tag.ReadOnly); writer.WriteBit(tag.TextColor.HasValue); writer.WriteBit(tag.MaxLength.HasValue); writer.WriteBit(tag.HasFont); writer.WriteBit(tag.HasFontClass); writer.WriteBit(tag.AutoSize); writer.WriteBit(tag.HasLayout); writer.WriteBit(tag.NoSelect); writer.WriteBit(tag.Border); writer.WriteBit(tag.WasStatic); writer.WriteBit(tag.HTML); writer.WriteBit(tag.UseOutlines); if (tag.HasFont) { writer.WriteUInt16(tag.FontID); } if (tag.HasFontClass) { writer.WriteString(tag.FontClass); } if (tag.HasFont) { writer.WriteUInt16(tag.FontHeight); } if (tag.TextColor.HasValue) { writer.WriteRGBA(tag.TextColor.Value); } if (tag.MaxLength.HasValue) { writer.WriteUInt16(tag.MaxLength.Value); } if (tag.HasLayout) { writer.WriteByte(tag.Align); writer.WriteUInt16(tag.LeftMargin); writer.WriteUInt16(tag.RightMargin); writer.WriteUInt16(tag.Indent); writer.WriteSInt16(tag.Leading); } writer.WriteString(tag.VariableName); if (tag.InitialText != null) { writer.WriteString(tag.InitialText); } return(null); }
/// <summary> /// Read next tag from swf input stream. /// </summary> /// <param name="version">Version.</param> /// <param name="binaryReader">Binary reader.</param> /// <param name="tagList">Tag list.</param> /// <returns></returns> internal static BaseTag ReadTag(byte version, BufferedBinaryReader binaryReader, BaseTagCollection tagList) { long posBefore = binaryReader.BaseStream.Position; RecordHeader rh = new RecordHeader(); rh.ReadData(binaryReader); int offset = (int)(binaryReader.BaseStream.Position - posBefore); binaryReader.BaseStream.Position = posBefore; BaseTag resTag = null; switch (rh.TagCode) { case (int)TagCodeEnum.DefineBits: resTag = new DefineBitsTag(); break; case (int)TagCodeEnum.DefineBitsJpeg2: resTag = new DefineBitsJpeg2Tag(); break; case (int)TagCodeEnum.DefineBitsJpeg3: resTag = new DefineBitsJpeg3Tag(); break; case (int)TagCodeEnum.DefineBitsLossLess: resTag = new DefineBitsLossLessTag(); break; case (int)TagCodeEnum.DefineBitsLossLess2: resTag = new DefineBitsLossLess2Tag(); break; case (int)TagCodeEnum.DefineButton: resTag = new DefineButtonTag(); break; case (int)TagCodeEnum.DefineButton2: resTag = new DefineButton2Tag(); break; case (int)TagCodeEnum.DefineButtonCxForm: resTag = new DefineButtonCxFormTag(); break; case (int)TagCodeEnum.DefineButtonSound: resTag = new DefineButtonSoundTag(); break; case (int)TagCodeEnum.DefineEditText: resTag = new DefineEditTextTag(); break; case (int)TagCodeEnum.DefineFont: resTag = new DefineFontTag(); break; case (int)TagCodeEnum.DefineFont2: resTag = new DefineFont2Tag(); break; case (int)TagCodeEnum.DefineFontInfo: resTag = new DefineFontInfoTag(); break; case (int)TagCodeEnum.DefineFontInfo2: resTag = new DefineFontInfo2Tag(); break; case (int)TagCodeEnum.DefineMorphShape: resTag = new DefineMorphShapeTag(); break; case (int)TagCodeEnum.DefineShape: resTag = new DefineShapeTag(); break; case (int)TagCodeEnum.DefineShape2: resTag = new DefineShape2Tag(); break; case (int)TagCodeEnum.DefineShape3: resTag = new DefineShape3Tag(); break; case (int)TagCodeEnum.DefineSound: resTag = new DefineSoundTag(); break; case (int)TagCodeEnum.DefineSprite: resTag = new DefineSpriteTag(); break; case (int)TagCodeEnum.DefineText: resTag = new DefineTextTag(); break; case (int)TagCodeEnum.DefineText2: resTag = new DefineText2Tag(); break; case (int)TagCodeEnum.DefineVideoStream: resTag = new DefineVideoStreamTag(); break; case (int)TagCodeEnum.DoAction: resTag = new DoActionTag(); break; case (int)TagCodeEnum.EnableDebugger: resTag = new EnableDebuggerTag(); break; case (int)TagCodeEnum.EnableDebugger2: resTag = new EnableDebugger2Tag(); break; case (int)TagCodeEnum.End: resTag = new EndTag(); break; case (int)TagCodeEnum.ExportAssets: resTag = new ExportAssetsTag(); break; case (int)TagCodeEnum.FrameLabel: resTag = new FrameLabelTag(); break; case (int)TagCodeEnum.ImportAssets: resTag = new ImportAssetsTag(); break; case (int)TagCodeEnum.InitAction: resTag = new InitActionTag(); break; case (int)TagCodeEnum.JpegTable: resTag = new JpegTableTag(); break; case (int)TagCodeEnum.PlaceObject: resTag = new PlaceObjectTag(); break; case (int)TagCodeEnum.PlaceObject2: resTag = new PlaceObject2Tag(); break; case (int)TagCodeEnum.Protect: resTag = new ProtectTag(); break; case (int)TagCodeEnum.RemoveObject: resTag = new RemoveObjectTag(); break; case (int)TagCodeEnum.RemoveObject2: resTag = new RemoveObject2Tag(); break; case (int)TagCodeEnum.ScriptLimit: resTag = new ScriptLimitTag(); break; case (int)TagCodeEnum.SetBackgroundColor: resTag = new SetBackgroundColorTag(); break; case (int)TagCodeEnum.SetTabIndex: resTag = new SetTabIndexTag(); break; case (int)TagCodeEnum.ShowFrame: resTag = new ShowFrameTag(); break; case (int)TagCodeEnum.SoundStreamBlock: resTag = new SoundStreamBlockTag(); break; case (int)TagCodeEnum.SoundStreamHead: resTag = new SoundStreamHeadTag(); break; case (int)TagCodeEnum.SoundStreamHead2: resTag = new SoundStreamHead2Tag(); break; case (int)TagCodeEnum.StartSound: resTag = new StartSoundTag(); break; case (int)TagCodeEnum.Metadata: resTag = new MetadataTag(); break; case (int)TagCodeEnum.SymbolClass: resTag = new SymbolClassTag(); break; //TODO: Sorenson Codec case (int)TagCodeEnum.VideoFrame: resTag = ReadVideoFrameTag(binaryReader, tagList); break; default: resTag = new BaseTag(binaryReader.ReadBytes(System.Convert.ToInt32(rh.TagLength + offset)), rh.TagCode); break; } //Read the data of the current tag resTag.ReadData(version, binaryReader); //LOG long mustRead = rh.TagLength + offset; if (posBefore + mustRead != binaryReader.BaseStream.Position) { binaryReader.BaseStream.Position = posBefore + rh.TagLength + offset; if (log.IsErrorEnabled) { log.Error(Enum.GetName(TagCodeEnum.DefineBits.GetType(), rh.TagCode) + "....KO"); } } else if (log.IsInfoEnabled) { log.Info(Enum.GetName(TagCodeEnum.DefineBits.GetType(), rh.TagCode) + "....OK (" + mustRead + ")"); } return(resTag); }
ITagFormatter ISwfTagVisitor <object, ITagFormatter> .Visit(DefineEditTextTag tag, object arg) { return(new DefineEditTextTagFormatter()); }