private MarkdownPipeline BuidPipeline(IMarkdownExtension extension)
        {
            MarkdownPipelineBuilder pipelineBuilder = new MarkdownPipelineBuilder().UseAdvancedExtensions();

            pipelineBuilder.Extensions.Add(extension);
            return(pipelineBuilder.Build());
        }
Example #2
0
            public void CanUseExternalExtensionDirectly()
            {
                IMarkdownExtension mockExtension = Substitute.For <IMarkdownExtension>();
                Markdown           markdown      = new Markdown().UseExtension(mockExtension);

                // When
                // ReSharper disable once ReturnValueOfPureMethodIsNotUsed
                markdown.Execute(new[] { new TestDocument(string.Empty) }, new TestExecutionContext()).ToList();  // Make sure to materialize the result list

                // Then
                // Setup will always be called during markdown pipeline setup.
                mockExtension.Received().Setup(Arg.Any <MarkdownPipelineBuilder>());
            }
Example #3
0
        /// <summary>
        /// Includes multiple custom extension in the markdown processing given by classes implementing
        /// the <see cref="IMarkdownExtension"/> interface.
        /// </summary>
        /// <param name="extensions">A sequence of types that implement <see cref="IMarkdownExtension"/>.</param>
        /// <returns>The current module instance.</returns>
        public Markdown UseExtensions(IEnumerable <Type> extensions)
        {
            if (extensions == null)
            {
                return(this);
            }

            foreach (Type type in extensions)
            {
                IMarkdownExtension extension = Activator.CreateInstance(type) as IMarkdownExtension;
                if (extension != null)
                {
                    _extensions.AddIfNotAlready(extension);
                }
            }

            return(this);
        }
        /// <summary>
        /// Includes multiple custom extension in the markdown processing given by classes implementing
        /// the <see cref="IMarkdownExtension"/> interface.
        /// </summary>
        /// <param name="extensions">A sequence of types that implement <see cref="IMarkdownExtension"/>.</param>
        /// <returns>The current module instance.</returns>
        public RenderMarkdown UseExtensions(IEnumerable <Type> extensions)
        {
            if (extensions == null)
            {
                return(this);
            }

            foreach (Type type in extensions)
            {
                IMarkdownExtension extension = Activator.CreateInstance(type) as IMarkdownExtension;
                if (extension != null)
                {
                    // Need - public void AddIfNotAlready<TElement>(TElement telement) where TElement : T;
                    // Kind of hack'ish, but no other way to preserve types.
                    MethodInfo addIfNotAlready = typeof(OrderedList <IMarkdownExtension>).GetMethods()
                                                 .Where(x => x.IsGenericMethod && x.Name == nameof(OrderedList <IMarkdownExtension> .AddIfNotAlready) && x.GetParameters().Length == 1)
                                                 .Select(x => x.MakeGenericMethod(type))
                                                 .Single();
                    addIfNotAlready.Invoke(_extensions, new object[] { extension });
                }
            }

            return(this);
        }
Example #5
0
 public void AddExtension(IMarkdownExtension ext)
 {
     _extensions.Add(ext);
 }