Add modify-as-document form.
activitystreams/ontology.scm
69 | 69 | as-document-set | |
70 | 70 | as-document-delete | |
71 | 71 | as-document-delete* | |
72 | + | modify-as-document | |
72 | 73 | ||
73 | 74 | json->as-document | |
74 | 75 | uri->as-document | |
… | |||
371 | 372 | (as-document-types document) | |
372 | 373 | (as-alist-delete* (as-document-properties document) key))) | |
373 | 374 | ||
375 | + | (define-syntax modify-as-document | |
376 | + | (lambda (x) | |
377 | + | (syntax-case x (set-property remove-property remove-property*) | |
378 | + | ((_ doc) | |
379 | + | #`doc) | |
380 | + | ((_ doc (set-property key value) spec ...) | |
381 | + | #`(modify-as-document | |
382 | + | (as-document-set doc key value) | |
383 | + | spec ...)) | |
384 | + | ((_ doc (remove-property key) spec ...) | |
385 | + | #`(modify-as-document | |
386 | + | (as-document-delete doc key) | |
387 | + | spec ...)) | |
388 | + | ((_ doc (remove-property* key) spec ...) | |
389 | + | #`(modify-as-document | |
390 | + | (as-document-delete* doc key) | |
391 | + | spec ...))))) | |
392 | + | ||
374 | 393 | (define (json->as-document ontology document) | |
375 | 394 | (define (uri->datatype type) | |
376 | 395 | (let ((candidates (filter (lambda (t) (equal? (as-type-uri t) type)) |