package library
import (
"html/template"
"strings"
"github.com/niklasfasching/go-org/org"
)
// parseOrg splits "#+KEY: value" lines out as lower-cased keywords and
// renders the rest of the document to HTML.
func parseOrg(src []byte, path string) (map[string]string, template.HTML, error) {
kw := map[string]string{}
var body []string
for _, line := range strings.Split(string(src), "\n") {
t := strings.TrimSpace(line)
if rest, ok := strings.CutPrefix(t, "#+"); ok {
if k, v, ok := strings.Cut(rest, ":"); ok && k != "" && !strings.ContainsAny(k, " \t") {
kw[strings.ToLower(k)] = strings.TrimSpace(v)
continue
}
}
body = append(body, line)
}
text := strings.TrimSpace(strings.Join(body, "\n"))
if text == "" {
return kw, "", nil
}
out, err := org.New().Parse(strings.NewReader(text), path).Write(org.NewHTMLWriter())
if err != nil {
return nil, "", err
}
return kw, template.HTML(out), nil
}