about summary refs log tree commit diff stats
path: root/lib/util.scm
blob: c71c6004eeeef262036803b1acff238020e75407 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
(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))

  )