/// <summary> /// Exports the current entry. /// </summary> /// <param name="current">The current entry to export.</param> /// <returns>The name of the rendered XML file</returns> protected override string Export(Entry current) { string filename = string.Format("{0}{1}{2}.xml", this.TempDirectory, current.Key, string.IsNullOrEmpty(current.SubKey) ? string.Empty : "-" + this.IllegalFileCharacters.Replace(current.SubKey, string.Empty) ); try { Rendering.XmlRenderer r = Rendering.XmlRenderer.Create(current, this.Document); if (r != null) { using (System.Xml.XmlWriter writer = XmlWriter.Create(filename, this.outputSettings)) { r.Render(writer); } } } catch (Exception ex) { if (System.IO.File.Exists(filename)) { System.IO.File.Delete(filename); } // we will deal with it later this.ExportExceptions.Add(ex); } return(filename); }
/// <summary> /// Factory method for creating new instances of <see cref="XmlRenderer"/>. Instantiates /// the correct renderer forthe specied document map <see cref="Entry"/>. /// </summary> /// <param name="entry">The entry in the document map to render.</param> /// <param name="exporter">The exporter.</param> /// <returns>A valid renderer or null.</returns> public static XmlRenderer Create(Entry entry, Document document) { XmlRenderer renderer = null; if (document == null) { throw new ArgumentNullException("document"); } if (entry.Item is ReflectedMember) { if (entry.Item is TypeDef && string.IsNullOrEmpty(entry.SubKey)) { renderer = new TypeXmlRenderer(entry); } else if (entry.Item is MethodDef) { renderer = new MethodXmlRenderer(entry); } else if (entry.Item is FieldDef) { renderer = new FieldXmlRenderer(entry); } else if (entry.Item is PropertyDef) { renderer = new PropertyXmlRenderer(entry); } else if (entry.Item is EventDef) { renderer = new EventXmlRenderer(entry); } } else if (entry.Item is KeyValuePair <string, List <TypeDef> > ) { // namespace renderer = new NamespaceXmlRenderer(entry); } else if (entry.Item is List <PropertyDef> || entry.Item is List <MethodDef> || entry.Item is List <FieldDef> || entry.Item is List <EventDef> ) { renderer = new TypeMembersXmlRenderer(entry); } else if (entry.Item is EntryTypes) { EntryTypes type = (EntryTypes)entry.Item; switch (type) { case EntryTypes.NamespaceContainer: renderer = new NamespaceContainerXmlRenderer(entry); break; } } renderer.Document = document; return(renderer); }
/// <summary> /// Factory method for instantiating correct XmlElementRenderers for the specified /// <paramref name="element"/>. /// </summary> /// <param name="associatedEntry">The entry this comment element was taken from.</param> /// <param name="element">The XML code comment element to handle.</param> /// <returns>A valid XmlRenderer for the <paramref name="element"/>.</returns> public static XmlRenderer Create(XmlRenderer from, Entry associatedEntry, XmlCodeElement element) { XmlElementRenderer renderer = null; switch (element.Element) { case XmlCodeElements.See: renderer = new SeeXmlElementRenderer(associatedEntry, (SeeXmlCodeElement)element); break; case XmlCodeElements.List: renderer = new ListXmlElementRenderer(associatedEntry, (ListXmlCodeElement)element); break; } renderer.Document = from.Document; // need to pass the reference over return(renderer); }
/// <summary> /// Exports the <paramref name="current"/> entry to intermediate XML format. /// </summary> /// <include file='../code-documentation/exporter.xml' path='docs/exporter[@name="export"]'/> protected virtual string Export(Entry current) { string filename = string.Format("{0}{1}{2}.xml", this.TempDirectory, current.Key, string.IsNullOrEmpty(current.SubKey) ? string.Empty : "-" + this.IllegalFileCharacters.Replace(current.SubKey, string.Empty) ); try { Rendering.XmlRenderer r = Rendering.XmlRenderer.Create(current, Document); if (null == r) { ExportExceptions.Add(new Exception($"No XML renderer for the Entry {current.Name}")); } using (System.Xml.XmlWriter writer = XmlWriter.Create(filename)) { r.Render(writer); } } catch (Exception ex) { if (_fileSystem.FileExists(filename)) { _fileSystem.DeleteFile(filename); } // ignore it and add it to the list of exceptions, try and add more details if (current != null) { ExportException issue = new ExportException( $"Failed to export member '{current.Name}'.", ex); ex = issue; } ExportExceptions.Add(ex); } return(filename); }