diff options
author | Hugo Hörnquist <hugo@lysator.liu.se> | 2023-12-01 23:06:11 +0100 |
---|---|---|
committer | Hugo Hörnquist <hugo@lysator.liu.se> | 2023-12-01 23:15:01 +0100 |
commit | a57ca19ac92de3c8f46013d22105ea9b9838de96 (patch) | |
tree | 36df6a194cbd17e7bda91996f7f3a94a949cebc4 | |
parent | Improve output format for vcomponents. (diff) | |
download | calp-a57ca19ac92de3c8f46013d22105ea9b9838de96.tar.gz calp-a57ca19ac92de3c8f46013d22105ea9b9838de96.tar.xz |
Specify equivalence between vline values.
Diffstat (limited to '')
-rw-r--r-- | module/vcomponent/base.scm | 21 |
1 files changed, 20 insertions, 1 deletions
diff --git a/module/vcomponent/base.scm b/module/vcomponent/base.scm index d21f785d..95b14233 100644 --- a/module/vcomponent/base.scm +++ b/module/vcomponent/base.scm @@ -78,6 +78,13 @@ (vline-parameters default: (table) type: table?) (vline-source default: "" type: string?)) +(define (vline-equal? a b) + (and (eq? (key a) (key b)) + (equal? (vline-value a) + (vline-value b)) + (equal? (table->list (vline-parameters a)) + (table->list (vline-parameters b))))) + (define (serialize-vline line) (let ((parameters (table->list (vline-parameters line)))) @@ -128,7 +135,19 @@ (every vcomponent-equal? (sort* (children a) string< (extract 'UID)) (sort* (children b) string< (extract 'UID))) - (equal? (properties a) (properties b)))) + (every (lambda (a b) + (and (eq? (car a) (car b)) + (cond ((and (list? (cadr a)) + (list? (cadr b))) + (every vline-equal? + (cadr a) + (cadr b))) + ((and (not (list? (cadr a))) + (not (list? (cadr b)))) + (vline-equal? (cadr a) + (cadr b))) + (else #f)))) + (properties a) (properties b)))) (define prop* (case-lambda |