Ejemplo n.º 1
0
 public MarkdownableType(Type type, ILookup <string, XmlDocumentComment> commentLookup, ReferencedModelContainer referencedModelContainer)
 {
     _type                     = type;
     _commentLookup            = commentLookup;
     _markdownableTypeName     = new MarkdownableTypeName(_type);
     _beautifier               = new Beautifier(_commentLookup, referencedModelContainer);
     _referencedModelContainer = referencedModelContainer;
 }
Ejemplo n.º 2
0
        // put dll & xml on same diretory.
        private static void Main(string[] args)
        {
            //output path for documentation
            var dest = "md";
            //namespace regex
            var namespaceMatch = "*.Controllers";
            //class regex
            var classMatch = ".*Controller";
            //dll path which will be documented
            var dllPath = @"C:\example\example.dll";

            var assembly                 = Assembly.LoadFrom(dllPath);
            var commentsLookup           = MarkdownGenerator.GetCommentsLookup(assembly);
            var referencedModelContainer = new ReferencedModelContainer(commentsLookup);
            var types = MarkdownGenerator.Load(assembly, namespaceMatch, classMatch, referencedModelContainer, commentsLookup);

            // Home Markdown Builder
            var homeBuilder = new MarkdownBuilder();

            homeBuilder.Header(1, "References");
            homeBuilder.AppendLine();

            foreach (var g in types.GroupBy(x => x.Namespace).OrderBy(x => x.Key))
            {
                if (!Directory.Exists(dest))
                {
                    Directory.CreateDirectory(dest);
                }

                homeBuilder.HeaderWithLink(2, g.Key, g.Key);
                homeBuilder.AppendLine();

                var mb = new MarkdownBuilder();
                mb.Header(1, "Usage Documentation");
                mb.Header(2, "Controllers and Actions");
                foreach (var item in g.OrderBy(x => x.Name))
                {
                    homeBuilder.ListLink(MarkdownBuilder.MarkdownCodeQuote(item.BeautifyName), g.Key + "#" + item.BeautifyName.Replace("<", "").Replace(">", "").Replace(",", "").Replace(" ", "-").ToLower());

                    mb.Append(item.ToString());
                }
                mb.Header(2, "Referenced Types");
                mb.Append(referencedModelContainer.ToString());
                var result = Markdig.Markdown.Normalize(mb.ToString());
                File.WriteAllText(Path.Combine(dest, g.Key + ".md"), result);
                homeBuilder.AppendLine();
            }

            // Gen Home
            File.WriteAllText(Path.Combine(dest, "Home.md"), homeBuilder.ToString());
        }
Ejemplo n.º 3
0
        public static MarkdownableType[] Load(
            Assembly assembly,
            string namespaceMatch,
            string classMatch,
            ReferencedModelContainer referencedModelContainer,
            ILookup <string, XmlDocumentComment> commentsLookup = null)
        {
            commentsLookup ??= GetCommentsLookup(assembly);

            var namespaceRegex =
                !string.IsNullOrEmpty(namespaceMatch) ? new Regex(namespaceMatch) : null;

            var classRegex =
                !string.IsNullOrEmpty(classMatch) ? new Regex(classMatch) : null;

            var markdownableTypes = new[] { assembly }
            .SelectMany(x =>
            {
                try
                {
                    return(x.GetTypes());
                }
                catch (ReflectionTypeLoadException ex)
                {
                    return(ex.Types.Where(t => t != null));
                }
                catch
                {
                    return(Type.EmptyTypes);
                }
            })
            .Where(x => x != null)
            .Where(x => x.IsPublic && !typeof(Delegate).IsAssignableFrom(x) && !x.GetCustomAttributes <ObsoleteAttribute>().Any())
            .Where(x => IsRequiredNamespace(x, namespaceRegex))
            .Where(x => IsRequiredClass(x, classRegex))
            .Select(x => new MarkdownableType(x, commentsLookup, referencedModelContainer))
            .ToArray();

            return(markdownableTypes);
        }
 public Beautifier(ILookup <string, XmlDocumentComment> commentLookup, ReferencedModelContainer referencedModelContainer)
 {
     _commentLookup            = commentLookup;
     _referencedModelContainer = referencedModelContainer;
 }