/// <summary> /// Convert from Markdown string to VT100 encoded string or HTML. Returns MarkdownInfo object. /// </summary> /// <param name="markdownString">String with Markdown content to be converted.</param> /// <param name="conversionType">Specifies type of conversion, either VT100 or HTML.</param> /// <param name="optionInfo">Specifies the rendering options for VT100 rendering.</param> /// <returns>MarkdownInfo object with the converted output.</returns> public static MarkdownInfo Convert(string markdownString, MarkdownConversionType conversionType, PSMarkdownOptionInfo optionInfo) { var renderInfo = new MarkdownInfo(); var writer = new StringWriter(); MarkdownPipeline pipeline = null; if (conversionType.HasFlag(MarkdownConversionType.HTML)) { pipeline = new MarkdownPipelineBuilder().UseAdvancedExtensions().Build(); var renderer = new Markdig.Renderers.HtmlRenderer(writer); renderInfo.Html = Markdig.Markdown.Convert(markdownString, renderer, pipeline).ToString(); } if (conversionType.HasFlag(MarkdownConversionType.VT100)) { pipeline = new MarkdownPipelineBuilder().Build(); // Use the VT100 renderer. var renderer = new VT100Renderer(writer, optionInfo); renderInfo.VT100EncodedString = Markdig.Markdown.Convert(markdownString, renderer, pipeline).ToString(); } // Always have AST available. var parsed = Markdig.Markdown.Parse(markdownString, pipeline); renderInfo.Tokens = parsed; return(renderInfo); }
protected string GetMarkdownRendererFromMarkdownDocument(MarkdownDocument document) { var pipeline = new MarkdownPipelineBuilder().Build(); var writer = new StringWriter(); var renderer = new Markdig.Renderers.HtmlRenderer(writer); pipeline.Setup(renderer); renderer.Render(document); writer.Flush(); return(writer.ToString()); }
public string RenderHtml(string markdown) { if (markdown == null) { throw new ArgumentNullException("markdown"); } var writer = new StringWriter(); var renderer = new Markdig.Renderers.HtmlRenderer(writer); renderer.ObjectWriteBefore += Renderer_ObjectWriteBefore; pipelineUnsafe.Setup(renderer); var document = Markdig.Markdown.Parse(markdown, pipelineUnsafe); renderer.Render(document); writer.Flush(); return(writer.ToString()); }
public string RenderHtmlSafe(string markdown, bool keepLineBreaks = false) { if (markdown == null) { throw new ArgumentNullException("markdown"); } if (keepLineBreaks) { markdown = newlinePreserverRegex.Replace(markdown, NEWLINE_PRESERVER_PATTERN); } var writer = new StringWriter(); var renderer = new Markdig.Renderers.HtmlRenderer(writer); renderer.ObjectWriteBefore += Renderer_ObjectWriteBefore; pipelineSafe.Setup(renderer); var document = Markdig.Markdown.Parse(markdown, pipelineSafe); renderer.Render(document); writer.Flush(); return(writer.ToString()); }
private async Task <NewsItem> LoadNewsItem(string file) { if (!System.IO.File.Exists(file)) { return(null); } var mdPipeline = new MarkdownPipelineBuilder().UseYamlFrontMatter().Build(); var fileContent = await System.IO.File.ReadAllTextAsync(file); var mdFile = Markdown.Parse(fileContent, mdPipeline); var frontMatter = (YamlFrontMatterBlock)mdFile.FirstOrDefault(b => b.Parser is YamlFrontMatterParser); var itemTitleBlock = (HeadingBlock)mdFile.FirstOrDefault(b => b.Parser is HeadingBlockParser); var itemTitle = itemTitleBlock?.Inline.FirstOrDefault(); var data = frontMatter.Lines.Lines.Select(l => l.Slice.ToString().Split(':', 2).Select(s => s.Trim()).ToList()).Where(s => s.Count > 1).ToDictionary(s => s[0], s => s[1]); var clearText = Markdown.ToPlainText(fileContent, pipeline: mdPipeline); var htmlText = Markdown.ToHtml(fileContent, pipeline: mdPipeline); var fileName = new FileInfo(file).Name; mdFile.Remove(frontMatter); mdFile.Remove(itemTitleBlock); var cleanedOutput = string.Empty; using (var tw = new StringWriter()) { var x = new Markdig.Renderers.HtmlRenderer(tw); x.Write(mdFile); tw.Flush(); cleanedOutput = tw.ToString(); } var newsItem = new NewsItem { Title = itemTitle.ToString(), Description = cleanedOutput, Link = Url.Page("/News", null, null, HttpContext.Request.Scheme, HttpContext.Request.Host.ToString()) + "/" + fileName.Replace(".md", ""), CleanText = clearText }; if (data.ContainsKey("pubdate")) { if (DateTimeOffset.TryParse(data["pubdate"], out var articleTime)) { newsItem.PubDate = articleTime; } } if (data.ContainsKey("category")) { newsItem.Category = data["category"]; } return(newsItem); }