Import initail de calcul-astreintes v0.9.4 pour passage en paycheck 1.0
This commit is contained in:
50
internal/pdf/sanitize.go
Normal file
50
internal/pdf/sanitize.go
Normal file
@@ -0,0 +1,50 @@
|
||||
package pdf
|
||||
|
||||
import (
|
||||
"regexp"
|
||||
"strings"
|
||||
"unicode"
|
||||
|
||||
"golang.org/x/text/unicode/norm"
|
||||
)
|
||||
|
||||
// SanitizeFilename transforme une chaîne Unicode en nom de fichier sûr :
|
||||
// - supprime les accents (Clément → Clement)
|
||||
// - remplace les espaces par des tirets
|
||||
// - supprime les caractères interdits (Windows / Unix)
|
||||
// - évite les noms vides
|
||||
func SanitizeFilename(input string) string {
|
||||
if input == "" {
|
||||
return "inconnu"
|
||||
}
|
||||
|
||||
// 1) Normalisation Unicode (NFD) pour séparer lettres + accents
|
||||
t := norm.NFD.String(input)
|
||||
|
||||
// 2) Suppression des marques diacritiques (accents)
|
||||
sb := strings.Builder{}
|
||||
for _, r := range t {
|
||||
if unicode.Is(unicode.Mn, r) {
|
||||
continue
|
||||
}
|
||||
sb.WriteRune(r)
|
||||
}
|
||||
out := sb.String()
|
||||
|
||||
// 3) Remplacements simples
|
||||
out = strings.ReplaceAll(out, " ", "-")
|
||||
out = strings.ReplaceAll(out, "_", "-")
|
||||
|
||||
// 4) Suppression des caractères interdits dans les noms de fichiers
|
||||
// Windows + Unix
|
||||
re := regexp.MustCompile(`[<>:"/\\|?*\x00-\x1F]`)
|
||||
out = re.ReplaceAllString(out, "")
|
||||
|
||||
// 5) Nettoyage final
|
||||
out = strings.Trim(out, "-.")
|
||||
if out == "" {
|
||||
return "inconnu"
|
||||
}
|
||||
|
||||
return out
|
||||
}
|
||||
Reference in New Issue
Block a user