// Copyright 2026 Alibaba Group // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. package helpers import ( "strings" "unicode" ) // NormalizeSkillName converts free-form skill names to a stable dash-case key. func NormalizeSkillName(input string) string { s := strings.TrimSpace(strings.ToLower(input)) if s == "" { return "" } var out []rune for _, r := range s { switch { case unicode.IsLetter(r) || unicode.IsDigit(r): out = append(out, r) case unicode.IsSpace(r) || r == '-' || r == '_': if len(out) > 0 && out[len(out)-1] != '-' { out = append(out, '-') } } } for len(out) > 0 && out[len(out)-1] == '-' { out = out[:len(out)-1] } return string(out) }