#lang racket/base (require racket/runtime-path racket/gui/base racket/class mrlib/bitmap-label racket/system net/sendurl drracket/tool-lib) (provide drracket-buttons) (define-runtime-path pdf-png-path "pdf.png") (define-runtime-path html-png-path "html.png") (define pdf.png (make-object bitmap% pdf-png-path 'png/mask)) (define html.png (make-object bitmap% html-png-path 'png/mask)) (define-namespace-anchor anchor) (define original-error-display-handler (error-display-handler)) (define (make-render-button label bmp mode suffix) (list label bmp (λ (drs-frame) (define fn (send (send drs-frame get-definitions-text) get-filename)) (define html? (equal? suffix #".html")) (cond [fn (parameterize ([drracket:rep:after-expression (λ () (printf "scribble: loading xref\n") (define xref ((dynamic-require 'setup/xref 'load-collections-xref))) (printf "scribble: rendering\n") (parameterize ([current-input-port (open-input-string "")]) ((dynamic-require 'scribble/render 'render) (list (eval 'doc)) (list fn) #:render-mixin (dynamic-require (if html? 'scribble/html-render 'scribble/pdf-render) 'render-mixin) #:xrefs (list xref))) (cond [html? (send-url/file (path-replace-suffix fn suffix))] [else (parameterize ([current-input-port (open-input-string "")]) (system (format "open \"~a\"" (path->string (path-replace-suffix fn suffix)))))]))]) (send drs-frame execute-callback))] [else (message-box "Scribble" "Cannot render buffer without filename")])))) (define drracket-buttons (let ([html-button (make-render-button "Scribble HTML" html.png "--html" #".html")] [pdf-button ;; only available on OSX currently ;; when we have a general way of opening pdfs, can use that (make-render-button "Scribble PDF" pdf.png "--pdf" #".pdf")]) (case (system-type) [(macosx) (list html-button pdf-button)] [else (list html-button)])))