From 4e97d6f4da95df13b0654fd11235148585067b73 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Dominik=20Pant=C5=AF=C4=8Dek?= Date: Sat, 11 Mar 2023 17:33:55 +0100 Subject: [PATCH] Factor out period conversions. --- brmsaptool.scm | 27 ++++++++++++++++++--------- 1 file changed, 18 insertions(+), 9 deletions(-) diff --git a/brmsaptool.scm b/brmsaptool.scm index c22e373..f7a3388 100644 --- a/brmsaptool.scm +++ b/brmsaptool.scm @@ -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