github.com/haalcala/mattermost-server-change-repo@v0.0.0-20210713015153-16753fbeee5f/utils/markdown/lines.go (about)

     1  // Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.
     2  // See LICENSE.txt for license information.
     3  
     4  package markdown
     5  
     6  import (
     7  	"strings"
     8  )
     9  
    10  type Line struct {
    11  	Range
    12  }
    13  
    14  func ParseLines(markdown string) []Line {
    15  	lineStartPosition := 0
    16  	isAfterCarriageReturn := false
    17  	lines := make([]Line, 0, strings.Count(markdown, "\n"))
    18  	for position, r := range markdown {
    19  		if r == '\n' {
    20  			lines = append(lines, Line{Range{lineStartPosition, position + 1}})
    21  			lineStartPosition = position + 1
    22  		} else if isAfterCarriageReturn {
    23  			lines = append(lines, Line{Range{lineStartPosition, position}})
    24  			lineStartPosition = position
    25  		}
    26  		isAfterCarriageReturn = r == '\r'
    27  	}
    28  	if lineStartPosition < len(markdown) {
    29  		lines = append(lines, Line{Range{lineStartPosition, len(markdown)}})
    30  	}
    31  	return lines
    32  }