mirror of
https://github.com/ForFarmTeam/ForFarm.git
synced 2025-12-19 22:14:08 +01:00
38 lines
738 B
Go
38 lines
738 B
Go
package service
|
|
|
|
import (
|
|
"github.com/forfarm/backend/internal/domain"
|
|
"regexp"
|
|
"strings"
|
|
)
|
|
|
|
type TOCGenerator struct{}
|
|
|
|
func NewTOCGenerator() *TOCGenerator {
|
|
return &TOCGenerator{}
|
|
}
|
|
|
|
func (g *TOCGenerator) GenerateFromContent(content string) []domain.TableOfContent {
|
|
var toc []domain.TableOfContent
|
|
lines := strings.Split(content, "\n")
|
|
order := 0
|
|
|
|
headerRegex := regexp.MustCompile(`^(#{1,6})\s+(.*)$`)
|
|
|
|
for _, line := range lines {
|
|
if matches := headerRegex.FindStringSubmatch(line); matches != nil {
|
|
order++
|
|
level := len(matches[1]) // Number of # indicates level
|
|
title := matches[2]
|
|
|
|
toc = append(toc, domain.TableOfContent{
|
|
Title: title,
|
|
Level: level,
|
|
Order: order,
|
|
})
|
|
}
|
|
}
|
|
|
|
return toc
|
|
}
|