wikiを書いてみた。
始めた書いたlispのアプリケーション。
それにしてはlispにみえない。
苦労したのはファイル周り。
読み込み
(define contents (call-with-input-file #`"wiki/,title" (lambda (x) (if x (port->string x) "")) :if-does-not-exist #f))
書き出し
(with-output-to-file #`"wiki/,title" (lambda () (display data)))
#!/usr/bin/gosh (use www.cgi) (define cgi (cgi-parse-parameters)) (define title (cgi-get-parameter "title" cgi :default "Sandbox")) (let ((data (cgi-get-parameter "data" cgi :default ""))) (if (not (equal? data "")) (with-output-to-file #`"wiki/,title" (lambda () (display data))))) (define contents (call-with-input-file #`"wiki/,title" (lambda (x) (if x (port->string x) "")) :if-does-not-exist #f)) (define mode (if (equal? contents "") "edit" (cgi-get-parameter "mode" cgi :default "read"))) (if (equal? mode "edit") (display #`"Content-type: text/html; charset=UTF-8 <h2>,|title|</h2> <form method=get action='wiki.cgi'> <input type=hidden name='title' value=',|title|'> <textarea name=data>,|contents|</textarea><br> <input type=submit value='Submit'> </form> ") (let ((cont (regexp-replace-all #/[A-Z]\w*/ (regexp-replace-all #/\n/ contents "<br>") "<a href=\"./wiki.cgi?title=\\\ 0\">\\0</a>"))) (display #`"Content-type: text/html; charset=UTF-8 <h2>,|title|</h2> ,cont <br><a href=\"./wiki.cgi?title=,|title|&mode=edit\">Edit this page</a><br> ")))