Factor out period conversions.

This commit is contained in:
Dominik Pantůček 2023-03-11 17:33:55 +01:00
parent 6226a7bd1c
commit 4e97d6f4da

View file

@ -370,21 +370,30 @@
(else
(dict-set d k v)))))
;; Converts given key in member info dictionary from period markers
;; list to periods.
(define (convert-member-key:markers->periods m k)
(dict-set m k
(period-markers->periods
(sort-period-markers
(dict-ref m k '())))))
;; Converts all given keys using period-markers->periods.
(define (convert-member-keys:markers->periods m . ks)
(let loop ((m m)
(ks ks))
(if (null? ks)
m
(loop (convert-member-key:markers->periods m (car ks))
(cdr ks)))))
;; Processes all lines and returns a dictionary representing given
;; member.
(define (parse-member-lines ls)
(let loop ((ls ls)
(r (make-dict)))
(if (null? ls)
(let* ((r1 (dict-set r 'suspend
(period-markers->periods
(sort-period-markers
(dict-ref r 'suspend '())))))
(r2 (dict-set r1 'student
(period-markers->periods
(sort-period-markers
(dict-ref r1 'student '()))))))
r2)
(convert-member-keys:markers->periods r 'suspend 'student)
(let ((p (parse-member-line (car ls))))
(loop (cdr ls)
(if p