From 194615aa1dceb912880cf51cf6ca1bbe0b53a22d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Dominik=20Pant=C5=AF=C4=8Dek?= Date: Fri, 10 Mar 2023 23:24:36 +0100 Subject: [PATCH] Start work on parsing member files, outline month support functions. --- brmsaptool.scm | 80 ++++++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 77 insertions(+), 3 deletions(-) diff --git a/brmsaptool.scm b/brmsaptool.scm index c7fe709..9b88a29 100644 --- a/brmsaptool.scm +++ b/brmsaptool.scm @@ -24,6 +24,8 @@ (chicken file) (chicken pathname) (chicken file posix) + (chicken io) + (chicken string) (chicken process-context)) @@ -108,8 +110,40 @@ (print " ok.")) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -;; Members index +;; Months support +(define (string->month s) + (list 2023 1)) + +(define (month->string m) + "2023-01") + +(define (month=? m n) + #f) + +(define (monthsymbol (car sp)) + (string-intersperse (cdr sp)))))) + +;; TODO: student and suspend special handling - should create list of +;; (start date) (stop date) which will be later sorted by date and +;; computation performed +(define (parse-member-lines ls) + (let loop ((ls ls) + (r (make-dict))) + ;;(print '---) + ;;(print r) + (if (null? ls) + r + (let ((p (parse-member-line (car ls)))) + ;;(print p) + (loop (cdr ls) + (if p + (apply dict-set r p) + r)))))) + +;; Loads lines from given file in (*members-directory*) and parses +;; them. +(define (load-member-file fn) + (let* ((ffn (make-pathname (*members-directory*) fn)) + (f (open-input-file ffn)) + (ls (read-lines f))) + (parse-member-lines ls))) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; Run everything @@ -152,8 +223,11 @@ ;; Run tests (print "Running self-tests:") (dict-tests!) +(month-tests!) (print "All self-tests ok!") (newline) ;; Perform requested action -(print (members-expand-raw-index (load-members-raw-index))) +;(print (expand-members-raw-index (load-members-raw-index))) + +(print (load-member-file "joe"))