/[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.16 by wakaba, Sat May 1 03:55:28 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  ## 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      'log' => q<http://suika.fam.cx/~wakaba/-temp/2004/05/01/reqlog#>,
32      'media-type' => q<http://suika.fam.cx/~wakaba/-temp/2004/04/24/mt#>,
33    };
34    
35    BEGIN {
36      if ($main::ENV{REQUEST_URI} =~ /\#/) {
37        require SuikaWiki::Output::HTTP;
38        my $out = SuikaWiki::Output::HTTP->new;
39        $out->{status_code} = 401;
40        $out->{status_phrase} = q<Request-URI MUST NOT have Fragment Identifier>;
41        $out->{entity}->{media_type} = q<text/html>;
42        $out->{entity}->{charset} = q<iso-8859-1>;
43        $out->{entity}->{language} = [q<en>];
44        $out->{entity}->{body_is_octet_stream} = 1;
45        my $ua = $main::ENV{HTTP_USER_AGENT};
46        for ($ua) {
47          s/&/&amp;/g; s/</&lt;/g; s/([^\x20-\x7E])/sprintf '&#x%02X;', ord $1/ge;
48        };
49        $out->{entity}->{body} = qq<
50          <!DOCTYPE html SYSTEM>
51          <title>401 Bad Request-URI</title>
52          <h1>Bad Request-URI</h1>
53          <p>Your Request-URI has fragment identifier but it is not allowed here.
54          It might be a bug of your user agent ($ua).  Please contact to the UA
55          vendor.</p>
56        >;
57        $out->output (output => 'http-cgi');
58        exit;
59      }
60    }
61    
62  suikawiki-config.ph --- SuikaWiki: site configuration script  push our @Config, sub ($) {
63      my $WIKI = shift;
64      use FindBin q($Bin);
65      use File::Spec;
66      
67      ## -- Filesystem path mapping
68      for (
69         [db__cache__dir          => q"./wikidata/cache/"],
70         [db__cache_struct__file  => q"./wikidata/cache/struct.db"],
71         [db__content__dir        => q"./wikidata/page/"],
72         [db__content__error_log  => q"./wikidata/log/db-content.log"],
73         [db__bdb__home_dir       => q"./wikidata/lock/"],
74         [db__bdb__log_dir        => q"./wikidata/log/bdb/"],
75         [db__bdb__log_file       => q"./wikidata/log/bdb.log"],
76         [db__bdb__temp_dir       => q"./wikidata/lock/"],
77         [db__lock__dir           => q"./wikidata/lock/"],
78         [db__lock__log_file      => q"./wikidata/log/lock.log"],
79         [db__log__dir            => q"./wikidata/log/"],
80         [db__request_log__dir    => q"./wikidata/rlog/"],
81         [db__temp__dir           => q"./wikidata/lock/"],
82         [namazu__index_dir       => q"/var/namazu/index/suikawiki"],
83      ) {
84        ## On system that does not set current directory as main script
85        ## directory, you should specify it instead of using "abs_path".
86        $WIKI->{config}->{path_to}->{$_->[0]} = File::Spec->catfile ($Bin, $_->[1]);
87      }
88      
89      ## -- Namazu URI Mapping (See SuikaWiki:SuikaWiki//Namazu) --
90      $WIKI->{config}->{nmz__uri_to_uri} = sub {
91        my ($nmzuri, %opt) = @_;
92        if ($nmzuri =~ s!^\Q$opt{o}->{wiki}->{config}->{path_to}->{db__content__dir}\E/*!!o) {
93          $nmzuri =~ s/\.txt$//;
94          return $opt{o}->{wiki}->uri_reference
95                          (page => $opt{o}->{wiki}->name ([
96            map {s/([0-9A-F][0-9A-F])/pack 'C', hex $1/ge; $_}
97            split m!\.ns/!, $nmzuri
98          ]), base => 1);
99        } else {
100          $nmzuri =~ s<^/home/wakaba/public_html/([^.]+)><http://suika.fam.cx/~wakaba/$1>;
101          return ($nmzuri, $nmzuri);
102        }
103      };
104    
105      ## -- WikiPlugin
106      push @{$WIKI->{event}->{plugin_manager_loaded}}, sub {
107        my $wiki = shift;
108        
109        ## Installed plugin modules
110        $wiki->{plugin}->load_directory (qw(
111          lib/SuikaWiki/Plugin/
112          misc/plugins/
113          misc/plugins/form/
114          misc/plugins/format/
115          misc/plugins/link/
116          misc/plugins/view/
117        ));
118    
119        ## Configuration file as pseudo-plugin module
120        require 'wikidata/config.ph';
121      };
122    
123      ## -- WikiDatabase: Mapping logical to physical
124      push @{$WIKI->{event}->{database_loaded}}, sub {
125          my $wiki = shift;
126          
127          ## Main content
128          $wiki->{db}->_set_prop_db (content => {-db_open => sub {
129            require SuikaWiki::DB::FileSystem::LeafFile;
130            SuikaWiki::DB::FileSystem::LeafFile->new
131              (base_directory => $wiki->{config}->{path_to}->{db__content__dir},
132               directory_suffix => '.ns',
133               file_suffix    => '.txt',
134               root_key => $wiki->{config}->{page}->{Default},
135               -lock => $wiki->{var}->{db}->{lock_prop}->('content_prop'));
136          }, -db_close => sub {
137            my %opt = @_;
138            $opt{prop_info}->{-db}->close;
139            delete $opt{prop_info}->{-db};
140          }});
141    
142          ## Properties
143          $wiki->{db}->_set_prop_db (content_prop => {-db_open => sub {
144            require SuikaWiki::DB::FileSystem::LeafProp;
145            SuikaWiki::DB::FileSystem::LeafProp->new
146              (base_directory => $wiki->{config}->{path_to}->{db__content__dir},
147               directory_suffix => '.ns',
148               file_suffix    => '.prop',
149               root_key => $wiki->{config}->{page}->{Default},
150               -lock => $wiki->{var}->{db}->{lock_prop}->('content'));
151          }, -db_close => sub {
152            my %opt = @_;
153            $opt{prop_info}->{-db}->close;
154            delete $opt{prop_info}->{-db};
155          }});
156          
157          ## Last modified
158          $wiki->{db}->_set_prop_db (lastmodified => {-db_open => sub {
159            require SuikaWiki::DB::FileSystem::SuikaWikiMetaInfo09;
160            SuikaWiki::DB::FileSystem::SuikaWikiMetaInfo09->new
161              (directory => $wiki->{config}->{path_to}->{db__content__dir},
162               -lock => $wiki->{var}->{db}->{lock_prop}->('lastmodified'));
163          }, -prop => 'last_modified', -db_close => sub {
164            my %opt = @_;
165            $opt{prop_info}->{-db}->close;
166            delete $opt{prop_info}->{-db};
167          }});
168          
169          ## Cache DBs
170          require SuikaWiki::DB::FileSystem::SuikaWikiCache09;
171          my $cachedb = SuikaWiki::DB::FileSystem::SuikaWikiCache09->new
172                (directory => $wiki->{config}->{path_to}->{db__cache__dir},
173                 expires => 86400 * 3, removes => 86400 * 3); # 3 days
174          $wiki->{db}->_set_prop_db (m__search_result =>
175            {-db => $cachedb, -prop => 'search_result', -db_close => sub {
176              my %opt = @_;
177              $opt{prop_info}->{-db}->close;
178              delete $opt{prop_info}->{-db};
179            }});
180          $wiki->{db}->_set_prop_db (wpp__headsummary =>
181            {-db => $cachedb, -prop => 'headsummary', -db_close => sub {
182              my %opt = @_;
183              $opt{prop_info}->{-db}->close;
184              delete $opt{prop_info}->{-db};
185            }});
186          $wiki->{db}->_set_prop_db (ref__item_template =>
187            {-db => $cachedb, -prop => 'refereritem', -db_close => sub {
188              my %opt = @_;
189              $opt{prop_info}->{-db}->close;
190              delete $opt{prop_info}->{-db};
191            }});
192    
193          ## Berkely DB Environment Preparation
194          use BerkeleyDB;
195          my $bdbenv = new BerkeleyDB::Env
196             -Home => $wiki->{config}->{path_to}->{db__bdb__home_dir},
197             -Config => {
198               DB_DATA_DIR => $wiki->{config}->{path_to}->{db__content__dir},
199               DB_LOG_DIR => $wiki->{config}->{path_to}->{db__bdb__log_dir},
200               DB_TMP_DIR => $wiki->{config}->{path_to}->{db__bdb__temp_dir},
201             },
202             -ErrFile => $wiki->{config}->{path_to}->{db__bdb__log_file},
203             -Flags => DB_CREATE | DB_INIT_LOCK | DB_INIT_LOG | DB_INIT_MPOOL,
204             -Verbose => $wiki->{config}->{debug}->{db};
205    
206          $wiki->{db}->_set_prop_db (content__structured => {-db_open => sub {
207            require SuikaWiki::DB::Hash;
208            new SuikaWiki::DB::Hash constructor => sub {
209              use MLDBM qw(BerkeleyDB::Hash);# Storable);
210              tie my %mldb, 'MLDBM',
211                            -Filename => $wiki->{config}->{path_to}
212                                              ->{db__cache_struct__file},
213                            -Env => $bdbenv,
214                            -Flags => DB_CREATE,
215                            -Mode => 0644;
216              \%mldb;
217           };
218          }});
219          
220          ## Referer Database (See Referer plugin module)
221          $wiki->{db}->_set_prop_db (referer => {-db_open => sub {
222            require SuikaWiki::DB::FileSystem::Count;
223            SuikaWiki::DB::FileSystem::Count->new
224              (base_directory => $wiki->{config}->{path_to}->{db__content__dir},
225               directory_suffix => '.ns',
226               file_suffix    => '.ref',
227               root_key => $wiki->{config}->{page}->{Default},
228               auto_mkdir => 0,
229               -lock => $wiki->{var}->{db}->{lock_prop}->('referer'));
230          }, -db_close => sub {
231            my %opt = @_;
232            $opt{prop_info}->{-db}->close;
233            delete $opt{prop_info}->{-db};
234          }});
235    
236          ## HTTP Request Logging Database (See RequestLog plugin module)
237          $wiki->{db}->_set_prop_db (log__http_request => {-db_open => sub {
238            require SuikaWiki::DB::FileSystem::Count;
239            SuikaWiki::DB::FileSystem::Count->new
240              (base_directory => $wiki->{config}->{path_to}->{db__request_log__dir},
241               directory_suffix => '.ns',
242               file_suffix    => '.rlog',
243               root_key => $wiki->{config}->{page}->{Default},
244               auto_mkdir => 1);
245          }, -db_close => sub {
246            my %opt = @_;
247            $opt{prop_info}->{-db}->close;
248            delete $opt{prop_info}->{-db};
249          }});
250          
251          ## Additional WikiDB properties should be defined here
252          # ...    
253      };
254    
255      push @{$WIKI->{event}->{input_close}}, sub {
256        my ($wiki, $event) = @_;
257        try {
258          SuikaWiki::Plugin->module_package ('RequestLog')
259                         ->http_request_log (wiki => $wiki,
260                                             prop => 'log__http_request');
261        } catch SuikaWiki::Plugin::error with {
262          my $err = shift;
263          $err->raise unless $err->{-type} eq 'PLUGIN_NOT_FOUND';
264        };
265      };
266    
267      ## -- WikiName of special purpose WikiPages
268      $WIKI->{config}->{page} = {
269        Default         => $WIKI->name ([qw/HomePage/]),
270        InterWikiName   => $WIKI->name ([qw/Wiki InterWikiName/]),
271        NewPageTemplate => $WIKI->name ([qw/Wiki NewPageTemplate/]),
272        'StyleSheetList(text/html)' => $WIKI->name ([qw<Wiki Style List text/html>]),
273        ExpandedURI q<log:root> => $WIKI->name ([]),
274      };
275      
276      ## -- WikiNamespace constants
277      $WIKI->{config}->{name}->{space} = {
278        separator => '//',
279        separator_reg => qr#\s*//\s*#,
280        self => '.',
281        parent => '..',
282        root => '//',
283      };
284      
285      ## -- Default character codes
286      $WIKI->{config}->{charset} = {
287        ## Internal code - MUST be ASCII + 8bit coding scheme
288          internal => 'euc-jp',
289        ## Default output code
290          output => 'iso-2022-jp',
291        ## "query" part in URI reference
292          uri_query => '', # auto-detected
293          uri_query_encode => 'euc-jp',     ## For compatibility w/ SuikaWiki 2
294          uri_param => '', # auto-detected
295          uri_param_encode => 'euc-jp',     ## For compatibility w/ SuikaWiki 2
296        ## PATH_INFO part in URI reference
297          uri_path_info => 'x-utf-8-10646', ## Reserved for future use
298        ## Fragment identifier in URI reference
299          uri_fragment => 'x-punycode',     ## Reserved for possible future use
300      };
301    
302      ## -- User option for media types
303      $WIKI->{config}->{ExpandedURI q<media-type:accept-media-type>} = {
304        q<IMT:text/css##> => 1,
305        q<IMT:text/plain##> => 1,
306        q<IMT:text/x-suikawiki;version="0.9"##> => 1,
307        q<IMT:application/x.suikawiki.config;version="2.0"##> => 1,
308      };
309      
310      ## -- Expires duration templates
311      $WIKI->{config}->{entity}->{expires} = {
312        edit      => {delta => 60},
313        view      => {delta => 2*3600},
314        list      => {delta => 60},
315        lm_flaged => {delta => 30*24*3600},
316        stylesheet => {delta => 30*24*3600},
317        error     => {delta => 60},
318      };
319    
320      ## -- Debug mode
321      $WIKI->{config}->{debug} = {
322        general => 0,
323        db => 0,
324        format => 0,
325        view => 0,
326      };
327    
328    };
329    
330    =head1 SEE ALSO
331    
332    C<lib/suikawiki.pl>, C<wiki.cgi>,
333    <http://suika.fam.cx/~wakaba/-temp/wiki/wiki?SuikaWiki>,
334    <http://suika.fam.cx/~wakaba/-temp/wiki/wiki?SWHCS>
335    
336  =head1 LICENSE  =head1 LICENSE
337    
338  Copyright 2003 Wakaba <w@suika.fam.cx>  Copyright 2003-2004 Wakaba <w@suika.fam.cx>.  All rights reserved.
339    
340  This program is free software; you can redistribute it and/or  This program is free software; you can redistribute it and/or
341  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.16

admin@suikawiki.org
ViewVC Help
Powered by ViewVC 1.1.24