diff --git a/quad/wrap-typed.rkt b/quad/wrap-typed.rkt index 0275431c..9863e747 100644 --- a/quad/wrap-typed.rkt +++ b/quad/wrap-typed.rkt @@ -2,7 +2,8 @@ (require (for-syntax racket/base racket/syntax)) (require/typed sugar/list [slicef-after ((Listof Quad) (Quad . -> . Boolean) . -> . (Listof (Listof Quad)))] [shift ((Listof Any) (Listof Integer) . -> . (Listof Any))]) -(require math/flonum racket/list) +(require math/flonum (except-in racket/list flatten)) +(require/typed racket/list [flatten (All (A) (Rec as (U Any (Listof as))) -> (Listof Any))]) (require "ocm-typed.rkt" "quads-typed.rkt" "utils-typed.rkt" "measure-typed.rkt" "world-typed.rkt" "logger-typed.rkt") @@ -59,20 +60,20 @@ (when (not (possible-word-break-quad? q)) (error 'convert-to-word-break "input is not a possible word break:" q)) (define result (cond - [(word-break? q) q] - [(word? q) - (define str (word-string q)) ; str will be one character long, because we've exploded our input - (apply word-break - (merge-attrs q ; take q's attributes for formatting purposes - (cond - ;; a space is ordinarily visible, but disappears at the end of a line - [(equal? str " ") (list world:no-break-key " " world:before-break-key "")] - ;; soft hyphen is ordinarily invisible, but appears at the end of a line - [(soft-hyphen? str) (list world:no-break-key "" world:before-break-key "-")] - ;; a visible breakable character is always visible - [(visible-breakable? str) (list world:no-break-key str world:before-break-key str)] - [else (cast (world:default-word-break-list) HashableList)])) (quad-list q))] - [else #f])) + [(word-break? q) q] + [(word? q) + (define str (word-string q)) ; str will be one character long, because we've exploded our input + (apply word-break + (merge-attrs q ; take q's attributes for formatting purposes + (cond + ;; a space is ordinarily visible, but disappears at the end of a line + [(equal? str " ") (list world:no-break-key " " world:before-break-key "")] + ;; soft hyphen is ordinarily invisible, but appears at the end of a line + [(soft-hyphen? str) (list world:no-break-key "" world:before-break-key "-")] + ;; a visible breakable character is always visible + [(visible-breakable? str) (list world:no-break-key str world:before-break-key str)] + [else (cast (world:default-word-break-list) HashableList)])) (quad-list q))] + [else #f])) (or result (error 'convert-to-word-break "result was a not word break for input:" q))) (define/typed (make-unbreakable q) @@ -103,7 +104,7 @@ (Quad . -> . (List Nonnegative-Flonum String Symbol Symbol)) (list (cast (let ([size (quad-attr-ref/parameter q world:font-size-key)]) - (if (exact-integer? size) (fl size) size)) Nonnegative-Flonum) + (if (exact-integer? size) (fl size) size)) Nonnegative-Flonum) (cast (quad-attr-ref/parameter q world:font-name-key) String) (cast (quad-attr-ref/parameter q world:font-weight-key) Symbol) (cast (quad-attr-ref/parameter q world:font-style-key) Symbol))) @@ -235,7 +236,7 @@ (define key-to-use (if (and (last-line? line) (quad-has-attr? line world:horiz-alignment-last-line-key)) world:horiz-alignment-last-line-key world:horiz-alignment-key)) - + (define horiz-alignment (or alignment-override (quad-attr-ref line key-to-use (world:horiz-alignment-default)))) (define default-spacer (spacer)) (define-values (before middle after) (case horiz-alignment @@ -249,19 +250,16 @@ (Quad Quad . -> . Quad) (define keys-to-ignore '(width)) ; width will be determined during fill routine (define filtered-hash (cast (and (quad-attrs attr-source) - (foldl (λ(k [ht : HashTableTop]) (hash-remove ht k)) (quad-attrs attr-source) keys-to-ignore)) QuadAttrs)) + (foldl (λ(k [ht : HashTableTop]) (hash-remove ht k)) (quad-attrs attr-source) keys-to-ignore)) QuadAttrs)) (quad (quad-name q) (merge-attrs filtered-hash q) (quad-list q))) - - - #| - (quad (quad-name line) (quad-attrs line) (flatten (let ([qs : (Listof Quad) (quad-list line)]) - `(,@(if before (copy-with-attrs before (first qs)) null) - - ,@(map (λ(q) (if (and middle (takes-justification-space? q)) - (let ([interleaver (copy-with-attrs middle q)]) - (list interleaver q interleaver)) - q)) qs) - ,@(if after (copy-with-attrs after (last qs)) null))))) -|# - line) + (quad (quad-name line) + (quad-attrs line) + (cast (flatten (let ([qs (cast (quad-list line) (Listof Quad))]) + `(,@(cast (if before (copy-with-attrs before (first qs)) null) (Listof Quad)) + ,@(map (λ([q : Quad]) (if (and middle (takes-justification-space? q)) + (let ([interleaver (copy-with-attrs middle q)]) + (list interleaver q interleaver)) + q)) qs) + ,@(cast (if after (copy-with-attrs after (last qs)) null) (Listof Quad)) + ))) QuadList)))