code.gitea.io/gitea@v1.19.3/modules/markup/markdown/toc.go (about) 1 // Copyright 2020 The Gitea Authors. All rights reserved. 2 // SPDX-License-Identifier: MIT 3 4 package markdown 5 6 import ( 7 "fmt" 8 "net/url" 9 10 "code.gitea.io/gitea/modules/markup" 11 "code.gitea.io/gitea/modules/translation" 12 13 "github.com/yuin/goldmark/ast" 14 ) 15 16 func createTOCNode(toc []markup.Header, lang string) ast.Node { 17 details := NewDetails() 18 summary := NewSummary() 19 20 summary.AppendChild(summary, ast.NewString([]byte(translation.NewLocale(lang).Tr("toc")))) 21 details.AppendChild(details, summary) 22 ul := ast.NewList('-') 23 details.AppendChild(details, ul) 24 currentLevel := 6 25 for _, header := range toc { 26 if header.Level < currentLevel { 27 currentLevel = header.Level 28 } 29 } 30 for _, header := range toc { 31 for currentLevel > header.Level { 32 ul = ul.Parent().(*ast.List) 33 currentLevel-- 34 } 35 for currentLevel < header.Level { 36 newL := ast.NewList('-') 37 ul.AppendChild(ul, newL) 38 currentLevel++ 39 ul = newL 40 } 41 li := ast.NewListItem(currentLevel * 2) 42 a := ast.NewLink() 43 a.Destination = []byte(fmt.Sprintf("#%s", url.PathEscape(header.ID))) 44 a.AppendChild(a, ast.NewString([]byte(header.Text))) 45 li.AppendChild(li, a) 46 ul.AppendChild(ul, li) 47 } 48 49 return details 50 }