main
Matthew Butterick 4 years ago
parent 40dfde0f2a
commit 9485d03320

@ -3,7 +3,9 @@
(provide (all-defined-out))
(define (make-linear-index q)
(cons q (append-map make-linear-index (quad-elems q))))
(if (quad? q)
(cons q (append-map make-linear-index (quad-elems q)))
null))
(define (string->pred str)
(match str
@ -21,8 +23,8 @@
[(list all name arg) (cons (string->pred name) (or (string->number arg)
(string->symbol arg)))])))
(define (query q query-str)
(for/fold ([qs (make-linear-index q)]
(define (query qs query-str)
(for/fold ([qs qs]
#:result (and qs (car qs)))
([query-piece (in-list (parse-query query-str))])
(match-define (cons pred count) query-piece)

@ -28,7 +28,8 @@
"doc.rkt"
"column.rkt"
"keep.rkt"
"debug.rkt")
"debug.rkt"
"query.rkt")
(provide (all-defined-out))
@ -401,25 +402,13 @@
(section-pages-used (+ (section-pages-used) (length section-pages))))))
(define (resolve-parents doc)
;; resolve location of any quad with a dynamic anchor-parent attribute like @line:1
(for* ([section (in-list (quad-elems doc))]
[(page page-idx) (in-indexed (quad-elems section))]
#:when (page-quad? page))
(define unresolved-qs
(let loop ([x page])
(match x
[(? quad?) ((if (quad-ref x :anchor-parent)
(λ (tail) (cons x tail))
values) (append-map loop (quad-elems x)))]
[_ null])))
(for ([line (in-list (quad-elems page))]
[line-num (in-naturals 1)]
#:when (line-quad? line))
(define line-key (format "@line:~a" line-num))
#R line-key
(for ([uq (in-list unresolved-qs)]
#:when (equal? (quad-ref uq :anchor-parent) line-key))
(quad-update! line [elems (append (quad-elems line) (list uq))]))))
(define linearized-qs (make-linear-index doc))
(for* ([q (in-list linearized-qs)]
[query-str (in-value (quad-ref q :anchor-parent))]
#:when query-str
[parent (in-value (query linearized-qs query-str))]
#:when parent)
(quad-update! parent [elems (append (quad-elems parent) (list q))]))
doc)
(define (correct-line-alignment doc)

Loading…
Cancel
Save