diff --git a/member-parser.scm b/member-parser.scm index a1cd656..c89187a 100644 --- a/member-parser.scm +++ b/member-parser.scm @@ -52,31 +52,38 @@ (define known-keys (append mandatory-keys optional-keys)) + ;; Dynamic start/stop markers + (define start-stop-markers-lookup + '( + (studentstart student start) + (studentstop student stop) + (suspendstart suspend start) + (suspendstop suspend stop) + + ;;(joined member start) + ;;(destroyed member stop) + )) + (define start-stop-markers (map car start-stop-markers-lookup)) + ;; Pass 3: Interpreter passes (define member-schema-interpreters `((pass-markers ,(lambda (mr output key value) - (case key - ((studentstart studentstop suspendstart suspendstop) - (let ((marker (if (member key '(studentstart suspendstart)) - 'start - 'stop)) - (kind (if (member key '(studentstart studentstop)) - 'student - 'suspend))) - (foldl (lambda (mr value) - (let* ((mspec (string-first+rest (car value))) - (month (string->month (car mspec))) - (comment (cdr mspec))) - (if month - (member-record-sub-prepend - mr output kind - (list marker month (cdr value) comment)) - (member-record-add-highlight - mr (cdr value) "Invalid month specification" 3 'error)))) - mr value))) - (else - (member-record-sub-set mr output key value))))) + (if (member key start-stop-markers) + (let ((marker (caddr (assq key start-stop-markers-lookup))) + (kind (cadr (assq key start-stop-markers-lookup)))) + (foldl (lambda (mr value) + (let* ((mspec (string-first+rest (car value))) + (month (string->month (car mspec))) + (comment (cdr mspec))) + (if month + (member-record-sub-prepend + mr output kind + (list marker month (cdr value) comment)) + (member-record-add-highlight + mr (cdr value) "Invalid month specification" 3 'error)))) + mr value)) + (member-record-sub-set mr output key value)))) (info ,(lambda (mr output key value) (case key