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>
")))