diff --git a/main.go b/main.go index 6a77d12..6acae15 100644 --- a/main.go +++ b/main.go @@ -7,23 +7,26 @@ // are unique, that responsibility falls on the caller. package sanitized_anchor_name // import "github.com/shurcooL/sanitized_anchor_name" -import "unicode" +import ( + "strings" + "unicode" +) // Create returns a sanitized anchor name for the given text. func Create(text string) string { - var anchorName []rune - var futureDash = false - for _, r := range text { - switch { - case unicode.IsLetter(r) || unicode.IsNumber(r): - if futureDash && len(anchorName) > 0 { - anchorName = append(anchorName, '-') - } - futureDash = false - anchorName = append(anchorName, unicode.ToLower(r)) - default: - futureDash = true + var hasRunes bool + var prevDash bool + fn := func(r rune) rune { + if unicode.IsLetter(r) || unicode.IsNumber(r) { + hasRunes = true + prevDash = false + return unicode.ToLower(r) } + if hasRunes && !prevDash { + prevDash = true + return '-' + } + return -1 } - return string(anchorName) + return strings.TrimRight(strings.Map(fn, text), "-") }