add render-element structure, and use it in the search doc
svn: r10782 original commit: 1c6281111b21b6f38c356f7e3b4ea0343e683cef
This commit is contained in:
commit
5ddbe502ff
|
@ -387,6 +387,8 @@
|
||||||
(render-content (strip-aux (car v)) part ri)
|
(render-content (strip-aux (car v)) part ri)
|
||||||
(render-content (list "[missing]") part ri)))]
|
(render-content (list "[missing]") part ri)))]
|
||||||
[(element? i)
|
[(element? i)
|
||||||
|
(when (render-element? i)
|
||||||
|
((render-element-render i) this part ri))
|
||||||
(render-content (element-content i) part ri)]
|
(render-content (element-content i) part ri)]
|
||||||
[(delayed-element? i)
|
[(delayed-element? i)
|
||||||
(render-content (delayed-element-content i ri) part ri)]
|
(render-content (delayed-element-content i ri) part ri)]
|
||||||
|
|
|
@ -816,7 +816,10 @@
|
||||||
,@(if (null? (element-content e))
|
,@(if (null? (element-content e))
|
||||||
`(,(format "~s" (tag-key (link-element-tag e) ri)))
|
`(,(format "~s" (tag-key (link-element-tag e) ri)))
|
||||||
(render-plain-element e part ri))))))))]
|
(render-plain-element e part ri))))))))]
|
||||||
[else (render-plain-element e part ri)]))
|
[else
|
||||||
|
(when (render-element? e)
|
||||||
|
((render-element-render e) this part ri))
|
||||||
|
(render-plain-element e part ri)]))
|
||||||
|
|
||||||
(define/private (render-plain-element e part ri)
|
(define/private (render-plain-element e part ri)
|
||||||
(let* ([raw-style (flatten-style (and (element? e) (element-style e)))]
|
(let* ([raw-style (flatten-style (and (element? e) (element-style e)))]
|
||||||
|
|
|
@ -91,6 +91,8 @@
|
||||||
null)
|
null)
|
||||||
|
|
||||||
(define/override (render-element e part ri)
|
(define/override (render-element e part ri)
|
||||||
|
(when (render-element? e)
|
||||||
|
((render-element-render e) this part ri))
|
||||||
(let ([part-label? (and (link-element? e)
|
(let ([part-label? (and (link-element? e)
|
||||||
(pair? (link-element-tag e))
|
(pair? (link-element-tag e))
|
||||||
(eq? 'part (car (link-element-tag e)))
|
(eq? 'part (car (link-element-tag e)))
|
||||||
|
|
|
@ -309,7 +309,9 @@
|
||||||
prop:serializable
|
prop:serializable
|
||||||
(make-serialize-info
|
(make-serialize-info
|
||||||
(lambda (d)
|
(lambda (d)
|
||||||
(vector (collect-element-collect d)))
|
(vector (make-element
|
||||||
|
(element-style d)
|
||||||
|
(element-content d))))
|
||||||
#'deserialize-collect-element
|
#'deserialize-collect-element
|
||||||
#f
|
#f
|
||||||
(or (current-load-relative-directory) (current-directory))))
|
(or (current-load-relative-directory) (current-directory))))
|
||||||
|
@ -325,6 +327,29 @@
|
||||||
|
|
||||||
;; ----------------------------------------
|
;; ----------------------------------------
|
||||||
|
|
||||||
|
(define-struct (render-element element) (render)
|
||||||
|
#:property
|
||||||
|
prop:serializable
|
||||||
|
(make-serialize-info
|
||||||
|
(lambda (d)
|
||||||
|
(vector (make-element
|
||||||
|
(element-style d)
|
||||||
|
(element-content d))))
|
||||||
|
#'deserialize-render-element
|
||||||
|
#f
|
||||||
|
(or (current-load-relative-directory) (current-directory))))
|
||||||
|
|
||||||
|
(provide deserialize-render-element)
|
||||||
|
(define deserialize-render-element
|
||||||
|
(make-deserialize-info values values))
|
||||||
|
|
||||||
|
(provide/contract
|
||||||
|
[struct render-element ([style any/c]
|
||||||
|
[content list?]
|
||||||
|
[render (any/c part? resolve-info? . -> . any)])])
|
||||||
|
|
||||||
|
;; ----------------------------------------
|
||||||
|
|
||||||
(define-struct generated-tag ()
|
(define-struct generated-tag ()
|
||||||
#:property
|
#:property
|
||||||
prop:serializable
|
prop:serializable
|
||||||
|
|
|
@ -155,6 +155,11 @@ A @deftech{block} is either a @techlink{table}, an
|
||||||
the browser, or for rendering to other
|
the browser, or for rendering to other
|
||||||
formats.}
|
formats.}
|
||||||
|
|
||||||
|
@item{An instance of @scheme[render-element] has a
|
||||||
|
procedure that is called in the
|
||||||
|
@techlink{render pass} of document
|
||||||
|
processing.}
|
||||||
|
|
||||||
}}}}
|
}}}}
|
||||||
|
|
||||||
@item{A @deftech{delayed block} is an instance of
|
@item{A @deftech{delayed block} is an instance of
|
||||||
|
@ -546,6 +551,16 @@ element remains intact (i.e., it is not replaced) by either the
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@defstruct[(render-element element) ([render (any/c part? resolve-info? . -> . any)])]{
|
||||||
|
|
||||||
|
Like @scheme[delayed-element], but the @scheme[render] procedure is called
|
||||||
|
during the @techlink{render pass}.
|
||||||
|
|
||||||
|
If a @scheme[render-element] instance is serialized (such as when
|
||||||
|
saving collected info), it is reduced to a @scheme[element] instance.
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
@defstruct[with-attributes ([style any/c]
|
@defstruct[with-attributes ([style any/c]
|
||||||
[assoc (listof (cons/c symbol? string?))])]{
|
[assoc (listof (cons/c symbol? string?))])]{
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue
Block a user