AutoCore.MarkdigToc 0.1.3

dotnet add package AutoCore.MarkdigToc --version 0.1.3                
NuGet\Install-Package AutoCore.MarkdigToc -Version 0.1.3                
This command is intended to be used within the Package Manager Console in Visual Studio, as it uses the NuGet module's version of Install-Package.
<PackageReference Include="AutoCore.MarkdigToc" Version="0.1.3" />                
For projects that support PackageReference, copy this XML node into the project file to reference the package.
paket add AutoCore.MarkdigToc --version 0.1.3                
#r "nuget: AutoCore.MarkdigToc, 0.1.3"                
#r directive can be used in F# Interactive and Polyglot Notebooks. Copy this into the interactive tool or source code of the script to reference the package.
// Install AutoCore.MarkdigToc as a Cake Addin
#addin nuget:?package=AutoCore.MarkdigToc&version=0.1.3

// Install AutoCore.MarkdigToc as a Cake Tool
#tool nuget:?package=AutoCore.MarkdigToc&version=0.1.3                

MarkdigToc NuGet NuGet

MarkdigToc is a extension for Markdig to generate table of content by parse [toc] in markdown document.

Currently just for render to html.

Usage

Use with default options:

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);

Use with custom options:

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

// ...

Options

CustomAutoIdOptions

Code copied from AutoIdentifierExtension, then added some code and options.

NOTICE: When use UseTableOfContent, it will auto replace (AutoIdentifierExtension) or add (CustomAutoIdExtension).

  • AutoIdentifierOptions Options: Enum: default AutoIdentifierOptions.Default

    Option from AutoIdentifierExtension:

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

    Delegate for handle custom heading id creation.

    Arguments:

    • level: int

      The level of current heading, usually be count of char #.

    • content: string

      The content of current heading.

    • id: string?

      Not null if already defined id in markdown strings.

      e.g. title-id for # title {#title-id}

      NOTICE: In order to parse attributes, need UseGenericAttributes extension after all of other extensions which you want parse.

TocOptions

Specials
  • IsUlOnlyContainLi: bool: default true

    According to webhint , ul and ol must only directly contain li, script or template elements.

    Set false to mix ul and li like others do (generate less code).

  • TitleAsConainerHeader: bool: default false

    Put the tile in ContainerTag not inside the TocTag

    NOTICE: working only ContainerTag is not null.

TOC Container
  • ContainerTag: string? : default null

    If this is not null, the toc will put in a element use ContainerTag.

  • ContainerId: string? : default null

    Id attribute for ContainerTag.

  • ContainerClass: string? : default null

    Class attribute for ContainerTag. e.g. "class1 class2"

TOC Element
  • TocTag: string : default nav

    Tag name for toc element.

  • TocId: string? : default null

    Id attribute for TocTag.

  • TocClass: string? : default null

    Class attribute for TocTag. e.g. "class1 class2"

TOC Title

NOTICE: I also parse toc title and use it's attributes from markdown document , but that is not a regular syntax, you should know that.

  • OverrideTitle: string? : default null

    Override toc title , ignore defined in markdown document.

  • TitleTag: string : default p

    Tag name for toc title element.

  • TitleId: string? : default null

    Id attribute for TitleTag.

  • TitleClass: string? : default null

    Class attribute for TitleTag. e.g. "class1 class2"

TOC Items
  • ulClass: string? : default p

    Class attribute for ul element.

  • liClass: string? : default null

    Class attribute for li element.

  • aClass: string? : default null

    Class attribute for a element.

Others

Markdown document:

[TOC]       

##### t5
#### t4
### t3
## t2
# t1
## t2
### t3
#### t4
##### t5

IsUlOnlyContainLi=true :

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

IsUlOnlyContainLi=false :

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

Thanks

Thanks Atrejoe for signed version

Product Compatible and additional computed target framework versions.
.NET net6.0 is compatible.  net6.0-android was computed.  net6.0-ios was computed.  net6.0-maccatalyst was computed.  net6.0-macos was computed.  net6.0-tvos was computed.  net6.0-windows was computed.  net7.0 was computed.  net7.0-android was computed.  net7.0-ios was computed.  net7.0-maccatalyst was computed.  net7.0-macos was computed.  net7.0-tvos was computed.  net7.0-windows was computed.  net8.0 was computed.  net8.0-android was computed.  net8.0-browser was computed.  net8.0-ios was computed.  net8.0-maccatalyst was computed.  net8.0-macos was computed.  net8.0-tvos was computed.  net8.0-windows was computed. 
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.

NuGet packages

This package is not used by any NuGet packages.

GitHub repositories

This package is not used by any popular GitHub repositories.

Version Downloads Last updated
0.1.3 141 6/20/2024

v0.1.3:
     1. Fix parse two markdown document use same `MarkdownPipelineBuilder` , one document without `[toc]` and the other one has, the generated toc block will contains both.
     2. After fixed, markdown document can has more than one `[toc]` , and all of these can be rendered, though it's useless.