示例#1
0
        static SwfTagNameMapping()
        {
            var formatterFactory = new TagFormatterFactory(10);

            foreach (SwfTagType tagType in Enum.GetValues(typeof(SwfTagType)))
            {
                var tag       = _factory.Create(tagType);
                var formatter = formatterFactory.GetFormatter(tag);
                var tagName   = formatter.TagName;
                _tagMap[tagName] = tagType;
            }
        }
示例#2
0
        public SwfFile ReadFromXml(XDocument doc)
        {
            var         root = doc.Root;
            var         file = new SwfFile();
            SwfFileInfo fileInfo;

            if (root == null || root.Name.LocalName != "swf")
            {
                throw new FormatException("Expected swf as root");
            }
            fileInfo.Version = root.RequiredByteAttribute("version");
            if (!Enum.TryParse(root.RequiredAttribute("format"), false, out fileInfo.Format))
            {
                throw new FormatException("Unable to parse file format");
            }

            if (fileInfo.Format == SwfFormat.Unknown)
            {
                throw new FormatException("Unsupported file format");
            }

            fileInfo.FileLength = 0;
            file.FileInfo       = fileInfo;

            var hdr = root.RequiredElement("Header");

            file.Header.FrameRate  = hdr.RequiredDoubleAttribute("framerate");
            file.Header.FrameCount = hdr.RequiredUShortAttribute("frames");
            file.Header.FrameSize  = XRect.FromXml(hdr.RequiredElement("size").Element("Rectangle"));

            var formatterFactory = new TagFormatterFactory(fileInfo.Version);
            var tags             = hdr.RequiredElement("tags");

            foreach (var xTag in tags.Elements())
            {
                var tag       = SwfTagNameMapping.CreateTagByXmlName(xTag.Name.LocalName);
                var formatter = formatterFactory.GetFormatter(tag);
                tag = formatter.ParseTo(xTag, tag);
                file.Tags.Add(tag);
            }
            return(file);
        }
示例#3
0
        private XElement BuildTagXml(SwfTagBase tag)
        {
            var formatter = _formatterFactory.GetFormatter(tag);

            return(formatter.FormatTag(tag));
        }