/// <summary> /// Configures the pipeline using a string that defines the extensions to activate. /// </summary> /// <param name="pipeline">The pipeline (e.g: advanced for <see cref="UseAdvancedExtensions"/>, pipetables+gridtables for <see cref="UsePipeTables"/> and <see cref="UseGridTables"/></param> /// <param name="extensions">The extensions to activate as a string</param> /// <returns>The modified pipeline</returns> public static MarkdownPipelineBuilder Configure(this MarkdownPipelineBuilder pipeline, string extensions) { if (extensions == null) { return(pipeline); } // TODO: the extension string should come from the extension itself instead of this hardcoded switch case. foreach (var extension in extensions.Split(new[] { '+' }, StringSplitOptions.RemoveEmptyEntries)) { switch (extension.ToLowerInvariant()) { case "common": break; case "advanced": pipeline.UseAdvancedExtensions(); break; case "pipetables": pipeline.UsePipeTables(); break; case "emphasisextras": pipeline.UseEmphasisExtras(); break; case "listextras": pipeline.UseListExtras(); break; case "hardlinebreak": pipeline.UseSoftlineBreakAsHardlineBreak(); break; case "footnotes": pipeline.UseFootnotes(); break; case "footers": pipeline.UseFooters(); break; case "citations": pipeline.UseCitations(); break; case "attributes": pipeline.UseGenericAttributes(); break; case "gridtables": pipeline.UseGridTables(); break; case "abbreviations": pipeline.UseAbbreviations(); break; case "emojis": pipeline.UseEmojiAndSmiley(); break; case "definitionlists": pipeline.UseDefinitionLists(); break; case "customcontainers": pipeline.UseCustomContainers(); break; case "figures": pipeline.UseFigures(); break; case "mathematics": pipeline.UseMathematics(); break; case "bootstrap": pipeline.UseBootstrap(); break; case "medialinks": pipeline.UseMediaLinks(); break; case "smartypants": pipeline.UseSmartyPants(); break; case "autoidentifiers": pipeline.UseAutoIdentifiers(); break; case "tasklists": pipeline.UseTaskLists(); break; case "diagrams": pipeline.UseDiagrams(); break; case "nofollowlinks": pipeline.UseNoFollowLinks(); break; case "nohtml": pipeline.DisableHtml(); break; case "yaml": pipeline.UseYamlFrontMatter(); break; case "nonascii-noescape": pipeline.UseNonAsciiNoEscape(); break; case "autolinks": pipeline.UseAutoLinks(); break; case "globalization": pipeline.UseGlobalization(); break; default: throw new ArgumentException($"Invalid extension `{extension}` from `{extensions}`", nameof(extensions)); } } return(pipeline); }