private static MarkdownPipeline CreatePipeline(string pipelineOptions, string allExtensionOptionsJson, bool classicRendering) { var builder = new MarkdownPipelineBuilder(); // Vanilla extensions only if (pipelineOptions.Equals("CommonMark", StringComparison.OrdinalIgnoreCase)) { return(builder.Build()); } JObject allExtensionOptionsJObject = allExtensionOptionsJson == null ? null : JObject.Parse(allExtensionOptionsJson); foreach (string extension in pipelineOptions.Equals("all", StringComparison.OrdinalIgnoreCase) ? _extensionNames : pipelineOptions.Split('_')) { if (!_useExtensionMethods.TryGetValue(extension, out MethodInfo useExtensionMethod)) { throw new InvalidOperationException($"The extension {extension} does not exist."); } object[] args = null; JToken extensionOptionsJToken; if (!_extensionOptionsTypes.TryGetValue(extension, out Type extensionOptionsType)) // Extension extension method has no options parameter { args = new object[] { builder }; } else if ((extensionOptionsJToken = allExtensionOptionsJObject?.GetValue(extension, StringComparison.OrdinalIgnoreCase)) == null && // Extension extension method has options parameter but no value was provided !classicRendering) { args = new object[] { builder, null }; } else { // If we're running CommonMark specs, we want classic rendering output if (classicRendering) { if (extensionOptionsJToken == null) { extensionOptionsJToken = JToken.Parse("{defaultBlockOptions: { \"renderingMode\": \"classic\"}}"); } else { extensionOptionsJToken["defaultBlockOptions"]["renderingMode"] = "classic"; } } object extensionOptions = Activator.CreateInstance(extensionOptionsType); _jsonSerializer.Populate(extensionOptionsJToken.CreateReader(), extensionOptions); args = new object[] { builder, extensionOptions }; } useExtensionMethod.Invoke(null, args); } return(builder.Build()); }
/// <summary> /// Prepare pure markdownData containing parsed html and additional metadata /// </summary> /// <param name="mdFileContent"></param> /// <returns>Json structure class</returns> public MarkdownData PrepareMarkdownData(string mdFileContent) { MarkdownDocument document; string htmlString; using (var writer = new StringWriter()) { var builder = new MarkdownPipelineBuilder(); builder.UseAutoIdentifiers(); builder.UsePipeTables(); builder.UseFigures(); builder.UseYamlFrontMatter(); builder.UseCustomCodeBlockExtension(); document = Markdown.ToHtml(mdFileContent, writer, builder.Build()); htmlString = writer.ToString(); } var head = new HeaderData { Level = 0 }; CreateTree(document.Descendants <HeadingBlock>().ToList(), head); var metadata = ValidateMetaData(CreateMetaData(document.Descendants <YamlFrontMatterBlock>())); return(new MarkdownData { HtmlString = htmlString, HeaderData = Compress(head.Children), MetaData = metadata }); }
void RenderMarkdown() { stack = new StackLayout() { Spacing = Theme.VerticalSpacing, }; Padding = Theme.Margin; BackgroundColor = Theme.BackgroundColor; if (!string.IsNullOrEmpty(Markdown)) { var pipeline = new MarkdownPipelineBuilder(); if (Theme.Link.UseAutolinksExtension) { pipeline = pipeline.UseAutoLinks(); } if (Theme.UseEmojiAndSmileyExtension) { pipeline = pipeline.UseEmojiAndSmiley(); } var parsed = Markdig.Markdown.Parse(Markdown, pipeline.Build()); Render(parsed.AsEnumerable()); } Content = stack; }
private static MarkdownPipeline CreateMarkdownPipeline() { var builder = new MarkdownPipelineBuilder() .UseYamlFrontMatter() .UseCustomContainers() .UseEmphasisExtras() .UseGridTables() .UseMediaLinks() .UsePipeTables() .UseGenericAttributes(); // Must be last as it is one parser that is modifying other parsers builder.DocumentProcessed += document => { foreach (var node in document.Descendants()) { if (node is Markdig.Syntax.Block) { if (node is Markdig.Extensions.Tables.Table) { node.GetAttributes().AddClass("md-table"); } } } }; return(builder.Build()); }
/// <summary> /// Render all the sections contained in the document /// into HTML format /// </summary> /// <param name="mdString">The string in MD format to transform in HTML</param> /// <returns>A string with the whole HTML document</returns> public string RenderToHtml(string mdString) { var pipeline = new MarkdownPipelineBuilder(); if (extraEmphasis) { pipeline = pipeline.UseEmphasisExtras(); } if (extraList) { pipeline = pipeline.UseListExtras(); } if (taskList) { pipeline = pipeline.UseTaskLists(); } if (tables) { pipeline = pipeline.UsePipeTables(); } if (math) { pipeline = pipeline.UseMathematics(); } return(Markdown.ToHtml(mdString, pipeline.Build())); }
private string Markup(string content, IMarkdownObjectRewriter rewriter, TestLoggerListener listener = null) { var pipelineBuilder = new MarkdownPipelineBuilder(); var documentRewriter = new MarkdownDocumentVisitor(rewriter); pipelineBuilder.DocumentProcessed += document => { ValidationExtension.SetSchemaName(document); documentRewriter.Visit(document); }; var pipeline = pipelineBuilder.Build(); if (listener != null) { Logger.RegisterListener(listener); } var html = Markdown.ToHtml(content, pipeline); if (listener != null) { Logger.UnregisterListener(listener); } return(html); }
public void SetUp() { var pipelineBuilder = new MarkdownPipelineBuilder(); pipelineBuilder = MarkdownExtensions.Use <BadHeadersExtension>(pipelineBuilder); _pipeline = pipelineBuilder.Build(); }
private MarkdownPipeline CreatePipeline(string path) { string basePath = _parameters.BasePath; string mediaDirectory = Path.Combine(basePath, "src/resources"); var includeBlocksExtensionOptions = new FlexiIncludeBlocksExtensionOptions(baseUri: Path.Combine(basePath, path)); var flexiPictureBlocksExtensionOptions = new FlexiPictureBlocksExtensionOptions(localMediaDirectory: mediaDirectory); var flexiVideoBlocksExtensionOptions = new FlexiVideoBlocksExtensionOptions(localMediaDirectory: mediaDirectory); var builder = new MarkdownPipelineBuilder(). UseEmphasisExtras(). UseDefinitionLists(). UseFootnotes(). UseAutoLinks(). UseTaskLists(). UseListExtras(). UseMediaLinks(). UseAbbreviations(). UseFooters(). UseFigures(). UseCitations(). UseCustomContainers(). UseGenericAttributes(). UseMathematics(). UseSmartyPants(). UseDiagrams(). UseFlexiBlocks(includeBlocksExtensionOptions, flexiPictureBlocksExtensionOptions: flexiPictureBlocksExtensionOptions, flexiVideoBlocksExtensionOptions: flexiVideoBlocksExtensionOptions); builder.Extensions.Add(new CustomYamlHeaderExtension(new MarkdownContext())); return(builder.Build()); }
/// <summary> /// Renders a source Markdown string to HTML /// </summary> /// <param name="srcMarkdown">The markdown to convert to HTML</param> /// <param name="useEmoji">Wwther to transform or not :emoji: into UTF-8 emojis</param> /// <returns>The resulting HTML</returns> public static string ConvertMarkdown2Html(string srcMarkdown, bool useEmoji, string extensions = "") { //Configure markdown conversion MarkdownPipelineBuilder mdPipe = new MarkdownPipelineBuilder().UseAdvancedExtensions(); //Add more extensions if (!string.IsNullOrWhiteSpace(extensions)) { mdPipe.Configure(extensions); } //Remove the indented code block parser (code blocks must always be fenced) //This is needed if you want to mix contents from MD and MDH files injected from FPFs and insertfile tags //and prevent problems when mixing HTML inside a Markdown file contents mdPipe.BlockParsers.Remove(mdPipe.BlockParsers.Find <Markdig.Parsers.IndentedCodeBlockParser>()); //Add support for non-ASCII characters in the Autolinks for headers //Remove the previous AutoIdentifierExtension mdPipe.Extensions.Remove(mdPipe.Extensions.Find <AutoIdentifierExtension>()); //Add AutoIdentifier extension with only AutoLink option mdPipe.UseAutoIdentifiers(AutoIdentifierOptions.AutoLink); //Check if we must generate emojis if (useEmoji) { mdPipe = mdPipe.UseEmojiAndSmiley(); } var pipeline = mdPipe.Build(); //Convert markdown to HTML return(Markdig.Markdown.ToHtml(srcMarkdown, pipeline)); //Convert to HTML }
private static MarkdownPipeline CreateTrustedPipeline() { var pb = new MarkdownPipelineBuilder(); pb.Extensions.Add(new OnlyPublishedLinksMarkdownExtension()); return(pb.Build()); }
public MdxToTsx() { var builder = new MarkdownPipelineBuilder() .UseYamlFrontMatter() .UseAbbreviations() .UseAutoIdentifiers() .UseCitations() .UseDefinitionLists() .UseEmphasisExtras() .UseFigures() .UseFooters() //.UseFootnotes() too complex for small usefulness .UseGridTables() //.UseMathematics() //.UseMediaLinks() could be probably solved in component .UsePipeTables() .UseListExtras() .UseTaskLists() .UseDiagrams() .DisableHtml() .UseAutoLinks(); builder.Extensions.AddIfNotAlready <ImportExtension>(); builder.BlockParsers.AddIfNotAlready <MdxBlockParser>(); builder.InlineParsers.AddIfNotAlready <MdxCodeInlineParser>(); builder.InlineParsers.TryRemove <AutolinkInlineParser>(); builder.InlineParsers.AddIfNotAlready <AutolinkAndJsxInlineParser>(); _pipeline = builder.Build(); }
public static void Convert(TextReader input, TextWriter output, MarkdownToHtmlConverterOptions options) { var markdownText = input.ReadToEnd(); var pipelineBulder = new MarkdownPipelineBuilder() .UseAdvancedExtensions(); if (options.EmbedImage) { pipelineBulder.Use(new EmbeddedImageExtension(options.BaseDirectory)); } var pipeline = pipelineBulder.Build(); var htmlBodyText = Markdown.ToHtml(markdownText, pipeline); var styleText = GetDefaultStyleText(); output.WriteLine("<!DOCTYPE html>"); output.WriteLine("<html>"); output.WriteLine("<head>"); output.WriteLine("<style>"); output.WriteLine(styleText); output.WriteLine("</style>"); output.WriteLine("</head>"); output.WriteLine("<body class=\"markdown-body\">"); output.WriteLine(htmlBodyText); output.WriteLine("</body>"); output.WriteLine("</html>"); output.Flush(); }
/// <summary> /// 解析Markdown源代码,并且返回HTML字符串。 /// </summary> /// <param name="source">Markdown源代码。</param> /// <param name="extensions">Markdown配置实例。</param> /// <returns>返回解析后的HTML字符串。</returns> public static string ToHtml(string source, MarkdownPipelineBuilder pipeline) { pipeline.Use <QuoteSectionNoteExtension>(); var build = pipeline.Build(); return(Markdig.Markdown.ToHtml(source, build)); }
/// <summary> /// Static constructor, called once, to initialise a 'standard' markdown pipeline /// which will be used to parse all markdown documents. /// </summary> static ParagraphTagRenderer() { MarkdownPipelineBuilder builder = new MarkdownPipelineBuilder().UsePipeTables().UseEmphasisExtras(); builder.InlineParsers.Add(new ReferenceInlineParser()); pipeline = builder.Build(); }
static MarkdownPipeline Pipeline() { var builder = new MarkdownPipelineBuilder(); builder.UseAdvancedExtensions(); return(builder.Build()); }
private MarkdownPipeline CreatePipeline() { var builder = new MarkdownPipelineBuilder(). // UsePipeTables(). - create custom responsive pipe tables // UseGridTables(). - create custom responsive, free width grid tables UseEmphasisExtras(). UseDefinitionLists(). UseFootnotes(). UseAutoIdentifiers(AutoIdentifierOptions.GitHub | AutoIdentifierOptions.AutoLink). UseAutoLinks(). UseTaskLists(). UseListExtras(). UseMediaLinks(). UseAbbreviations(). UseFooters(). UseFigures(). UseCitations(). UseCustomContainers(). UseGenericAttributes(). UseMathematics(). UseSmartyPants(). UseDiagrams(). UseYamlFrontMatter(); return(builder.Build()); }
private static string RenderForFeed(string data) { var pipeline = new MarkdownPipelineBuilder() .UseAdvancedExtensions(); return(Regex.Replace(Markdown.ToHtml(data, pipeline.Build()), @"<(.|\n)*?>", string.Empty)); }
public void ContextObjectsExtension_ContextObjectsAddedToMarkdownParserContextPropertiesTakePrecedenceOver() { // Arrange var dummyValue = new object(); Mock <Verifier> mockVerifier = _mockRepository.Create <Verifier>(); mockVerifier.Setup(v => v.Verify(dummyValue)); // Verifies that correct value is returned by ContextObjectsService in DummyParser.TryOpen var dummyServices = new ServiceCollection(); dummyServices. AddContextObjects(). AddSingleton <DummyExtension>(). AddSingleton <DummyParser>(). AddSingleton(mockVerifier.Object); ServiceProvider serviceProvider = dummyServices.BuildServiceProvider(); ContextObjectsExtension testSubject = serviceProvider.GetRequiredService <ContextObjectsExtension>(); testSubject.ContextObjectsStore.Add(_dummyKey, new object()); // Add context object to ContextObjectsStore var markdownPipelineBuilder = new MarkdownPipelineBuilder(); markdownPipelineBuilder.Extensions.Add(testSubject); markdownPipelineBuilder.Extensions.Add(serviceProvider.GetRequiredService <DummyExtension>()); MarkdownPipeline markdownPipeline = markdownPipelineBuilder.Build(); var markdownParserContext = new MarkdownParserContext(); markdownParserContext.Properties.Add(_dummyKey, dummyValue); // Add context object to MarkdownParserContext, this object should take precedence var dummyStringWriter = new StringWriter(); // Act Markdown.ToHtml("dummyMarkdown", dummyStringWriter, markdownPipeline, markdownParserContext); // Assert _mockRepository.VerifyAll(); }
private MarkdownPipeline CreateMarkdownPipeline(bool isInline, bool enableValidation) { object enableSourceInfoObj = null; _parameters?.Extensions?.TryGetValue("EnableSourceInfo", out enableSourceInfoObj); var enableSourceInfo = !(enableSourceInfoObj is bool enabled) || enabled; var builder = new MarkdownPipelineBuilder(); builder.UseDocfxExtensions(_context); builder.Extensions.Insert(0, new YamlHeaderExtension(_context)); builder.Extensions.Add(new ResolveLinkExtension()); if (enableSourceInfo) { builder.UseLineNumber(file => ((RelativePath)file).RemoveWorkingFolder()); } if (enableValidation) { builder.Extensions.Add(new ValidationExtension(_mvb, _context)); } if (isInline) { builder.UseInlineOnly(); } return(builder.Build()); }
/// <summary> /// Creates a pipeline automatically configured from an input markdown based on the presence of the configuration tag. /// </summary> /// <param name="inputText">The input text.</param> /// <returns>The pipeline configured from the input</returns> /// <exception cref="ArgumentNullException"></exception> public MarkdownPipeline CreatePipelineFromInput(string inputText) { if (inputText == null) { ThrowHelper.ArgumentNullException(nameof(inputText)); } var builder = new MarkdownPipelineBuilder(); string defaultConfig = DefaultExtensions; var indexOfSelfPipeline = inputText.IndexOf(SelfPipelineHintTagStart, StringComparison.OrdinalIgnoreCase); if (indexOfSelfPipeline >= 0) { var optionStart = indexOfSelfPipeline + SelfPipelineHintTagStart.Length; var endOfTag = inputText.IndexOf("-->", optionStart, StringComparison.OrdinalIgnoreCase); if (endOfTag >= 0) { defaultConfig = inputText.Substring(optionStart, endOfTag - optionStart).Trim(); } } if (!string.IsNullOrEmpty(defaultConfig)) { builder.Configure(defaultConfig); } return(builder.Build()); }
private MarkdownPipeline BuidPipeline(IMarkdownExtension extension) { MarkdownPipelineBuilder pipelineBuilder = new MarkdownPipelineBuilder().UseAdvancedExtensions(); pipelineBuilder.Extensions.Add(extension); return(pipelineBuilder.Build()); }
//------------------------------------------------------------------------------ Layout ParseDocument() { var context = new Context(mSkin, mHandlerImages, mHandlerNavigate); var builder = new LayoutBuilder(context); var renderer = new RendererMarkdown(builder); var pipelineBuilder = new MarkdownPipelineBuilder() .UseAutoLinks() ; if (!string.IsNullOrEmpty(Preferences.JIRA)) { pipelineBuilder.UseJiraLinks(new JiraLinkOptions(Preferences.JIRA)); } var pipeline = pipelineBuilder.Build(); pipeline.Setup(renderer); var doc = Markdown.Parse(mText, pipeline); renderer.Render(doc); return(builder.GetLayout()); }
/// <summary> /// Converts the <see cref="Message.Contents"/> of <paramref name="message"/> to HTML. /// </summary> public static string GetHtmlContents(this Message message) { var pipelineBuilder = new MarkdownPipelineBuilder(); pipelineBuilder.DisableHtml(); return(Markdown.ToHtml(message.Contents, pipelineBuilder.Build())); }
public void FlexiTableBlocks_ExceptionsForBlocksInCellsHaveCorrectLineNumbers() { // Arrange var services = new ServiceCollection(); services.AddFlexiTableBlocks(); services.AddFlexiSectionBlocks(); services.AddFlexiOptionsBlocks(); using (ServiceProvider serviceProvider = services.BuildServiceProvider()) { var dummyMarkdownPipelineBuilder = new MarkdownPipelineBuilder(); dummyMarkdownPipelineBuilder.Extensions.Add(serviceProvider.GetRequiredService <IBlockExtension <FlexiTableBlock> >()); dummyMarkdownPipelineBuilder.Extensions.Add(serviceProvider.GetRequiredService <IBlockExtension <FlexiSectionBlock> >()); dummyMarkdownPipelineBuilder.Extensions.Add(serviceProvider.GetRequiredService <IBlockExtension <FlexiOptionsBlock> >()); MarkdownPipeline dummyMarkdownPipeline = dummyMarkdownPipelineBuilder.Build(); // Note: "" counts as 1 character const string dummyMarkdown = @" +--------------+---------------------+--------------+ | header 1 | header 2 | header 3 | +==============+=====================+==============+ | - cell 1 | ``` | > cell 3 | | - cell 2 | cell 2 | > cell 3 | | - cell 3 | ``` | > cell 3 | | | | | | | o{""element"": 100} | | | | # Section | | +--------------+---------------------+--------------+"; // Act and assert BlockException result = Assert.Throws <BlockException>(() => MarkdownParser.Parse(dummyMarkdown, dummyMarkdownPipeline)); Assert.Equal(10, result.LineNumber); } }
private string ParseMarkdown(string markdown) { var builder = new MarkdownPipelineBuilder() .UseEmphasisExtras() .UsePipeTables() .UseGridTables() .UseFooters() .UseFootnotes() .UseCitations() .UseAutoLinks() // URLs are parsed into anchors //.UseAutoIdentifiers(AutoIdentifierOptions.GitHub) // Headers get id="name" .UseAbbreviations() .UseYamlFrontMatter() .UseEmojiAndSmiley(true) .UseMediaLinks() .UseListExtras() .UseFigures() .UseTaskLists() .UseCustomContainers() .UseGenericAttributes(); MarkdownPipeline Pipeline = builder.Build(); var htmlWriter = new StringWriter(); var renderer = new HtmlRenderer(htmlWriter); Markdown.Convert(markdown, renderer, Pipeline); var html = htmlWriter.ToString(); return(html); }
public static string DataRenderAndTruncate(string data, int length = 75) { var pipeline = new MarkdownPipelineBuilder() .UseAdvancedExtensions(); return(DataTruncate(Regex.Replace(Markdown.ToHtml(data, pipeline.Build()), @"<(.|\n)*?>", string.Empty), length)); }
public override void Transform(ExtensionHtmlRenderer extensionHtmlRenderer, ObjectTextBlock block, ObjectText astNode) { var pb = new MarkdownPipelineBuilder() .UseSoftlineBreakAsHardlineBreak() .UseAdvancedExtensions(); var pipeline = pb.Build(); var path = new Path(astNode.PackageName); var elements = _provider.GetElements(path, recursive: false); var sb = new StringBuilder(); var headingLevel = block.GetHeadingLevel(); void transform(MarkdownDocument md) { md.IncreaseHeadingLevel(1); } foreach (var element in elements) { sb.AppendLine($@"# {element.Name}"); var notes = Helper.Converter(element.Notes, transform, pipeline); sb.AppendLine(element.Notes); } var document = Markdown.Parse(sb.ToString(), pipeline); document.IncreaseHeadingLevel(headingLevel); Replace(block, document); }
public SlideRenderer() { var pipelineBuilder = new MarkdownPipelineBuilder(); pipelineBuilder.Use <HtmlSanitizerExtension>(); _pipeline = pipelineBuilder.Build(); }
public MarkdownParserMarkdig(bool usePragmaLines = false, bool force = false) { if (force || Pipeline == null) { var builder = new MarkdownPipelineBuilder() .UseEmphasisExtras() .UsePipeTables() .UseGridTables() .UseFooters() .UseFootnotes() .UseCitations(); var options = mmApp.Configuration.MarkdownOptions; if (options.AutoLinks) { builder = builder.UseAutoLinks(); } if (options.AutoHeaderIdentifiers) { builder = builder.UseAutoIdentifiers(); } if (options.StripYamlFrontMatter) { builder = builder.UseYamlFrontMatter(); } if (options.EmojiAndSmiley) { builder = builder.UseEmojiAndSmiley(); } if (options.MediaLinks) { builder = builder.UseMediaLinks(); } if (options.ListExtras) { builder = builder.UseListExtras(); } if (options.Figures) { builder = builder.UseFigures(); } if (options.GithubTaskLists) { builder = builder.UseTaskLists(); } if (options.SmartyPants) { builder = builder.UseSmartyPants(); } if (usePragmaLines) { builder = builder.UsePragmaLines(); } Pipeline = builder.Build(); } }
public void FlexiIncludeBlocks_ThrowsBlockExceptionIfAnIncludedContentHasAnInvalidBlock() { // Arrange const int dummyRenderingMode = 12; const string dummyRootContent = @" i{ ""type"": ""markdown"", ""source"": ""./dummyContent1.md"" }"; string dummyContent1 = $@"This is valid markdown. o{{ ""renderingMode"": ""{dummyRenderingMode}"" }} ``` This is a FlexiCodeBlock with an invalid option. ``` "; // Need to dispose of services after each test so that the in-memory cache doesn't affect results var services = new ServiceCollection(); services. AddFlexiOptionsBlocks(). AddFlexiIncludeBlocks(). AddFlexiCodeBlocks(); // Write to file var dummySource1Uri = new Uri($"{_fixture.TempDirectory}/{nameof(dummyContent1)}.md"); File.WriteAllText(dummySource1Uri.AbsolutePath, dummyContent1); using (ServiceProvider serviceProvider = services.BuildServiceProvider()) { var dummyMarkdownPipelineBuilder = new MarkdownPipelineBuilder(); dummyMarkdownPipelineBuilder.Extensions.Add(serviceProvider.GetRequiredService <IBlockExtension <FlexiIncludeBlock> >()); dummyMarkdownPipelineBuilder.Extensions.Add(serviceProvider.GetRequiredService <IBlockExtension <FlexiOptionsBlock> >()); dummyMarkdownPipelineBuilder.Extensions.Add(serviceProvider.GetRequiredService <IBlockExtension <FlexiCodeBlock> >()); MarkdownPipeline dummyMarkdownPipeline = dummyMarkdownPipelineBuilder.Build(); var dummyMarkdownParserContext = new MarkdownParserContext(); dummyMarkdownParserContext.Properties[typeof(IFlexiIncludeBlocksExtensionOptions)] = new FlexiIncludeBlocksExtensionOptions(baseUri: _fixture.TempDirectory + "/"); // Act and assert BlockException result = Assert.Throws <BlockException>(() => MarkdownParser.Parse(dummyRootContent, dummyMarkdownPipeline, dummyMarkdownParserContext)); // From bottom to top, this is the exception chain: // OptionsException > BlockException for invalid FlexiCodeBlock > BlockException for invalid FlexiIncludeBlock Assert.Equal(string.Format(Strings.BlockException_BlockException_InvalidBlock, nameof(FlexiIncludeBlock), 2, 0, string.Format(Strings.BlockException_FlexiIncludeBlockFactory_ExceptionOccurredWhileProcessingContent, dummySource1Uri.AbsoluteUri)), result.Message); Assert.IsType <BlockException>(result.InnerException); Assert.Equal(string.Format(Strings.BlockException_BlockException_InvalidBlock, nameof(FlexiCodeBlock), 6, 0, Strings.BlockException_BlockException_ExceptionOccurredWhileProcessingBlock), result.InnerException.Message); Assert.IsType <OptionsException>(result.InnerException.InnerException); Assert.Equal(string.Format(Strings.OptionsException_OptionsException_InvalidOption, nameof(IFlexiCodeBlockOptions.RenderingMode), string.Format(Strings.OptionsException_Shared_ValueMustBeAValidEnumValue, dummyRenderingMode, nameof(FlexiCodeBlockRenderingMode))), result.InnerException.InnerException.Message); } }
public Browser(string file) { var builder = new MarkdownPipelineBuilder() .UsePragmaLines() .UseAdvancedExtensions(); _pipeline = builder.Build(); _zoomFactor = GetZoomFactor(); _file = file; _htmlTemplate = GetHtmlTemplate(); _currentViewLine = -1; InitBrowser(); }
public override MarkdownPipeline GetPipeline() { var pipelineBuilder = new MarkdownPipelineBuilder(); if (PipeTables) pipelineBuilder = pipelineBuilder.UsePipeTables(); if (GridTables) pipelineBuilder = pipelineBuilder.UseGridTables(); if (ExtraEmphasis) pipelineBuilder = pipelineBuilder.UseEmphasisExtras(); if (DefinitionLists) pipelineBuilder = pipelineBuilder.UseDefinitionLists(); if (Footnotes) pipelineBuilder = pipelineBuilder.UseFootnotes(); if (TaskLists) pipelineBuilder = pipelineBuilder.UseTaskLists(); if (ExtraBulletLists) pipelineBuilder = pipelineBuilder.UseListExtras(); if (Abbreviations) pipelineBuilder = pipelineBuilder.UseAbbreviations(); if (Emoji) pipelineBuilder = pipelineBuilder.UseEmojiAndSmiley(); return pipelineBuilder.Build(); }