33 lines
630 B
Go
33 lines
630 B
Go
package frontmatter
|
|
|
|
import (
|
|
"bufio"
|
|
"bytes"
|
|
"errors"
|
|
"io"
|
|
)
|
|
|
|
func ParseFrontMatter(r io.Reader) (map[string]string, error) {
|
|
scanner := bufio.NewScanner(r)
|
|
frontMatter := make(map[string]string)
|
|
|
|
for scanner.Scan() {
|
|
line := scanner.Text()
|
|
if line == "---" {
|
|
break
|
|
}
|
|
parts := bytes.SplitN([]byte(line), []byte(":"), 2)
|
|
if len(parts) != 2 {
|
|
return nil, errors.New("invalid front matter format")
|
|
}
|
|
key := string(bytes.TrimSpace(parts[0]))
|
|
value := string(bytes.TrimSpace(parts[1]))
|
|
frontMatter[key] = value
|
|
}
|
|
|
|
if err := scanner.Err(); err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
return frontMatter, nil
|
|
}
|