main
Matthew Butterick 5 years ago
parent 5e5933820e
commit 2c482d888b

@ -241,11 +241,6 @@
(define-quad filler-quad quad) (define-quad filler-quad quad)
(define (sum-of-widths qss)
(for*/sum ([qs (in-list qss)]
[q (in-list qs)])
(pt-x (size q))))
(define (space-quad? q) (equal? (quad-elems q) (list " "))) (define (space-quad? q) (equal? (quad-elems q) (list " ")))
(define (fill-line-wrap qs ending-q line-q) (define (fill-line-wrap qs ending-q line-q)
@ -278,8 +273,10 @@
(define last-sublist (append prev-qs (list last-q hanger-q))) (define last-sublist (append prev-qs (list last-q hanger-q)))
(append sublists (list last-sublist))])] (append sublists (list last-sublist))])]
[_ word-sublists])) [_ word-sublists]))
(define word-width (sum-of-widths hung-word-sublists)) (define word-width (for/sum ([qs (in-list hung-word-sublists)])
(define word-space-width (sum-of-widths word-space-sublists)) (sum-x qs)))
(define word-space-width (for/sum ([qs (in-list word-space-sublists)])
(sum-x qs)))
(define empty-hspace (- line-width (define empty-hspace (- line-width
(quad-ref (car qs) :inset-left 0) (quad-ref (car qs) :inset-left 0)
word-width word-width
@ -399,7 +396,7 @@
#:type offsetter-quad) #:type offsetter-quad)
elems)]) 'sw))]))] elems)]) 'sw))]))]
[_ null])])) [_ null])]))
(define maybe-first-line (match new-lines [(cons line0 _) line0][_ #false])) (define maybe-first-line (and (pair? new-lines) (car new-lines)))
(append (match opening-q (append (match opening-q
[#false (list (make-paragraph-spacer maybe-first-line :space-before 0))] ; paragraph break [#false (list (make-paragraph-spacer maybe-first-line :space-before 0))] ; paragraph break
[_ null]) [_ null])
@ -467,17 +464,16 @@
;; always catch last line of block in this case ;; always catch last line of block in this case
;; so later cases are guaranteed to have earlier lines. ;; so later cases are guaranteed to have earlier lines.
(unless (eq? idx group-len) (unless (eq? idx group-len)
(cond (when (or
;; if we have :keep-all we can skip :keep-first and :keep-last cases ;; if we have :keep-all we can skip :keep-first and :keep-last cases
[(quad-ref ln :keep-all-lines) (make-nobreak! ln)] (quad-ref ln :keep-all-lines)
;; to keep n lines, we only paint the first n - 1 ;; to keep n lines, we only paint the first n - 1
;; (because each nobr line sticks to the next) ;; (because each nobr line sticks to the next)
[(let ([keep-first (quad-ref ln :keep-first-lines)]) (let ([keep-first (quad-ref ln :keep-first-lines)])
(and (number? keep-first) (< idx keep-first))) (and (number? keep-first) (< idx keep-first)))
(make-nobreak! ln)] (let ([keep-last (quad-ref ln :keep-last-lines)])
[(let ([keep-last (quad-ref ln :keep-last-lines)]) (and (number? keep-last) (< (- group-len keep-last) idx))))
(and (number? keep-last) (< (- group-len keep-last) idx))) (make-nobreak! ln)))
(make-nobreak! ln)]))
(cons ln reversed-lines))) (cons ln reversed-lines)))

Loading…
Cancel
Save