aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorHugo Hörnquist <hugo@lysator.liu.se>2023-12-01 23:06:11 +0100
committerHugo Hörnquist <hugo@lysator.liu.se>2023-12-01 23:15:01 +0100
commita57ca19ac92de3c8f46013d22105ea9b9838de96 (patch)
tree36df6a194cbd17e7bda91996f7f3a94a949cebc4
parentImprove output format for vcomponents. (diff)
downloadcalp-a57ca19ac92de3c8f46013d22105ea9b9838de96.tar.gz
calp-a57ca19ac92de3c8f46013d22105ea9b9838de96.tar.xz
Specify equivalence between vline values.
-rw-r--r--module/vcomponent/base.scm21
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