Пример #1
0
        /// <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);
        }
Пример #2
0
        /// <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);
        }
Пример #3
0
        /// <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);
        }
Пример #4
0
        /// <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);
        }