main
Matthew Butterick 6 years ago
parent d32865a9eb
commit dc898971b0

@ -147,11 +147,23 @@
(struct line-break quad () #:transparent)
(define (line-break-copy x as es)
(struct-copy line-break x
[attrs #:parent quad as]
[elems #:parent quad es]))
(define lbr (q #:type line-break
#:printable #f))
#:copier line-break-copy
#:printable #f
#:elems '("foo bar")))
(struct para-break line-break () #:transparent)
(define (para-break-copy x as es)
(struct-copy para-break x
[attrs #:parent quad as]
[elems #:parent quad es]))
(define pbr (q #:type para-break
#:printable #f))
#:copier para-break-copy
#:printable #f
#:elems '("¶¶")))
(module+ test
(check-true (line-break? (second (quad-elems (q "foo" pbr "bar")))))

@ -74,7 +74,7 @@
;; also, they will not have any run keys embedded
;; (but they shouldn't need it because they're not part of text runs)
;; overall I am persuaded that `atomize` is very texty and needs a name befitting that role.
(list (make-quad #:attrs next-attrs #:elems (list elem)))]
(list ((quad-copier x) x next-attrs (list elem)))]
[_ (loop elem next-attrs next-key)])))]
[_ (list x)])))

@ -35,6 +35,7 @@
(hashes-equal? (quad-attrs q1) (quad-attrs q2))))
(struct quad (type
copier
attrs
elems
size
@ -72,6 +73,9 @@
;; todo: convert immutable hashes to mutable on input?
(define (make-quad
#:type [type quad]
#:copier [copier (λ (x as es) (struct-copy quad x
[attrs as]
[elems es]))]
#:attrs [attrs (make-hasheq)]
#:elems [elems null]
#:size [size '(0 0)]
@ -94,6 +98,7 @@
[(list elems ..1) (make-quad #:elems elems)]
;; all cases end up below
[null (type type
copier
attrs
elems
size

Loading…
Cancel
Save