From 389fd3dc1cba3ac41cec9fc63fbfb6166d81f50a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Dominik=20Pant=C5=AF=C4=8Dek?= Date: Sat, 25 Mar 2023 21:59:51 +0100 Subject: [PATCH] Member record finalization. --- Makefile | 2 +- member-parser.scm | 14 +++++++++++--- member-record.scm | 5 +++++ 3 files changed, 17 insertions(+), 4 deletions(-) diff --git a/Makefile b/Makefile index a7406f9..971942f 100644 --- a/Makefile +++ b/Makefile @@ -190,7 +190,7 @@ cards.import.scm: $(CARDS-SOURCES) MEMBER-PARSER-SOURCES=member-parser.scm member-record.import.scm \ testing.import.scm dictionary.import.scm month.import.scm \ - period.import.scm utils.import.scm + period.import.scm utils.import.scm configuration.import.scm member-parser.so: member-parser.o member-parser.o: member-parser.import.scm diff --git a/member-parser.scm b/member-parser.scm index 72eb88d..ba89f9b 100644 --- a/member-parser.scm +++ b/member-parser.scm @@ -41,7 +41,8 @@ dictionary month period - utils) + utils + configuration) ;; Pass 2: known keys and multikeys (define member-schema-known-keys '(nick mail phone name born joined destroyed)) @@ -101,6 +102,12 @@ (else (member-record-sub-set mr output key (car value)))))))) + ;; Final checks - add defaults + (define (member-schema-finalize mr) + (if (member-record-sub-has-key? mr 'info 'joined) + mr + (member-record-sub-set mr 'info 'joined (*member-default-joined*)))) + ;; Pass 0: Removes any comments and removes any leading and trailing ;; whitespace. (define (preprocess-member-line line) @@ -215,8 +222,9 @@ (let* ((mrif (member-record-input-file mr)) (source (read-lines mrif)) (mrp (parse-member-lines mr source))) - (interpret-member-file - (process-member-file mrp)))) + (member-schema-finalize + (interpret-member-file + (process-member-file mrp))))) ;; Performs self-tests of the member-parser module. (define (member-parser-tests!) diff --git a/member-record.scm b/member-record.scm index cb59e53..ba2d538 100644 --- a/member-record.scm +++ b/member-record.scm @@ -38,6 +38,7 @@ member-record-sub-ref member-record-sub-set member-record-sub-prepend + member-record-sub-has-key? member-record-info @@ -157,6 +158,10 @@ (cons val (member-record-sub-ref mr sec key '())))) + ;; Returns true if given section contains given key + (define (member-record-sub-has-key? mr sec key) + (dict-has-key? (dict-ref mr sec) key)) + ;; Returns member info key value (define (member-record-info mr key . defaults) (let ((info (dict-ref mr 'info)))