/[pub]/suikawiki/wikidata/suikawiki-config.ph
Suika

Diff of /suikawiki/wikidata/suikawiki-config.ph

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 1.6 by wakaba, Thu Mar 27 07:52:24 2003 UTC revision 1.23 by wakaba, Sun Feb 6 12:58:58 2005 UTC
# Line 1  Line 1 
1    =head1 NAME
2    
3    suikawiki-config.ph - SuikaWiki: Configuration for SuikaWiki HTTP CGI Driver
4    
5    =head1 DESCRIPTION
6    
7    This is a configuration file for SuikaWiki Driver for HTTP CGI Script
8    (SWHCS).  Basic options such as WikiDB directory mapping and
9    special purpose WikiPage names can be customized with this file.
10    
11    More complex customizing, e.g. modifying navigation bar or
12    adding new mode, is also possible by config.ph (generated from
13    config.wp2) and WikiPlugin modules.  For more information,
14    see <http://suika.fam.cx/~wakaba/-temp/wiki/wiki?SuikaWiki>.
15    
16    This file is part of SuikaWiki.
17    
18    =cut
19    
20    package wiki::driver::http;
21  use strict;  use strict;
22    
23  ## URI (or part of URI) of Wiki CGI itself and its external addons    ## These lines should be removed after utf8 support
24          ## Note: If your Wiki CGI URI is <http://foo.example/path/to/wiki.cgi>,    BEGIN {
25          ##              cookie-path: /path/to/      $Message::Util::Formatter::Base::Token = qr/[\w._+\x80-\xFF-]+/;
26          ##              script-short-name: wiki.cgi      require Message::Util::Formatter::Base;
         ##       URI parts MUST NOT contains "&" and/or non-URI characters.  
   our %uri = (  
     cookie_path         => '/temp/suikawiki/',  
     external_script     => '../wiki/script/',  
     script_short_name   => 'wiki',  
   );  
   our $url_cgi; {  
     my $scheme = 'http';  
     $scheme = lc $1 if $main::ENV{SERVER_PROTOCOL} =~ m#([A-Za-z0-9+.%-]+)#;  
     $url_cgi = "$scheme://$main::ENV{SERVER_NAME}:$main::ENV{SERVER_PORT}$uri{cookie_path}$uri{script_short_name}";  
27    }    }
28    $uri{wiki} = $url_cgi;    use Message::Util::Error;
   
 ## Path to modules and databases  
   use lib qw!../wiki/lib!;  
   $SuikaWiki::Plugin::plugin_directory = q(../wiki/lib/SuikaWiki/Plugin/);  
   our %PathTo = (       ## Path to your data, from the main CGI script (NOT from this config script)  
     CachePrefix         => q(./wikidata/.cache.),  
     WikiDataBase        => q(./wikidata/page),  
   );  
   
 ## Type of WikiPage Database  
   #our $modifier_dbtype = 'AnyDBM_File';  # Fast, not available on some server, page size limited.  
   #our $modifier_dbtype = 'dbmopen';      # Fast, not available on some server, page size limited.  
   #our $modifier_dbtype = 'Yuki::YukiWikiDB';     # Slow, available on all environment.  
   #our $modifier_dbtype = 'Yuki::YukiWikiDB2';     # Slow, available on all environment.  
   our $modifier_dbtype = 'Yuki::YukiWikiDBMeta';     # Slow, available on all environment.  
   our $use_exists = 1; # If you can use 'exists' method for your DB.  
   
 ## Name of Special WikiPage (linked as parts of navigations)  
   our %PageName = (  
     FrontPage   => 'HomePage',  
     IndexPage   => 'IndexPage',  
     SearchPage  => 'SearchPage',  
     CreatePage  => 'CreatePage',  
     RecentChanges       => 'RecentChanges',  
     UserAgentList       => 'WikiUserAgentList',  
     AdminSpecialPage    => "\x11\x11Admin\x11Special\x11Page\x11\x11",  
   );  
   
 ## (Should be reimplemented)  
   our $kanjicode = 'euc';  
   our $lang = 'ja';  
   $wiki::useragent::UseLog = 0; ## Use User-Agent name log (WikiUserAgentList) or not  
   
 ## Misc. options  
   $wiki::diff::UseDiff = 1;     ## Use diff mode or not  
   
 ## Namespace of WikiName  
 package wiki::page::ns;  
   our $delimiter = '//';  
   our $self = '.';  
   our $parent = '..';  
 package main;  
   
 ## Definition of views  
   
 my %vd;  
 $vd{links} = <<'EOH';  
   %styles-wiki-html(page=>\"WikiStyleList:HTML\");  
   %link-wiki(mode=>edit,rel=>edit,class=>wiki-cmd,title=>\"%res(name=>EditThisPageLink);\");  
   %link-wiki(mode=>edit,rel=>edit,class=>wiki-cmd,title=>\"%res(name=>AdminEditThisPageLink);\",add_param=>\"admin=1\");  
   %link-wiki(rel=>view,class=>wiki-cmd,title=>\"%res(name=>ViewThisPageLink);\",up_to_date);  
   %link-wiki(rel=>myself,class=>wiki,title=>\"%res(name=>GoToMyselfLink);\");  
   %link-wiki(page=>IndexPage,rel=>index,class=>wiki,title=>\"%res(name=>GoToIndexPageLink);\");  
   %link-wiki(page=>HomePage,rel=>home,class=>wiki,title=>\"%res(name=>GoToHomePageLink);\");  
   %link-wiki(page=>WikiNews,rel=>News,class=>wiki,title=>\"%res(name=>GoToWikiNewsLink);\");  
   %link-wiki(page=>RecentChanges,rel=>News,class=>wiki,title=>\"%res(name=>GoToRecentChangesLink);\");  
   %link-wiki(page=>RecentChanges,mode=>rss,rel=>News,class=>wiki,title=>\"%res(name=>GoToRssPageLink);\",type=>\"application/xml\");  
   %link-wiki(page=>SearchPage,rel=>search,class=>wiki,title=>\"%res(name=>GoToSearchPageLink);\");  
   %link-wiki(page=>WikiHelp,mode=>read,rel=>help,class=>wiki,title=>\"%res(name=>GoToWikiHelpLink);\");  
   %link-wiki(page=>WikiPageLicense,rel=>copyright,class=>wiki,title=>\"%res(name=>GoToWikiPageLicenseLink);\");  
   %link-wiki(mode=>map,rel=>sitemap,class=>wiki-cmd,title=>\"%res(name=>ShowMapOfThisPageLink);\");  
   %link-wiki(mode=>RandomJump,up_to_date,rel=>lucky,class=>\"wiki randomlink\",title=>\"%res(name=>GoSomewhereLink);\");  
   %link-wiki(page=>WikiMenuBar,mode=>mininav,rel=>\"sidebar navigator\",class=>wiki);  
   %link-favicon(use_page_icon);  
 EOH  
   #%link-viewcvs(href=>\"http://path-to-viewcvs/path-to-repository/\",rel=>history,class=>wiki-cmd,title=>\"%res(name=>ViewHistoryOfThisPageLink);\",hreflang=>en);  
 $vd{links} .= q(  %link-wiki(mode=>diff,rel=>history,class=>wiki-cmd,title=>\"%res(name=>ViewDiffOfThisPageLink);\");) if $wiki::diff::UseDiff;  
 $vd{links} .= <<EOH;  
   %link-wiki(href=>\\\"javascript:var%20WikiName=prompt('Please%20input%20the%20WikiName:','','Jump%20to%20SuikaWiki');if(WikiName)%7B_content.location.href='$url_cgi%3F'+encodeURIComponent(WikiName)%7D\\\",rel=>jump,class=>wiki-cmd,title=>\\\"%res(name=>JumpToLink);\\\");  
   %link-wiki(href=>\\\"javascript:var%20WikiName=prompt('Please%20input%20the%20WikiName:','','Jump%20to%20SuikaWiki');if(WikiName)%7B_content.location.href='$url_cgi%3Fmycmd=edit;mypage='+encodeURIComponent(WikiName)%7D\\\",rel=>jump,class=>wiki-cmd,title=>\\\"%res(name=>JumpToEditLink);\\\");  
 EOH  
 $vd{navbar} = <<'EOH';  
   %anchor-wiki(mode=>edit,rel=>edit,class=>wiki-cmd,label=>\\\"%res(name=>EditThisPage);\\\",title=>\\\"%res(name=>EditThisPageLong,accesskey=>E);\\\");  
   %anchor-wiki(rel=>view,up_to_date,class=>wiki-cmd,label=>\\\"%res(name=>ViewThisPage);\\\",title=>\\\"%res(name=>ViewThisPageLong);\\\");  
   %anchor-wiki(page=>CreatePage,class=>wiki,label=>\\\"%res(name=>GoToCreatePage);\\\",title=>\\\"%res(name=>GoToCreatePageLong);\\\");  
   %anchor-wiki(page=>IndexPage,class=>wiki,label=>\\\"%res(name=>GoToIndexPage);\\\",title=>\\\"%res(name=>GoToIndexPageLong);\\\");  
   %anchor-wiki(page=>HomePage,class=>wiki,label=>\\\"%res(name=>GoToHomePage);\\\",title=>\\\"%res(name=>GoToHomePageLong);\\\");  
   %anchor-wiki(page=>SearchPage,class=>wiki,label=>\\\"%res(name=>GoToSearchPage);\\\",title=>\\\"%res(name=>GoToSearchPageLong);\\\");  
   %anchor-wiki(mode=>RandomJump,up_to_date,rel=>lucky,class=>\\\"wiki randomlink\\\",label=>\\\"%res(name=>GoSomewhere);\\\",title=>\\\"%res(name=>GoSomewhereLong);\\\");  
   %anchor-wiki(page=>RecentChanges,class=>wiki,label=>\\\"%res(name=>GoToRecentChanges);\\\",title=>\\\"%res(name=>GoToRecentChangesLong);\\\");  
 EOH  
   
 our %ViewDefinition = (  
 read => {media => {type => 'text/html', charset => 1, expires => 120}, check => sub {1},  
   #xmedia => {type => 'application/xhtml+xml', charset => 1, expires => 120},  
   template => <<EOH},  
 %html-start;%html-head(title=>"%res(name=>\\"View:WebPageTitle\\");",link_meta=>"$vd{links}");  
 %section(level=>1,add_to_toc=>0,type=>body,title=>"%page-name;",heading,content=>"  
   %section(id=>tools1,class=>tools,add_to_toc=>0,content=>\\"$vd{navbar}\\");  
   %section(level=>2,id=>read,add_to_toc=>0,content=>\\"%read(comment);\\");  
   %section(level=>2,id=>\\"see-also\\",title=>SeeAlso,heading,content=>\\"%search-result;\\");  
   %section(level=>2,id=>referer,title=>Referer,heading,content=>\\"%referer-list;\\");  
   %section(level=>2,id=>toc,title=>\\"TOC:Title\\",heading,add_to_toc=>0,content=>\\"%toc(drag);\\");  
   %section(id=>last-modified,add_to_toc=>0,content=>\\"%res(name=>\\\\\\"LastModified=\\\\\\");%last-modified;\\");  
   %section(class=>tools,add_to_toc=>0,content=>\\\"$vd{navbar}\\\");  
   %section(id=>footer,add_to_toc=>0,content=>\\"  
     <a href=\\\\\\"http://www.hyuki.com/yukiwiki/\\\\\\" title=\\\\\\"YukiWiki 2.0.beta1.2002-05-29 &copy; 2000-2002 by Hiroshi Yuki\\\\\\">%res(name=>\\\\\\"About:Name:YukiWiki\\\\\\");</a>  
     <a href=\\\\\\"http://digit.que.ne.jp/work/\\\\\\" title=\\\\\\"WalWiki 2.0.beta1.wal.1 &copy; 2000-2002 by Makio Tsukamoto\\\\\\">%res(name=>\\\\\\"About:Name:WalWiki\\\\\\");</a>  
     <a href=\\\\\\"http://suika.fam.cx/gate/cvs/wakaba/wiki/\\\\\\" title=\\\\\\"%res(name=>\\\\\\"About:SuikaWiki:JumpToCVS\\\\\\");\\\\\\">%res(name=>\\\\\\"About:Name:SuikaWiki\\\\\\"); %wiki-version;</a>  
   \\");  
 %apply-user-preferred-style;");%html-end;  
 %log-hotness();  
 EOH  
 map => {media => {type => 'text/html', charset => 1, expires => 120}, check => sub {1},  
   #xmedia => {type => 'application/xhtml+xml', charset => 1, expires => 120},  
   template => <<EOH},  
 %html-start;%html-head(title=>"%res(name=>\\"Map:WebPageTitle\\");",link_meta=>"$vd{links}");  
 %section(level=>1,add_to_toc=>0,type=>body,title=>"%page-name;",heading,content=>"  
   %section(id=>tools1,class=>tools,add_to_toc=>0,content=>\\"$vd{navbar}\\");  
   %section(level=>2,id=>\\"link-map\\",title=>\\"Map:Title\\",heading,content=>\\"  
     <p>%res(name=>\\\\\\"Map:Description\\\\\\");</p>  
     %link-map;  
   \\");  
   %section(level=>2,id=>\\"see-also\\",title=>SeeAlso,heading,content=>\\"%search-result;\\");  
   %section(level=>2,id=>referer,title=>Referer,heading,content=>\\"%referer-list;\\");  
   %section(level=>2,id=>toc,title=>\\"TOC:Title\\",heading,add_to_toc=>0,content=>\\"%toc(drag);\\");  
   %section(class=>tools,add_to_toc=>0,content=>\\\"$vd{navbar}\\\");  
   %section(id=>footer,add_to_toc=>0,content=>\\"%res(name=>\\\\\\"About:Name:SuikaWiki\\\\\\"); %wiki-version;\\");  
 %apply-user-preferred-style;");%html-end;  
 EOH  
   
 edit => {media => {type => 'text/html', charset => 1, expires => 60}, check => sub {1},  
   #xmedia => {type => 'application/xhtml+xml', charset => 1, expires => 60},  
   template => <<EOH},  
 %html-start;%html-head(title=>"%res(name=>\\"Edit:WebPageTitle\\");",link_meta=>"$vd{links}  %html-meta(name=>ROBOTS,content=>NOINDEX);");  
 %section(level=>1,add_to_toc=>0,type=>body,title=>"%page-name;",heading,content=>"  
   %section(id=>tools1,class=>tools,add_to_toc=>0,content=>\\"$vd{navbar}\\");  
   %section(level=>2,id=>edit,title=>\\"Edit:Title\\",heading,content=>\\"  
     %edit-form;  
     %section(level=>3,id=>edit-help,add_to_toc=>0,content=>\\\\\\"%read(page=>WikiEditHelp);\\\\\\");  
   \\");  
   %section(level=>2,id=>\\"see-also\\",title=>SeeAlso,heading,content=>\\"%search-result;\\");  
   %section(level=>2,id=>referer,title=>Referer,heading,content=>\\"%referer-list;\\");  
   %section(level=>2,id=>toc,title=>\\"TOC:Title\\",heading,add_to_toc=>0,content=>\\"%toc(drag);\\");  
   %section(id=>last-modified,add_to_toc=>0,content=>\\"%res(name=>\\\\\\"LastModified=\\\\\\");%last-modified;\\");  
   %section(class=>tools,add_to_toc=>0,content=>\\\"$vd{navbar}\\\");  
   %section(id=>footer,add_to_toc=>0,content=>\\"%res(name=>\\\\\\"About:Name:SuikaWiki\\\\\\"); %wiki-version;\\");  
 %apply-user-preferred-style;");%html-end;  
 EOH  
 adminedit => {media => {type => 'text/html', charset => 1, expires => 60}, check => sub {1},  
   xmedia => {type => 'application/xhtml+xml', charset => 1, expires => 60},  
   template => <<EOH},  
 %html-start;%html-head(title=>"%res(name=>\\"Edit:Admin:WebPageTitle\\");",link_meta=>"$vd{links}  %html-meta(name=>ROBOTS,content=>NOINDEX);");  
 %section(level=>1,add_to_toc=>0,type=>body,title=>"%page-name;",heading,content=>"  
   %section(id=>tools1,class=>tools,add_to_toc=>0,content=>\\"$vd{navbar}\\");  
   %section(level=>2,id=>edit,title=>\\"Edit:Title\\",heading,content=>\\"%edit-form(admin);\\");  
   %section(level=>2,id=>toc,title=>\\"TOC:Title\\",heading,add_to_toc=>0,content=>\\"%toc(drag);\\");  
   %section(id=>last-modified,add_to_toc=>0,content=>\\"%res(name=>\\\\\\"LastModified=\\\\\\");%last-modified;\\");  
   %section(id=>footer,add_to_toc=>0,content=>\\"%res(name=>\\\\\\"About:Name:SuikaWiki\\\\\\"); %wiki-version;\\");  
 %apply-user-preferred-style;");%html-end;  
 EOH  
 -conflict => {media => {type => 'text/html', charset => 1, expires => 60}, check => sub {1},  
   #xmedia => {type => 'application/xhtml+xml', charset => 1, expires => 60},  
   template => <<EOH},  
 %html-start;%html-head(title=>"%res(name=>\\"Edit:Conflict:WebPageTitle\\");",link_meta=>"$vd{links}  %html-meta(name=>ROBOTS,content=>NOINDEX);");  
 %section(level=>1,add_to_toc=>0,type=>body,title=>"%page-name;",heading,content=>"  
   %section(id=>tools1,class=>tools,add_to_toc=>0,content=>\\"$vd{navbar}\\");  
   %section(level=>2,id=>edit-conflict,title=>\\"Edit:Conflict:Title\\",heading,content=>\\"  
     <p>%res(name=>\\\\\\"Edit:Conflict:Description\\\\\\");</p>  
     %conflict-form;  
     %section(level=>3,id=>edit-conflict-diff,title=>\\\\\\"Edit:Conflict:Diff:Title\\\\\\",heading,content=>\\\\\\"  
       <p>%res(name=>\\\\\\\\\\\\\\"Edit:Conflict:Diff:Description\\\\\\\\\\\\\\");</p>  
       %conflict-diff;  
     \\\\\\");  
   \\");  
   %section(level=>2,id=>edit,title=>\\"Edit:Title\\",heading,content=>\\"  
     <p>%res(name=>\\\\\\"Edit:Conflict:Edit:Description\\\\\\");</p>  
     %edit-form;  
     %section(level=>3,id=>edit-help,add_to_toc=>0,content=>\\\\\\"%read(page=>WikiEditHelp);\\\\\\");  
   \\");  
   %section(level=>2,id=>\\"see-also\\",title=>SeeAlso,heading,content=>\\"%search-result;\\");  
   %section(level=>2,id=>referer,title=>Referer,heading,content=>\\"%referer-list;\\");  
   %section(level=>2,id=>toc,title=>\\"TOC:Title\\",heading,add_to_toc=>0,content=>\\"%toc(drag);\\");  
   %section(class=>tools,add_to_toc=>0,content=>\\\"$vd{navbar}\\\");  
   %section(id=>footer,add_to_toc=>0,content=>\\"%res(name=>\\\\\\"About:Name:SuikaWiki\\\\\\"); %wiki-version;\\");  
 %apply-user-preferred-style;");%html-end;  
 EOH  
 -wrote => {media => {type => 'text/html', charset => 1, expires => 60}, check => sub {1},  
   xmedia => {type => 'application/xhtml+xml', charset => 1, expires => 60},  
   template => <<EOH},  
 %html-start;%html-head(title=>"%res(name=>\\"Edit:Wrote:WebPageTitle\\");",link_meta=>"$vd{links}  %html-meta(name=>ROBOTS,content=>NOINDEX);");  
 %section(level=>1,add_to_toc=>0,type=>body,title=>"%page-name;",heading,content=>"  
   %section(id=>tools1,class=>tools,add_to_toc=>0,content=>\\"$vd{navbar}\\");  
   <p>%res(name=>\\"Edit:SavedSuccessfully\\");</p>  
   %section(id=>footer,add_to_toc=>0,content=>\\"%res(name=>\\\\\\"About:Name:SuikaWiki\\\\\\"); %wiki-version;\\");  
 %apply-user-preferred-style;");%html-end;  
 %log-hotness(weight=>2);  
 EOH  
 -deleted => {media => {type => 'text/html', charset => 1, expires => 60}, check => sub {1},  
   xmedia => {type => 'application/xhtml+xml', charset => 1, expires => 60},  
   template => <<EOH},  
 %html-start;%html-head(title=>"%res(name=>\\"Edit:Deleted:WebPageTitle\\");",link_meta=>"$vd{links}  %html-meta(name=>ROBOTS,content=>NOINDEX);");  
 %section(level=>1,add_to_toc=>0,type=>body,title=>"%page-name;",heading,content=>"  
   %section(id=>tools1,class=>tools,add_to_toc=>0,content=>\\"$vd{navbar}\\");  
   <p>%res(name=>\\"Edit:PageIsDeletedSuccessfully\\");</p>  
   %section(id=>footer,add_to_toc=>0,content=>\\"%res(name=>\\\\\\"About:Name:SuikaWiki\\\\\\"); %wiki-version;\\");  
 %apply-user-preferred-style;");%html-end;  
 EOH  
 -error => {media => {type => 'text/html', charset => 1, expires => 60}, check => sub {1},  
   xmedia => {type => 'application/xhtml+xml', charset => 1, expires => 60},  
   template => <<EOH},  
 %html-start;%html-head(title=>"%res(name=>\\"Error:WebPageTitle\\");",link_meta=>"$vd{links}  %html-meta(name=>ROBOTS,content=>NOINDEX);");  
 %section(level=>1,add_to_toc=>0,type=>body,title=>"%page-name;",heading,content=>"  
   %section(id=>tools1,class=>tools,add_to_toc=>0,content=>\\"$vd{navbar}\\");  
   %section(level=>2,id=>error,title=>\\"Error:Title\\",heading,content=>\\"  
     <p>%error-message;</p>  
   \\");  
   %section(level=>2,id=>toc,title=>\\"TOC:Title\\",heading,add_to_toc=>0,content=>\\"%toc(drag);\\");  
   %section(id=>footer,add_to_toc=>0,content=>\\"%res(name=>\\\\\\"About:Name:SuikaWiki\\\\\\"); %wiki-version;\\");  
 %apply-user-preferred-style;");%html-end;  
 EOH  
   
 css => {media => {type => 'text/css', charset => 1, expires => 3600},  
   check => sub { ref $_[0]->format_converter ($_[0]->{magic} => 'CSS') ? 1 : 0 },  
   template => '%read(to=>CSS);'},  
 image_jpeg => {media => {type => 'image/jpeg', expires => 240*3600},  
   check => sub { ref ($_[0]->format_converter ($_[0]->{magic} => 'image_jpeg'))  
                  && $_[0]->{magic} =~ m#image-type="image/jpeg"# ? 1 : 0 },  
   template => '%read(to=>image_jpeg);'},  
 image_png => {media => {type => 'image/png', expires => 240*3600},  
   check => sub { ref ($_[0]->format_converter ($_[0]->{magic} => 'image_png'))  
                  && $_[0]->{magic} =~ m#image-type="image/png"# ? 1 : 0 },  
   template => '%read(to=>image_png);'},  
 rss => {media => {type => 'application/rss+xml', charset => 1, expires => 3600},  
   check => sub { ref $_[0]->format_converter ($_[0]->{magic} => 'RSS') ? 1 : 0 },  
   template => '<?xml version="1.0"?>%styles-wiki-xml(page=>"WikiStyleList:RSS");%read(to=>RSS);'},  
 -UnsupportedMediaType => {media => {type => 'text/html', charset => 1, expires => -1},  
   xmedia => {type => 'application/xhtml+xml', charset => 1, expires => -1},  
   check => sub {1}, template => <<EOH},  
 %html-start;%html-head(title=>"%page-name;",link_meta=>"$vd{links}");  
 %section(level=>1,add_to_toc=>0,type=>body,title=>"%page-name;",heading,content=>"  
   %section(id=>tools1,class=>tools,add_to_toc=>0,content=>\\"$vd{navbar}\\");  
   %section(level=>2,title=>\\"UnsupportedMediaType:Title\\",heading,content=>\\"  
     %res(name=>\\\\\\"UnsupportedMediaType:Description\\\\\\");  
   \\");  
   %section(id=>footer,add_to_toc=>0,content=>\\"%res(name=>\\\\\\"About:Name:SuikaWiki\\\\\\"); %wiki-version;\\");  
 %apply-user-preferred-style;");%html-end;  
 EOH  
 );  
   
   
 $ViewDefinition{diff} = {media => {type => 'text/html', charset => 1, expires => 120},  
   #xmedia => {type => 'application/xhtml+xml', charset => 1, expires => 120},  
   template => <<EOH, check => sub {1}} if $wiki::diff::UseDiff;  
 %html-start;%html-head(title=>"%res(name=>\\"Diff:WebPageTitle\\");",link_meta=>"$vd{links}");  
 %section(level=>1,add_to_toc=>0,type=>body,title=>"%page-name;",heading,content=>"  
   %section(id=>tools1,class=>tools,add_to_toc=>0,content=>\\"$vd{navbar}\\");  
   %section(level=>2,id=>\\"diff\\",title=>\\"Diff:Title\\",heading,content=>\\"  
     <p>%res(name=>\\\\\\"Diff:Notice\\\\\\");</p>  
     %diff-between-previous;  
   \\");  
   %section(level=>2,id=>toc,title=>\\"TOC:Title\\",heading,add_to_toc=>0,content=>\\"%toc(drag);\\");  
   %section(class=>tools,add_to_toc=>0,content=>\\\"$vd{navbar}\\\");  
   %section(id=>footer,add_to_toc=>0,content=>\\"%res(name=>\\\\\\"About:Name:SuikaWiki\\\\\\"); %wiki-version;\\");  
 ");  
 EOH  
   
 $ViewDefinition{WithMenu} = {%{$ViewDefinition{read}}, template => <<EOH};  
 %html-start;%html-head(title=>"%res(name=>\\"View:WebPageTitle\\");",link_meta=>"$vd{links}");  
 %log-hotness;  
 %section(level=>1,add_to_toc=>0,type=>body,title=>"%page-name;",heading,content=>"  
   <div id=\\\"myuri\\\">%img-favicon(use_page_icon);%uri-wiki();</div>  
   %section(id=>tools1,class=>tools,add_to_toc=>0,content=>\\"  
     %anchor-wiki(rel=>view,up_to_date,mode=>default,class=>wiki-cmd,label=>\\\\\\"%res(name=>ReloadThisPage);\\\\\\",title=>\\\\\\"%res(name=>ReloadThisPageLong);\\\\\\");  
     $vd{navbar}  
   \\");  
   %section(level=>2,id=>side-menu,add_to_toc=>0,content=>\\"%read(page=>WikiMenuBar);\\");  
   %section(id=>content-frame,add_to_toc=>0,content=>\\"  
     %section(level=>2,id=>read,add_to_toc=>0,content=>\\\\\\"%read(comment);\\\\\\");  
     %section(level=>2,id=>\\\\\\"see-also\\\\\\",title=>SeeAlso,heading,content=>\\\\\\"%search-result;\\\\\\");  
     %section(level=>2,id=>referer,title=>Referer,heading,content=>\\\\\\"%referer-list;\\\\\\");  
     %section(level=>2,id=>toc,title=>\\\\\\"TOC:Title\\\\\\",heading,add_to_toc=>0,content=>\\\\\\"%toc(drag);\\\\\\");  
     %section(id=>last-modified,add_to_toc=>0,content=>\\\\\\"%res(name=>\\\\\\\\\\\\\\"LastModified=\\\\\\\\\\\\\\");%last-modified;\\\\\\");  
     %section(id=>footer,add_to_toc=>0,content=>\\\\\\"  
       <a href=\\\\\\\\\\\\\\"http://www.hyuki.com/yukiwiki/\\\\\\\\\\\\\\" title=\\\\\\\\\\\\\\"YukiWiki 2.0.beta1.2002-05-29 &copy; 2000-2002 by Hiroshi Yuki\\\\\\\\\\\\\\">%res(name=>\\\\\\\\\\\\\\"About:Name:YukiWiki\\\\\\\\\\\\\\");</a>  
       <a href=\\\\\\\\\\\\\\"http://digit.que.ne.jp/work/\\\\\\\\\\\\\\" title=\\\\\\\\\\\\\\"WalWiki 2.0.beta1.wal.1 &copy; 2000-2002 by Makio Tsukamoto\\\\\\\\\\\\\\">%res(name=>\\\\\\\\\\\\\\"About:Name:WalWiki\\\\\\\\\\\\\\");</a>  
       <a href=\\\\\\\\\\\\\\"http://suika.fam.cx/gate/cvs/wakaba/wiki/\\\\\\\\\\\\\\" title=\\\\\\\\\\\\\\"%res(name=>\\\\\\\\\\\\\\"About:SuikaWiki:JumpToCVS\\\\\\\\\\\\\\");\\\\\\\\\\\\\\">%res(name=>\\\\\\\\\\\\\\"About:Name:SuikaWiki\\\\\\\\\\\\\\"); %wiki-version;</a>  
     \\\\\\");  
   \\");  
 %apply-user-preferred-style;");%html-end;  
 EOH  
   
 $ViewDefinition{mininav} = {%{$ViewDefinition{read}}, template => <<EOH};  
 %html-start;%html-head(title=>"%res(name=>\\"View:WebPageTitle\\");",link_meta=>"$vd{links}");  
 %section(level=>1,add_to_toc=>0,type=>body,content=>"  
   %section(level=>2,id=>side-menu,class=>\\"mininav\\",add_to_toc=>0,content=>\\"  
     %read;  
     %anchor-wiki(rel=>view,mode=>mininav,class=>wiki-cmd,target=>_self,label=>\\\\\\"%res(name=>ReloadThisPage);\\\\\\",title=>\\\\\\"%res(name=>ReloadThisPageLong);\\\\\\");  
   \\");  
 %apply-user-preferred-style;");%html-end;  
 EOH  
29    
30  =head1 NAME  use Message::Util::QName::General [q<ExpandedURI>], {
31      'bt' => q<http://suika.fam.cx/~wakaba/archive/2004/8/11/sw-bt#>,
32      'log' => q<http://suika.fam.cx/~wakaba/-temp/2004/05/01/reqlog#>,
33      'media-type' => q<http://suika.fam.cx/~wakaba/-temp/2004/04/24/mt#>,
34      'pe' => q<http://suika.fam.cx/~wakaba/archive/2004/7/20/sw-propedit#>,
35      'relrev' => q<http://suika.fam.cx/~wakaba/archive/2004/7/25/html-relrev#>,
36      'ss' => q<http://suika.fam.cx/~wakaba/archive/2004/05/sw-stylesheet#>,
37      'sw' => q<http://suika.fam.cx/~wakaba/archive/2004/7/20/sw#>,
38      'sw09' => q<http://suika.fam.cx/~wakaba/-temp/wiki/wiki?SuikaWiki%2F0.9#>,
39    };
40    
41    BEGIN {
42      if ($main::ENV{REQUEST_URI} =~ /\#/) {
43        require SuikaWiki::Output::HTTP;
44        my $out = SuikaWiki::Output::HTTP->new;
45        $out->{status_code} = 401;
46        $out->{status_phrase} = q<Request-URI MUST NOT have Fragment Identifier>;
47        $out->{entity}->{media_type} = q<text/html>;
48        $out->{entity}->{charset} = q<iso-8859-1>;
49        $out->{entity}->{language} = [q<en>];
50        $out->{entity}->{body_is_octet_stream} = 1;
51        my $ua = $main::ENV{HTTP_USER_AGENT};
52        for ($ua) {
53          s/&/&amp;/g; s/</&lt;/g; s/([^\x20-\x7E])/sprintf '&#x%02X;', ord $1/ge;
54        };
55        $out->{entity}->{body} = qq<
56          <!DOCTYPE html SYSTEM>
57          <title>401 Bad Request-URI</title>
58          <h1>Bad Request-URI</h1>
59          <p>Your Request-URI has fragment identifier but it is not allowed here.
60          It might be a bug of your user agent ($ua).  Please contact to the UA
61          vendor.</p>
62        >;
63        $out->output (output => 'http-cgi');
64        exit;
65      }
66    }
67    
68  suikawiki-config.ph --- SuikaWiki: site configuration script  push our @Config, sub ($) {
69      my $WIKI = shift;
70      use FindBin q($Bin);
71      use File::Spec;
72      
73      ## -- Filesystem path mapping
74      for (
75         [db__cache__dir          => q"./wikidata/cache/"],
76         [db__cache_struct__file  => q"./wikidata/cache/struct.db"],
77         [db__content__dir        => q"./wikidata/page/"],
78         [db__content__error_log  => q"./wikidata/log/db-content.log"],
79         [db__bdb__home_dir       => q"./wikidata/lock/"],
80         [db__bdb__log_dir        => q"./wikidata/log/bdb/"],
81         [db__bdb__log_file       => q"./wikidata/log/bdb.log"],
82         [db__bdb__temp_dir       => q"./wikidata/lock/"],
83         [db__lock__dir           => q"./wikidata/lock/"],
84         [db__lock__log_file      => q"./wikidata/log/lock.log"],
85         [db__log__dir            => q"./wikidata/log/"],
86         [db__request_log__dir    => q"./wikidata/rlog/"],
87         [db__static__dir         => q"./wikidata/static/"],
88         [db__temp__dir           => q"./wikidata/lock/"],
89         [namazu__index_dir       => q"/var/namazu/index/suikawiki"],
90      ) {
91        ## On system that does not set current directory as main script
92        ## directory, you should specify it instead of using "abs_path".
93        $WIKI->{config}->{path_to}->{$_->[0]} = File::Spec->rel2abs ($_->[1], $Bin);
94      }
95      
96      ## -- Namazu URI Mapping (See SuikaWiki:SuikaWiki//Namazu) --
97      $WIKI->{config}->{nmz__uri_to_uri} = sub {
98        my ($nmzuri, %opt) = @_;
99        if ($nmzuri =~ s!^\Q$opt{o}->{wiki}->{config}->{path_to}->{db__content__dir}\E/*!!o) {
100          $nmzuri =~ s/\.txt$//;
101          return $opt{o}->{wiki}->uri_reference
102                          (page => $opt{o}->{wiki}->name ([
103            map {s/([0-9A-F][0-9A-F])/pack 'C', hex $1/ge; $_}
104            split m!\.ns/!, $nmzuri
105          ]), base => 1);
106        } else {
107          $nmzuri =~ s<^/home/wakaba/public_html/([^.]+)><http://suika.fam.cx/~wakaba/$1>;
108          return ($nmzuri, $nmzuri);
109        }
110      };
111    
112      ## -- WikiPlugin
113      push @{$WIKI->{event}->{plugin_manager_loaded}}, sub {
114        my $wiki = shift;
115        
116        ## Installed plugin modules
117        $wiki->{plugin}->load_directory (qw(
118          lib/SuikaWiki/Plugin/
119          misc/plugins/
120          misc/plugins/form/
121          misc/plugins/format/
122          misc/plugins/link/
123          misc/plugins/view/
124        ));
125    
126        ## Configuration file as pseudo-plugin module
127        require 'wikidata/config.ph';
128      };
129    
130      ## -- WikiDatabase: Mapping logical to physical
131      push @{$WIKI->{event}->{database_loaded}}, sub {
132          my $wiki = shift;
133          
134          ## Main content
135          $wiki->{db}->_set_prop_db (content => {-db_open => sub {
136            require SuikaWiki::DB::FileSystem::LeafFile;
137            SuikaWiki::DB::FileSystem::LeafFile->new
138              (base_directory => $wiki->{config}->{path_to}->{db__content__dir},
139               directory_suffix => '.ns',
140               file_suffix    => '.txt',
141               root_key => $wiki->{config}->{page}->{Default},
142               -lock => $wiki->{var}->{db}->{lock_prop}->('content'));
143          }, -db_close => sub {
144            my %opt = @_;
145            $opt{prop_info}->{-db}->close;
146            delete $opt{prop_info}->{-db};
147          }});
148    
149          ## Properties
150          $wiki->{db}->_set_prop_db (content_prop => {-db_open => sub {
151            require SuikaWiki::DB::FileSystem::LeafProp;
152            SuikaWiki::DB::FileSystem::LeafProp->new
153              (base_directory => $wiki->{config}->{path_to}->{db__content__dir},
154               directory_suffix => '.ns',
155               file_suffix    => '.prop',
156               root_key => $wiki->{config}->{page}->{Default},
157               -lock => $wiki->{var}->{db}->{lock_prop}->('content_prop'));
158          }, -db_close => sub {
159            my %opt = @_;
160            $opt{prop_info}->{-db}->close;
161            delete $opt{prop_info}->{-db};
162          }});
163          
164          ## Last modified
165          $wiki->{db}->_set_prop_db (lastmodified => {-db_open => sub {
166            require SuikaWiki::DB::FileSystem::SuikaWikiMetaInfo09;
167            SuikaWiki::DB::FileSystem::SuikaWikiMetaInfo09->new
168              (directory => $wiki->{config}->{path_to}->{db__content__dir},
169               -lock => $wiki->{var}->{db}->{lock_prop}->('lastmodified'));
170          }, -prop => 'last_modified', -db_close => sub {
171            my %opt = @_;
172            $opt{prop_info}->{-db}->close;
173            delete $opt{prop_info}->{-db};
174          }});
175          
176          ## Static version
177          $wiki->{db}->_set_prop_db (static__css => {-db_open => sub {
178            require SuikaWiki::DB::FileSystem::LeafFileP;
179            SuikaWiki::DB::FileSystem::LeafFileP->new
180              (base_directory => $wiki->{config}->{path_to}->{db__static__dir},
181               directory_suffix => '.ns',
182               file_suffix    => '.css',
183               root_key => $wiki->{config}->{page}->{Default});
184          }, -db_close => sub {
185            my %opt = @_;
186            $opt{prop_info}->{-db}->close;
187            delete $opt{prop_info}->{-db};
188          }});
189          $wiki->{config}->{ExpandedURI q<ss:use-static>} = 1;
190          ## URI maker for LeafFileP generated files
191          $wiki->{config}->{ExpandedURI q<ss:wikiname-to-uri>} = sub {
192            my (undef, %opt) = @_;
193            my $page = join '.ns/',
194                       map {s/([^0-9A-Za-z_-])/sprintf '+%02X', ord $1/ge;$_}
195                       @{$opt{wikiname}};
196            return URI->new ('wikidata/static/' . $page . '.css' .
197                             ($opt{lm} ? '?x-lm=' . $opt{lm} : ''));
198          };
199          ## Reverse mapping of generate-uri
200          $wiki->{config}->{ExpandedURI q<ss:uri-to-wikiname>} = sub {
201            my (undef, %opt) = @_;
202            $opt{uri} =~ s!^.+/wikidata/static/!!g;
203            $opt{uri} =~ s/\?[^?]*$//g;
204            $opt{uri} =~ s/\.css$//g;
205            return $opt{wiki}->name
206              ([map {s/\+([0-9A-Fa-f_-][0-9A-Fa-f_-])/pack 'CC', hex $1/ge;$_}
207                split m!.ns/!, $opt{uri}]);
208          };
209    
210    
211          ## Cache DBs
212          require SuikaWiki::DB::FileSystem::SuikaWikiCache09;
213          my $cachedb = SuikaWiki::DB::FileSystem::SuikaWikiCache09->new
214                (directory => $wiki->{config}->{path_to}->{db__cache__dir},
215                 expires => 86400 * 3, removes => 86400 * 3); # 3 days
216          $wiki->{db}->_set_prop_db (m__search_result =>
217            {-db => $cachedb, -prop => 'search_result', -db_close => sub {
218              my %opt = @_;
219              $opt{prop_info}->{-db}->close;
220              delete $opt{prop_info}->{-db};
221            }});
222          $wiki->{db}->_set_prop_db (wpp__headsummary =>
223            {-db => $cachedb, -prop => 'headsummary', -db_close => sub {
224              my %opt = @_;
225              $opt{prop_info}->{-db}->close;
226              delete $opt{prop_info}->{-db};
227            }});
228          $wiki->{db}->_set_prop_db (ref__item_template =>
229            {-db => $cachedb, -prop => 'refereritem', -db_close => sub {
230              my %opt = @_;
231              $opt{prop_info}->{-db}->close;
232              delete $opt{prop_info}->{-db};
233            }});
234    
235          ## Berkely DB Environment Preparation
236          use BerkeleyDB;
237          my $bdbenv = new BerkeleyDB::Env
238             -Home => $wiki->{config}->{path_to}->{db__bdb__home_dir},
239             -Config => {
240               DB_DATA_DIR => $wiki->{config}->{path_to}->{db__content__dir},
241               DB_LOG_DIR => $wiki->{config}->{path_to}->{db__bdb__log_dir},
242               DB_TMP_DIR => $wiki->{config}->{path_to}->{db__bdb__temp_dir},
243             },
244             -ErrFile => $wiki->{config}->{path_to}->{db__bdb__log_file},
245             -Flags => DB_CREATE | DB_INIT_LOCK | DB_INIT_LOG | DB_INIT_MPOOL,
246             -Verbose => $wiki->{config}->{debug}->{db};
247    
248          $wiki->{db}->_set_prop_db (content__structured => {-db_open => sub {
249            require SuikaWiki::DB::Hash;
250            new SuikaWiki::DB::Hash constructor => sub {
251              use MLDBM qw(BerkeleyDB::Hash);# Storable);
252              tie my %mldb, 'MLDBM',
253                            -Filename => $wiki->{config}->{path_to}
254                                              ->{db__cache_struct__file},
255                            -Env => $bdbenv,
256                            -Flags => DB_CREATE,
257                            -Mode => 0644;
258              \%mldb;
259           };
260          }});
261          
262          ## Referer Database (See Referer plugin module)
263          $wiki->{db}->_set_prop_db (referer => {-db_open => sub {
264            require SuikaWiki::DB::FileSystem::Count;
265            SuikaWiki::DB::FileSystem::Count->new
266              (base_directory => $wiki->{config}->{path_to}->{db__content__dir},
267               directory_suffix => '.ns',
268               file_suffix    => '.ref',
269               root_key => $wiki->{config}->{page}->{Default},
270               auto_mkdir => 0,
271               -lock => $wiki->{var}->{db}->{lock_prop}->('referer'));
272          }, -db_close => sub {
273            my %opt = @_;
274            $opt{prop_info}->{-db}->close;
275            delete $opt{prop_info}->{-db};
276          }});
277    
278          ## HTTP Request Logging Database (See RequestLog plugin module)
279          $wiki->{db}->_set_prop_db (log__http_request => {-db_open => sub {
280            require SuikaWiki::DB::FileSystem::Count;
281            SuikaWiki::DB::FileSystem::Count->new
282              (base_directory => $wiki->{config}->{path_to}->{db__request_log__dir},
283               directory_suffix => '.ns',
284               file_suffix    => '.rlog',
285               root_key => $wiki->{config}->{page}->{Default},
286               auto_mkdir => 1);
287          }, -db_close => sub {
288            my %opt = @_;
289            $opt{prop_info}->{-db}->close;
290            delete $opt{prop_info}->{-db};
291          }});
292          
293          ## Additional WikiDB properties should be defined here
294          # ...    
295      };
296    
297      push @{$WIKI->{event}->{input_close}}, sub {
298        my ($wiki, $event) = @_;
299        try {
300          SuikaWiki::Plugin->module_package ('RequestLog')
301                         ->http_request_log (wiki => $wiki,
302                                             prop => 'log__http_request');
303        } catch SuikaWiki::Plugin::error with {
304          my $err = shift;
305          $err->raise unless $err->{-type} eq 'PLUGIN_NOT_FOUND';
306        };
307      };
308    
309      $WIKI->{config}->{engine_max_access} = 15;
310    
311      ## -- WikiName of special purpose WikiPages
312      $WIKI->{config}->{page} = {
313        Default         => $WIKI->name ([qw/HomePage/]),
314        InterWikiName   => $WIKI->name ([qw/Wiki InterWikiName/]),
315        NewPageTemplate => $WIKI->name ([qw/Wiki NewPageTemplate/]),
316        'StyleSheetList(text/html)' => $WIKI->name ([qw<Wiki Style List text/html>]),
317        ExpandedURI q<log:root> => $WIKI->name ([]),
318      };
319      
320      ## -- WikiNamespace constants
321      $WIKI->{config}->{name}->{space} = {
322        separator => '//',
323        separator_reg => qr#\s*//\s*#,
324        self => '.',
325        parent => '..',
326        root => '//',
327      };
328      
329      ## -- Default character codes
330      $WIKI->{config}->{charset} = {
331        ## Internal code - MUST be ASCII + 8bit coding scheme
332          internal => 'euc-jp',
333        ## Default output code
334          output => 'iso-2022-jp',
335        ## "query" part in URI reference
336          uri_query => '', # auto-detected
337          uri_query_encode => 'euc-jp',     ## For compatibility w/ SuikaWiki 2
338          uri_param => '', # auto-detected
339          uri_param_encode => 'euc-jp',     ## For compatibility w/ SuikaWiki 2
340        ## PATH_INFO part in URI reference
341          uri_path_info => 'x-utf-8-10646', ## Reserved for future use
342        ## Fragment identifier in URI reference
343          uri_fragment => 'x-punycode',     ## Reserved for possible future use
344      };
345    
346      ## -- User option for media types
347      $WIKI->{config}->{ExpandedURI q<media-type:accept-media-type>} = {
348        q<IMT:text/css##> => 1,
349        q<IMT:text/plain##> => 1,
350        q<IMT:text/x-suikawiki;version="0.9"##> => 1,
351        q<IMT:text/x-suikawiki;version="0.10"##> => 1,
352        q<IMT:text/x.suikawiki.image;version="0.9"##> => 1,
353        q<IMT:application/x.suikawiki.config;version="2.0"##> => 1,
354      };
355      
356      ## -- Expires duration templates
357      $WIKI->{config}->{entity}->{expires} = {
358        edit      => {delta => 60},
359        view      => {delta => 2*3600},
360        list      => {delta => 60},
361        lm_flaged => {delta => 30*24*3600},
362        stylesheet => {delta => 30*24*3600},
363        error     => {delta => 60},
364      };
365    
366      ## -- User-editable content properties
367      $WIKI->{config}->{ExpandedURI q<pe:prop>} = {
368        'abstract' => {uri => ExpandedURI q<sw:abstract>,
369                       ExpandedURI q<media-type:media-type-prop>
370                           => ExpandedURI q<sw:abstract--type>},
371        'abstract--type' => {uri => ExpandedURI q<sw:abstract--type>,
372                             type => ExpandedURI q<media-type:media-type>,
373                             depend => [qw/abstract/]},
374        'category' => {uri => ExpandedURI q<sw:category>, is_list => 1,
375                       type => ExpandedURI q<sw:WikiName>,
376                       ExpandedURI q<pe:revWNList> => ExpandedURI q<pe:inCategory>},
377        'keyword' => {uri => ExpandedURI q<sw:keyword>, is_list => 1},
378        'license' => {uri => ExpandedURI q<sw:license>,
379                      ExpandedURI q<media-type:media-type-prop>
380                          => ExpandedURI q<sw:license--type>},
381        'license--type' => {uri => ExpandedURI q<sw:license--type>,
382                             type => ExpandedURI q<media-type:media-type>,
383                             depend => [qw/license/]},
384        'obsolete' => {uri => ExpandedURI q<sw:obsolete>, is_list => 1,
385                       type => ExpandedURI q<sw:WikiName>},
386        'rel-contents' => {uri => ExpandedURI q<relrev:contents>, is_list => 1,
387                           type => ExpandedURI q<sw:WikiName>},
388        'rel-index' => {uri => ExpandedURI q<relrev:index>, is_list => 1,
389                        type => ExpandedURI q<sw:WikiName>},
390        'rel-next' => {uri => ExpandedURI q<relrev:next>, is_list => 1,
391                       type => ExpandedURI q<sw:WikiName>,
392                       ExpandedURI q<pe:revWNList> => ExpandedURI q<relrev:prev>},
393        'rel-prev' => {uri => ExpandedURI q<relrev:prev>, is_list => 1,
394                       type => ExpandedURI q<sw:WikiName>,
395                       ExpandedURI q<pe:revWNList> => ExpandedURI q<relrev:next>},
396        'rel-up' => {uri => ExpandedURI q<relrev:up>, is_list => 1,
397                     type => ExpandedURI q<sw:WikiName>,
398                     ExpandedURI q<pe:revWNList> => ExpandedURI q<relrev:down>},
399    
400      ## For BugTrack plugin
401        'bt--status' => {uri => ExpandedURI q<bt:status>},
402        'bt--priority' => {uri => ExpandedURI q<bt:priority>},
403        'bt--category' => {uri => ExpandedURI q<bt:category>, is_list => 1},
404        'bt--subject' => {uri => ExpandedURI q<bt:subject>},
405      };
406    
407      ## -- Debug mode
408      $WIKI->{config}->{debug} = {
409        general => 0,
410        db => 0,
411        format => 0,
412        view => 0,
413      };
414    
415    };
416    
417    =head1 SEE ALSO
418    
419    C<lib/suikawiki.pl>, C<wiki.cgi>,
420    <http://suika.fam.cx/~wakaba/-temp/wiki/wiki?SuikaWiki>,
421    <http://suika.fam.cx/~wakaba/-temp/wiki/wiki?SWHCS>
422    
423  =head1 LICENSE  =head1 LICENSE
424    
425  Copyright 2003 Wakaba <w@suika.fam.cx>  Copyright 2003-2004 Wakaba <w@suika.fam.cx>.  All rights reserved.
426    
427  This program is free software; you can redistribute it and/or  This program is free software; you can redistribute it and/or
428  modify it under the same terms as Perl itself.  modify it under the same terms as Perl itself.

Legend:
Removed from v.1.6  
changed lines
  Added in v.1.23

admin@suikawiki.org
ViewVC Help
Powered by ViewVC 1.1.24  
Google Analytics is used in this page; Cookies are used. 忍者AdMax is used in this page; Cookies are used. Privacy policy.