Index: misc/refresh-cache.rb
===================================================================
--- misc/refresh-cache.rb	(.../vendor)	(revision 0)
+++ misc/refresh-cache.rb	(.../trunk)	(revision 58)
@@ -0,0 +1,47 @@
+#!/usr/bin/env ruby
+#
+# $Id$
+#
+
+require 'getopts'
+
+def usage(status)
+  (status == 0 ? $stdout : $stderr).print(<<EOS)
+Usage: #{File.basename($0)}
+EOS
+  exit status
+end
+
+def main
+  ok = getopts(nil, 'help')
+  usage(0) if $OPT_help
+  usage(1) unless ok
+
+  load './bitchannelrc'
+  setup_environment
+  wiki = bitchannel_context()
+  wiki._repository.link_cache.clear
+  wiki._repository.revlink_cache.clear
+  wiki._repository.title_cache.clear
+  revlinks = {}
+  wiki._repository.pages.each do |page|
+    page.links
+    page.links.each do |dest|
+      (revlinks[dest] ||= []).push page.name
+    end
+  end
+  revlinks.each do |name, revlinks|
+    wiki._repository.revlink_cache[name] = revlinks
+  end
+  require 'bitchannel/syntax'
+  c = BitChannel::Syntax.new(wiki._config, wiki._repository)
+  titles = []
+  wiki._repository.pages.each do |page|
+    titles << [page.name, c.title(page.source)]
+  end
+  titles.each do |name, title|
+    wiki._repository.title_cache[name] = title
+  end
+end
+
+main

Property changes on: misc/refresh-cache.rb
___________________________________________________________________
Name: svn:keywords
   + Id

Index: misc/refresh-linkcache.rb
===================================================================
--- misc/refresh-linkcache.rb	(.../vendor)	(revision 58)
+++ misc/refresh-linkcache.rb	(.../trunk)	(revision 58)
@@ -1,39 +0,0 @@
-#!/usr/bin/env ruby
-#
-# $Id$
-#
-
-require 'optparse'
-
-def main
-  parser = OptionParser.new
-  parser.on('--help') {
-    puts parser.help
-    exit 0
-  }
-  begin
-    parser.parse!
-  rescue OptionParser::ParseError => err
-    $stderr.puts err.message
-    $stderr.puts parser.help
-    exit 1
-  end
-
-  load './bitchannelrc'
-  setup_environment
-  wiki = bitchannel_context()
-  wiki._repository.link_cache.clear
-  wiki._repository.revlink_cache.clear
-  revlinks = {}
-  wiki._repository.pages.each do |page|
-    page.links
-    page.links.each do |dest|
-      (revlinks[dest] ||= []).push page.name
-    end
-  end
-  revlinks.each do |name, revlinks|
-    wiki._repository.revlink_cache[name] = revlinks
-  end
-end
-
-main
Index: lib/bitchannel/handler.rb
===================================================================
--- lib/bitchannel/handler.rb	(.../vendor)	(revision 58)
+++ lib/bitchannel/handler.rb	(.../trunk)	(revision 58)
@@ -196,17 +196,17 @@
     end
 
     def handle_list(req)
-      @wiki.list.response
+      @wiki.list(req.type).response
     end
 
     def handle_recent(req)
-      @wiki.recent.response
+      @wiki.recent(req.type).response
     end
 
     def handle_search(req)
-      @wiki.search(req.search_query, req.search_regexps).response
+      @wiki.search(req.search_query, req.search_regexps, req.type).response
     rescue WrongQuery => err
-      @wiki.search_error(req.search_query, err).response
+      @wiki.search_error(req.search_query, req.type, err).response
     end
   end
 
@@ -254,6 +254,10 @@
       get('preview') ? true : false
     end
 
+    def type
+      get('type') || 'text/html'
+    end
+    
     def rev
       getrev('rev')
     end
@@ -380,7 +384,7 @@
     def Response.new_from_page(page)
       res = new()
       res.last_modified = page.last_modified
-      res.set_content_body page.content, page.type, page.charset
+      res.set_content_body page.content, page.type, page.charset, page.metainfo
       res
     end
 
@@ -397,9 +401,14 @@
     attr_accessor :last_modified
     attr_reader :body
 
-    def set_content_body(body, type, charset)
+    def set_content_body(body, type, charset, metainfo = nil)
       @body = body
       @header['Content-Type'] = "#{type}; charset=#{charset}"
+      if metainfo
+        metainfo.each do |name, value|
+          @header["X-#{name}"] = value
+        end
+      end
     end
 
     def content_type
Index: lib/bitchannel/repository.rb
===================================================================
--- lib/bitchannel/repository.rb	(.../vendor)	(revision 58)
+++ lib/bitchannel/repository.rb	(.../trunk)	(revision 58)
@@ -120,6 +120,7 @@
         conf.required! :cachedir
         @link_cache = LinkCache.new("#{conf[:cachedir]}/link".untaint)
         @revlink_cache = LinkCache.new("#{conf[:cachedir]}/revlink".untaint)
+        @title_cache = TitleCache.new("#{conf[:cachedir]}/title")
         @notifier = conf[:notifier]
       }
       # per-request cache
@@ -145,6 +146,7 @@
     # internal use only
     attr_reader :link_cache
     attr_reader :revlink_cache
+    attr_reader :title_cache
 
     def read_only?
       @read_only_p
@@ -153,12 +155,12 @@
     attr_reader :syntax
     attr_writer :syntax   # FIXME: tmp
 
-    def page_names
-      @wc_read.cvs_Entries.keys.map {|name| decode_filename(name) }
+    def page_names_and_titles
+      @wc_read.cvs_Entries.keys.map {|name| [decode_filename(name), name2title(name)] }
     end
 
     def pages
-      page_names().map {|name| new_page(name) }
+      page_names_and_titles().map {|name,| new_page(name) }
     end
 
     def orphan_pages
@@ -216,11 +218,16 @@
       new_page(name)
     end
 
-    def updated(name, new_rev, new_text)
+    def updated(name, new_rev, new_title, new_text)
       update_linkcache name, @syntax.extract_links(new_text)
+      update_titlecache name, new_title
       notify name, new_rev
     end
 
+    def name2title(name)
+      @title_cache[name] || name
+    end
+    
     def updated_externally(name)
       @wc_read.chdir {|wc|
         wc.cvs_update name
@@ -255,6 +262,10 @@
       }
     end
 
+    def update_titlecache(name, new_title)
+      @title_cache[name] = new_title
+    end
+
     def notify(name, new_rev)
       return unless @notifier
       # fork twice not to make zombie
@@ -277,7 +288,7 @@
   end   # class Repository
 
 
-  class LinkCache
+  class Cache
 
     include FilenameEncoding
     include LockUtils
@@ -292,42 +303,43 @@
       FileUtils.rm_rf @dir
       Dir.mkdir @dir
     end
-
-    def entries
-      Dir.entries(@dir)\
-          .reject {|ent| /\,tmp\z/ =~ ent }\
-          .select {|ent| File.file?("#{@dir}/#{ent.untaint}") }\
-          .map {|ent| decode_filename(ent) }
-    end
-
+    
     def [](name)
       read_cache(cache_path(name))
     end
 
-    def []=(name, links)
+    def []=(name, values)
       lock {
-        write_cache cache_path(name), links
+        write_cache cache_path(name), values
       }
     end
-
-    def add_link(name, lnk)
-      links = (read_cache(cache_path(name)) || [])
-      write_cache cache_path(name), (links + [lnk]).uniq.sort
+    
+    def updating
+      lock {
+        yield self
+      }
     end
+    
+    private
 
-    def del_link(name, lnk)
-      links = (read_cache(cache_path(name)) || [])
-      write_cache cache_path(name), (links - [lnk]).uniq.sort
+    def read_cache(path)
+      File.readlines(path).map {|line| line.strip.untaint }
+    rescue Errno::ENOENT
+      return nil
     end
 
-    def updating
-      lock {
-        yield self
+    def write_cache(path, values)
+      tmp = "#{path},tmp"
+      File.open(tmp, 'w') {|f|
+        values.each do |line|
+          f.puts line
+        end
       }
+      File.rename tmp, path
+    ensure
+      File.unlink tmp if File.exist?(tmp)
     end
 
-    private
-
     def lock
       if @locking
         yield
@@ -347,35 +359,71 @@
       "#{@dir}/#{encode_filename(name)}"
     end
 
-    def read_cache(path)
-      File.readlines(path).map {|line| line.strip.untaint }
-    rescue Errno::ENOENT
-      return nil
+  end # Class Cache
+
+  
+  class LinkCache < Cache
+
+    def entries
+      Dir.entries(@dir)\
+          .reject {|ent| /\,tmp\z/ =~ ent }\
+          .select {|ent| File.file?("#{@dir}/#{ent.untaint}") }\
+          .map {|ent| decode_filename(ent) }
     end
+    
+    def add_link(name, lnk)
+      links = (read_cache(cache_path(name)) || [])
+      write_cache cache_path(name), (links + [lnk]).uniq.sort
+    end
 
-    def write_cache(path, links)
-      tmp = "#{path},tmp"
-      File.open(tmp, 'w') {|f|
-        links.each do |lnk|
-          f.puts lnk
-        end
-      }
-      File.rename tmp, path
-    ensure
-      File.unlink tmp if File.exist?(tmp)
+    def del_link(name, lnk)
+      links = (read_cache(cache_path(name)) || [])
+      write_cache cache_path(name), (links - [lnk]).uniq.sort
     end
 
   end   # class LinkCache
 
+  
+  class TitleCache < Cache
+    
+    SEPARATOR = "\001"
+    CACHEFILE_NAME = 'name2title'
+    
+    def initialize(dir)
+      super
+      @cache = {}
+      (read_cache(cache_path(CACHEFILE_NAME)) || {})\
+        .map {|line| line.split(/#{SEPARATOR}/o)}\
+        .each {|name, title| @cache[name] = title}
+    end
 
+    def [](name)
+      @cache[name] || name
+    end
+    
+    def []=(name, title)
+      lock {
+        @cache[name] = title
+        write_cache cache_path(CACHEFILE_NAME), @cache.map {|item| item.join(SEPARATOR)}
+      }
+    end
+
+    def clear
+      super
+      @cache = {}
+    end
+    
+  end # Class TitleCache
+
+
   module CVSRevision
     def cvsrev_to_i(rev, on1111 = 1)
       return on1111 if rev == '1.1.1.1'
       rev.slice(/\A1\.(\d+)\z/, 1).to_i
     end
   end
+  
 
-
   class CVSWorkingCopy
 
     include FilenameEncoding
@@ -811,10 +859,12 @@
       @revision = nil
       @links = nil
       @revlinks = nil
+      @title = repository.name2title(name)
     end
 
     attr_reader :repository
     attr_reader :name
+    attr_reader :title
 
     def syntax
       @repository.syntax
@@ -917,7 +967,8 @@
       @wc_read.chdir {|wc|
         wc.cvs_update @name
       }
-      @repository.updated @name, new_rev, new_text
+      new_title = syntax.title(new_text) || @name
+      @repository.updated @name, new_rev, new_title, new_text
     end
 
     def edit
Index: lib/bitchannel/wikispace.rb
===================================================================
--- lib/bitchannel/wikispace.rb	(.../vendor)	(revision 58)
+++ lib/bitchannel/wikispace.rb	(.../trunk)	(revision 58)
@@ -56,12 +56,17 @@
       @repository.exist?(name)
     end
 
+    PageSelector = Hash.new(TextHtmlPage).merge!({
+      'text/html' => TextHtmlPage,
+      'text/plain' => TextPlainPage
+    })
+    
     def view(name)
-      ViewPage.new(@config, @repository[name])
+      TextHtmlPage::ViewPage.new(@config, @repository[name])
     end
 
     def viewrev(name, rev)
-      ViewRevPage.new(@config, @repository[name], rev)
+      TextHtmlPage::ViewRevPage.new(@config, @repository[name], rev)
     end
 
     def edit(name)
@@ -70,37 +75,37 @@
       end
       page = @repository[name]
       rev = page.revision  # fix revision
-      EditPage.new(@config, page, page.source(rev), rev)
+      TextHtmlPage::EditPage.new(@config, page, page.source(rev), rev)
     end
 
     def edit_revision(name, srcrev)
       page = @repository[name]
-      EditPage.new(@config, page, page.source(srcrev), page.revision)
+      TextHtmlPage::EditPage.new(@config, page, page.source(srcrev), page.revision)
     end
 
     def edit_new(name)
-      EditPage.new(@config, @repository.fetch(name), '', nil)
+      TextHtmlPage::EditPage.new(@config, @repository.fetch(name), '', nil)
     end
 
     def edit_again(name, src, cirev, reason = :edit_conflicted)
       page = @repository[name]
-      EditPage.new(@config, page, src, (cirev || page.revision), reason)
+      TextHtmlPage::EditPage.new(@config, page, src, (cirev || page.revision), reason)
     end
 
     def preview(name, orgrev, text)
-      PreviewPage.new(@config, @repository.fetch(name), text, orgrev)
+      TextHtmlPage::PreviewPage.new(@config, @repository.fetch(name), text, orgrev)
     end
 
     def save(name, origrev, text)
       @repository.fetch(name).checkin origrev, text
-      ThanksPage.new(@config, name)
+      TextHtmlPage::ThanksPage.new(@config, name)
     end
 
     def comment(name, user, cmt)
       @repository[name].edit {|text|
         insert_comment(text, user, cmt)
       }
-      ThanksPage.new(@config, name)
+      TextHtmlPage::ThanksPage.new(@config, name)
     end
 
     def insert_comment(text, uname, comment)
@@ -114,40 +119,40 @@
     private :insert_comment
 
     def diff(name, rev1, rev2)
-      DiffPage.new(@config, @repository[name], rev1, rev2)
+      TextHtmlPage::DiffPage.new(@config, @repository[name], rev1, rev2)
     end
 
     def history(name)
-      HistoryPage.new(@config, @repository[name])
+      TextHtmlPage::HistoryPage.new(@config, @repository[name])
     end
 
     def annotate(name, rev)
-      AnnotatePage.new(@config, @repository[name], rev)
+      TextHtmlPage::AnnotatePage.new(@config, @repository[name], rev)
     end
 
-    def list
-      ListPage.new(@config, @repository)
+    def list(type)
+      PageSelector[type]::ListPage.new(@config, @repository)
     end
 
-    def recent
-      RecentPage.new(@config, @repository)
+    def recent(type)
+      PageSelector[type]::RecentPage.new(@config, @repository)
     end
 
     def gdiff(org, reloadp)
-      GlobalDiffPage.new(@config, @repository, org, reloadp)
+      TextHtmlPage::GlobalDiffPage.new(@config, @repository, org, reloadp)
     end
 
-    def search(query, patterns)
-      SearchResultPage.new(@config, @repository, query, patterns)
+    def search(query, patterns, type)
+      PageSelector[type]::SearchResultPage.new(@config, @repository, query, patterns)
     end
 
-    def search_error(query, err)
-      SearchErrorPage.new(@config, query, err)
+    def search_error(query, type, err)
+      PageSelector[type]::SearchErrorPage.new(@config, query, err)
     end
 
     def src(name)
       page = @repository[name]
-      TextPage.new(@config.locale, page.source, page.mtime)
+      SrcPage.new(@config.locale, page.source, page.mtime, {'Revision' => page.revision})
     end
 
     def extent
@@ -158,7 +163,7 @@
         buf << page.source
         buf << "\r\n"
       end
-      TextPage.new(@config.locale, buf, @repository.last_modified)
+      SrcPage.new(@config.locale, buf, @repository.last_modified)
     end
 
   end
Index: lib/bitchannel/syntax.rb
===================================================================
--- lib/bitchannel/syntax.rb	(.../vendor)	(revision 58)
+++ lib/bitchannel/syntax.rb	(.../trunk)	(revision 58)
@@ -25,6 +25,11 @@
       @interwikinames = nil
     end
 
+    def title(str)
+      first_line = str.slice(/\A.*/)
+      TITLE =~ first_line ? Regexp.last_match.post_match.strip : nil
+    end
+    
     def compile(str, page_name)
       @f = LineInput.new(StringIO.new(str))
       @page_name = page_name
@@ -70,6 +75,9 @@
     def DUMMY_REPOSITORY.inspect
       '#<dummy Repository object>'
     end
+    def DUMMY_REPOSITORY.name2title(name)
+      name
+    end
 
     def Syntax.extract_links(str)
       new(DUMMY_CONFIG, DUMMY_REPOSITORY)._extract_links(str)
@@ -91,6 +99,7 @@
     # Block
     #
 
+    TITLE = /\A=(?=[^=])/
     CAPTION = /\A(?:={2,4}|!{1,4})/
     UL = /\A\s*\*|\A-/
     OL = /\A\s*\(\d+\)|\A\#/   # should not allow spaces before '#'
@@ -105,6 +114,9 @@
         CITE, TABLE, PRE, INDENTED, BLOCKEXT)
 
     def do_compile
+      if @f.next? and TITLE =~ @f.peek
+        @f.gets # skip
+      end
       while @f.next?
         case @f.peek
         when CAPTION   then caption @f.gets
@@ -434,7 +446,7 @@
       return escape_html(name) if @repository.invalid?(name)
       @internal_links.push name
       if @repository.exist?(name)
-      then %Q[<a href="#{view_url(name)}">#{escape_html(name)}</a>]
+      then %Q[<a href="#{view_url(name)}">#{escape_html(@repository.name2title(name))}</a>]
       else %Q[<a href="#{view_url(name)}" class="dangling">?</a>#{escape_html(name)}]
       end
     end
Index: lib/bitchannel/erbutils.rb
===================================================================
--- lib/bitchannel/erbutils.rb	(.../vendor)	(revision 58)
+++ lib/bitchannel/erbutils.rb	(.../trunk)	(revision 58)
@@ -24,15 +24,15 @@
   module ErbUtils
     private
 
-    def run_erb(templatedir, id)
-      erb = ERB.new(get_template(templatedir, id), nil, 2)
-      erb.filename = "#{id}.rhtml"
+    def run_erb(templatedir, id, type)
+      erb = ERB.new(get_template(templatedir, id, type), nil, 2)
+      erb.filename = "#{id}.r#{type}"
       erb.result(binding())
     end
 
-    def get_template(tmpldir, tmplname)
-      File.read("#{tmpldir}/#{tmplname}.rhtml").gsub(/^\.include (\w+)/) {
-        get_template(tmpldir, $1.untaint)
+    def get_template(tmpldir, tmplname, type)
+      File.read("#{tmpldir}/#{type}/#{tmplname}.r#{type}").gsub(/^\.include (\w+)/) {
+        get_template(tmpldir, $1.untaint, type)
       }.untaint
     end
   end
Index: lib/bitchannel/asissyntax.rb
===================================================================
--- lib/bitchannel/asissyntax.rb	(.../vendor)	(revision 58)
+++ lib/bitchannel/asissyntax.rb	(.../trunk)	(revision 58)
@@ -21,6 +21,10 @@
       @repository = repo
     end
 
+    def title(str)
+      nil
+    end
+    
     def extract_links(str)
       []
     end
Index: lib/bitchannel/page.rb
===================================================================
--- lib/bitchannel/page.rb	(.../vendor)	(revision 58)
+++ lib/bitchannel/page.rb	(.../trunk)	(revision 58)
@@ -16,568 +16,725 @@
   class Page
   end
 
+  module TextHtmlPage
+    class RhtmlPage < Page
+      include ErbUtils
+      include TextUtils
 
-  class RhtmlPage < Page
-    include ErbUtils
-    include TextUtils
+      def initialize(config)
+        @config = config
+        @metainfo = {}
+      end
 
-    def initialize(config)
-      @config = config
-    end
+      attr_reader :metainfo
+      
+      def content
+        run_erb(@config.templatedir, template_id(), 'html')
+      end
 
-    def content
-      run_erb(@config.templatedir, template_id())
-    end
+      def type
+        'text/html'
+      end
 
-    def type
-      'text/html'
-    end
+      def charset
+        @config.locale.charset
+      end
 
-    def charset
-      @config.locale.charset
-    end
+      def last_modified
+        nil
+      end
 
-    def last_modified
-      nil
-    end
+      private
 
-    private
+      def page_charset
+        escape_url(@config.locale.charset)
+      end
 
-    def page_charset
-      escape_url(@config.locale.charset)
-    end
+      def css_url
+        escape_url(@config.css_url)
+      end
 
-    def css_url
-      escape_url(@config.css_url)
+      def escape_url(str)
+        escape_html(URI.escape(str))
+      end
     end
 
-    def escape_url(str)
-      escape_html(URI.escape(str))
-    end
-  end
 
+    class WikiPage < RhtmlPage
+      private
 
-  class WikiPage < RhtmlPage
-    private
+      def menuitem_diff_enabled?()     false end
+      def menuitem_annotate_enabled?() false end
+      def menuitem_history_enabled?()  false end
+      def menuitem_edit_enabled?()     false end
+      def menuitem_list_enabled?()     true end
+      def menuitem_recent_enabled?()   true end
+      def menuitem_top_enabled?()      true end
+      def menuitem_help_enabled?()     true end
+      def menuitem_search_enabled?()   true end
 
-    def menuitem_diff_enabled?()     false end
-    def menuitem_annotate_enabled?() false end
-    def menuitem_history_enabled?()  false end
-    def menuitem_edit_enabled?()     false end
-    def menuitem_list_enabled?()     true end
-    def menuitem_recent_enabled?()   true end
-    def menuitem_top_enabled?()      true end
-    def menuitem_help_enabled?()     true end
-    def menuitem_search_enabled?()   true end
+      def cgi_url
+        escape_url(@config.cgi_url)
+      end
 
-    def cgi_url
-      escape_url(@config.cgi_url)
-    end
+      def logo_url
+        u = @config.logo_url
+        u ? %[<img class="sitelogo" src="#{escape_html(u)}" alt=""> ] : ''
+      end
 
-    def logo_url
-      u = @config.logo_url
-      u ? %[<img class="sitelogo" src="#{escape_html(u)}" alt=""> ] : ''
-    end
+      def index_page_url
+        view_url(FRONT_PAGE_NAME)
+      end
 
-    def index_page_url
-      view_url(FRONT_PAGE_NAME)
-    end
+      def help_page_url
+        view_url(HELP_PAGE_NAME)
+      end
 
-    def help_page_url
-      view_url(HELP_PAGE_NAME)
-    end
+      def view_url(page_name)
+        if @config.html_url?
+        then "#{escape_url(page_name)}#{@config.document_suffix}"
+        else "#{cgi_url()}?cmd=view;name=#{escape_url(page_name)}"
+        end
+      end
 
-    def view_url(page_name)
-      if @config.html_url?
-      then "#{escape_url(page_name)}#{@config.document_suffix}"
-      else "#{cgi_url()}?cmd=view;name=#{escape_url(page_name)}"
+      def query_string
+        ''
       end
     end
 
-    def query_string
-      ''
-    end
-  end
 
+    class NamedPage < WikiPage
+      def initialize(config, page)
+        super config
+        @page = page
+      end
 
-  class NamedPage < WikiPage
-    def initialize(config, page)
-      super config
-      @page = page
-    end
+      private
 
-    private
+      def menuitem_edit_enabled?()     not @page.read_only? end
+      def menuitem_diff_enabled?()     diff_base_revision() > 1 end
+      def menuitem_history_enabled?()  true end
+      def menuitem_annotate_enabled?() true end
 
-    def menuitem_edit_enabled?()     not @page.read_only? end
-    def menuitem_diff_enabled?()     diff_base_revision() > 1 end
-    def menuitem_history_enabled?()  true end
-    def menuitem_annotate_enabled?() true end
+      def compile_page(content)
+        @page.syntax.compile(content, @page.name)
+      end
 
-    def compile_page(content)
-      @page.syntax.compile(content, @page.name)
-    end
+      def page_name
+        escape_html(@page.name)
+      end
 
-    def page_name
-      escape_html(@page.name)
-    end
+      def page_title
+        escape_html(@page.title)
+      end
 
-    def page_url
-      escape_url(@page.name)
-    end
+      def page_url
+        escape_url(@page.name)
+      end
 
-    def page_view_url
-      view_url(@page.name)
-    end
+      def page_view_url
+        view_url(@page.name)
+      end
 
-    def front_page?
-      @page.name == FRONT_PAGE_NAME
-    end
+      def front_page?
+        @page.name == FRONT_PAGE_NAME
+      end
 
-    def site_name
-      escape_html(@config.site_name || FRONT_PAGE_NAME)
-    end
+      def site_name
+        escape_html(@config.site_name || FRONT_PAGE_NAME)
+      end
 
-    def size
-      @page.size
-    end
+      def size
+        @page.size
+      end
 
-    def mtime
-      @page.mtime
-    end
+      def mtime
+        @page.mtime
+      end
 
-    def links
-      @page.links
-    end
+      def links
+        @page.links
+      end
 
-    def revlinks
-      @page.revlinks - [@page.name]
-    end
+      def revlinks
+        @page.revlinks - [@page.name]
+      end
 
-    def ordered_revlinks
-      leaves, nodes = *revlinks()\
-          .select {|name| @page.repository.exist?(name) }\
-          .map {|name| @page.repository[name] }\
-          .partition {|page| page.links.size < 2 }
-      nodes.sort_by {|page| page.size / page.links.size } +
+      def ordered_revlinks
+        leaves, nodes = *revlinks()\
+        .select {|name| @page.repository.exist?(name) }\
+        .map {|name| @page.repository[name] }\
+        .partition {|page| page.links.size < 2 }
+        nodes.sort_by {|page| page.size / page.links.size } +
           leaves.sort_by {|page| -page.size }
+      end
     end
-  end
 
 
-  class ViewPage < NamedPage
-    def initialize(config, page)
-      super
-      @revision = nil
-    end
+    class ViewPage < NamedPage
+      def initialize(config, page)
+        super
+        @revision = nil
+      end
 
-    def last_modified
-      mtime()
-    end
+      def last_modified
+        mtime()
+      end
 
-    private
+      private
 
-    def template_id
-      'view'
-    end
+      def template_id
+        'view'
+      end
 
-    def menuitem_top_enabled?()
-      @page.name != FRONT_PAGE_NAME
-    end
+      def menuitem_top_enabled?()
+        @page.title != FRONT_PAGE_NAME
+      end
 
-    def menuitem_help_enabled?()
-      @page.name != HELP_PAGE_NAME
-    end
+      def menuitem_help_enabled?()
+        @page.title != HELP_PAGE_NAME
+      end
 
-    def diff_base_revision
-      revision() || 0
-    end
+      def diff_base_revision
+        revision() || 0
+      end
 
-    def revision
-      @revision ||= @page.revision
-    end
+      def revision
+        @revision ||= @page.revision
+      end
 
-    def body
-      compile_page(@page.source)
+      def body
+        compile_page(@page.source)
+      end
     end
-  end
 
 
-  class ViewRevPage < NamedPage
-    def initialize(config, page, rev)
-      super config, page
-      @revision = rev
-    end
+    class ViewRevPage < NamedPage
+      def initialize(config, page, rev)
+        super config, page
+        @revision = rev
+      end
 
-    def last_modified
-      @page.mtime(@revision)
-    end
+      def last_modified
+        @page.mtime(@revision)
+      end
 
-    private
+      private
 
-    def template_id
-      'viewrev'
-    end
+      def template_id
+        'viewrev'
+      end
 
-    def diff_base_revision
-      revision()
-    end
+      def diff_base_revision
+        revision()
+      end
 
-    def revision
-      @revision
-    end
+      def revision
+        @revision
+      end
 
-    def body
-      compile_page(@page.source(@revision))
+      def body
+        compile_page(@page.source(@revision))
+      end
     end
-  end
 
 
-  class DiffPage < NamedPage
-    def initialize(config, page, rev1, rev2)
-      super config, page
-      @rev1 = rev1
-      @rev2 = rev2
-    end
+    class DiffPage < NamedPage
+      def initialize(config, page, rev1, rev2)
+        super config, page
+        @rev1 = rev1
+        @rev2 = rev2
+      end
 
-    private
+      private
 
-    def template_id
-      'diff'
-    end
+      def template_id
+        'diff'
+      end
 
-    def diff_base_revision
-      rev1()
-    end
+      def diff_base_revision
+        rev1()
+      end
 
-    def rev1
-      @rev1
-    end
+      def rev1
+        @rev1
+      end
 
-    def rev2
-      @rev2
-    end
+      def rev2
+        @rev2
+      end
 
-    def diff
-      @page.diff(@rev1, @rev2)
+      def diff
+        @page.diff(@rev1, @rev2)
+      end
     end
-  end
 
 
-  class GlobalDiffPage < WikiPage
-    def initialize(config, repo, org, reload)
-      super config
-      @repository = repo
-      @origin = org
-      @reload = reload
-    end
+    class GlobalDiffPage < WikiPage
+      def initialize(config, repo, org, reload)
+        super config
+        @repository = repo
+        @origin = org
+        @reload = reload
+      end
 
-    private
+      private
 
-    def template_id
-      'gdiff'
-    end
+      def template_id
+        'gdiff'
+      end
 
-    def origin_time
-      @origin
-    end
+      def origin_time
+        @origin
+      end
 
-    def auto_reload?
-      @reload
-    end
+      def auto_reload?
+        @reload
+      end
 
-    def diffs
-      @repository.diff_from(@origin).sort_by {|diff| -diff.time2.to_i }
+      def diffs
+        @repository.diff_from(@origin).sort_by {|diff| -diff.time2.to_i }
+      end
     end
-  end
 
 
-  class AnnotatePage < NamedPage
-    def initialize(config, page, rev)
-      super config, page
-      @revision = rev
-    end
+    class AnnotatePage < NamedPage
+      def initialize(config, page, rev)
+        super config, page
+        @revision = rev
+      end
 
-    private
+      private
 
-    def template_id
-      'annotate'
-    end
+      def template_id
+        'annotate'
+      end
 
-    def menuitem_annotate_enabled?
-      false
-    end
+      def menuitem_annotate_enabled?
+        false
+      end
 
-    def diff_base_revision
-      @revision || @page.revision
-    end
+      def diff_base_revision
+        @revision || @page.revision
+      end
 
-    def revision
-      @revision
-    end
+      def revision
+        @revision
+      end
 
-    def annotate_revision
-      @revision || @page.revision
-    end
+      def annotate_revision
+        @revision || @page.revision
+      end
 
-    def annotate
-      latest = annotate_revision()
-      @page.annotate(@revision).map {|a|
-        sprintf(%Q[<a href="%s?cmd=view;rev=%d;name=%s">%4d</a>: <span class="new%d">%s</span>\n],
-                @config.cgi_url, a.revision, page_url(), a.revision,
-                latest - a.revision,
-                escape_html(a.line))
-      }
+      def annotate
+        latest = annotate_revision()
+        @page.annotate(@revision).map {|a|
+          sprintf(%Q[<a href="%s?cmd=view;rev=%d;name=%s">%4d</a>: <span class="new%d">%s</span>\n],
+                  @config.cgi_url, a.revision, page_url(), a.revision,
+                  latest - a.revision,
+                  escape_html(a.line))
+        }
+      end
     end
-  end
 
 
-  class HistoryPage < NamedPage
-    def initialize(config, page)
-      super
-      @revision = nil
-    end
+    class HistoryPage < NamedPage
+      def initialize(config, page)
+        super
+        @revision = nil
+      end
 
-    private
+      private
 
-    def template_id
-      'history'
-    end
+      def template_id
+        'history'
+      end
 
-    def menuitem_history_enabled?
-      false
-    end
+      def menuitem_history_enabled?
+        false
+      end
 
-    def diff_base_revision
-      revision() || 0
-    end
+      def diff_base_revision
+        revision() || 0
+      end
 
-    def revision
-      @revision ||= @page.revision
-    end
+      def revision
+        @revision ||= @page.revision
+      end
 
-    def logs
-      @page.logs
+      def logs
+        @page.logs
+      end
     end
-  end
 
 
-  class EditPage < NamedPage
-    def initialize(config, page, text, origrev, reason = nil)
-      super config, page
-      @text = text
-      @original_revision = origrev
-      @invalid_edit_reason = reason
-    end
+    class EditPage < NamedPage
+      def initialize(config, page, text, origrev, reason = nil)
+        super config, page
+        @text = text
+        @original_revision = origrev
+        @invalid_edit_reason = reason
+      end
 
-    private
+      private
 
-    def template_id
-      'edit'
-    end
+      def template_id
+        'edit'
+      end
 
-    def menuitem_edit_enabled?
-      false
-    end
+      def menuitem_edit_enabled?
+        false
+      end
 
-    def diff_base_revision
-      @original_revision || @page.revision || 0
-    end
-    
-    def opt_message
-      return nil unless @invalid_edit_reason
-      @config.locale.text(@invalid_edit_reason)
-    end
+      def diff_base_revision
+        @original_revision || @page.revision || 0
+      end
+      
+      def opt_message
+        return nil unless @invalid_edit_reason
+        @config.locale.text(@invalid_edit_reason)
+      end
 
-    def body
-      @text
-    end
+      def body
+        @text
+      end
 
-    def original_revision
-      @original_revision
+      def original_revision
+        @original_revision
+      end
     end
-  end
 
 
-  class PreviewPage < NamedPage
-    def initialize(config, page, text, origrev)
-      super config, page
-      @text = text
-      @original_revision = origrev
-    end
+    class PreviewPage < NamedPage
+      def initialize(config, page, text, origrev)
+        super config, page
+        @text = text
+        @original_revision = origrev
+      end
 
-    private
+      private
 
-    def template_id
-      'preview'
-    end
+      def template_id
+        'preview'
+      end
 
-    def diff_base_revision
-      @original_revision || @page.revision || 0
-    end
+      def page_title
+        @page.syntax.title(@text) || page_name
+      end
 
-    def original_revision
-      @original_revision
-    end
+      def diff_base_revision
+        @original_revision || @page.revision || 0
+      end
 
-    def body
-      @text
-    end
+      def original_revision
+        @original_revision
+      end
 
-    def compiled_body
-      compile_page(@text)
+      def body
+        @text
+      end
+
+      def compiled_body
+        compile_page(@text)
+      end
     end
-  end
 
 
-  class ThanksPage < WikiPage
-    def initialize(config, page_name)
-      super config
-      @page_name = page_name
-    end
+    class ThanksPage < WikiPage
+      def initialize(config, page_name)
+        super config
+        @page_name = page_name
+      end
 
-    private
+      private
 
-    def template_id
-      'thanks'
-    end
+      def template_id
+        'thanks'
+      end
 
-    def page_view_url
-      # We cannot use ';' here.
-      if @config.html_url?
-      then "#{escape_url(@page_name)}#{@config.document_suffix}"
-      else "#{cgi_url()}?name=#{escape_url(@page_name)}"
+      def page_view_url
+        # We cannot use ';' here.
+        if @config.html_url?
+        then "#{escape_url(@page_name)}#{@config.document_suffix}"
+        else "#{cgi_url()}?name=#{escape_url(@page_name)}"
+        end
       end
     end
-  end
 
 
-  class ListPage < WikiPage
-    def initialize(config, repo)
-      super config
-      @repository = repo
-    end
+    class ListPage < WikiPage
+      def initialize(config, repo)
+        super config
+        @repository = repo
+      end
 
-    private
+      private
 
-    def template_id
-      'list'
-    end
+      def template_id
+        'list'
+      end
 
-    def menuitem_list_enabled?
-      false
-    end
+      def menuitem_list_enabled?
+        false
+      end
 
-    def page_list
-      @repository.page_names.sort_by {|name| name.downcase }
-    end
+      def page_list
+        @repository.page_names_and_titles.sort_by {|name, title| title.downcase }
+      end
 
-    def orphan_page?(name)
-      @repository[name].orphan?
+      def orphan_page?(name)
+        @repository[name].orphan?
+      end
     end
-  end
 
 
-  class RecentPage < WikiPage
-    def initialize(config, repo)
-      super config
-      @repository = repo
-    end
+    class RecentPage < WikiPage
+      def initialize(config, repo)
+        super config
+        @repository = repo
+      end
 
-    def last_modified
-      @repository.last_modified
-    end
+      def last_modified
+        @repository.last_modified
+      end
 
-    private
+      private
 
-    def template_id
-      'recent'
-    end
+      def template_id
+        'recent'
+      end
 
-    def menuitem_recent_enabled?
-      false
-    end
+      def menuitem_recent_enabled?
+        false
+      end
 
-    def page_list
-      @repository.pages.sort_by {|page| -page.mtime.to_i }
+      def page_list
+        @repository.pages.sort_by {|page| -page.mtime.to_i }
+      end
     end
-  end
 
 
-  class SearchResultPage < WikiPage
-    def initialize(config, repo, q, patterns)
-      super config
-      @repository = repo
-      @query_string = q
-      @patterns = patterns
-    end
+    class SearchResultPage < WikiPage
+      def initialize(config, repo, q, patterns)
+        super config
+        @repository = repo
+        @query_string = q
+        @patterns = patterns
+      end
 
-    private
+      private
 
-    def template_id
-      'search_result'
-    end
+      def template_id
+        'search_result'
+      end
 
-    def menuitem_search_enabled?
-      false
-    end
+      def menuitem_search_enabled?
+        false
+      end
 
-    def query_string
-      @config.locale.split_words(@query_string).join(' ')
-    end
+      def query_string
+        @config.locale.split_words(@query_string).join(' ')
+      end
 
-    def matched_pages(&block)
-      title_match, not_match = *@repository.pages\
-          .partition {|page| @patterns.all? {|re| re =~ page.name } }
-      title_match\
-          .sort_by {|page| -page.mtime.to_i }.each(&block)
-      not_match\
-          .select {|page| @patterns.all? {|re| re =~ page.source } }\
-          .sort_by {|page| -page.mtime.to_i }.each(&block)
+      def matched_pages(&block)
+        title_match, not_match = *@repository.pages\
+        .partition {|page| @patterns.all? {|re| re =~ page.title } }
+        title_match\
+        .sort_by {|page| -page.mtime.to_i }.each(&block)
+        not_match\
+        .select {|page| @patterns.all? {|re| re =~ page.source } }\
+        .sort_by {|page| -page.mtime.to_i }.each(&block)
+      end
+
+      def shorten(str)
+        str.slice(/\A.{0,60}/m).delete('[]*').gsub(/\s+/, ' ').strip
+      end
     end
 
-    def shorten(str)
-      str.slice(/\A.{0,60}/m).delete('[]*').gsub(/\s+/, ' ').strip
+
+    class SearchErrorPage < WikiPage
+      def initialize(config, query, err)
+        super config
+        @query = query
+        @error = err
+      end
+
+      private
+
+      def template_id
+        'search_error'
+      end
+
+      def menuitem_search_enabled?
+        false
+      end
+
+      def error_message
+        @error.message
+      end
+
+      def query_string
+        [@query].flatten.join(' ')
+      end
     end
-  end
+    
+  end # module TextHtmlPage
 
 
-  class SearchErrorPage < WikiPage
-    def initialize(config, query, err)
-      super config
-      @query = query
-      @error = err
+  
+  module TextPlainPage
+    class RtxtPage < Page
+      include ErbUtils
+      include TextUtils
+
+      def initialize(config)
+        @config = config
+        @metainfo = nil
+      end
+
+      attr_reader :metainfo
+      
+      def content
+        run_erb(@config.templatedir, template_id(), 'txt')
+      end
+
+      def type
+        'text/plain'
+      end
+
+      def charset
+        @config.locale.charset
+      end
+
+      def last_modified
+        nil
+      end
     end
 
-    private
+    
+    class ListPage < RtxtPage
+      def initialize(config, repo)
+        super config
+        @repository = repo
+      end
 
-    def template_id
-      'search_error'
+      private
+
+      def template_id
+        'list'
+      end
+
+      def page_list
+        @repository.page_names_and_titles.sort_by {|name, title| name }
+      end
+      
+      def name_width
+        16
+      end
     end
 
-    def menuitem_search_enabled?
-      false
+    
+    class RecentPage < RtxtPage
+      def initialize(config, repo)
+        super config
+        @repository = repo
+      end
+
+      def last_modified
+        @repository.last_modified
+      end
+
+      private
+
+      def template_id
+        'recent'
+      end
+
+      def page_list
+        @repository.pages.sort_by {|page| -page.mtime.to_i }
+      end
+
+      def name_width
+        16
+      end
     end
 
-    def error_message
-      @error.message
+    
+    class SearchResultPage < RtxtPage
+      def initialize(config, repo, q, patterns)
+        super config
+        @repository = repo
+        @query_string = q
+        @patterns = patterns
+      end
+
+      private
+
+      def template_id
+        'search_result'
+      end
+
+      def query_string
+        @config.locale.split_words(@query_string).join(' ')
+      end
+
+      def matched_pages(&block)
+        title_match, not_match = *@repository.pages\
+        .partition {|page| @patterns.all? {|re| re =~ page.title } }
+        title_match\
+        .sort_by {|page| -page.mtime.to_i }.each(&block)
+        not_match\
+        .select {|page| @patterns.all? {|re| re =~ page.source } }\
+        .sort_by {|page| -page.mtime.to_i }.each(&block)
+      end
+
+      def shorten(str)
+        str.slice(/\A.{0,60}/m).delete('[]*').gsub(/\s+/, ' ').strip
+      end
+
+      def name_width
+        16
+      end
     end
 
-    def query_string
-      [@query].flatten.join(' ')
+    
+    class SearchErrorPage < RtxtPage
+      def initialize(config, query, err)
+        super config
+        @query = query
+        @error = err
+      end
+
+      private
+
+      def template_id
+        'search_error'
+      end
+
+      def error_message
+        @error.message
+      end
+
+      def query_string
+        [@query].flatten.join(' ')
+      end
     end
-  end
+    
+  end # module RtxtPage
+  
 
-
-  class TextPage < Page
-    def initialize(locale, text, lm)
+  class SrcPage < Page
+    def initialize(locale, text, lm, metainfo = nil)
       @locale = locale
       @content = text
       @last_modified = lm
+      @metainfo = metainfo
     end
 
     attr_reader :content
     attr_reader :last_modified
-
+    attr_reader :metainfo
+    
     def type
       'text/plain'
     end
Index: template/txt/recent.rtxt
===================================================================
--- template/txt/recent.rtxt	(.../vendor)	(revision 0)
+++ template/txt/recent.rtxt	(.../trunk)	(revision 58)
@@ -0,0 +1,4 @@
+<%  page_list().each do |page|  %>
+<%= page.name.ljust(name_width) %> | <%= format_time(page.mtime) %>
+
+<%  end  %>
Index: template/txt/search_result.rtxt
===================================================================
--- template/txt/search_result.rtxt	(.../vendor)	(revision 0)
+++ template/txt/search_result.rtxt	(.../trunk)	(revision 58)
@@ -0,0 +1,4 @@
+<% matched_pages do |page| %>
+<%=  page.name.ljust(name_width) %> | <%= shorten(page.source) %>
+
+<% end %>
Index: template/txt/list.rtxt
===================================================================
--- template/txt/list.rtxt	(.../vendor)	(revision 0)
+++ template/txt/list.rtxt	(.../trunk)	(revision 58)
@@ -0,0 +1,4 @@
+<%  page_list().each do |name, title|  %>
+<%=  name.ljust(name_width) %> | <%= title %>
+
+<% end %>
Index: template/txt/search_error.rtxt
===================================================================
--- template/txt/search_error.rtxt	(.../vendor)	(revision 0)
+++ template/txt/search_error.rtxt	(.../trunk)	(revision 58)
@@ -0,0 +1,2 @@
+!!!Search Error!!!
+<%= error_message %>
Index: template/html/revlinks.rhtml
===================================================================
--- template/html/revlinks.rhtml	(.../vendor)	(revision 0)
+++ template/html/revlinks.rhtml	(.../trunk)	(revision 58)
@@ -0,0 +1,11 @@
+<div class="revlinks">
+<p>Related Pages:
+<%
+    show_max = 10
+    ordered_revlinks()[0, show_max].each do |page|
+%><a href="<%= view_url(page.name) %>"><%= escape_html(page.repository.name2title(page.name)) %></a>
+<%
+    end
+%>
+</p>
+</div>
Index: template/html/farmthanks.rhtml
===================================================================
--- template/html/farmthanks.rhtml	(.../vendor)	(revision 0)
+++ template/html/farmthanks.rhtml	(.../trunk)	(revision 58)
@@ -0,0 +1,32 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html lang="ja-JP">
+<head>
+  <meta http-equiv="Content-Type" content="text/html; charset=<%= charset() %>">
+  <meta http-equiv="Content-Language" content="ja-JP">
+  <link rel="stylesheet" type="text/css" href="farm.css">
+  <title>Node Created</title>
+</head>
+<body>
+
+<h1>Node Created</h1>
+<p>
+Node `<%= id() %>' created.
+</p>
+<dl>
+<dt>ID</dt>    <dd><%= id() %></dd>
+<dt>Name</dt>  <dd><%= node().name %></dd>
+<dt>Theme</dt> <dd><%= node().theme %></dd>
+</dl>
+
+<p>
+Click following hyperlink and construct your wiki site...
+</p>
+<ul>
+<li><a href="<%= node_url(id()) %>"><%= node_url(id()) %></a></li>
+</ul>
+</ul>
+
+.include systeminfo
+
+</body>
+</html>
Index: template/html/systeminfo.rhtml
===================================================================
--- template/html/systeminfo.rhtml	(.../vendor)	(revision 0)
+++ template/html/systeminfo.rhtml	(.../trunk)	(revision 58)
@@ -0,0 +1 @@
+<p class="systeminfo">system revision 1.142</p>
Index: template/html/history.rhtml
===================================================================
--- template/html/history.rhtml	(.../vendor)	(revision 0)
+++ template/html/history.rhtml	(.../trunk)	(revision 58)
@@ -0,0 +1,39 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html lang="ja-JP">
+<head>
+  <meta http-equiv="Content-Type" content="text/html; charset=<%= page_charset() %>">
+  <meta http-equiv="Content-Language" content="ja-JP">
+  <meta name="robots" content="noindex,nofollow">
+  <link rel="stylesheet" type="text/css" href="<%= css_url() %>">
+  <title><%= page_title() %> : History</title>
+</head>
+<body>
+
+.include menu
+
+<h1><%= logo_url() %><%= page_title() %> : History</h1>
+<ul>
+<%
+    logs().sort_by {|log| -log.revision }.each do |log| %>
+<li>
+<%= format_time(log.date) %>:
+<% unless log.killed? %>
+<a href="<%= cgi_url() %>?cmd=view;rev=<%= log.revision %>;name=<%= page_url() %>">revision <%= log.revision %></a>
+<% else %>
+revision <%= log.revision %>
+<% end %>
+(-<%= log.n_removed %> +<%= log.n_added %></a>)
+<% if log.revision > 1 and not log.killed? %>
+<a href="<%= cgi_url() %>?cmd=diff;rev1=<%= log.revision-1 %>;rev2=<%= log.revision %>;name=<%= page_url() %>">[diff]</a>
+<a href="<%= cgi_url() %>?cmd=annotate;rev=<%= log.revision %>;name=<%= page_url() %>">[annotate]</a>
+<% end %>
+<% if log.killed? %>removed<% end %>
+</li>
+<%  end
+%>
+</ul>
+
+.include systeminfo
+
+</body>
+</html>
Index: template/html/search_result.rhtml
===================================================================
--- template/html/search_result.rhtml	(.../vendor)	(revision 0)
+++ template/html/search_result.rhtml	(.../trunk)	(revision 58)
@@ -0,0 +1,37 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html lang="ja-JP">
+<head>
+  <meta http-equiv="Content-Type" content="text/html; charset=<%= page_charset() %>">
+  <meta http-equiv="Content-Language" content="ja-JP">
+  <meta name="robots" content="noindex,nofollow">
+  <link rel="stylesheet" type="text/css" href="<%= css_url() %>">
+  <title>Search Result</title>
+</head>
+<body>
+
+.include menu
+
+<h1><%= logo_url() %>Search Result</h1>
+
+.include search_form
+<ol>
+<%
+    n_hits = 0
+    matched_pages do |page|
+%>
+<li><a href="<%= view_url(page.name) %>"><%= escape_html(page.title) %></a> <%= escape_html(shorten(page.source)) %></li>
+<%
+      n_hits += 1
+    end
+%>
+</ol>
+<p><%= n_hits %> hits.</p>
+
+<%  if n_hits > 0  %>
+.include search_form
+<%  end  %>
+
+.include systeminfo
+
+</body>
+</html>
Index: template/html/menu.rhtml
===================================================================
--- template/html/menu.rhtml	(.../vendor)	(revision 0)
+++ template/html/menu.rhtml	(.../trunk)	(revision 58)
@@ -0,0 +1,72 @@
+<div class="menu">
+<%  if menuitem_search_enabled?  %>
+<form method="post" action="<%= cgi_url() %>">
+<%  else  %>
+<p>
+<%  end  %>
+<span class="menuitem">
+<%  if menuitem_edit_enabled?  %>
+<a href="<%= cgi_url() %>?cmd=edit;name=<%= page_url() %>">Edit</a>
+<%  else  %>
+Edit
+<%  end  %>
+</span>
+<span class="menuitem">
+<%  if menuitem_diff_enabled?  %>
+<a href="<%= cgi_url() %>?cmd=diff;rev1=<%= diff_base_revision() - 1 %>;rev2=<%= diff_base_revision() %>;name=<%= page_url() %>">Diff</a>
+<%  else  %>
+Diff
+<%  end  %>
+</span>
+<span class="menuitem">
+<%  if menuitem_annotate_enabled?  %>
+<a href="<%= cgi_url() %>?cmd=annotate;name=<%= page_url() %>">Annotate</a>
+<%  else  %>
+Annotate
+<%  end  %>
+</span>
+<span class="menuitem">
+<%  if menuitem_history_enabled?  %>
+<a href="<%= cgi_url() %>?cmd=history;name=<%= page_url() %>">History</a>
+<%  else  %>
+History
+<%  end  %>
+</span>
+<span class="menuseparator"> </span>
+<span class="menuitem">
+<%  if menuitem_recent_enabled?  %>
+<a href="<%= cgi_url() %>?cmd=recent">Recent</a>
+<%  else  %>
+Recent
+<%  end  %>
+</span>
+<span class="menuitem">
+<%  if menuitem_list_enabled?  %>
+<a href="<%= cgi_url() %>?cmd=list">List</a>
+<%  else  %>
+List
+<%  end  %>
+</span>
+<span class="menuitem">
+<%  if menuitem_top_enabled?  %>
+<a href="<%= index_page_url() %>">Top</a>
+<%  else  %>
+Top
+<%  end  %>
+</span>
+<span class="menuitem">
+<%  if menuitem_help_enabled?  %>
+<a href="<%= help_page_url() %>">Help</a>
+<%  else  %>
+Help
+<%  end  %>
+</span>
+<%  if menuitem_search_enabled?  %>
+<input type="hidden" name="cmd" value="search">
+<input type="text" name="q" size="9" value="">
+<input type="submit" value="Search">
+</form>
+<%  else  %>
+</p>
+<%  end  %>
+</div>
Index: template/html/diff.rhtml
===================================================================
--- template/html/diff.rhtml	(.../vendor)	(revision 0)
+++ template/html/diff.rhtml	(.../trunk)	(revision 58)
@@ -0,0 +1,51 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html lang="ja-JP">
+<head>
+  <meta http-equiv="Content-Type" content="text/html; charset=<%= page_charset() %>">
+  <meta http-equiv="Content-Language" content="ja-JP">
+  <meta name="robots" content="noindex,nofollow">
+  <link rel="stylesheet" type="text/css" href="<%= css_url() %>">
+  <title><%= page_title() %> : Diff</title>
+</head>
+<body>
+
+.include menu
+
+<h1><%= logo_url() %><%= page_title() %> : Diff rev <%= rev1() %> &lt;=&gt; rev <%= rev2() %></h1>
+
+<p class="revnavi">
+[<%  if rev1() > 1  %>
+<a href="<%= cgi_url() %>?cmd=view;rev=<%= rev1() - 1 %>;name=<%= page_url() %>">rev<%= rev1() - 1 %></a>
+<a href="<%= cgi_url() %>?cmd=diff;rev1=<%= rev1() - 1 %>;rev2=<%= rev1() %>;name=<%= page_url() %>">&lt;=&gt;</a>
+<%  else  %>
+[rev0 &lt;=&gt;
+<%  end
+%>
+<a href="<%= cgi_url() %>?cmd=view;rev=<%= rev1() %>;name=<%= page_url() %>">rev <%= rev1() %></a>
+&lt;=&gt;
+<a href="<%= cgi_url() %>?cmd=view;rev=<%= rev2() %>;name=<%= page_url() %>">rev <%= rev2() %></a>
+<a href="<%= page_view_url() %>">&gt;&gt;HEAD</a>]
+</p>
+
+<% log = diff() %>
+<p>
+<span class="removedline">--- rev<%= log.rev1 %>  <%= format_time(log.time1) %></span><br>
+<span class="addedline">+++ rev<%= log.rev2 %>  <%= format_time(log.time2) %></span>
+</p>
+<pre class="diff"><%=
+  log.diff.map {|line|
+    case line
+    when /\A-/
+      %Q[<span class="removedline">#{escape_html(line.rstrip)}</span>\n]
+    when /\A\+/
+      %Q[<span class="addedline">#{escape_html(line.rstrip)}</span>\n]
+    else
+      escape_html(line)
+    end
+  }.join('')
+%></pre>
+
+.include systeminfo
+
+</body>
+</html>
Index: template/html/annotate.rhtml
===================================================================
--- template/html/annotate.rhtml	(.../vendor)	(revision 0)
+++ template/html/annotate.rhtml	(.../trunk)	(revision 58)
@@ -0,0 +1,34 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html lang="ja-JP">
+<head>
+  <meta http-equiv="Content-Type" content="text/html; charset=<%= page_charset() %>">
+  <meta http-equiv="Content-Language" content="ja-JP">
+  <meta name="robots" content="noindex,nofollow">
+  <link rel="stylesheet" type="text/css" href="<%= css_url() %>">
+  <title><%= page_title() %> : Annotate</title>
+</head>
+<body>
+
+.include menu
+
+<h1><%= logo_url() %><%= page_title() %> : Annotate<%= (revision() ? " rev #{revision()}" : '') %></h1>
+
+<p class="revnavi">[<a href="<%= page_view_url() %>">&gt;&gt;HEAD</a>]</p>
+
+<p class="colorbar">
+Latest Revisions:
+<% latest = annotate_revision() %>
+<% if latest > 4 %><span class="new4">rev<%= latest-4 %></span> <% end %>
+<% if latest > 3 %><span class="new3">rev<%= latest-3 %></span> <% end %>
+<% if latest > 2 %><span class="new2">rev<%= latest-2 %></span> <% end %>
+<% if latest > 1 %><span class="new1">rev<%= latest-1 %></span> <% end %>
+<% if latest > 0 %><span class="new0">rev<%= latest-0 %></span><% end %>
+</p>
+<pre class="annotate">
+<%= annotate() %>
+</pre>
+
+.include systeminfo
+
+</body>
+</html>
Index: template/html/view.rhtml
===================================================================
--- template/html/view.rhtml	(.../vendor)	(revision 0)
+++ template/html/view.rhtml	(.../trunk)	(revision 58)
@@ -0,0 +1,26 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html lang="ja-JP">
+<head>
+  <meta http-equiv="Content-Type" content="text/html; charset=<%= page_charset() %>">
+  <meta http-equiv="Content-Language" content="ja-JP">
+  <link rel="stylesheet" type="text/css" href="<%= css_url() %>">
+  <title><%= front_page?() ? site_name() : page_title() %></title>
+</head>
+<body>
+
+.include menu
+
+<h1><%= logo_url() %><%= front_page?() ? site_name() : page_title() %></h1>
+<p>
+<span class="lastmodified"><%= format_time(last_modified()) %></span>
+(<%= times_before(last_modified()) %>);
+rev <%= revision() %>
+</p>
+<%= body() %>
+
+<hr>
+.include revlinks
+.include systeminfo
+
+</body>
+</html>
Index: template/html/list.rhtml
===================================================================
--- template/html/list.rhtml	(.../vendor)	(revision 0)
+++ template/html/list.rhtml	(.../trunk)	(revision 58)
@@ -0,0 +1,25 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html lang="ja-JP">
+<head>
+  <meta http-equiv="Content-Type" content="text/html; charset=<%= page_charset() %>">
+  <meta http-equiv="Content-Language" content="ja-JP">
+  <meta name="robots" content="noindex,nofollow">
+  <link rel="stylesheet" type="text/css" href="<%= css_url() %>">
+  <title>List</title>
+</head>
+<body>
+
+.include menu
+
+<h1><%= logo_url() %>List of All Pages</h1>
+<ol>
+<%  page_list().each do |name, title|  %>
+<li><a href="<%= view_url(name) %>"><%= escape_html(title) %></a>
+    <%  if orphan_page?(name)  %>[orphan]<%  end  %></li>
+<%  end  %>
+</ol>
+
+.include systeminfo
+
+</body>
+</html>
Index: template/html/search_error.rhtml
===================================================================
--- template/html/search_error.rhtml	(.../vendor)	(revision 0)
+++ template/html/search_error.rhtml	(.../trunk)	(revision 58)
@@ -0,0 +1,23 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html lang="ja-JP">
+<head>
+  <meta http-equiv="Content-Type" content="text/html; charset=<%= page_charset() %>">
+  <meta http-equiv="Content-Language" content="ja-JP">
+  <meta name="robots" content="noindex,nofollow">
+  <link rel="stylesheet" type="text/css" href="<%= css_url() %>">
+  <title>Search Error</title>
+</head>
+<body>
+
+.include menu
+
+<h1><%= logo_url() %>Search Error</h1>
+<p>
+<%= escape_html(error_message()) %>
+</p>
+.include search_form
+
+.include systeminfo
+
+</body>
+</html>
Index: template/html/gdiff.rhtml
===================================================================
--- template/html/gdiff.rhtml	(.../vendor)	(revision 0)
+++ template/html/gdiff.rhtml	(.../trunk)	(revision 58)
@@ -0,0 +1,55 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html lang="ja-JP">
+<head>
+  <meta http-equiv="Content-Type" content="text/html; charset=<%= page_charset() %>">
+  <meta http-equiv="Content-Language" content="ja-JP">
+  <% if auto_reload? %><meta http-equiv="refresh" content="3600; url=<%= cgi_url() %>?cmd=gdiff&amp;org=cookie&amp;reload=on"><% end %>
+  <meta name="robots" content="noindex,nofollow">
+  <link rel="stylesheet" type="text/css" href="<%= css_url() %>">
+  <title>Diff from <%= format_time(origin_time()) %></title>
+</head>
+<body>
+
+.include menu
+
+<h1><%= logo_url() %>Diff from <%= format_time(origin_time()) %></h1>
+
+<p><a href="<%= cgi_url() %>?cmd=gdiff;org=cookie">[Diff from my last visit]</a></p>
+
+<% diffs().each do |log| %>
+<h2><a href="<%= view_url(log.page_name) %>"><%= escape_html(@repository.name2title(log.page_name)) %></a></h2>
+<p class="minimenu">
+<a href="<%= cgi_url() %>?cmd=edit;name=<%= escape_html(log.page_name) %>">[edit]</a>
+<% if log.rev2 > 1 %>
+<a href="<%= cgi_url() %>?cmd=diff;rev1=<%= log.rev2 - 1 %>;rev2=<%= log.rev2 %>;name=<%= escape_html(log.page_name) %>">[diff]</a>
+<% else %>
+[diff]
+<% end %>
+<a href="<%= cgi_url() %>?cmd=annotate;name=<%= escape_html(log.page_name) %>">[ann]</a>
+<a href="<%= cgi_url() %>?cmd=history;name=<%= escape_html(log.page_name) %>">[hist]</a>
+</p>
+<p>
+<span class="removedline">--- rev<%= log.rev1 %>  <%= format_time(log.time1) %></span><br>
+<span class="addedline">+++ rev<%= log.rev2 %>  <%= format_time(log.time2) %></span>
+</p>
+<pre class="diff"><%=
+  log.diff.map {|line|
+    case line
+    when /\A\-/
+      %Q[<span class="removedline">#{escape_html(line.rstrip)}</span>\n]
+    when /\A\+/
+      %Q[<span class="addedline">#{escape_html(line.rstrip)}</span>\n]
+    else
+      escape_html(line)
+    end
+  }.join('')
+%></pre>
+<% end %>
+<% unless auto_reload? %>
+<p><a href="<%= cgi_url() %>?cmd=gdiff;org=cookie;reload=on">[Turn on auto reload]</a></p>
+<% end %>
+
+.include systeminfo
+
+</body>
+</html>
Index: template/html/recent.rhtml
===================================================================
--- template/html/recent.rhtml	(.../vendor)	(revision 0)
+++ template/html/recent.rhtml	(.../trunk)	(revision 58)
@@ -0,0 +1,25 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html lang="ja-JP">
+<head>
+  <meta http-equiv="Content-Type" content="text/html; charset=<%= page_charset() %>">
+  <meta http-equiv="Content-Language" content="ja-JP">
+  <meta name="robots" content="noindex,nofollow">
+  <link rel="stylesheet" type="text/css" href="<%= css_url() %>">
+  <title>Recent Edit</title>
+</head>
+<body>
+
+.include menu
+
+<h1><%= logo_url() %>Recent Edit</h1>
+<p><a href="<%= cgi_url() %>?cmd=gdiff;org=cookie">[Diff from my last visit]</a></p>
+<ol>
+<%  page_list().each do |page|  %>
+<li><%= format_time(page.mtime) %>: <a href="<%= view_url(page.name) %>"><%= escape_html(page.title) %></a></li>
+<%  end  %>
+</ol>
+
+.include systeminfo
+
+</body>
+</html>
Index: template/html/preview.rhtml
===================================================================
--- template/html/preview.rhtml	(.../vendor)	(revision 0)
+++ template/html/preview.rhtml	(.../trunk)	(revision 58)
@@ -0,0 +1,39 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html lang="ja-JP">
+<head>
+  <meta http-equiv="Content-Type" content="text/html; charset=<%= page_charset() %>">
+  <meta http-equiv="Content-Language" content="ja-JP">
+  <meta name="robots" content="noindex,nofollow">
+  <link rel="stylesheet" type="text/css" href="<%= css_url() %>">
+  <title><%= page_title() %> : Preview</title>
+</head>
+<body>
+
+.include menu
+
+<p>
+<span class="previewmark">Preview</span>
+</p>
+
+<h1><%= logo_url() %><%= page_title() %></h1>
+
+<%= compiled_body() %>
+
+<hr>
+<form method="POST" action="<%= cgi_url() %>">
+<input type="hidden" name="cmd" value="save">
+<input type="hidden" name="name" value="<%= page_name() %>">
+<%
+    if original_revision()  %>
+<input type="hidden" name="origrev" value="<%= original_revision() %>">
+<%  end
+%>
+<textarea class="edit" name="text" cols="70" rows="30"><%= escape_html(body()) %></textarea><br>
+<input type="submit" name="preview" value="Preview">
+<input type="submit" id="okbutton" value="Save">
+</form>
+
+.include systeminfo
+
+</body>
+</html>
Index: template/html/farm.rhtml
===================================================================
--- template/html/farm.rhtml	(.../vendor)	(revision 0)
+++ template/html/farm.rhtml	(.../trunk)	(revision 58)
@@ -0,0 +1,38 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html lang="ja-JP">
+<head>
+  <meta http-equiv="Content-Type" content="text/html; charset=<%= charset() %>">
+  <meta http-equiv="Content-Language" content="ja-JP">
+  <link rel="stylesheet" type="text/css" href="<%= css_url() %>">
+  <title>BitChannelFarm</title>
+</head>
+<body>
+
+<h1>BitChannelFarm</h1>
+
+<h2>Current Nodes</h2>
+<ul>
+<% node_ids().sort_by {|id| mtime(id).to_i }.reverse_each do |id| %>
+<li><a href="<%= node_url(id) %>"><%= id %></a>: <%= name(id) %></li>
+<% end %>
+</ul>
+
+<h2>New Node</h2>
+<form method="POST" action="<%= farm_url() %>">
+<p>
+ID: <input type="text" name="id" value="" size="10"><br>
+Name: <input type="text" name="name" value="" size="35"><br>
+Theme:
+</p>
+<ul>
+<% themes().each do |theme| %>
+<li><input type="radio" name="theme" value="<%= theme %>"<%= theme == 'default' ? " checked" : '' %>> <%= theme %></li>
+<% end %>
+</ul>
+<input type="submit" name="create" value="Create">
+</form>
+
+.include systeminfo
+
+</body>
+</html>
Index: template/html/edit.rhtml
===================================================================
--- template/html/edit.rhtml	(.../vendor)	(revision 0)
+++ template/html/edit.rhtml	(.../trunk)	(revision 58)
@@ -0,0 +1,40 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html lang="ja-JP">
+<head>
+  <meta http-equiv="Content-Type" content="text/html; charset=<%= page_charset() %>">
+  <meta http-equiv="Content-Language" content="ja-JP">
+  <meta name="robots" content="noindex,nofollow">
+  <link rel="stylesheet" type="text/css" href="<%= css_url() %>">
+  <title><%= page_title() %> : Edit</title>
+</head>
+<body>
+
+.include menu
+
+<h1><%= logo_url() %><%= page_name() %> : Edit</h1>
+<%
+    if opt_message()  %>
+<p><%= escape_html(opt_message()) %></p>
+<%  end
+%>
+<p>
+Current revision: <%= original_revision() || '(new page)' %><br>
+Edit started at: <%= format_time(Time.now) %>
+</p>
+<form method="POST" action="<%= cgi_url() %>">
+<input type="hidden" name="cmd" value="save">
+<input type="hidden" name="name" value="<%= page_name() %>">
+<%
+    if original_revision()  %>
+<input type="hidden" name="origrev" value="<%= original_revision() %>">
+<%  end
+%>
+<textarea class="edit" name="text" cols="70" rows="30"><%= escape_html(body()) %></textarea><br>
+<input type="submit" name="preview" value="Preview">
+<input type="submit" id="okbutton" value="Save">
+</form>
+
+.include systeminfo
+
+</body>
+</html>
Index: template/html/viewrev.rhtml
===================================================================
--- template/html/viewrev.rhtml	(.../vendor)	(revision 0)
+++ template/html/viewrev.rhtml	(.../trunk)	(revision 58)
@@ -0,0 +1,36 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html lang="ja-JP">
+<head>
+  <meta http-equiv="Content-Type" content="text/html; charset=<%= page_charset() %>">
+  <meta http-equiv="Content-Language" content="ja-JP">
+  <meta name="robots" content="noindex,nofollow">
+  <link rel="stylesheet" type="text/css" href="<%= css_url() %>">
+  <title><%= page_title() %> rev 1.<%= revision() %></title>
+</head>
+<body>
+
+.include menu
+
+<h1><%= logo_url() %><%= page_title() %> rev <%= revision() %></h1>
+
+<p><span class="lastmodified">Saved at: <%= format_time(last_modified()) %></span></p>
+
+<p><a href="<%= cgi_url() %>?cmd=edit;rev=<%= revision() %>;name=<%= page_url() %>">Revert to this revision</a></p>
+
+<p class="revnavi">
+<%  if revision() > 1  %>
+[<a href="<%= cgi_url() %>?cmd=view;rev=<%= revision() - 1 %>;name=<%= page_url() %>">rev<%= revision() - 1 %></a>
+<a href="<%= cgi_url() %>?cmd=diff;rev1=<%= revision() - 1 %>;rev2=<%= revision() %>;name=<%= page_url() %>">&lt;=&gt;</a>
+<%  else  %>
+[rev0 &lt;=&gt;
+<%  end  %>
+rev<%= revision() %>
+<a href="<%= page_view_url() %>">&gt;&gt;HEAD</a>]
+</p>
+
+<%= body() %>
+
+.include systeminfo
+
+</body>
+</html>
Index: template/html/search_form.rhtml
===================================================================
--- template/html/search_form.rhtml	(.../vendor)	(revision 0)
+++ template/html/search_form.rhtml	(.../trunk)	(revision 58)
@@ -0,0 +1,5 @@
+<form method="post" action="<%= cgi_url() %>">
+<input type="hidden" name="cmd" value="search">
+<input type="text" name="q" size="20" value="<%= escape_html(query_string()) %>">
+<input type="submit" value="Search">
+</form>
Index: template/html/thanks.rhtml
===================================================================
--- template/html/thanks.rhtml	(.../vendor)	(revision 0)
+++ template/html/thanks.rhtml	(.../trunk)	(revision 58)
@@ -0,0 +1,13 @@
+<html>
+<head>
+  <meta http-equiv="refresh" content="1;url=<%= page_view_url() %>">
+  <meta name="robots" content="noindex,nofollow">
+  <title>Moving...</title>
+</head>
+<body>
+<p>
+Thank you for your edit.
+Wait or <a href="<%= page_view_url() %>">click here</a>, please.
+</p>
+</body>
+</html>
Index: template/revlinks.rhtml
===================================================================
--- template/revlinks.rhtml	(.../vendor)	(revision 58)
+++ template/revlinks.rhtml	(.../trunk)	(revision 58)
@@ -1,11 +0,0 @@
-<div class="revlinks">
-<p>Related Pages:
-<%
-    show_max = 10
-    ordered_revlinks()[0, show_max].each do |page|
-%><a href="<%= view_url(page.name) %>"><%= escape_html(page.name) %></a>
-<%
-    end
-%>
-</p>
-</div>
Index: template/farmthanks.rhtml
===================================================================
--- template/farmthanks.rhtml	(.../vendor)	(revision 58)
+++ template/farmthanks.rhtml	(.../trunk)	(revision 58)
@@ -1,32 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
-<html lang="ja-JP">
-<head>
-  <meta http-equiv="Content-Type" content="text/html; charset=<%= charset() %>">
-  <meta http-equiv="Content-Language" content="ja-JP">
-  <link rel="stylesheet" type="text/css" href="farm.css">
-  <title>Node Created</title>
-</head>
-<body>
-
-<h1>Node Created</h1>
-<p>
-Node `<%= id() %>' created.
-</p>
-<dl>
-<dt>ID</dt>    <dd><%= id() %></dd>
-<dt>Name</dt>  <dd><%= node().name %></dd>
-<dt>Theme</dt> <dd><%= node().theme %></dd>
-</dl>
-
-<p>
-Click following hyperlink and construct your wiki site...
-</p>
-<ul>
-<li><a href="<%= node_url(id()) %>"><%= node_url(id()) %></a></li>
-</ul>
-</ul>
-
-.include systeminfo
-
-</body>
-</html>
Index: template/systeminfo.rhtml
===================================================================
--- template/systeminfo.rhtml	(.../vendor)	(revision 58)
+++ template/systeminfo.rhtml	(.../trunk)	(revision 58)
@@ -1 +0,0 @@
-<p class="systeminfo">system revision 1.142</p>
Index: template/history.rhtml
===================================================================
--- template/history.rhtml	(.../vendor)	(revision 58)
+++ template/history.rhtml	(.../trunk)	(revision 58)
@@ -1,39 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
-<html lang="ja-JP">
-<head>
-  <meta http-equiv="Content-Type" content="text/html; charset=<%= page_charset() %>">
-  <meta http-equiv="Content-Language" content="ja-JP">
-  <meta name="robots" content="noindex,nofollow">
-  <link rel="stylesheet" type="text/css" href="<%= css_url() %>">
-  <title><%= page_name() %> : History</title>
-</head>
-<body>
-
-.include menu
-
-<h1><%= logo_url() %><%= page_name() %> : History</h1>
-<ul>
-<%
-    logs().sort_by {|log| -log.revision }.each do |log| %>
-<li>
-<%= format_time(log.date) %>:
-<% unless log.killed? %>
-<a href="<%= cgi_url() %>?cmd=view;rev=<%= log.revision %>;name=<%= page_url() %>">revision <%= log.revision %></a>
-<% else %>
-revision <%= log.revision %>
-<% end %>
-(-<%= log.n_removed %> +<%= log.n_added %></a>)
-<% if log.revision > 1 and not log.killed? %>
-<a href="<%= cgi_url() %>?cmd=diff;rev1=<%= log.revision-1 %>;rev2=<%= log.revision %>;name=<%= page_url() %>">[diff]</a>
-<a href="<%= cgi_url() %>?cmd=annotate;rev=<%= log.revision %>;name=<%= page_url() %>">[annotate]</a>
-<% end %>
-<% if log.killed? %>removed<% end %>
-</li>
-<%  end
-%>
-</ul>
-
-.include systeminfo
-
-</body>
-</html>
Index: template/search_result.rhtml
===================================================================
--- template/search_result.rhtml	(.../vendor)	(revision 58)
+++ template/search_result.rhtml	(.../trunk)	(revision 58)
@@ -1,37 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
-<html lang="ja-JP">
-<head>
-  <meta http-equiv="Content-Type" content="text/html; charset=<%= page_charset() %>">
-  <meta http-equiv="Content-Language" content="ja-JP">
-  <meta name="robots" content="noindex,nofollow">
-  <link rel="stylesheet" type="text/css" href="<%= css_url() %>">
-  <title>Search Result</title>
-</head>
-<body>
-
-.include menu
-
-<h1><%= logo_url() %>Search Result</h1>
-
-.include search_form
-<ol>
-<%
-    n_hits = 0
-    matched_pages do |page|
-%>
-<li><a href="<%= view_url(page.name) %>"><%= escape_html(page.name) %></a> <%= escape_html(shorten(page.source)) %></li>
-<%
-      n_hits += 1
-    end
-%>
-</ol>
-<p><%= n_hits %> hits.</p>
-
-<%  if n_hits > 0  %>
-.include search_form
-<%  end  %>
-
-.include systeminfo
-
-</body>
-</html>
Index: template/menu.rhtml
===================================================================
--- template/menu.rhtml	(.../vendor)	(revision 58)
+++ template/menu.rhtml	(.../trunk)	(revision 58)
@@ -1,72 +0,0 @@
-<div class="menu">
-<%  if menuitem_search_enabled?  %>
-<form method="post" action="<%= cgi_url() %>">
-<%  else  %>
-<p>
-<%  end  %>
-<span class="menuitem">
-<%  if menuitem_edit_enabled?  %>
-<a href="<%= cgi_url() %>?cmd=edit;name=<%= page_url() %>">Edit</a>
-<%  else  %>
-Edit
-<%  end  %>
-</span>
-<span class="menuitem">
-<%  if menuitem_diff_enabled?  %>
-<a href="<%= cgi_url() %>?cmd=diff;rev1=<%= diff_base_revision() - 1 %>;rev2=<%= diff_base_revision() %>;name=<%= page_url() %>">Diff</a>
-<%  else  %>
-Diff
-<%  end  %>
-</span>
-<span class="menuitem">
-<%  if menuitem_annotate_enabled?  %>
-<a href="<%= cgi_url() %>?cmd=annotate;name=<%= page_url() %>">Annotate</a>
-<%  else  %>
-Annotate
-<%  end  %>
-</span>
-<span class="menuitem">
-<%  if menuitem_history_enabled?  %>
-<a href="<%= cgi_url() %>?cmd=history;name=<%= page_url() %>">History</a>
-<%  else  %>
-History
-<%  end  %>
-</span>
-<span class="menuseparator"> </span>
-<span class="menuitem">
-<%  if menuitem_recent_enabled?  %>
-<a href="<%= cgi_url() %>?cmd=recent">Recent</a>
-<%  else  %>
-Recent
-<%  end  %>
-</span>
-<span class="menuitem">
-<%  if menuitem_list_enabled?  %>
-<a href="<%= cgi_url() %>?cmd=list">List</a>
-<%  else  %>
-List
-<%  end  %>
-</span>
-<span class="menuitem">
-<%  if menuitem_top_enabled?  %>
-<a href="<%= index_page_url() %>">Top</a>
-<%  else  %>
-Top
-<%  end  %>
-</span>
-<span class="menuitem">
-<%  if menuitem_help_enabled?  %>
-<a href="<%= help_page_url() %>">Help</a>
-<%  else  %>
-Help
-<%  end  %>
-</span>
-<%  if menuitem_search_enabled?  %>
-<input type="hidden" name="cmd" value="search">
-<input type="text" name="q" size="9" value="">
-<input type="submit" value="Search">
-</form>
-<%  else  %>
-</p>
-<%  end  %>
-</div>
Index: template/diff.rhtml
===================================================================
--- template/diff.rhtml	(.../vendor)	(revision 58)
+++ template/diff.rhtml	(.../trunk)	(revision 58)
@@ -1,51 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
-<html lang="ja-JP">
-<head>
-  <meta http-equiv="Content-Type" content="text/html; charset=<%= page_charset() %>">
-  <meta http-equiv="Content-Language" content="ja-JP">
-  <meta name="robots" content="noindex,nofollow">
-  <link rel="stylesheet" type="text/css" href="<%= css_url() %>">
-  <title><%= page_name() %> : Diff</title>
-</head>
-<body>
-
-.include menu
-
-<h1><%= logo_url() %><%= page_name() %> : Diff rev <%= rev1() %> &lt;=&gt; rev <%= rev2() %></h1>
-
-<p class="revnavi">
-[<%  if rev1() > 1  %>
-<a href="<%= cgi_url() %>?cmd=view;rev=<%= rev1() - 1 %>;name=<%= page_url() %>">rev<%= rev1() - 1 %></a>
-<a href="<%= cgi_url() %>?cmd=diff;rev1=<%= rev1() - 1 %>;rev2=<%= rev1() %>;name=<%= page_url() %>">&lt;=&gt;</a>
-<%  else  %>
-[rev0 &lt;=&gt;
-<%  end
-%>
-<a href="<%= cgi_url() %>?cmd=view;rev=<%= rev1() %>;name=<%= page_url() %>">rev <%= rev1() %></a>
-&lt;=&gt;
-<a href="<%= cgi_url() %>?cmd=view;rev=<%= rev2() %>;name=<%= page_url() %>">rev <%= rev2() %></a>
-<a href="<%= page_view_url() %>">&gt;&gt;HEAD</a>]
-</p>
-
-<% log = diff() %>
-<p>
-<span class="removedline">--- rev<%= log.rev1 %>  <%= format_time(log.time1) %></span><br>
-<span class="addedline">+++ rev<%= log.rev2 %>  <%= format_time(log.time2) %></span>
-</p>
-<pre class="diff"><%=
-  log.diff.map {|line|
-    case line
-    when /\A-/
-      %Q[<span class="removedline">#{escape_html(line.rstrip)}</span>\n]
-    when /\A\+/
-      %Q[<span class="addedline">#{escape_html(line.rstrip)}</span>\n]
-    else
-      escape_html(line)
-    end
-  }.join('')
-%></pre>
-
-.include systeminfo
-
-</body>
-</html>
Index: template/annotate.rhtml
===================================================================
--- template/annotate.rhtml	(.../vendor)	(revision 58)
+++ template/annotate.rhtml	(.../trunk)	(revision 58)
@@ -1,34 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
-<html lang="ja-JP">
-<head>
-  <meta http-equiv="Content-Type" content="text/html; charset=<%= page_charset() %>">
-  <meta http-equiv="Content-Language" content="ja-JP">
-  <meta name="robots" content="noindex,nofollow">
-  <link rel="stylesheet" type="text/css" href="<%= css_url() %>">
-  <title><%= page_name() %> : Annotate</title>
-</head>
-<body>
-
-.include menu
-
-<h1><%= logo_url() %><%= page_name() %> : Annotate<%= (revision() ? " rev #{revision()}" : '') %></h1>
-
-<p class="revnavi">[<a href="<%= page_view_url() %>">&gt;&gt;HEAD</a>]</p>
-
-<p class="colorbar">
-Latest Revisions:
-<% latest = annotate_revision() %>
-<% if latest > 4 %><span class="new4">rev<%= latest-4 %></span> <% end %>
-<% if latest > 3 %><span class="new3">rev<%= latest-3 %></span> <% end %>
-<% if latest > 2 %><span class="new2">rev<%= latest-2 %></span> <% end %>
-<% if latest > 1 %><span class="new1">rev<%= latest-1 %></span> <% end %>
-<% if latest > 0 %><span class="new0">rev<%= latest-0 %></span><% end %>
-</p>
-<pre class="annotate">
-<%= annotate() %>
-</pre>
-
-.include systeminfo
-
-</body>
-</html>
Index: template/view.rhtml
===================================================================
--- template/view.rhtml	(.../vendor)	(revision 58)
+++ template/view.rhtml	(.../trunk)	(revision 58)
@@ -1,26 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
-<html lang="ja-JP">
-<head>
-  <meta http-equiv="Content-Type" content="text/html; charset=<%= page_charset() %>">
-  <meta http-equiv="Content-Language" content="ja-JP">
-  <link rel="stylesheet" type="text/css" href="<%= css_url() %>">
-  <title><%= front_page?() ? site_name() : page_name() %></title>
-</head>
-<body>
-
-.include menu
-
-<h1><%= logo_url() %><%= front_page?() ? site_name() : page_name() %></h1>
-<p>
-<span class="lastmodified"><%= format_time(last_modified()) %></span>
-(<%= times_before(last_modified()) %>);
-rev <%= revision() %>
-</p>
-<%= body() %>
-
-<hr>
-.include revlinks
-.include systeminfo
-
-</body>
-</html>
Index: template/list.rhtml
===================================================================
--- template/list.rhtml	(.../vendor)	(revision 58)
+++ template/list.rhtml	(.../trunk)	(revision 58)
@@ -1,25 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
-<html lang="ja-JP">
-<head>
-  <meta http-equiv="Content-Type" content="text/html; charset=<%= page_charset() %>">
-  <meta http-equiv="Content-Language" content="ja-JP">
-  <meta name="robots" content="noindex,nofollow">
-  <link rel="stylesheet" type="text/css" href="<%= css_url() %>">
-  <title>List</title>
-</head>
-<body>
-
-.include menu
-
-<h1><%= logo_url() %>List of All Pages</h1>
-<ol>
-<%  page_list().each do |page|  %>
-<li><a href="<%= view_url(page) %>"><%= escape_html(page) %></a>
-    <%  if orphan_page?(page)  %>[orphan]<%  end  %></li>
-<%  end  %>
-</ol>
-
-.include systeminfo
-
-</body>
-</html>
Index: template/search_error.rhtml
===================================================================
--- template/search_error.rhtml	(.../vendor)	(revision 58)
+++ template/search_error.rhtml	(.../trunk)	(revision 58)
@@ -1,23 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
-<html lang="ja-JP">
-<head>
-  <meta http-equiv="Content-Type" content="text/html; charset=<%= page_charset() %>">
-  <meta http-equiv="Content-Language" content="ja-JP">
-  <meta name="robots" content="noindex,nofollow">
-  <link rel="stylesheet" type="text/css" href="<%= css_url() %>">
-  <title>Search Error</title>
-</head>
-<body>
-
-.include menu
-
-<h1><%= logo_url() %>Search Error</h1>
-<p>
-<%= escape_html(error_message()) %>
-</p>
-.include search_form
-
-.include systeminfo
-
-</body>
-</html>
Index: template/gdiff.rhtml
===================================================================
--- template/gdiff.rhtml	(.../vendor)	(revision 58)
+++ template/gdiff.rhtml	(.../trunk)	(revision 58)
@@ -1,55 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
-<html lang="ja-JP">
-<head>
-  <meta http-equiv="Content-Type" content="text/html; charset=<%= page_charset() %>">
-  <meta http-equiv="Content-Language" content="ja-JP">
-  <% if auto_reload? %><meta http-equiv="refresh" content="3600; url=<%= cgi_url() %>?cmd=gdiff&amp;org=cookie&amp;reload=on"><% end %>
-  <meta name="robots" content="noindex,nofollow">
-  <link rel="stylesheet" type="text/css" href="<%= css_url() %>">
-  <title>Diff from <%= format_time(origin_time()) %></title>
-</head>
-<body>
-
-.include menu
-
-<h1><%= logo_url() %>Diff from <%= format_time(origin_time()) %></h1>
-
-<p><a href="<%= cgi_url() %>?cmd=gdiff;org=cookie">[Diff from my last visit]</a></p>
-
-<% diffs().each do |log| %>
-<h2><a href="<%= view_url(log.page_name) %>"><%= escape_html(log.page_name) %></a></h2>
-<p class="minimenu">
-<a href="<%= cgi_url() %>?cmd=edit;name=<%= escape_html(log.page_name) %>">[edit]</a>
-<% if log.rev2 > 1 %>
-<a href="<%= cgi_url() %>?cmd=diff;rev1=<%= log.rev2 - 1 %>;rev2=<%= log.rev2 %>;name=<%= escape_html(log.page_name) %>">[diff]</a>
-<% else %>
-[diff]
-<% end %>
-<a href="<%= cgi_url() %>?cmd=annotate;name=<%= escape_html(log.page_name) %>">[ann]</a>
-<a href="<%= cgi_url() %>?cmd=history;name=<%= escape_html(log.page_name) %>">[hist]</a>
-</p>
-<p>
-<span class="removedline">--- rev<%= log.rev1 %>  <%= format_time(log.time1) %></span><br>
-<span class="addedline">+++ rev<%= log.rev2 %>  <%= format_time(log.time2) %></span>
-</p>
-<pre class="diff"><%=
-  log.diff.map {|line|
-    case line
-    when /\A\-/
-      %Q[<span class="removedline">#{escape_html(line.rstrip)}</span>\n]
-    when /\A\+/
-      %Q[<span class="addedline">#{escape_html(line.rstrip)}</span>\n]
-    else
-      escape_html(line)
-    end
-  }.join('')
-%></pre>
-<% end %>
-<% unless auto_reload? %>
-<p><a href="<%= cgi_url() %>?cmd=gdiff;org=cookie;reload=on">[Turn on auto reload]</a></p>
-<% end %>
-
-.include systeminfo
-
-</body>
-</html>
Index: template/recent.rhtml
===================================================================
--- template/recent.rhtml	(.../vendor)	(revision 58)
+++ template/recent.rhtml	(.../trunk)	(revision 58)
@@ -1,25 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
-<html lang="ja-JP">
-<head>
-  <meta http-equiv="Content-Type" content="text/html; charset=<%= page_charset() %>">
-  <meta http-equiv="Content-Language" content="ja-JP">
-  <meta name="robots" content="noindex,nofollow">
-  <link rel="stylesheet" type="text/css" href="<%= css_url() %>">
-  <title>Recent Edit</title>
-</head>
-<body>
-
-.include menu
-
-<h1><%= logo_url() %>Recent Edit</h1>
-<p><a href="<%= cgi_url() %>?cmd=gdiff;org=cookie">[Diff from my last visit]</a></p>
-<ol>
-<%  page_list().each do |page|  %>
-<li><%= format_time(page.mtime) %>: <a href="<%= view_url(page.name) %>"><%= escape_html(page.name) %></a></li>
-<%  end  %>
-</ol>
-
-.include systeminfo
-
-</body>
-</html>
Index: template/preview.rhtml
===================================================================
--- template/preview.rhtml	(.../vendor)	(revision 58)
+++ template/preview.rhtml	(.../trunk)	(revision 58)
@@ -1,39 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
-<html lang="ja-JP">
-<head>
-  <meta http-equiv="Content-Type" content="text/html; charset=<%= page_charset() %>">
-  <meta http-equiv="Content-Language" content="ja-JP">
-  <meta name="robots" content="noindex,nofollow">
-  <link rel="stylesheet" type="text/css" href="<%= css_url() %>">
-  <title><%= page_name() %> : Preview</title>
-</head>
-<body>
-
-.include menu
-
-<p>
-<span class="previewmark">Preview</span>
-</p>
-
-<h1><%= logo_url() %><%= page_name() %></h1>
-
-<%= compiled_body() %>
-
-<hr>
-<form method="POST" action="<%= cgi_url() %>">
-<input type="hidden" name="cmd" value="save">
-<input type="hidden" name="name" value="<%= page_name() %>">
-<%
-    if original_revision()  %>
-<input type="hidden" name="origrev" value="<%= original_revision() %>">
-<%  end
-%>
-<textarea class="edit" name="text" cols="70" rows="30"><%= escape_html(body()) %></textarea><br>
-<input type="submit" name="preview" value="Preview">
-<input type="submit" id="okbutton" value="Save">
-</form>
-
-.include systeminfo
-
-</body>
-</html>
Index: template/farm.rhtml
===================================================================
--- template/farm.rhtml	(.../vendor)	(revision 58)
+++ template/farm.rhtml	(.../trunk)	(revision 58)
@@ -1,38 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
-<html lang="ja-JP">
-<head>
-  <meta http-equiv="Content-Type" content="text/html; charset=<%= charset() %>">
-  <meta http-equiv="Content-Language" content="ja-JP">
-  <link rel="stylesheet" type="text/css" href="<%= css_url() %>">
-  <title>BitChannelFarm</title>
-</head>
-<body>
-
-<h1>BitChannelFarm</h1>
-
-<h2>Current Nodes</h2>
-<ul>
-<% node_ids().sort_by {|id| mtime(id).to_i }.reverse_each do |id| %>
-<li><a href="<%= node_url(id) %>"><%= id %></a>: <%= name(id) %></li>
-<% end %>
-</ul>
-
-<h2>New Node</h2>
-<form method="POST" action="<%= farm_url() %>">
-<p>
-ID: <input type="text" name="id" value="" size="10"><br>
-Name: <input type="text" name="name" value="" size="35"><br>
-Theme:
-</p>
-<ul>
-<% themes().each do |theme| %>
-<li><input type="radio" name="theme" value="<%= theme %>"<%= theme == 'default' ? " checked" : '' %>> <%= theme %></li>
-<% end %>
-</ul>
-<input type="submit" name="create" value="Create">
-</form>
-
-.include systeminfo
-
-</body>
-</html>
Index: template/edit.rhtml
===================================================================
--- template/edit.rhtml	(.../vendor)	(revision 58)
+++ template/edit.rhtml	(.../trunk)	(revision 58)
@@ -1,40 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
-<html lang="ja-JP">
-<head>
-  <meta http-equiv="Content-Type" content="text/html; charset=<%= page_charset() %>">
-  <meta http-equiv="Content-Language" content="ja-JP">
-  <meta name="robots" content="noindex,nofollow">
-  <link rel="stylesheet" type="text/css" href="<%= css_url() %>">
-  <title><%= page_name() %> : Edit</title>
-</head>
-<body>
-
-.include menu
-
-<h1><%= logo_url() %><%= page_name() %> : Edit</h1>
-<%
-    if opt_message()  %>
-<p><%= escape_html(opt_message()) %></p>
-<%  end
-%>
-<p>
-Current revision: <%= original_revision() || '(new page)' %><br>
-Edit started at: <%= format_time(Time.now) %>
-</p>
-<form method="POST" action="<%= cgi_url() %>">
-<input type="hidden" name="cmd" value="save">
-<input type="hidden" name="name" value="<%= page_name() %>">
-<%
-    if original_revision()  %>
-<input type="hidden" name="origrev" value="<%= original_revision() %>">
-<%  end
-%>
-<textarea class="edit" name="text" cols="70" rows="30"><%= escape_html(body()) %></textarea><br>
-<input type="submit" name="preview" value="Preview">
-<input type="submit" id="okbutton" value="Save">
-</form>
-
-.include systeminfo
-
-</body>
-</html>
Index: template/viewrev.rhtml
===================================================================
--- template/viewrev.rhtml	(.../vendor)	(revision 58)
+++ template/viewrev.rhtml	(.../trunk)	(revision 58)
@@ -1,36 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
-<html lang="ja-JP">
-<head>
-  <meta http-equiv="Content-Type" content="text/html; charset=<%= page_charset() %>">
-  <meta http-equiv="Content-Language" content="ja-JP">
-  <meta name="robots" content="noindex,nofollow">
-  <link rel="stylesheet" type="text/css" href="<%= css_url() %>">
-  <title><%= page_name() %> rev 1.<%= revision() %></title>
-</head>
-<body>
-
-.include menu
-
-<h1><%= logo_url() %><%= page_name() %> rev <%= revision() %></h1>
-
-<p><span class="lastmodified">Saved at: <%= format_time(last_modified()) %></span></p>
-
-<p><a href="<%= cgi_url() %>?cmd=edit;rev=<%= revision() %>;name=<%= page_url() %>">Revert to this revision</a></p>
-
-<p class="revnavi">
-<%  if revision() > 1  %>
-[<a href="<%= cgi_url() %>?cmd=view;rev=<%= revision() - 1 %>;name=<%= page_url() %>">rev<%= revision() - 1 %></a>
-<a href="<%= cgi_url() %>?cmd=diff;rev1=<%= revision() - 1 %>;rev2=<%= revision() %>;name=<%= page_url() %>">&lt;=&gt;</a>
-<%  else  %>
-[rev0 &lt;=&gt;
-<%  end  %>
-rev<%= revision() %>
-<a href="<%= page_view_url() %>">&gt;&gt;HEAD</a>]
-</p>
-
-<%= body() %>
-
-.include systeminfo
-
-</body>
-</html>
Index: template/search_form.rhtml
===================================================================
--- template/search_form.rhtml	(.../vendor)	(revision 58)
+++ template/search_form.rhtml	(.../trunk)	(revision 58)
@@ -1,5 +0,0 @@
-<form method="post" action="<%= cgi_url() %>">
-<input type="hidden" name="cmd" value="search">
-<input type="text" name="q" size="20" value="<%= escape_html(query_string()) %>">
-<input type="submit" value="Search">
-</form>
Index: template/thanks.rhtml
===================================================================
--- template/thanks.rhtml	(.../vendor)	(revision 58)
+++ template/thanks.rhtml	(.../trunk)	(revision 58)
@@ -1,13 +0,0 @@
-<html>
-<head>
-  <meta http-equiv="refresh" content="1;url=<%= page_view_url() %>">
-  <meta name="robots" content="noindex,nofollow">
-  <title>Moving...</title>
-</head>
-<body>
-<p>
-Thank you for your edit.
-Wait or <a href="<%= page_view_url() %>">click here</a>, please.
-</p>
-</body>
-</html>
