Skip to content

Commit cbcac4c

Browse files
committed
parse the TOC title
1 parent d8342e6 commit cbcac4c

File tree

1 file changed

+14
-0
lines changed

1 file changed

+14
-0
lines changed

mime/text%markdown/MarkdownRender.vb

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -61,6 +61,7 @@
6161
#End Region
6262

6363
Imports System.Text.RegularExpressions
64+
Imports Microsoft.VisualBasic.ComponentModel.DataSourceModel
6465
Imports Microsoft.VisualBasic.Linq
6566
Imports Microsoft.VisualBasic.Text
6667

@@ -364,6 +365,19 @@ Public Class MarkdownRender
364365
ReadOnly h2 As New Regex("^[#]{2}.+$", RegexOptions.Compiled Or RegexOptions.Multiline)
365366
ReadOnly h1 As New Regex("^[#]{1}.+$", RegexOptions.Compiled Or RegexOptions.Multiline)
366367

368+
Shared ReadOnly headers As New Regex("^[#]+.+$", RegexOptions.Compiled Or RegexOptions.Multiline)
369+
370+
''' <summary>
371+
''' parse TOC from markdown document
372+
''' </summary>
373+
''' <param name="md"></param>
374+
''' <returns></returns>
375+
Public Shared Iterator Function GetTOC(md As String) As IEnumerable(Of NamedValue(Of Integer))
376+
For Each level As String In headers.Matches(md).ToArray
377+
Yield New NamedValue(Of Integer)(level.Trim(" "c, "#"c), level.TakeWhile(Function(c) c = "#"c).Count)
378+
Next
379+
End Function
380+
367381
Private Sub RunHeader()
368382
text = h6.Replace(text, Function(m) vbLf & render.Header(TrimHeader(m.Value), 6) & vbLf)
369383
text = h5.Replace(text, Function(m) vbLf & render.Header(TrimHeader(m.Value), 5) & vbLf)

0 commit comments

Comments
 (0)