本体

珍しくerubyで書いた。
取りあえずviewはできるようになった。
メールでの追加で書き込みできるようになったのでまずはよしとするか。
あと、wikinameでの参照は同一のタイトルを持つもののリストを出すようにし、
実際のページへはUUIDでアクセスするようにした。

 #!/usr/bin/eruby -C"EUC-JP"
 
 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
 <html lang="ja-JP">
 <head>
 <meta http-equiv="content-type" content="text/html; charset=EUC-JP">
 <link rel=&#39;stylesheet&#39; type=&#39;text/css&#39; href=&#39;/stylesheets/mxwiki.css&#39;>
 <title>MX</title>
 </head>
 <body>
 
 <% require &#39;parser/parser.rb&#39;
 basedir="../../mx/"
 me="http://binran4/~n9d/cgi-bin/mx/indexrb.cgi"
 parser=Wikip.new.variableset("#{me}?wikiname=") %>
 
 <%=
 cgi=CGI.new
 if cgi.has_key?(&#39;id&#39;)
   [[cgi[&#39;id&#39;],open("#{basedir}#{cgi[&#39;id&#39;]}/subject.txt").read,open("#{basedir}#{cgi[&#39;id&#39;]}/content.txt").read]]
 else
   if cgi.has_key?(&#39;wikiname&#39;)
     Dir.glob("#{basedir}/*/subject.txt").select{|i|open(i){|f|f.read==cgi[&#39;wikiname&#39;]}}.map{|i|i.sub(/subject/,&#39;content&#39;)}
   else
     Dir.glob("#{basedir}*/content.txt").sort_by{|i|File.mtime(i)}.last(10)
   end.reverse.map{|i|[File.basename(i.sub(/\/content\.txt/,&#39;&#39;)),open(i.sub(/content/,&#39;subject&#39;)){|f|f.read},open(i){|f|(1..20).map{f.gets}.join}]}
 end.map{|i|
   begin
     "<div class=\"page\"><h1 class=\"title\"><a href=\"#{me}?id=#{i[0]}\">#{i[1]}</a></h1>\n<p>#{parser.variableset.evalute(i[2])}</p></div>\n"
   rescue ParseError
     k=0
     "<h1>パーサエラー#{i[1]}<h1><pre>#{$!}</pre><br><pre>#{i[2].map{|j|"#{k+=1}:#{CGI::escapeHTML(j)}"}.join}</pre>"
   end
 }.join
 %>