MarkdigToc NuGet

MarkdigToc 是一个 Markdig 扩展组件,用于生成文档目录(Table of Content),通过解析文档中的[toc]标记。

仅支持HTML渲染。

使用

使用默认设置:

csharp
var pipeline = new MarkdownPipelineBuilder() .UseAdvancedExtensions() // Add most of all advanced extensions .UseTableOfContent() //Add MarkdigToc extension .Build(); var result=Markdown.ToHtml(@" [TOC] # t1 ## t1.1 ### t1.1.1 ### t1.1.2 ## t1.2 "); Console.WriteLine(result);

使用自定义设置:

csharp
var pipeline = new MarkdownPipelineBuilder().UseAdvancedExtensions() .UseTableOfContent( tocAction: opt=>{ // toc options }, idAction: opt=>{ // auto id options } ).Build(); // ...

设置选项

CustomAutoIdOptions

文件基于修改 AutoIdentifierExtension, 添加了一些自定义的内容和附加选项。

注意:当使用 UseTableOfContent 时,如果存在AutoIdentifierExtension,则替换为为 (CustomAutoIdExtension),如果不存在则直接添加后者。

  • AutoIdentifierOptions Options: Enum: default AutoIdentifierOptions.Default

    AutoIdentifierExtension继承的选项:

    • None
    • AutoLink
    • AllowOnlyAscii
    • Default
    • Github
  • GenerateHeadingId? HeadingIdGenerator: Delegate: default null

    委托,如果想参与生成标题Id,则实现它。

    参数列表:

    • level: int

      当前标题的级别,一般指 #号的个数,生成对应h1h6.

    • content: string

      当前标题的内容。

    • id: string?

      当前标题的id,如果在Markdown 文档中定义了,这里不为null

      比如在文档中 title-id for # title {#title-id}

      注意: 为了解析类似上面这种属性或者id ,需要使用 UseGenericAttributes 扩展, 而且必须在所有其他扩展之后。(所有其他 指 你想解析属性的那些扩展,在它之后的不解析属性)

TocOptions

特别的

  • IsUlOnlyContainLi: bool: default true

    根据 webhint , ulol 的子节点只能时 li, scripttemplate

    设置 false 混合使用 ulli (会生成少一点点的内容)。

  • TitleAsConainerHeader: bool: default false

    把文档目录的标题放在ContainerTag中,而不是TocTag

    注意: 当然只有在 ContainerTagnull才有用。

TOC 容器

用于把生成的Toc 元素的内容放在一个单独的容器(如div)中,看需要设置。

  • ContainerTag: string? : default null

    如果非null,生成的Toc 会放在 ContainerTag中.

  • ContainerId: string? : default null

    ContainerTag的 id 属性。

  • ContainerClass: string? : default null

    ContainerTag的 class 属性。 比如 "class1 class2"

TOC 元素

生成的 Toc 元素相关。

  • TocTag: string : default nav

    生成的Toc元素使用的标签名。比如 div

  • TocId: string? : default null

    TocTag的 id 属性。

  • TocClass: string? : default null

    TocTag的 class 属性

TOC 标题

注意: 当前同样接受在文档中定义的Toc 标题和属性,正常的Markdown规则中并没有。

比如 [toc] TOC Title {#tocid.toc}

  • OverrideTitle: string? : default null

    覆盖标题,使用同一标题, 忽略在文档中定义的Toc标题。

  • TitleTag: string : default p

    Toc标题使用的元素标签。

  • TitleId: string? : default null

    TitleTag的 id 属性。

  • TitleClass: string? : default null

    TitleTag的 class 属性。

TOC 项

  • ulClass: string? : default p

    ul 的 class 属性。

  • liClass: string? : default null

    li 的 class 属性。

  • aClass: string? : default null

    a 的 class 属性。

其他

Markdown 文档:

markdown
[TOC] ##### t5 #### t4 ### t3 ## t2 # t1 ## t2 ### t3 #### t4 ##### t5

IsUlOnlyContainLi=true :

txt
● ○ ■ ■ ■ t5 ■ t4 ■ t3 ○ t2 ● t1 ○ t2 ■ t3 ■ t4 ■ t5

IsUlOnlyContainLi=false :

txt
■ t5 ■ t4 ■ t3 ○ t2 ● t1 ○ t2 ■ t3 ■ t4 ■ t5