From 34ce4072687772df07a88a1af46fed19d0ed1166 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Dominik=20Pant=C5=AF=C4=8Dek?= Date: Sun, 26 Mar 2023 21:24:28 +0200 Subject: [PATCH] Default #f for all mandatory keys. --- member-parser.scm | 16 ++++++++++++---- member-record.scm | 21 +++++++++++++++++++-- 2 files changed, 31 insertions(+), 6 deletions(-) diff --git a/member-parser.scm b/member-parser.scm index c220aa4..155dc64 100644 --- a/member-parser.scm +++ b/member-parser.scm @@ -99,14 +99,22 @@ (msg (cdr fr))) (cons amt msg))) value))) + ((nick) + (let ((mr0 (member-record-sub-set mr output key (car value)))) + (if (irregex-search (irregex "[ \\t]" 'u) (car value)) + (member-record-add-highlight + mr0 (cdr value) "Whitespace not allowed in nick" 3 'error) + mr0))) (else (member-record-sub-set mr output key (car value)))))))) - ;; Final checks - add defaults + ;; Pass 4: 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*)))) + (apply + member-record-sub-ensure + mr 'info + 'joined (*member-default-joined*) + (join (map (lambda (mk) (list mk #f)) mandatory-keys)))) ;; Pass 0: Removes any comments and removes any leading and trailing ;; whitespace. diff --git a/member-record.scm b/member-record.scm index fb92926..6599b01 100644 --- a/member-record.scm +++ b/member-record.scm @@ -39,6 +39,7 @@ member-record-sub-set member-record-sub-prepend member-record-sub-has-key? + member-record-sub-ensure member-record-info @@ -162,6 +163,22 @@ (define (member-record-sub-has-key? mr sec key) (dict-has-key? (dict-ref mr sec) key)) + ;; Returns new member record with section updated by defaults, the + ;; section must already exist. + (define (member-record-sub-ensure mr sec . kvs) + (let loop ((kvs kvs) + (sd (dict-ref mr sec))) + (if (null? kvs) + (dict-set mr sec sd) + (if (null? (cdr kvs)) + (error 'member-record-sub-ensure "Needs pairs of keys and values" kvs) + (let ((key (car kvs)) + (val (cadr kvs))) + (loop (cddr kvs) + (if (dict-has-key? sd key) + sd + (dict-set sd key val)))))))) + ;; Returns member info key value (define (member-record-info mr key . defaults) (let ((info (dict-ref mr 'info))) @@ -245,9 +262,9 @@ ((#\S) (number->string (member-suspended-months mr))) ((#\E) (let ((n (length (dict-ref mr 'highlights '())))) - (if (<= n 2) + (if (eq? n 0) "" - (sprintf "[~A]" (- n 2))))) + (sprintf "[~A]" n)))) ((#\~) "~")) resl)) (loop (cdr fmtl)