Prepare sub-key setting.
This commit is contained in:
parent
a6043c0fc2
commit
92b8ff0c78
2 changed files with 36 additions and 6 deletions
|
@ -47,10 +47,17 @@
|
|||
;; Pass 3: Interpreter passes
|
||||
(define member-schema-interpreters
|
||||
`((pass-markers
|
||||
,(lambda (mr acc key value)
|
||||
mr))
|
||||
,(lambda (mr output key value)
|
||||
(case key
|
||||
((studentstart studentstop suspendstart suspendstop)
|
||||
(let ((marker (if (member key '(studentstart suspendstart))
|
||||
'start
|
||||
'stop)))
|
||||
mr))
|
||||
(else
|
||||
mr))))
|
||||
(info
|
||||
,(lambda (mr acc key value)
|
||||
,(lambda (mr output key value)
|
||||
mr))))
|
||||
|
||||
;; Pass 0: Removes any comments and removes any leading and trailing
|
||||
|
@ -133,9 +140,17 @@
|
|||
(member-record-add-highlight mr number "Unknown key" 2 'warning)
|
||||
processed)))))))
|
||||
|
||||
;; Pass 3+: Single interpreter pass
|
||||
(define (interpreter-pass mr output-name input pass-proc)
|
||||
(dict-set mr output-name '()))
|
||||
;; Pass 3+: Single interpreter pass - input must be
|
||||
;; dictionary. Output is top-level key of member record.
|
||||
(define (interpreter-pass mr output input pass-proc)
|
||||
(let loop ((keys (dict-keys input))
|
||||
(mr (dict-set mr output (make-dict))))
|
||||
(if (null? keys)
|
||||
mr
|
||||
(let ((key (car keys)))
|
||||
(loop (cdr keys)
|
||||
(pass-proc mr output key
|
||||
(dict-ref input key)))))))
|
||||
|
||||
;; Pass 3+: Interpreter passes
|
||||
(define (interpret-member-file mr . starts)
|
||||
|
|
|
@ -33,6 +33,8 @@
|
|||
member-record-input-file
|
||||
member-record-set
|
||||
member-record-add-highlight
|
||||
member-record-sub-ref
|
||||
member-record-sub-set
|
||||
member-record-tests!
|
||||
)
|
||||
|
||||
|
@ -87,6 +89,19 @@
|
|||
(cons (list line-number message pass type)
|
||||
(dict-ref mr 'highlights '()))))
|
||||
|
||||
;; Returns a key from particular section
|
||||
(define (member-record-sub-ref mr sec key . defaults)
|
||||
(let ((sec-dict (dict-ref mr sec)))
|
||||
(if (null? defaults)
|
||||
(dict-ref sec-dict key)
|
||||
(dict-ref sec-dict key (car defaults)))))
|
||||
|
||||
;; Sets a key in particular section
|
||||
(define (member-record-sub-set mr sec key val)
|
||||
(let ((sec-dict (dict-ref mr sec)))
|
||||
(dict-set mr sec
|
||||
(dict-set sec-dict key val))))
|
||||
|
||||
;; Self-tests
|
||||
(define (member-record-tests!)
|
||||
(run-tests
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue