// This method gets called by the runtime. Use this method to add services to the container. public void ConfigureServices(IServiceCollection services) { services.Configure <MarkdownConfigurationModel>(Configuration.GetSection("Markdown")); services.Configure <JarvisConfigurationModel>(Configuration.GetSection("Jarvis")); var markdownConfiguration = new MarkdownConfigurationModel(); Configuration.GetSection("Markdown").Bind(markdownConfiguration); services.AddMarkdown(config => { config.HtmlTagBlackList = "iframe|object|embed|form"; if (markdownConfiguration.MarkdownDirectories != null && markdownConfiguration.MarkdownDirectories.Count > 0) { var folderConfig = new MarkdownProcessingFolder(); foreach (string folderName in markdownConfiguration.MarkdownDirectories) { config.AddMarkdownProcessingFolder( string.Format("{0}/", folderName), "~/Views/Shared/MarkdownPageTemplate.cshtml"); } folderConfig.SanitizeHtml = true; folderConfig.ProcessExtensionlessUrls = true; } config.ConfigureMarkdigPipeline = builder => { builder.UseEmphasisExtras(Markdig.Extensions.EmphasisExtras.EmphasisExtraOptions.Default) .UsePipeTables() .UseGridTables() .UseAutoIdentifiers(AutoIdentifierOptions.GitHub) // Headers get id="name" .UseAutoLinks() // URLs are parsed into anchors .UseAbbreviations() .UseYamlFrontMatter() .UseEmojiAndSmiley(true) .UseListExtras() .UseFigures() .UseTaskLists() .UseCustomContainers() .UseGenericAttributes(); }; }); services.AddMvc() .AddApplicationPart(typeof(MarkdownPageProcessorMiddleware).Assembly); }
private MarkdownModel ParseMarkdownToModel(string markdown, MarkdownProcessingFolder folderConfig = null) { var model = new MarkdownModel(); if (folderConfig == null) { folderConfig = new MarkdownProcessingFolder(); } if (folderConfig.ExtractTitle) { var firstLines = StringUtils.GetLines(markdown, 30); var firstLinesText = String.Join("\n", firstLines); // Assume YAML if (markdown.StartsWith("---")) { var yaml = StringUtils.ExtractString(firstLinesText, "---", "---", returnDelimiters: true); if (yaml != null) { model.Title = StringUtils.ExtractString(yaml, "title: ", "\n"); model.YamlHeader = yaml.Replace("---", "").Trim(); } } if (model.Title == null) { foreach (var line in firstLines.Take(10)) { if (line.TrimStart().StartsWith("# ")) { model.Title = line.TrimStart(new char[] { ' ', '\t', '#' }); break; } } } } model.RawMarkdown = markdown; model.RenderedMarkdown = Markdown.ParseHtmlString(markdown); return(model); }