diff --git a/brmsaptool.scm b/brmsaptool.scm index a31e19a..3cdae46 100644 --- a/brmsaptool.scm +++ b/brmsaptool.scm @@ -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) + (monthperiods 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"))