diff --git a/Makefile b/Makefile index a67d7a0..a7406f9 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 + period.import.scm utils.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 c767d83..72eb88d 100644 --- a/member-parser.scm +++ b/member-parser.scm @@ -40,7 +40,8 @@ testing dictionary month - period) + period + utils) ;; Pass 2: known keys and multikeys (define member-schema-known-keys '(nick mail phone name born joined destroyed)) @@ -88,6 +89,15 @@ (member-record-add-highlight mr1 line-number msg 3 'error)))) ((joined) (member-record-sub-set mr output key (string->month (car value)))) + ((card desfire) + (member-record-sub-set mr output key + (map + (lambda (rec) + (string-first+rest (car rec))) + value))) + ((credit) + ;; TODO + mr) (else (member-record-sub-set mr output key (car value)))))))) diff --git a/member-print.scm b/member-print.scm index 4ce06e2..3fdf4b5 100644 --- a/member-print.scm +++ b/member-print.scm @@ -92,8 +92,8 @@ ((joined) (list k (month->string v))) ((card desfire credit) - (list k "xxx" - #;(table->string + (list k + (table->string (map (lambda (c) (list (car c) (cdr c))) diff --git a/utils.scm b/utils.scm index 4eb1d48..cef3bd8 100644 --- a/utils.scm +++ b/utils.scm @@ -30,12 +30,14 @@ ( filter string-repeat + string-first+rest utils-tests! ) (import scheme (chicken base) (chicken string) + (chicken irregex) testing) ;; Returns a list with elements matching pred? predicate. @@ -59,6 +61,18 @@ (cons str res)) (string-intersperse res "")))) + ;; Extracts first token and the rest as separate string + (define (string-first+rest str) + (let ((dm (irregex-search (irregex "[ \\t]" 'u) str))) + (if dm + (let* ((sep-idx (irregex-match-start-index dm)) + (key-str (substring str 0 sep-idx)) + (sep+val (substring str sep-idx)) + (val (irregex-replace (irregex "^[ \\t]*" 'u) sep+val ""))) + (cons key-str val)) + (cons str "")))) + + ;; Performs utils module self-tests. (define (utils-tests!) (run-tests