wikiクローンその2
ルールの拡張が容易になるように作り直してみた。
編集画面が常に表示されるパターン
ファイルアクセスを最小にする
#!/usr/bin/gosh (use www.cgi) (let* ((cgi (cgi-parse-parameters)) (title (cgi-get-parameter "title" cgi :default "Sandbox")) (contents (let ((data (cgi-get-parameter "data" cgi)) (filename (string-append "wiki/" title))) (if (eq? #f data) (call-with-input-file filename (lambda (x) (if x (port->string x) "")) :if-does-not-exist #f) (begin (with-output-to-file filename (lambda () (display data))) data)))) (compiled-contents (let me ((str contents) (rule '((#/\[\[([^\]]+)\]\]/ "<a href=\"./wiki2.cgi?title=\\1\">\\1</a>") (#/[A-Z]\w*/ "<a href=\"./wiki2.cgi?title=\\0\">\\0</a>") (#/\n/ "<br>\n")))) (if (eq? rule ()) str (regexp-replace-all (caar rule) (me str (cdr rule)) (cadar rule))))) ) (display #`"Content-type: text/html; charset=UTF-8 <html> <body> <h2>,|title|</h2> ,|compiled-contents| <p> <form method=get action='wiki2.cgi'> <input type=hidden name='title' value=',|title|'> <textarea name=data>,|contents|</textarea><br> <input type=submit value='Submit'> </form> </body> </html>"))