package themes import ( "bytes" ) // OneLevelOfIndentation finds one level of whitespace, given indented data // and a keyword to extract the whitespace in front of. // // Returns either an empty string or the whitespace that represents one step of // indentation in the given source code data. func OneLevelOfIndentation(data *[]byte, keyword string) string { whitespace := "" kwb := []byte(keyword) // If there is a line that contains the given word, extract the whitespace if bytes.Contains(*data, kwb) { // Find the line that contains they keyword var byteline []byte found := false // Try finding the line with keyword, using \n as the newline for byteline = range bytes.SplitSeq(*data, []byte("\n")) { if bytes.Contains(byteline, kwb) { found = true break } } if found { // Find the whitespace in front of the keyword whitespaceBytes := byteline[:bytes.Index(byteline, kwb)] // Whitespace for one level of indentation whitespace = string(whitespaceBytes) } } // Return an empty string, or whitespace for one level of indentation return whitespace }