main.rkt
;; Copyright 2011-2012 Ryan Culpepper
;; Released under the terms of the LGPL version 3 or later.
;; See the file COPYRIGHT for details.

#lang racket/base
(require racket/contract
         racket/file
         "private/scriblogify.rkt"
         "private/handlers.rkt"
         "private/util.rkt")
(provide/contract
 [scriblogify
  (->* (path-string?)
       (#:profile (or/c symbol? #f)
        #:link-to-pre? any/c
        #:overwrite? any/c
        #:verbose? any/c
        #:temp-dir (or/c path-string? #f)
        #:docs-base-url string?)
       void?)])

(define (scriblogify file
                     #:profile [profile #f]
                     #:link-to-pre? [link-to-pre? #f]
                     #:overwrite? [overwrite? #f]
                     #:verbose? [v? (verbose?)]
                     #:temp-dir [temp-dir #f]
                     #:docs-base-url [docs-base-url
                                      (if link-to-pre?
                                          "http://pre.racket-lang.org/docs/html/"
                                          "http://doc.racket-lang.org/")])
  (parameterize ((verbose? (and v? #t)))
    (let ([temp-dir
           (or temp-dir
               (path->string (make-temporary-file "scriblogify~a" 'directory)))])
      (when (verbose?)
        (when link-to-pre?
          (eprintf "Using nightly build documentation pages\n"))
        (eprintf "Putting temporary files in ~s.\n" temp-dir))
      (run-scribble #:dest temp-dir
                    #:dest-name "out.html"
                    #:redirect-main docs-base-url
                    file)
      (parameterize ((current-directory temp-dir))
        (blogify "out.html"
                 (if profile
                     (upload-handler profile overwrite?)
                     default-handler))
        (void)))))

(define (run-scribble #:dest dest
                      #:dest-name dest-name
                      #:redirect-main redirect-main
                      file)
  (parameterize ((current-namespace (make-base-namespace))
                 (current-command-line-arguments
                  (vector "--quiet"
                          "--html"
                          "--dest" dest
                          "--dest-name" dest-name
                          "--redirect-main" redirect-main
                          "++xref-in" "setup/xref" "load-collections-xref"
                          file)))
    (dynamic-require 'scribble/run #f)))