/[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.4 by w, Sun Jan 26 02:39:48 2003 UTC revision 1.20 by wakaba, Fri Aug 6 03:39:02 2004 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  # You MUST modify following '$modifier_...' variables.    ## These lines should be removed after utf8 support
24  #    BEGIN {
25  # our $modifier_dbtype = 'AnyDBM_File';  # Fast, not available on some server, page size limited.      $Message::Util::Formatter::Base::Token = qr/[\w._+\x80-\xFF-]+/;
26  # our $modifier_dbtype = 'dbmopen';      # Fast, not available on some server, page size limited.      require Message::Util::Formatter::Base;
27  #our $modifier_dbtype = 'Yuki::YukiWikiDB';     # Slow, available on all environment.    }
28  #our $modifier_dbtype = 'Yuki::YukiWikiDB2';     # Slow, available on all environment.    use Message::Util::Error;
29  our $modifier_dbtype = 'Yuki::YukiWikiDBMeta';     # Slow, available on all environment.  
30  our $url_cgi; {  use Message::Util::QName::General [q<ExpandedURI>], {
31      my $scheme = 'http';    'log' => q<http://suika.fam.cx/~wakaba/-temp/2004/05/01/reqlog#>,
32      $scheme = lc $1 if $main::ENV{SERVER_PROTOCOL} =~ m#([A-Za-z0-9+.%-]+)#;    'media-type' => q<http://suika.fam.cx/~wakaba/-temp/2004/04/24/mt#>,
33      $url_cgi = "$scheme://$main::ENV{SERVER_NAME}:$main::ENV{SERVER_PORT}/~wakaba/suikawiki/wiki";    'pe' => q<http://suika.fam.cx/~wakaba/archive/2004/7/20/sw-propedit#>,
34          ## - MUST NOT include [&<>"] and/or non-URI characters    'relrev' => q<http://suika.fam.cx/~wakaba/archive/2004/7/25/html-relrev#>,
35      'ss' => q<http://suika.fam.cx/~wakaba/archive/2004/05/sw-stylesheet#>,
36      'sw' => q<http://suika.fam.cx/~wakaba/archive/2004/7/20/sw#>,
37      'sw09' => q<http://suika.fam.cx/~wakaba/-temp/wiki/wiki?SuikaWiki%2F0.9#>,
38    };
39    
40    BEGIN {
41      if ($main::ENV{REQUEST_URI} =~ /\#/) {
42        require SuikaWiki::Output::HTTP;
43        my $out = SuikaWiki::Output::HTTP->new;
44        $out->{status_code} = 401;
45        $out->{status_phrase} = q<Request-URI MUST NOT have Fragment Identifier>;
46        $out->{entity}->{media_type} = q<text/html>;
47        $out->{entity}->{charset} = q<iso-8859-1>;
48        $out->{entity}->{language} = [q<en>];
49        $out->{entity}->{body_is_octet_stream} = 1;
50        my $ua = $main::ENV{HTTP_USER_AGENT};
51        for ($ua) {
52          s/&/&amp;/g; s/</&lt;/g; s/([^\x20-\x7E])/sprintf '&#x%02X;', ord $1/ge;
53        };
54        $out->{entity}->{body} = qq<
55          <!DOCTYPE html SYSTEM>
56          <title>401 Bad Request-URI</title>
57          <h1>Bad Request-URI</h1>
58          <p>Your Request-URI has fragment identifier but it is not allowed here.
59          It might be a bug of your user agent ($ua).  Please contact to the UA
60          vendor.</p>
61        >;
62        $out->output (output => 'http-cgi');
63        exit;
64      }
65  }  }
 our %uri = (  
   cookie_path   => '/~wakaba/suikawiki/',  
   external_script       => '../wiki/script/',  
 );  
 $uri{wiki} = $url_cgi;  
 $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),  
 );  
 ##############################  
 our %PageName = (  
   FrontPage     => 'HomePage',  
   IndexPage     => 'IndexPage',  
   SearchPage    => 'SearchPage',  
   CreatePage    => 'CreatePage',  
   ErrorPage     => 'ErrorPage',  
   RecentChanges => 'RecentChanges',  
   AdminSpecialPage      => "\x11\x11Admin\x11Special\x11Page\x11\x11",  
   UserAgentList => 'WikiUserAgentList',  
 );  
 our $kanjicode = 'euc';  
 our $lang = 'ja';  
   
 $wiki::useragent::UseLog = 0;   ## Use User-Agent name log (WikiUserAgentList) or not  
 $wiki::diff::UseDiff = 1;       ## Use diff mode or not  
   
 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=>contents,class=>wiki-cmd,title=>\"%res(name=>ShowMapOfThisPageLink);\");  
   %link-wiki(mode=>RandomJump,up_to_date,rel=>lucky,class=>\"wiki randomlink\",title=>\"%res(name=>GoSomewhereLink);\");  
 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;  
 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;  
 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);'},  
 rss => {media => {type => 'application/rss+xml', charset => 1, expires => 3600},  
   check => sub { ref $_[0]->format_converter ($_[0]->{magic} => 'RSS') ? 1 : 0 },  
   template => '%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(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  
 );  
   
   
 $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;\\");  
 %apply-user-preferred-style;");%html-end;  
 EOH  
   
 $ViewDefinition{WithMenu} = {%{$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,title=>"%page-name;",heading,content=>"  
   <div id=\\\"myuri\\\">%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  
66    
67  1;  push our @Config, sub ($) {
68      my $WIKI = shift;
69      use FindBin q($Bin);
70      use File::Spec;
71      
72      ## -- Filesystem path mapping
73      for (
74         [db__cache__dir          => q"./wikidata/cache/"],
75         [db__cache_struct__file  => q"./wikidata/cache/struct.db"],
76         [db__content__dir        => q"./wikidata/page/"],
77         [db__content__error_log  => q"./wikidata/log/db-content.log"],
78         [db__bdb__home_dir       => q"./wikidata/lock/"],
79         [db__bdb__log_dir        => q"./wikidata/log/bdb/"],
80         [db__bdb__log_file       => q"./wikidata/log/bdb.log"],
81         [db__bdb__temp_dir       => q"./wikidata/lock/"],
82         [db__lock__dir           => q"./wikidata/lock/"],
83         [db__lock__log_file      => q"./wikidata/log/lock.log"],
84         [db__log__dir            => q"./wikidata/log/"],
85         [db__request_log__dir    => q"./wikidata/rlog/"],
86         [db__static__dir         => q"./wikidata/static/"],
87         [db__temp__dir           => q"./wikidata/lock/"],
88         [namazu__index_dir       => q"/var/namazu/index/suikawiki"],
89      ) {
90        ## On system that does not set current directory as main script
91        ## directory, you should specify it instead of using "abs_path".
92        $WIKI->{config}->{path_to}->{$_->[0]} = File::Spec->rel2abs ($_->[1], $Bin);
93      }
94      
95      ## -- Namazu URI Mapping (See SuikaWiki:SuikaWiki//Namazu) --
96      $WIKI->{config}->{nmz__uri_to_uri} = sub {
97        my ($nmzuri, %opt) = @_;
98        if ($nmzuri =~ s!^\Q$opt{o}->{wiki}->{config}->{path_to}->{db__content__dir}\E/*!!o) {
99          $nmzuri =~ s/\.txt$//;
100          return $opt{o}->{wiki}->uri_reference
101                          (page => $opt{o}->{wiki}->name ([
102            map {s/([0-9A-F][0-9A-F])/pack 'C', hex $1/ge; $_}
103            split m!\.ns/!, $nmzuri
104          ]), base => 1);
105        } else {
106          $nmzuri =~ s<^/home/wakaba/public_html/([^.]+)><http://suika.fam.cx/~wakaba/$1>;
107          return ($nmzuri, $nmzuri);
108        }
109      };
110    
111      ## -- WikiPlugin
112      push @{$WIKI->{event}->{plugin_manager_loaded}}, sub {
113        my $wiki = shift;
114        
115        ## Installed plugin modules
116        $wiki->{plugin}->load_directory (qw(
117          lib/SuikaWiki/Plugin/
118          misc/plugins/
119          misc/plugins/form/
120          misc/plugins/format/
121          misc/plugins/link/
122          misc/plugins/view/
123        ));
124    
125        ## Configuration file as pseudo-plugin module
126        require 'wikidata/config.ph';
127      };
128    
129      ## -- WikiDatabase: Mapping logical to physical
130      push @{$WIKI->{event}->{database_loaded}}, sub {
131          my $wiki = shift;
132          
133          ## Main content
134          $wiki->{db}->_set_prop_db (content => {-db_open => sub {
135            require SuikaWiki::DB::FileSystem::LeafFile;
136            SuikaWiki::DB::FileSystem::LeafFile->new
137              (base_directory => $wiki->{config}->{path_to}->{db__content__dir},
138               directory_suffix => '.ns',
139               file_suffix    => '.txt',
140               root_key => $wiki->{config}->{page}->{Default},
141               -lock => $wiki->{var}->{db}->{lock_prop}->('content'));
142          }, -db_close => sub {
143            my %opt = @_;
144            $opt{prop_info}->{-db}->close;
145            delete $opt{prop_info}->{-db};
146          }});
147    
148          ## Properties
149          $wiki->{db}->_set_prop_db (content_prop => {-db_open => sub {
150            require SuikaWiki::DB::FileSystem::LeafProp;
151            SuikaWiki::DB::FileSystem::LeafProp->new
152              (base_directory => $wiki->{config}->{path_to}->{db__content__dir},
153               directory_suffix => '.ns',
154               file_suffix    => '.prop',
155               root_key => $wiki->{config}->{page}->{Default},
156               -lock => $wiki->{var}->{db}->{lock_prop}->('content_prop'));
157          }, -db_close => sub {
158            my %opt = @_;
159            $opt{prop_info}->{-db}->close;
160            delete $opt{prop_info}->{-db};
161          }});
162          
163          ## Last modified
164          $wiki->{db}->_set_prop_db (lastmodified => {-db_open => sub {
165            require SuikaWiki::DB::FileSystem::SuikaWikiMetaInfo09;
166            SuikaWiki::DB::FileSystem::SuikaWikiMetaInfo09->new
167              (directory => $wiki->{config}->{path_to}->{db__content__dir},
168               -lock => $wiki->{var}->{db}->{lock_prop}->('lastmodified'));
169          }, -prop => 'last_modified', -db_close => sub {
170            my %opt = @_;
171            $opt{prop_info}->{-db}->close;
172            delete $opt{prop_info}->{-db};
173          }});
174          
175          ## Static version
176          $wiki->{db}->_set_prop_db (static__css => {-db_open => sub {
177            require SuikaWiki::DB::FileSystem::LeafFileP;
178            SuikaWiki::DB::FileSystem::LeafFileP->new
179              (base_directory => $wiki->{config}->{path_to}->{db__static__dir},
180               directory_suffix => '.ns',
181               file_suffix    => '.css',
182               root_key => $wiki->{config}->{page}->{Default});
183          }, -db_close => sub {
184            my %opt = @_;
185            $opt{prop_info}->{-db}->close;
186            delete $opt{prop_info}->{-db};
187          }});
188          $wiki->{config}->{ExpandedURI q<ss:use-static>} = 1;
189          ## URI maker for LeafFileP generated files
190          $wiki->{config}->{ExpandedURI q<ss:wikiname-to-uri>} = sub {
191            my (undef, %opt) = @_;
192            my $page = join '.ns/',
193                       map {s/([^0-9A-Za-z_-])/sprintf '+%02X', ord $1/ge;$_}
194                       @{$opt{wikiname}};
195            return URI->new ('wikidata/static/' . $page . '.css');
196          };
197          ## Reverse mapping of generate-uri
198          $wiki->{config}->{ExpandedURI q<ss:uri-to-wikiname>} = sub {
199            my (undef, %opt) = @_;
200            $opt{uri} =~ s!^.+/wikidata/static/!!g;
201            $opt{uri} =~ s/\?[^?]*$//g;
202            $opt{uri} =~ s/\.css$//g;
203            return $opt{wiki}->name
204              ([map {s/\+([0-9A-Fa-f_-][0-9A-Fa-f_-])/pack 'CC', hex $1/ge;$_}
205                split m!.ns/!, $opt{uri}]);
206          };
207    
208    
209          ## Cache DBs
210          require SuikaWiki::DB::FileSystem::SuikaWikiCache09;
211          my $cachedb = SuikaWiki::DB::FileSystem::SuikaWikiCache09->new
212                (directory => $wiki->{config}->{path_to}->{db__cache__dir},
213                 expires => 86400 * 3, removes => 86400 * 3); # 3 days
214          $wiki->{db}->_set_prop_db (m__search_result =>
215            {-db => $cachedb, -prop => 'search_result', -db_close => sub {
216              my %opt = @_;
217              $opt{prop_info}->{-db}->close;
218              delete $opt{prop_info}->{-db};
219            }});
220          $wiki->{db}->_set_prop_db (wpp__headsummary =>
221            {-db => $cachedb, -prop => 'headsummary', -db_close => sub {
222              my %opt = @_;
223              $opt{prop_info}->{-db}->close;
224              delete $opt{prop_info}->{-db};
225            }});
226          $wiki->{db}->_set_prop_db (ref__item_template =>
227            {-db => $cachedb, -prop => 'refereritem', -db_close => sub {
228              my %opt = @_;
229              $opt{prop_info}->{-db}->close;
230              delete $opt{prop_info}->{-db};
231            }});
232    
233          ## Berkely DB Environment Preparation
234          use BerkeleyDB;
235          my $bdbenv = new BerkeleyDB::Env
236             -Home => $wiki->{config}->{path_to}->{db__bdb__home_dir},
237             -Config => {
238               DB_DATA_DIR => $wiki->{config}->{path_to}->{db__content__dir},
239               DB_LOG_DIR => $wiki->{config}->{path_to}->{db__bdb__log_dir},
240               DB_TMP_DIR => $wiki->{config}->{path_to}->{db__bdb__temp_dir},
241             },
242             -ErrFile => $wiki->{config}->{path_to}->{db__bdb__log_file},
243             -Flags => DB_CREATE | DB_INIT_LOCK | DB_INIT_LOG | DB_INIT_MPOOL,
244             -Verbose => $wiki->{config}->{debug}->{db};
245    
246          $wiki->{db}->_set_prop_db (content__structured => {-db_open => sub {
247            require SuikaWiki::DB::Hash;
248            new SuikaWiki::DB::Hash constructor => sub {
249              use MLDBM qw(BerkeleyDB::Hash);# Storable);
250              tie my %mldb, 'MLDBM',
251                            -Filename => $wiki->{config}->{path_to}
252                                              ->{db__cache_struct__file},
253                            -Env => $bdbenv,
254                            -Flags => DB_CREATE,
255                            -Mode => 0644;
256              \%mldb;
257           };
258          }});
259          
260          ## Referer Database (See Referer plugin module)
261          $wiki->{db}->_set_prop_db (referer => {-db_open => sub {
262            require SuikaWiki::DB::FileSystem::Count;
263            SuikaWiki::DB::FileSystem::Count->new
264              (base_directory => $wiki->{config}->{path_to}->{db__content__dir},
265               directory_suffix => '.ns',
266               file_suffix    => '.ref',
267               root_key => $wiki->{config}->{page}->{Default},
268               auto_mkdir => 0,
269               -lock => $wiki->{var}->{db}->{lock_prop}->('referer'));
270          }, -db_close => sub {
271            my %opt = @_;
272            $opt{prop_info}->{-db}->close;
273            delete $opt{prop_info}->{-db};
274          }});
275    
276          ## HTTP Request Logging Database (See RequestLog plugin module)
277          $wiki->{db}->_set_prop_db (log__http_request => {-db_open => sub {
278            require SuikaWiki::DB::FileSystem::Count;
279            SuikaWiki::DB::FileSystem::Count->new
280              (base_directory => $wiki->{config}->{path_to}->{db__request_log__dir},
281               directory_suffix => '.ns',
282               file_suffix    => '.rlog',
283               root_key => $wiki->{config}->{page}->{Default},
284               auto_mkdir => 1);
285          }, -db_close => sub {
286            my %opt = @_;
287            $opt{prop_info}->{-db}->close;
288            delete $opt{prop_info}->{-db};
289          }});
290          
291          ## Additional WikiDB properties should be defined here
292          # ...    
293      };
294    
295      push @{$WIKI->{event}->{input_close}}, sub {
296        my ($wiki, $event) = @_;
297        try {
298          SuikaWiki::Plugin->module_package ('RequestLog')
299                         ->http_request_log (wiki => $wiki,
300                                             prop => 'log__http_request');
301        } catch SuikaWiki::Plugin::error with {
302          my $err = shift;
303          $err->raise unless $err->{-type} eq 'PLUGIN_NOT_FOUND';
304        };
305      };
306    
307      $WIKI->{config}->{engine_max_access} = 15;
308    
309      ## -- WikiName of special purpose WikiPages
310      $WIKI->{config}->{page} = {
311        Default         => $WIKI->name ([qw/HomePage/]),
312        InterWikiName   => $WIKI->name ([qw/Wiki InterWikiName/]),
313        NewPageTemplate => $WIKI->name ([qw/Wiki NewPageTemplate/]),
314        'StyleSheetList(text/html)' => $WIKI->name ([qw<Wiki Style List text/html>]),
315        ExpandedURI q<log:root> => $WIKI->name ([]),
316      };
317      
318      ## -- WikiNamespace constants
319      $WIKI->{config}->{name}->{space} = {
320        separator => '//',
321        separator_reg => qr#\s*//\s*#,
322        self => '.',
323        parent => '..',
324        root => '//',
325      };
326      
327      ## -- Default character codes
328      $WIKI->{config}->{charset} = {
329        ## Internal code - MUST be ASCII + 8bit coding scheme
330          internal => 'euc-jp',
331        ## Default output code
332          output => 'iso-2022-jp',
333        ## "query" part in URI reference
334          uri_query => '', # auto-detected
335          uri_query_encode => 'euc-jp',     ## For compatibility w/ SuikaWiki 2
336          uri_param => '', # auto-detected
337          uri_param_encode => 'euc-jp',     ## For compatibility w/ SuikaWiki 2
338        ## PATH_INFO part in URI reference
339          uri_path_info => 'x-utf-8-10646', ## Reserved for future use
340        ## Fragment identifier in URI reference
341          uri_fragment => 'x-punycode',     ## Reserved for possible future use
342      };
343    
344      ## -- User option for media types
345      $WIKI->{config}->{ExpandedURI q<media-type:accept-media-type>} = {
346        q<IMT:text/css##> => 1,
347        q<IMT:text/plain##> => 1,
348        q<IMT:text/x-suikawiki;version="0.9"##> => 1,
349        q<IMT:application/x.suikawiki.config;version="2.0"##> => 1,
350      };
351      
352      ## -- Expires duration templates
353      $WIKI->{config}->{entity}->{expires} = {
354        edit      => {delta => 60},
355        view      => {delta => 2*3600},
356        list      => {delta => 60},
357        lm_flaged => {delta => 30*24*3600},
358        stylesheet => {delta => 30*24*3600},
359        error     => {delta => 60},
360      };
361    
362      ## -- User-editable content properties
363      $WIKI->{config}->{ExpandedURI q<pe:prop>} = {
364        'abstract' => {uri => ExpandedURI q<sw:abstract>},
365        'abstract--type' => {uri => ExpandedURI q<sw:abstract--type>,
366                             type => ExpandedURI q<media-type:media-type>,
367                             depend => [qw/abstract/]},
368        'category' => {uri => ExpandedURI q<sw:category>, is_list => 1},
369        'keyword' => {uri => ExpandedURI q<sw:keyword>, is_list => 1},
370        'obsoleted' => {uri => ExpandedURI q<sw09:obsoleted>},
371        'rel-contents' => {uri => ExpandedURI q<relrev:contents>, is_list => 1},
372        'rel-index' => {uri => ExpandedURI q<relrev:index>, is_list => 1},
373        'rel-next' => {uri => ExpandedURI q<relrev:next>, is_list => 1},
374        'rel-prev' => {uri => ExpandedURI q<relrev:prev>, is_list => 1},
375        'rel-up' => {uri => ExpandedURI q<relrev:up>, is_list => 1},
376      };
377    
378      ## -- Debug mode
379      $WIKI->{config}->{debug} = {
380        general => 0,
381        db => 0,
382        format => 0,
383        view => 0,
384      };
385    
386    };
387    
388    =head1 SEE ALSO
389    
390    C<lib/suikawiki.pl>, C<wiki.cgi>,
391    <http://suika.fam.cx/~wakaba/-temp/wiki/wiki?SuikaWiki>,
392    <http://suika.fam.cx/~wakaba/-temp/wiki/wiki?SWHCS>
393    
394    =head1 LICENSE
395    
396    Copyright 2003-2004 Wakaba <w@suika.fam.cx>.  All rights reserved.
397    
398    This program is free software; you can redistribute it and/or
399    modify it under the same terms as Perl itself.
400    
401    =cut
402    
403    1; # $Date$

Legend:
Removed from v.1.4  
changed lines
  Added in v.1.20

admin@suikawiki.org
ViewVC Help
Powered by ViewVC 1.1.24