22 lines
		
	
	
		
			947 B
		
	
	
	
		
			Scheme
		
	
	
	
	
	
			
		
		
	
	
			22 lines
		
	
	
		
			947 B
		
	
	
	
		
			Scheme
		
	
	
	
	
	
| (define (resolve-inherit-entry-in-list alist entry)
 | |
|   (let* ((key (car entry))
 | |
|         (attributes (cdr entry))
 | |
|         (inherits (assoc-ref attributes "inherits")))
 | |
|     (if inherits
 | |
|       (let* ((alist-without-entry (alist-delete key alist))
 | |
|             (inherit-entry (assoc inherits alist-without-entry))
 | |
|             (inherits-attributes (if inherit-entry (alist-copy (cdr (resolve-inherit-entry-in-list alist-without-entry inherit-entry)))))
 | |
|             (override-attributes (alist-delete "inherits" attributes)))
 | |
|         (if inherit-entry
 | |
|           (begin
 | |
|             (for-each (lambda (attribute) (assoc-set! inherits-attributes (car attribute) (cdr attribute))) override-attributes)
 | |
|             (cons key inherits-attributes)
 | |
|           )
 | |
|           (ly:error "~a can not inherit from ~a" key inherits))
 | |
|       )
 | |
|       entry
 | |
|     )))
 | |
| 
 | |
| (define (resolve-inherits alist)
 | |
|   (map (lambda (entry) (resolve-inherit-entry-in-list alist entry)) alist)
 | |
| ) |