Example #1
0
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
}