@ -670,7 +670,7 @@
[ elems ( from-parent ( insert-blocks lns ) ' nw ) ] ) ) ]
[ elems ( from-parent ( insert-blocks lns ) ' nw ) ] ) ) ]
[ _ null ] ) )
[ _ null ] ) )
( define ( column-wrap q s vertical-height column-gap [ column-quad q:column ] )
( define ( column-wrap lines fn-line s vertical-height column-gap [ column-quad q:column ] )
( unless ( positive? vertical-height )
( unless ( positive? vertical-height )
( raise-argument-error ' column-wrap " positive number " vertical-height ) )
( raise-argument-error ' column-wrap " positive number " vertical-height ) )
@ -679,17 +679,27 @@
;; could do it after, but it would require going back inside each col quad
;; could do it after, but it would require going back inside each col quad
;; which seems overly interdependent, because `insert-blocks` is used to determine break locations.
;; which seems overly interdependent, because `insert-blocks` is used to determine break locations.
;; `col-wrap` should emit quads that are complete.
;; `col-wrap` should emit quads that are complete.
( define cols ( wrap lines vertical-height
#:soft-break #true
#:hard-break column-break-quad?
#:no-break ( λ ( q ) ( quad-ref q :no-colbr ) ) ; cooperates with make-nobreak
#:distance ( λ ( q dist-so-far wrap-qs )
;; do trial block insertions
( sum-y ( insert-blocks ( reverse wrap-qs ) ) ) )
#:finish-wrap ( col-finish-wrap column-quad ) ) )
( define reversed-fn-lines ( match ( reverse fn-lines )
[ ( ? null? ) null ]
[ reversed-fn-lines
( quad-update! ( car reversed-fn-lines )
[ from-parent ' sw ] )
( for/list ( [ fn-line ( in-list reversed-fn-lines ) ] )
( quad-update! fn-line
[ from ' nw ]
[ to ' sw ] ) ) ] ) )
( quad-update! ( car cols )
[ elems ( append ( quad-elems ( car cols ) ) reversed-fn-lines ) ] )
( define col-spacer ( quad-copy q:column-spacer [ size ( pt column-gap 100 ) ] ) )
( define col-spacer ( quad-copy q:column-spacer [ size ( pt column-gap 100 ) ] ) )
( add-between
( add-between cols col-spacer ) )
( wrap qs vertical-height
#:soft-break #true
#:hard-break column-break-quad?
#:no-break ( λ ( q ) ( quad-ref q :no-colbr ) ) ; cooperates with make-nobreak
#:distance ( λ ( q dist-so-far wrap-qs )
;; do trial block insertions
( sum-y ( insert-blocks ( reverse wrap-qs ) ) ) )
#:finish-wrap ( col-finish-wrap column-quad ) )
col-spacer ) )
( define ( ( page-finish-wrap make-page-quad path ) cols q0 q page-idx )
( define ( ( page-finish-wrap make-page-quad path ) cols q0 q page-idx )
( define page-quad ( make-page-quad ( + ( section-pages-used ) page-idx ) ) )
( define page-quad ( make-page-quad ( + ( section-pages-used ) page-idx ) ) )