(module accents-substitute-latin1 (accents-substitute) (import chicken scheme data-structures) (require-extension regex) (define accents-conv '(("ã" "a" "ã") ("Ã" "A" "Ã") ("á" "a" "á") ("Á" "A" "Á") ("â" "a" "â") ("Â" "A" "Â") ("à" "a" "à") ("À" "A" "À") ("ä" "a" "ä") ("Ä" "A" "Ä") ("é" "e" "é") ("É" "E" "É") ("ê" "e" "ê") ("Ê" "E" "Ê") ("è" "e" "è") ("È" "E" "È") ("ë" "e" "ë") ("Ë" "E" "Ë") ("í" "i" "í") ("Í" "I" "Í") ("î" "i" "î") ("Î" "I" "Î") ("ì" "i" "ì") ("Ì" "I" "Ì") ("ï" "i" "ï") ("Ï" "I" "Ï") ("õ" "o" "õ") ("Õ" "O" "Õ") ("ó" "o" "ó") ("Ó" "O" "Ó") ("ô" "o" "ô") ("Ô" "O" "Ô") ("ò" "o" "ò") ("Ò" "O" "Ò") ("ö" "o" "ö") ("Ö" "O" "Ö") ("ú" "u" "ú") ("Ú" "U" "Ú") ("û" "u" "û") ("Û" "U" "Û") ("ù" "u" "ù") ("Ù" "U" "Ù") ("ü" "u" "ü") ("Ü" "U" "Ü") ("ç" "c" "ç") ("Ç" "C" "Ç"))) (define accents->ascii (map (lambda (item) (cons (car item) (cadr item))) accents-conv)) (define accents->html (map (lambda (item) (cons (regexp (car item)) (caddr item))) accents-conv)) (define (accents-substitute str #!key mode) (if mode (case mode ((html) (string-substitute* str accents->html)) ((ascii) (string-translate* str accents->ascii)) (else (error 'accents-substitute (conc "Unknown mode: " mode)))) (string-translate* str accents->ascii))) ) ; end module