package main import ( "bytes" "regexp" ) var sectionHeadingRe = regexp.MustCompile(`(?m)^#{1,6} `) // splitSections splits raw markdown into sections. // Section 0 is any content before the first heading. // Each subsequent section begins at a heading line and runs to the next. func splitSections(raw []byte) [][]byte { locs := sectionHeadingRe.FindAllIndex(raw, -1) if len(locs) == 0 { return [][]byte{raw} } sections := make([][]byte, 0, len(locs)+1) prev := 0 for _, loc := range locs { sections = append(sections, raw[prev:loc[0]]) prev = loc[0] } sections = append(sections, raw[prev:]) return sections } // joinSections reassembles sections produced by splitSections. func joinSections(sections [][]byte) []byte { return bytes.Join(sections, nil) }