Import initail de calcul-astreintes v0.9.4 pour passage en paycheck 1.0

This commit is contained in:
2026-01-19 14:25:43 +01:00
commit cad0b2768a
44 changed files with 4183 additions and 0 deletions

50
internal/pdf/sanitize.go Normal file
View 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
}