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 }