やっとSchemeのスクリプト書けた

コード


;this script converts all files on target directory to HTML files
;which have href tags describing line number.
;
;
;usage
; convert_to_html.scm directory_name

(use file.util)
(use srfi-13)

(define (convert-to-html root-path html-directory)
(directory-fold root-path
(lambda (path result)
(let ((output-filename (format "~a/~a.html" html-directory (sub-head path root-path))))
(begin
;create directory
(create-directory* (decompose-path output-filename))
(let ((html-file (open-output-file output-filename)))
;output to file
(format html-file "~a" (make-html-string path))
)
)
)
)
'()
)
)

(define (sub-head path head)
(sub-first-slash
(cond
[(string=? (substring path 0 (string-length head)) head)
(substring path (string-length head) (string-length path))]
[else path]
)
)
)

(define (sub-first-slash str)
(cond
[(string=? (substring str 0 1) "/") (substring str 1 (string-length str))]
[else str]
)
)

(define (make-html-string path)
(string-join
(let ((index 0))
(append

'("")

(map
(lambda (str) (string-append (string-append (format #f "<pre>~5a " (set! index (inc index)) (string-append (number->string index) ":")) str) "</pre>"))
(file->string-list path)
)
'("")
)
)
""
)
)

(define (inc n)
(+ n 1)
)

(define (dec n)
(- n 1)
)

(let *1
)
)

解説

gosh convert_to_html.scm ディレクト

とかすると、対象のディレクトリ内のソースコード*2をごっそりとHTML化したものを、「ディレクトリ名 + "_html"」というディレクトリに生成します。


HTML化と言っても、各行に行番号に対応したname属性を持つハイパーリンクを設定するだけですが、ソースコードをブラウザで読みつつ、任意の行にブックマークを設定したいなんて時には便利に使えます。
#GNU GlobalがPythonに対応していない状況でやった苦肉の策というのが本当のところですが


気に入った方は使ってみてください。


あと、添削歓迎。エロい人教えてください。
#インデントのうまいやり方とかよくわかんね


#追記
このままだとコードのインデントが無くなってしまうな・・・
と思ったので直しました。ついでに、行番号も入れるようにしました。

*1:path (car *argv*))) (begin (convert-to-html path (string-append path "_html"

*2:今の実装ではバイナリだろうが何でもやってはしまうのだけど