Types/MarkX/get_TableOfContents.ps1
|
<# .SYNOPSIS Gets Markdown Table of Contents .DESCRIPTION Gets a Markdown Table of Contents for the current Markdown. This will create a series of bullet points linking to each heading level. .EXAMPLE $m = markx @( "# h1 " "## h2" "## h2-2" "### h3" "##### h5" "##### h5-2" "###### h6" "## h2-2" "# h1-2" "### h3-3" "#### h4" "#### h4-2" "## h2-3" ) $m.TableOfContents #> param() $currentDepth = 0 $currentHeadingLevel = 1 $headingDepths = [Ordered]@{"1"=0} $headings = @($this.Heading) for ($headingIndex = 0; $headingIndex -lt $headings.Length; $headingIndex++) { $heading = $headings[$headingIndex] $headingLevel = ($heading.LocalName -replace 'h') -as [int] if ($headingLevel -gt $currentHeadingLevel) { $currentDepth += 2 $currentHeadingLevel = $headingLevel $headingDepths["$headingLevel"] = $currentDepth } elseif ($headingLevel -lt $currentHeadingLevel) { if ($null -ne $headingDepths["$headingLevel"]) { $currentDepth = $headingDepths["$headingLevel"] } else { $currentDepth -= 2 } $currentHeadingLevel = $headingLevel } if (-not $currentDepth) { $headingDepths = @{"1"=0} } "$(' ' * $currentDepth)* [$($heading.InnerText)](#$($heading.id))" } foreach ($heading in $this.Heading) { } |