fix section parsing logic

This commit is contained in:
2026-01-04 17:00:00 +00:00
parent bc646f1aba
commit 0eaba474bf
+31 -35
View File
@@ -237,51 +237,47 @@ func parseSections(source []byte) []Section {
reader := text.NewReader(source)
doc := md.Parser().Parse(reader)
var sections []Section
var currentTitle string
var currentStart int = -1
title := "no title"
sections := make([]Section, 0)
lastPos := 0
for child := doc.FirstChild(); child != nil; child = child.NextSibling() {
if child.Kind() == ast.KindHeading {
heading := child.(*ast.Heading)
if currentStart != -1 {
headingStart := heading.Lines().At(0).Start
if headingStart > currentStart {
sectionContentRaw := string(source[currentStart:headingStart])
sectionContent := strings.TrimSpace(sectionContentRaw)
sections = append(sections, Section{
Title: currentTitle,
Content: sectionContent,
Hints: extractHints(sectionContent),
})
}
if child.Lines().Len() <= 0 {
continue
}
if heading.Lines().Len() > 0 {
start := heading.Lines().At(0).Start
stop := heading.Lines().At(heading.Lines().Len() - 1).Stop
currentTitle = string(source[start:stop])
currentStart = stop
} else {
currentTitle = string(heading.Text(source))
currentStart = -1
}
level := child.(*ast.Heading).Level
headingStart := child.Lines().At(0).Start - level - 1
headingEnd := child.Lines().At(child.Lines().Len() - 1).Stop
} else {
if currentStart == -1 {
currentStart = 0
contentEnd := headingStart
if lastPos < contentEnd {
// you have a heading and a content to accumulte over
contentsRaw := source[lastPos:contentEnd]
contents := strings.TrimSpace(string(contentsRaw))
hints := extractHints(contents)
sections = append(sections, Section{
Title: title,
Content: contents,
Hints: hints,
})
lastPos = headingEnd
}
// for the next heading
title = strings.TrimSpace(string(source[headingStart:headingEnd]))
lastPos = headingEnd
}
}
if currentStart != -1 && currentStart < len(source) {
sectionContentRaw := string(source[currentStart:])
sectionContent := strings.TrimSpace(sectionContentRaw)
// last section
if lastPos < len(source) {
contentsRaw := source[lastPos:]
contents := strings.TrimSpace(string(contentsRaw))
hints := extractHints(contents)
sections = append(sections, Section{
Title: currentTitle,
Content: sectionContent,
Hints: extractHints(sectionContent),
Title: title,
Content: contents,
Hints: hints,
})
}