From 121fc727a9fc885b8a373006600408e884275230 Mon Sep 17 00:00:00 2001 From: Matthew Butterick Date: Tue, 19 Mar 2019 16:25:57 -0700 Subject: [PATCH] resume in fark --- quad/qtest/markdown.rkt | 2 +- quad/quad/wrap.rkt | 16 ++++++++-------- 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/quad/qtest/markdown.rkt b/quad/qtest/markdown.rkt index 123bd03b..8ab9dc66 100644 --- a/quad/qtest/markdown.rkt +++ b/quad/qtest/markdown.rkt @@ -230,7 +230,7 @@ dest-hash) (define (line-wrap xs wrap-size) - (wrap xs (λ (q idx) (- wrap-size + (wrap-best xs (λ (q idx) (- wrap-size (quad-ref q 'inset-left 0) (quad-ref q 'inset-right 0))) #:hard-break line-break? diff --git a/quad/quad/wrap.rkt b/quad/quad/wrap.rkt index d8f209f2..5e7c7271 100644 --- a/quad/quad/wrap.rkt +++ b/quad/quad/wrap.rkt @@ -1,7 +1,7 @@ #lang debug racket (require racket/list racket/match sugar/debug sugar/list "param.rkt" "quad.rkt" "atomize.rkt" "position.rkt" "ocm.rkt") -(provide wrap) +(provide wrap wrap-best) (define-syntax (debug-report stx) (syntax-case stx () @@ -227,12 +227,12 @@ (define (penalty i j) (match-define ($penalty last-val last-idx) (ocm-min-value ocm i)) (cond - [(> j (vector-length pieces)) + [(or (= i j) (> j (vector-length pieces))) (define out-of-bounds-signal (- i)) ($penalty out-of-bounds-signal last-idx)] [else (define would-be-wrap-qs (pieces-sublist i j)) - (define last-q (vector-ref pieces (sub1 j))) + (define last-q (last (vector-ref pieces (sub1 j)))) (define wrap-idx (wrap-count last-idx last-q)) (define wrap-distance (for/fold ([last-dist 0]) ([q (in-list would-be-wrap-qs)]) @@ -264,17 +264,17 @@ (define last-j (vector-length pieces)) (define bps (let loop ([j last-j][bps (list last-j)]) ; start from end - (define i (ocm-min-index ocm j)) ; look to the previous line - (if (zero? i) ; zero means we're at first position, and therefore done - (cons i bps) - (loop i (cons i bps))))) + (define min-i (ocm-min-index ocm j)) ; look to the previous line + (if (zero? min-i) ; zero means we're at first position, and therefore done + (cons min-i bps) + (loop min-i (cons min-i bps))))) (for/fold ([wraps null] [wrap-idx initial-wrap-idx] #:result (finalize-reversed-wraps wraps)) ([i (in-list bps)] [j (in-list (cdr bps))]) (define wrap-qs (reverse (pieces-sublist i j))) ; first-fit gets wrap-qs in reverse, so be consistent - (define previous-wrap-ender (and (not (zero? i)) (vector-ref pieces (sub1 i)))) + (define previous-wrap-ender (and (not (zero? i)) (last (vector-ref pieces (sub1 i))))) (define wrap-triggering-q (and (not (= j (vector-length pieces))) (car wrap-qs))) (values (cons (finish-wrap wrap-qs previous-wrap-ender wrap-idx wrap-triggering-q) wraps) (wrap-count wrap-idx (car wrap-qs)))))