Files
tutor-service/internal/ingestion/parse_markdown.go

58 lines
1.0 KiB
Go

package ingestion
import (
"os"
"strings"
)
func ParseMarkdown(path string) (string, error) {
data, err := os.ReadFile(path)
if err != nil {
return "", err
}
content := string(data)
content = stripFrontmatter(content)
content = strings.TrimSpace(content)
return content, nil
}
func stripFrontmatter(content string) string {
content = strings.TrimLeft(content, "\n\r\t ")
if !strings.HasPrefix(content, "---") {
return content
}
rest := content[3:]
closing := findFMClosing(rest)
if closing < 0 {
return content
}
return strings.TrimLeft(rest[closing:], "\n\r")
}
func findFMClosing(s string) int {
i := 0
for i < len(s) {
nl := strings.IndexByte(s[i:], '\n')
if nl < 0 {
break
}
lineStart := i + nl + 1
if lineStart >= len(s) {
break
}
end := strings.IndexByte(s[lineStart:], '\n')
line := s[lineStart:]
if end >= 0 {
line = s[lineStart : lineStart+end]
}
if strings.TrimRight(line, "\r") == "---" {
return lineStart + len(line)
}
i = lineStart + len(line)
}
return -1
}