Gauche:ManualIndex

Gauche:ManualIndex

Apacheのmod_autoindexもどきのindex.htmlをスタティックに生成するだけのスクリプト。 こんなのいくらでもあると思ったんだけど、あんまりいいのが見つからなかった。 仕方がないので自作。

誰かもっとfancyなやつ作ってください。

(use srfi-1)
(use file.util)
(use text.html-lite)
(use text.tree)

(define (make-index path abspath)
  (define (filter e)
    (not (string=? e "index.html")))
  (receive (dirs files) (directory-list2 path :children? #t :filter filter)
    (for-each (lambda (dir)
                (write-index-html (build-path path dir)
                                  (build-path abspath dir)))
              dirs)
    (let* ((l (if (string=? abspath "/")
                  '()
                  (list (cons (sys-dirname abspath) "Parent Directory"))))
           (l (fold (lambda (dir r)
                      (let ((d (string-append dir "/")))
                        (cons (cons d d) r)))
                    l dirs))
           (l (fold (lambda (file r)
                      (cons (cons file file) r))
                    l files)))
      (map (lambda (a) (html:li (html:a :href (car a) (cdr a))))
           (reverse l)))))

(define (write-index-html path abspath)
  (with-output-to-file (build-path path "index.html")
    (lambda ()
      (write-tree (html:html (html:head (html:title "Index of " abspath))
                             (html:body (html:h1 "Index of " abspath)
                                        (html:ul (make-index path abspath))))
                  ))))

(define (main args)
  (let-optionals* (cdr args) ((path ".")
                              (abspath "/"))
    (write-index-html (sys-realpath path) abspath)))

Last modified : 2012/02/07 08:09:28 UTC