|
|
|
@ -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)
|
|
|
|
|