(module (jimmy util) * (import scheme (chicken base) (chicken condition) (only (chicken irregex) irregex-replace/all) (chicken string)) (define-syntax define-public (syntax-rules () ((define-public (name . arg) forms ...) (begin (export name) (define (name . arg) forms ...))) ((define-public (name args ...) forms ...) (begin (export name) (define (name args ...) forms ...))) ((define-public name value) (begin (export name) (define name value))))) (define-syntax ignore-errors (syntax-rules () ((ignore-errors x) (handle-exceptions e #f x)))) (define (alist-walk lis . keys) (if (null? keys) lis (let ((kv (assoc (car keys) lis))) (cond ((not kv) #f) ((atom? (cdr kv)) (and (null? (cdr keys)) ; this shouldn't error... (cdr kv))) ((list? (cdr kv)) (apply alist-walk (cdr kv) (cdr keys))))))) (define (string-join ss #!optional (sep " ")) (string-intersperse ss sep)) (define (flush-lines-left lines) (irregex-replace/all '(: bol (* space)) (string-join lines) "")) (define (join-lines lines) (apply string-append lines)) )