camelize.go 835 B

1234567891011121314151617181920212223242526272829303132333435363738394041424344
  1. package flect
  2. import (
  3. "strings"
  4. "unicode"
  5. )
  6. // Camelize returns a camelize version of a string
  7. // bob dylan = bobDylan
  8. // widget_id = widgetID
  9. // WidgetID = widgetID
  10. func Camelize(s string) string {
  11. return New(s).Camelize().String()
  12. }
  13. // Camelize returns a camelize version of a string
  14. // bob dylan = bobDylan
  15. // widget_id = widgetID
  16. // WidgetID = widgetID
  17. func (i Ident) Camelize() Ident {
  18. var out []string
  19. for i, part := range i.Parts {
  20. var x string
  21. var capped bool
  22. for _, c := range part {
  23. if unicode.IsLetter(c) || unicode.IsDigit(c) {
  24. if i == 0 {
  25. x += string(unicode.ToLower(c))
  26. continue
  27. }
  28. if !capped {
  29. capped = true
  30. x += string(unicode.ToUpper(c))
  31. continue
  32. }
  33. x += string(c)
  34. }
  35. }
  36. if x != "" {
  37. out = append(out, x)
  38. }
  39. }
  40. return New(strings.Join(out, ""))
  41. }