func GetSnippets(data []byte, re *regexp.Regexp, nSnippets int) []*Snippet { var ( s = []*Snippet{} chunkStart = 0 lineNo = 1 ) for chunkStart < len(data) { if len(s) >= nSnippets { break } mIdx := re.Match(data[chunkStart:], true, true) + chunkStart if mIdx < chunkStart { break } lineStart := bytes.LastIndex(data[chunkStart:mIdx], []byte("\n")) + 1 + chunkStart lineEnd := mIdx if lineEnd > len(data) { lineEnd = len(data) } lineNo += countNL(data[chunkStart:lineStart]) line := string(data[lineStart:lineEnd]) snip := &Snippet{ Content: line, LineNumber: int32(lineNo), } s = append(s, snip) chunkStart = lineEnd } return s }