commit 291101390ad8210d0a9ac1dfe89faaa06eb95ed1
parent 1a417716eafbc311d869a6af56ea4f35ff2db94f
Author: Matthew Flatt <mflatt@racket-lang.org>
Date: Sat, 22 May 2010 08:46:05 -0600
fix scribble/xref
original commit: f5a0b9e613c3cc050c75ce6de2cd76a557d9cc7a
Diffstat:
3 files changed, 37 insertions(+), 3 deletions(-)
diff --git a/collects/scribble/html-render.rkt b/collects/scribble/html-render.rkt
@@ -313,10 +313,35 @@
(define/public (set-external-root-url p)
(set! external-root-url p))
+ (define (try-relative-to-external-root dest)
+ (cond
+ [(let ([rel (find-relative-path
+ (find-doc-dir)
+ (relative->path (dest-path dest)))])
+ (and (relative-path? rel)
+ rel))
+ => (lambda (rel)
+ (cons
+ (url->string
+ (struct-copy
+ url
+ (combine-url/relative
+ (string->url external-root-url)
+ (string-join (map path-element->string
+ (explode-path rel))
+ "/"))))
+ (and (not (dest-page? dest))
+ (anchor-name (dest-anchor dest)))))]
+ [else #f]))
+
(define/public (tag->path+anchor ri tag)
;; Called externally; not used internally
(let-values ([(dest ext?) (resolve-get/ext? #f ri tag)])
(cond [(not dest) (values #f #f)]
+ [(and ext? external-root-url
+ (try-relative-to-external-root dest))
+ => (lambda (p)
+ (values (car p) (cdr p)))]
[(and ext? external-tag-path)
(values (string->url external-tag-path) (format "~a" (serialize tag)))]
[else (values (relative->path (dest-path dest))
diff --git a/collects/scribble/xref.rkt b/collects/scribble/xref.rkt
@@ -41,7 +41,8 @@
#:render% [render% (html:render-mixin render%)]
#:root [root-path #f])
(let* ([renderer (new render% [dest-dir (find-system-path 'temp-dir)])]
- [ci (send renderer collect null null)])
+ [fp (send renderer traverse null null)]
+ [ci (send renderer collect null null fp)])
(for ([src sources])
(parameterize ([current-namespace
(namespace-anchor->empty-namespace here)])
@@ -121,8 +122,12 @@
tag))
(define (xref-tag->path+anchor xrefs tag
- #:render% [render% (html:render-mixin render%)])
- (send (new render% [dest-dir (find-system-path 'temp-dir)])
+ #:render% [render% (html:render-mixin render%)]
+ #:external-root-url [redirect-main #f])
+ (send (let ([r (new render% [dest-dir (find-system-path 'temp-dir)])])
+ (when redirect-main
+ (send r set-external-root-url redirect-main))
+ r)
tag->path+anchor (xrefs-ri xrefs) tag))
(define (xref-tag->index-entry xrefs tag)
diff --git a/collects/scribblings/scribble/xref.scrbl b/collects/scribblings/scribble/xref.scrbl
@@ -99,6 +99,7 @@ is found in @racket[xref], the result is @racket[#f].}
@defproc[(xref-tag->path+anchor [xref xref?]
[tag tag?]
+ [#:external-root-url root-url (or/c string? #f) #f]
[#:render% using-render% (subclass?/c render%)
(render-mixin render%)])
(values (or/c false/c path?)
@@ -111,6 +112,9 @@ result is @racket[#f] if the first result is @racket[#f], and it can
also be @racket[#f] if the tag refers to a page rather than a specific
point in a page.
+If @racket[root-url] is provided, then references to documentation in
+the main installation are redirected to the given URL.
+
The optional @racket[using-render%] argument is as for
@racket[load-xref].}