bullet handling

main
Matthew Butterick 6 years ago
parent 126538d868
commit 7bc37e8992

@ -17,7 +17,7 @@
(define mdash "")
(define (root attrs exprs)
(qexpr (append `(#;(first-line-indent "12")
(qexpr (append `((first-line-indent "12")
#;(line-align "center")
(line-wrap "kp")
#;(line-align-last "center")) attrs) exprs))
@ -93,8 +93,12 @@
(define draw-debug-block? #t)
(define draw-debug-string? #f)
(require racket/dict)
(define (list-base attrs exprs [bullet-val #f])
(qexpr (list* '(inset-left "20") attrs)
(define bullet-space-factor 2.5)
(define em (dict-ref attrs 'font-size default-font-size))
(define bullet-indent (* bullet-space-factor em))
(qexpr (list* `(inset-left ,(number->string bullet-indent)) attrs)
(add-between
(for/list ([(expr idx) (in-indexed exprs)])
(list* (get-tag expr) (cons (list 'list-index (or bullet-val (format "~a" (add1 idx)))) (get-attrs expr)) (get-elements expr)))
@ -102,7 +106,7 @@
(define-tag-function (ol attrs exprs) (list-base attrs exprs))
(define-tag-function (ul attrs exprs) (list-base attrs exprs ""))
(define-tag-function (li attrs exprs) (qexpr (cons '(first-line-indent "0") attrs) exprs))
(define-tag-function (li attrs exprs) (qexpr attrs exprs))
(define-quad string-quad quad ())
(define q:string (q #:type string-quad
@ -377,22 +381,23 @@
;; handle list indexes. drop new quad into line to hold list index
;; could also use this for line numbers
[elems
;; we assume here that a list item has already had extra inset-left
;; with room for a bullet
;; which we just insert at the front.
;; this is safe because line has already been filled.
(append
;; only put bullet into line if we're at the first line of the list item
(match (and (eq? idx 1) (quad-ref elem 'list-index))
[#false null]
[bullet
(define bullet-indent (* 3 (quad-ref elem 'font-size default-font-size)))
(list (make-quad
#:elems (list
(struct-copy quad (car elems)
[elems (list (if (number? bullet)
(format "~a." bullet)
bullet))]))))
(list (struct-copy quad elem
[elems (list (if (number? bullet)
(format "~a." bullet)
bullet))]
[size (pt bullet-indent 0)]))])
(list (struct-copy
quad q:string ;; copy q:string to get draw routine
;; borrow attrs from elem
[attrs (quad-attrs elem)]
;; use bullet as elems
[elems (list (if (number? bullet) (format "~a." bullet) bullet))]
;; no size because it's inside inset
[size (pt 0 0)]))])
(list (make-quad
#:type offsetter
#:offset (pt (quad-ref elem 'inset-left 0) 0)

Loading…
Cancel
Save