package cms import ( "strings" "unicode" ) func slugify(value string) string { value = strings.ToLower(strings.TrimSpace(value)) var b strings.Builder lastDash := false for _, r := range value { switch { case r >= 'a' && r <= 'z': b.WriteRune(r) lastDash = false case r >= '0' && r <= '9': b.WriteRune(r) lastDash = false case unicode.IsSpace(r) || r == '-' || r == '_' || r == '.': if !lastDash && b.Len() > 0 { b.WriteByte('-') lastDash = true } } } out := strings.Trim(b.String(), "-") if out == "" { return "untitled" } return out } func titleize(value string) string { value = strings.ReplaceAll(value, "-", " ") value = strings.TrimSpace(value) if value == "" { return "Untitled" } parts := strings.Fields(value) for i, part := range parts { if part == "" { continue } parts[i] = strings.ToUpper(part[:1]) + part[1:] } return strings.Join(parts, " ") }