From a57ca19ac92de3c8f46013d22105ea9b9838de96 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Hugo=20H=C3=B6rnquist?= Date: Fri, 1 Dec 2023 23:06:11 +0100 Subject: Specify equivalence between vline values. --- module/vcomponent/base.scm | 21 ++++++++++++++++++++- 1 file changed, 20 insertions(+), 1 deletion(-) 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 -- cgit v1.2.3