// Copyright (c) 2017, A. Stoewer <adrian.stoewer@rz.ifi.lmu.de>
// All rights reserved.

package strcase

import (
	
)

// SnakeCase converts a string into snake case.
func ( string) string {
	return delimiterCase(, '_', false)
}

// UpperSnakeCase converts a string into snake case with capital letters.
func ( string) string {
	return delimiterCase(, '_', true)
}

// delimiterCase converts a string into snake_case or kebab-case depending on the delimiter passed
// as second argument. When upperCase is true the result will be UPPER_SNAKE_CASE or UPPER-KEBAB-CASE.
func delimiterCase( string,  rune,  bool) string {
	 = strings.TrimSpace()
	 := make([]rune, 0, len()+3)

	 := toLower
	if  {
		 = toUpper
	}

	var  rune
	var  rune
	for ,  := range  {
		if isDelimiter() {
			if !isDelimiter() {
				 = append(, )
			}
		} else if isUpper() {
			if isLower() || (isUpper() && isLower()) {
				 = append(, )
			}
			 = append(, ())
		} else if  != 0 {
			 = append(, ())
		}
		 = 
		 = 
	}

	if len() > 0 {
		if isUpper() && isLower() &&  != 0 {
			 = append(, )
		}
		 = append(, ())
	}

	return string()
}