public DfmEngineBuilder(Options options, string baseDir, string templateDir, IReadOnlyList <string> fallbackFolders, ICompositionContainer container) : base(options) { _baseDir = baseDir ?? string.Empty; _fallbackFolders = fallbackFolders ?? new List <string>(); var inlineRules = InlineRules.ToList(); // xref auto link must be before MarkdownAutoLinkInlineRule var index = inlineRules.FindIndex(s => s is MarkdownAutoLinkInlineRule); if (index < 0) { throw new ArgumentException("MarkdownAutoLinkInlineRule should exist!"); } inlineRules.Insert(index, new DfmXrefAutoLinkInlineRule()); index = inlineRules.FindLastIndex(s => s is MarkdownLinkInlineRule); if (index < 0) { throw new ArgumentException("MarkdownLinkInlineRule should exist!"); } inlineRules.Insert(index + 1, new DfmXrefShortcutInlineRule()); inlineRules.Insert(index + 1, new DfmEmailInlineRule()); inlineRules.Insert(index + 1, new DfmFencesInlineRule()); // xref link inline rule must be before MarkdownLinkInlineRule inlineRules.Insert(index, new DfmIncludeInlineRule()); index = inlineRules.FindIndex(s => s is MarkdownTextInlineRule); if (index < 0) { throw new ArgumentException("MarkdownTextInlineRule should exist!"); } inlineRules[index] = new DfmTextInlineRule(); var blockRules = BlockRules.ToList(); index = blockRules.FindLastIndex(s => s is MarkdownCodeBlockRule); if (index < 0) { throw new ArgumentException("MarkdownNewLineBlockRule should exist!"); } blockRules.InsertRange( index + 1, new IMarkdownRule[] { new DfmIncludeBlockRule(), new DfmVideoBlockRule(), new DfmYamlHeaderBlockRule(), new DfmSectionBlockRule(), new DfmFencesBlockRule(), new DfmNoteBlockRule() }); var markdownBlockQuoteIndex = blockRules.FindIndex(item => item is MarkdownBlockquoteBlockRule); if (markdownBlockQuoteIndex < 0) { throw new ArgumentException("MarkdownBlockquoteBlockRule should exist!"); } blockRules[markdownBlockQuoteIndex] = new DfmBlockquoteBlockRule(); InlineRules = inlineRules.ToImmutableList(); BlockRules = blockRules.ToImmutableList(); Rewriter = InitMarkdownStyle(container, baseDir, templateDir); }