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; } }
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); }
private XElement BuildTagXml(SwfTagBase tag) { var formatter = _formatterFactory.GetFormatter(tag); return(formatter.FormatTag(tag)); }