Sort start/stop markers.

This commit is contained in:
Dominik Pantůček 2023-03-11 16:42:48 +01:00
parent 5691f8ec42
commit 388843cada

View file

@ -27,6 +27,7 @@
(chicken io)
(chicken string)
(chicken format)
(chicken sort)
(chicken process-context))
@ -221,8 +222,12 @@
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; Periods
;; Sorts period markers (be it start or end) chronologically and
;; returns the sorted list.
(define (sort-period-markers l)
l)
(sort l
(lambda (a b)
(month<? (cdr a) (cdr b)))))
(define (period-markers->periods l)
l)
@ -235,6 +240,9 @@
(define (period-tests!)
(display "[test] period ")
(unit-test 'sort-period-markers
(equal? (sort-period-markers '((start 2023 1) (stop 2022 10) (start 2022 3)))
'((start 2022 3) (stop 2022 10) (start 2023 1))))
(print " ok."))
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
@ -309,14 +317,16 @@
(dict-ref d pk '())))))
(else
(dict-set d k v)))))
;; 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)
r
(let* ((r1 (dict-set r 'suspend (sort-period-markers (dict-ref r 'suspend '()))))
(r2 (dict-set r1 'student (sort-period-markers (dict-ref r1 'student '())))))
r2)
(let ((p (parse-member-line (car ls))))
(loop (cdr ls)
(if p
@ -349,4 +359,4 @@
;; Perform requested action
;(print (expand-members-raw-index (load-members-raw-index)))
(print (load-member-file "joe"))
(print (load-member-file "trimen"))