;;; Harmonic Flow web site (define-module (apps aux web) #:use-module (srfi srfi-1) #:export (slugify url-path-join)) ;;; ;;; Variables. ;;; (define char-set:slug (char-set-union char-set:letter+digit (char-set #\-))) ;;; ;;; Procedures. ;;; (define (slugify text) "Return TEXT as a slug. Reserved characters for Internationalized Resource Identifiers (IRIs) and common reserved characters for file names are removed using the SLUG_FORBIDDEN constant as reference. TEXT (string) Some text. For example: Biology, Human anatomy. RETURN VALUE (string) A slug-like string. For example: biology, human-anatomy." (string-join (map (lambda (s) (string-filter char-set:slug s)) (string-split (string-downcase text) char-set:whitespace)) "-")) (define (url-path-join . parts) "Return a URL path composed of the given PARTS. PARTS (strings) A succession of strings that represent parts of a URL path. To indicate an absolute path, use an empty string as the first part. For example: (url-path-join '' 'docs' 'manual') => '/docs/manual' To end the path with a slash, use an empty string as the last part. For example: (url-path-join '' 'docs' 'manual' '') => '/docs/manual/' RETURN VALUE (string) A string representing a URL path." (cond ((equal? parts '("")) "/") ; Root directory (else (string-join parts "/"))))