From 3ac30a1f35b100c3b97a779e5f1e17daa2736a56 Mon Sep 17 00:00:00 2001
From: Matthew Flatt <mflatt@racket-lang.org>
Date: Fri, 8 Jun 2012 15:10:40 +0800
Subject: [PATCH] scribble: fix duplicate call to `render-element' callback

This change should cut the time to generate the search index
roughly in half.

original commit: 00e1ed9369d8401ef349f9c9fb9475d30ab2cda1
---
 collects/scribble/html-render.rkt  | 11 +++++++----
 collects/scribble/latex-render.rkt | 18 +++++++++++++-----
 2 files changed, 20 insertions(+), 9 deletions(-)

diff --git a/collects/scribble/html-render.rkt b/collects/scribble/html-render.rkt
index 89c9e53f..fb37dbd7 100644
--- a/collects/scribble/html-render.rkt
+++ b/collects/scribble/html-render.rkt
@@ -1136,8 +1136,6 @@
                          `(,(format "~s" (tag-key (link-element-tag e) ri)))
                          (render-plain-content e part ri))))))))]
         [else 
-         (when (render-element? e)
-           ((render-element-render e) this part ri))
          (render-plain-content e part ri)]))
 
     (define/private (render-plain-content e part ri)
@@ -1173,13 +1171,18 @@
                                   [else null]))
                                properties))
                (attribs))]
-             [newline? (eq? name 'newline)])
+             [newline? (eq? name 'newline)]
+             [check-render
+              (lambda ()
+                (when (render-element? e)
+                  ((render-element-render e) this part ri)))])
         (let-values ([(content) (cond
                                  [link?
                                   (parameterize ([current-no-links #t])
                                     (super render-content e part ri))]
-                                 [newline? null]
+                                 [newline? (check-render) null]
                                  [(eq? 'hspace name)
+                                  (check-render)
                                   (let ([str (content->string e)])
                                     (map (lambda (c) 'nbsp) (string->list str)))]
                                  [else
diff --git a/collects/scribble/latex-render.rkt b/collects/scribble/latex-render.rkt
index 6214d68e..7bce9341 100644
--- a/collects/scribble/latex-render.rkt
+++ b/collects/scribble/latex-render.rkt
@@ -243,8 +243,6 @@
       (super render-intrapara-block p part ri first? last? starting-item?))
 
     (define/override (render-content e part ri)
-      (when (render-element? e)
-        ((render-element-render e) this part ri))
       (let ([part-label? (and (link-element? e)
                               (pair? (link-element-tag e))
                               (eq? 'part (car (link-element-tag e)))
@@ -285,10 +283,15 @@
                                  (style-name es)
                                  es)]
                  [style (and (style? es) es)]
+                 [check-render
+                  (lambda ()
+                    (when (render-element? e)
+                      ((render-element-render e) this part ri)))]
                  [core-render (lambda (e tt?)
                                 (cond
                                  [(and (image-element? e)
                                        (not (disable-images)))
+                                  (check-render)
                                   (let ([fn (install-file
                                              (select-suffix 
                                               (main-collects-relative->path
@@ -306,6 +309,7 @@
                                              (ftag (xlist (convert e 'eps-bytes)) ".ps")
                                              (ftag (xlist (convert e 'png-bytes)) ".png"))))
                                   => (lambda (bstr+info+suffix)
+                                       (check-render)
                                        (let* ([bstr (list-ref (list-ref bstr+info+suffix 0) 0)]
                                               [suffix (list-ref bstr+info+suffix 1)]
                                               [width (list-ref (list-ref bstr+info+suffix 0) 1)]
@@ -342,14 +346,17 @@
                   [(smaller) (wrap e "Smaller" #f)]
                   [(larger) (wrap e "Larger" #f)]
                   [(hspace)
+                   (check-render)
                    (let ([s (content->string e)])
                      (case (string-length s)
                        [(0) (void)]
                        [else
                         (printf "\\mbox{\\hphantom{\\Scribtexttt{~a}}}"
                                 (regexp-replace* #rx"." s "x"))]))]
-                  [(newline) (unless (suppress-newline-content)
-                               (printf "\\\\"))]
+                  [(newline) 
+                   (check-render)
+                   (unless (suppress-newline-content)
+                     (printf "\\\\"))]
                   [else (error 'latex-render
                                "unrecognzied style symbol: ~s" style)])]
                [(string? style-name)
@@ -360,6 +367,7 @@
                              [else tt?])])
                   (cond
                    [(multiarg-element? e)
+                    (check-render)
                     (printf "\\~a" style-name)
                     (if (null? (multiarg-element-contents e))
                         (printf "{}")
@@ -370,7 +378,7 @@
                           (printf "}")))]
                    [else
                     (wrap e style-name tt?)]))]
-               [else 
+               [else
                 (core-render e tt?)]))
             (let loop ([l (if style (style-properties style) null)] [tt? #f])
               (if (null? l)