/[pub]/suikawiki/script/default/suikawiki-config.ph
Suika

Contents of /suikawiki/script/default/suikawiki-config.ph

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.17.2.1 - (hide annotations) (download)
Wed Aug 11 00:02:08 2004 UTC (20 years, 3 months ago) by wakaba
Branch: paragraph-200404
Changes since 1.17: +57 -32 lines
Experimental paragraph-oriented wiki implementation

1 wakaba 1.10 =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 w 1.1 use strict;
22 wakaba 1.15
23 wakaba 1.17 ## These lines should be removed after utf8 support
24     BEGIN {
25     $Message::Util::Formatter::Base::Token = qr/[\w._+\x80-\xFF-]+/;
26     require Message::Util::Formatter::Base;
27     }
28     use Message::Util::Error;
29    
30     use Message::Util::QName::General [q<ExpandedURI>], {
31     'media-type' => q<http://suika.fam.cx/~wakaba/-temp/2004/04/24/mt#>,
32     };
33    
34 wakaba 1.14 push our @Config, sub ($) {
35 wakaba 1.10 my $WIKI = shift;
36 wakaba 1.12 use Cwd qw(abs_path);
37 wakaba 1.10
38     ## -- Filesystem path mapping
39 wakaba 1.6 for (
40 wakaba 1.17 [db__cache__dir => q"./wikidata/cache/"],
41     [db__cache_struct__file => q"./wikidata/cache/struct.db"],
42 wakaba 1.12 [db__content__dir => q"./wikidata/page/"],
43 wakaba 1.6 [db__content__error_log => q"./wikidata/log/db-content.log"],
44 wakaba 1.12 [db__bdb__home_dir => q"./wikidata/lock/"],
45     [db__bdb__log_dir => q"./wikidata/log/bdb/"],
46     [db__bdb__log_file => q"./wikidata/log/bdb.log"],
47     [db__bdb__temp_dir => q"./wikidata/lock/"],
48 wakaba 1.6 [db__lock__dir => q"./wikidata/lock/"],
49 wakaba 1.12 [db__lock__log_file => q"./wikidata/log/lock.log"],
50     [db__log__dir => q"./wikidata/log/"],
51     [db__temp__dir => q"./wikidata/lock/"],
52 wakaba 1.16 # [namazu__index_dir => q"/var/namazu/index/wiki"],
53 wakaba 1.6 ) {
54 wakaba 1.12 ## On system that does not set current directory as main script
55     ## directory, you should specify it instead of using "abs_path".
56     $WIKI->{config}->{path_to}->{$_->[0]} = abs_path $_->[1];
57 wakaba 1.6 }
58    
59 wakaba 1.16 =begin comment
60    
61     ## -- Namazu URI Mapping (See SuikaWiki:SuikaWiki//Namazu) --
62     $WIKI->{config}->{nmz__uri_to_uri} = sub {
63     my ($nmzuri, %opt) = @_;
64     if ($nmzuri =~ s!^\Q$opt{o}->{wiki}->{config}->{path_to}->{db__content__dir}\E/*!!o) {
65     $nmzuri =~ s/\.txt$//;
66     return $opt{o}->{wiki}->uri_reference
67     (page => $opt{o}->{wiki}->name ([
68     map {s/([0-9A-F][0-9A-F])/pack 'C', hex $1/ge; $_}
69     split m!\.ns/!, $nmzuri
70     ]), base => 1);
71     } else {
72     return ($nmzuri, $nmzuri);
73     }
74     };
75    
76     =end comment
77    
78 wakaba 1.17.2.1 =cut
79    
80 wakaba 1.10 ## -- WikiPlugin
81 wakaba 1.6 push @{$WIKI->{event}->{plugin_manager_loaded}}, sub {
82 wakaba 1.8 my $wiki = shift;
83 wakaba 1.10
84     ## Installed plugin modules
85 wakaba 1.8 $wiki->{plugin}->load_directory (qw(
86     lib/SuikaWiki/Plugin/
87     misc/plugins/
88 wakaba 1.10 misc/plugins/form/
89 wakaba 1.9 misc/plugins/format/
90 wakaba 1.10 misc/plugins/link/
91 wakaba 1.8 misc/plugins/view/
92     ));
93 wakaba 1.10
94     ## Configuration file as pseudo-plugin module
95 wakaba 1.6 require 'wikidata/config.ph';
96     };
97    
98 wakaba 1.10 ## -- WikiDatabase: Mapping logical to physical
99 wakaba 1.6 push @{$WIKI->{event}->{database_loaded}}, sub {
100 wakaba 1.10 my $wiki = shift;
101    
102 wakaba 1.6 ## Main content
103 wakaba 1.10 $wiki->{db}->_set_prop_db (content => {-db_open => sub {
104 wakaba 1.17.2.1 require SuikaWiki::DB::Logical;
105     my $db = SuikaWiki::DB::Logical->new;
106     $db->_set_prop_db (content => {-db_open => sub {
107     require SuikaWiki::DB::FileSystem::LeafFile;
108     SuikaWiki::DB::FileSystem::LeafFile->new
109     (base_directory => $wiki->{config}->{path_to}->{db__content__dir},
110     directory_suffix => '.ns',
111     file_suffix => '.txt',
112     root_key => $wiki->{config}->{page}->{Default},
113     -lock => $wiki->{var}->{db}->{lock_prop}
114     ->('content', name => 'content'));
115     }, -db_close => sub {
116     my %opt = @_;
117     $opt{prop_info}->{-db}->close;
118     delete $opt{prop_info}->{-db};
119     }});
120     $db->_set_prop_db (content_seqed => {-db_open => sub {
121     require SuikaWiki::DB::FileSystem::Seq;
122     SuikaWiki::DB::FileSystem::Seq->new
123     (base_directory => $wiki->{config}->{path_to}->{db__content__dir},
124     directory_suffix => 'nnn.ns',
125     file_suffix => '.txt',
126     -lock => $wiki->{var}->{db}->{lock_prop}
127     ->('content', name => 'content_seqed'));
128     }, -db_close => sub {
129     my %opt = @_;
130     $opt{prop_info}->{-db}->close;
131     delete $opt{prop_info}->{-db};
132     }});
133     $db;
134     }, -prop => sub {
135     my (undef, $prop, $key, %opt) = @_;
136     ($key and @$key == 1 and $key->[0] =~ /^[1-9][0-9]*$/)
137     ? 'content_seqed' : $opt{method} eq '_next_number' ? 'content_seqed' : 'content';
138     }, -db_close => sub {
139     my %opt = @_;
140     $opt{prop_info}->{-db}->close;
141     delete $opt{prop_info}->{-db};
142     }});
143    
144     $wiki->{db}->_set_prop_db (content_map => {-db_open => sub {
145 wakaba 1.17 require SuikaWiki::DB::FileSystem::LeafFile;
146     SuikaWiki::DB::FileSystem::LeafFile->new
147     (base_directory => $wiki->{config}->{path_to}->{db__content__dir},
148 wakaba 1.17.2.1 directory_suffix => 'nnn.ns',
149     file_suffix => '.map',
150     -lock => $wiki->{var}->{db}->{lock_prop}
151     ->('content', name => 'content_map'));
152 wakaba 1.17 }, -db_close => sub {
153     my %opt = @_;
154     $opt{prop_info}->{-db}->close;
155     delete $opt{prop_info}->{-db};
156     }});
157 wakaba 1.17.2.1
158 wakaba 1.17 ## Properties
159     $wiki->{db}->_set_prop_db (content_prop => {-db_open => sub {
160     require SuikaWiki::DB::FileSystem::LeafProp;
161     SuikaWiki::DB::FileSystem::LeafProp->new
162     (base_directory => $wiki->{config}->{path_to}->{db__content__dir},
163     directory_suffix => '.ns',
164     file_suffix => '.prop',
165     root_key => $wiki->{config}->{page}->{Default},
166 wakaba 1.17.2.1 -lock => $wiki->{var}->{db}->{lock_prop}->('content_prop'));
167 wakaba 1.8 }, -db_close => sub {
168     my %opt = @_;
169     $opt{prop_info}->{-db}->close;
170     delete $opt{prop_info}->{-db};
171     }});
172 wakaba 1.6
173     ## Last modified
174 wakaba 1.10 $wiki->{db}->_set_prop_db (lastmodified => {-db_open => sub {
175 wakaba 1.6 require SuikaWiki::DB::FileSystem::SuikaWikiMetaInfo09;
176     SuikaWiki::DB::FileSystem::SuikaWikiMetaInfo09->new
177 wakaba 1.10 (directory => $wiki->{config}->{path_to}->{db__content__dir},
178     -lock => $wiki->{var}->{db}->{lock_prop}->('lastmodified'));
179 wakaba 1.17.2.1 }, -prop => sub {'last_modified'}, -db_close => sub {
180 wakaba 1.8 my %opt = @_;
181     $opt{prop_info}->{-db}->close;
182     delete $opt{prop_info}->{-db};
183     }});
184 wakaba 1.10
185 wakaba 1.12 ## Cache DBs
186 wakaba 1.10 require SuikaWiki::DB::FileSystem::SuikaWikiCache09;
187     my $cachedb = SuikaWiki::DB::FileSystem::SuikaWikiCache09->new
188 wakaba 1.16 (directory => $wiki->{config}->{path_to}->{db__cache__dir},
189     expires => 86400 * 3, removes => 86400 * 3); # 3 days
190 wakaba 1.10 $wiki->{db}->_set_prop_db (m__search_result =>
191 wakaba 1.17.2.1 {-db => $cachedb, -db_close => sub {
192 wakaba 1.10 my %opt = @_;
193     $opt{prop_info}->{-db}->close;
194     delete $opt{prop_info}->{-db};
195     }});
196     $wiki->{db}->_set_prop_db (wpp__headsummary =>
197 wakaba 1.17.2.1 {-db => $cachedb, -db_close => sub {
198 wakaba 1.10 my %opt = @_;
199     $opt{prop_info}->{-db}->close;
200     delete $opt{prop_info}->{-db};
201     }});
202 wakaba 1.14 $wiki->{db}->_set_prop_db (ref__item_template =>
203 wakaba 1.17.2.1 {-db => $cachedb, -db_close => sub {
204 wakaba 1.14 my %opt = @_;
205     $opt{prop_info}->{-db}->close;
206     delete $opt{prop_info}->{-db};
207     }});
208 wakaba 1.10
209 wakaba 1.12 ## Referer Database (See Referer plugin module)
210     $wiki->{db}->_set_prop_db (referer => {-db_open => sub {
211 wakaba 1.17 require SuikaWiki::DB::FileSystem::Count;
212     SuikaWiki::DB::FileSystem::Count->new
213     (base_directory => $wiki->{config}->{path_to}->{db__content__dir},
214     directory_suffix => '.ns',
215     file_suffix => '.ref',
216     root_key => $wiki->{config}->{page}->{Default},
217     auto_mkdir => 0,
218     -lock => $wiki->{var}->{db}->{lock_prop}->('referer'));
219     }, -db_close => sub {
220     my %opt = @_;
221     $opt{prop_info}->{-db}->close;
222     delete $opt{prop_info}->{-db};
223 wakaba 1.12 }});
224    
225 wakaba 1.10 ## Additional WikiDB properties should be defined here
226     # ...
227 wakaba 1.6 };
228    
229 wakaba 1.10 ## -- WikiName of special purpose WikiPages
230 wakaba 1.8 $WIKI->{config}->{page} = {
231 wakaba 1.11 Default => $WIKI->name ([qw/HomePage/]),
232     InterWikiName => $WIKI->name ([qw/Wiki InterWikiName/]),
233     NewPageTemplate => $WIKI->name ([qw/Wiki NewPageTemplate/]),
234     'StyleSheetList(text/html)' => $WIKI->name ([qw<Wiki Style List text/html>]),
235 wakaba 1.8 };
236 wakaba 1.17.2.1
237     ## -- Mode
238     $WIKI->{config}->{mode}->{default} = 'para--read';
239 wakaba 1.8
240 wakaba 1.10 ## -- WikiNamespace constants
241 wakaba 1.11 $WIKI->{config}->{name}->{space} = {
242     separator => '//',
243     separator_reg => qr#\s*//\s*#,
244     self => '.',
245     parent => '..',
246 wakaba 1.17 root => '//',
247 wakaba 1.11 };
248 wakaba 1.7
249 wakaba 1.10 ## -- Default character codes
250 wakaba 1.11 $WIKI->{config}->{charset} = {
251     ## Internal code - MUST be ASCII + 8bit coding scheme
252     internal => 'euc-jp',
253     ## Default output code
254     output => 'iso-2022-jp',
255     ## "query" part in URI reference
256     uri_query => '', # auto-detected
257     uri_query_encode => 'euc-jp', ## For compatibility w/ SuikaWiki 2
258     uri_param => '', # auto-detected
259     uri_param_encode => 'euc-jp', ## For compatibility w/ SuikaWiki 2
260     ## PATH_INFO part in URI reference
261     uri_path_info => 'x-utf-8-10646', ## Reserved for future use
262     ## Fragment identifier in URI reference
263     uri_fragment => 'x-punycode', ## Reserved for possible future use
264     };
265 wakaba 1.7
266 wakaba 1.17 ## -- User option for media types
267     $WIKI->{config}->{ExpandedURI q<media-type:accept-media-type>} = {
268     q<IMT:text/css##> => 1,
269     q<IMT:text/plain##> => 1,
270     q<IMT:text/x-suikawiki;version="0.9"##> => 1,
271     q<IMT:application/x.suikawiki.config;version="2.0"##> => 1,
272     };
273    
274 wakaba 1.10 ## -- Expires duration templates
275 wakaba 1.6 $WIKI->{config}->{entity}->{expires} = {
276 wakaba 1.7 edit => {delta => 60},
277     view => {delta => 2*3600},
278 wakaba 1.17 list => {delta => 60},
279 wakaba 1.6 lm_flaged => {delta => 30*24*3600},
280 wakaba 1.11 stylesheet => {delta => 30*24*3600},
281     error => {delta => 60},
282     };
283    
284     ## -- Debug mode
285     $WIKI->{config}->{debug} = {
286 wakaba 1.13 general => 0,
287 wakaba 1.11 db => 0,
288 wakaba 1.12 format => 0,
289 wakaba 1.13 view => 0,
290 wakaba 1.6 };
291 wakaba 1.4
292 wakaba 1.14 };
293 wakaba 1.8
294 wakaba 1.10 =head1 SEE ALSO
295 w 1.3
296 wakaba 1.10 C<lib/suikawiki.pl>, C<wiki.cgi>,
297     <http://suika.fam.cx/~wakaba/-temp/wiki/wiki?SuikaWiki>,
298     <http://suika.fam.cx/~wakaba/-temp/wiki/wiki?SWHCS>
299 w 1.3
300     =head1 LICENSE
301    
302 wakaba 1.10 Copyright 2003-2004 Wakaba <w@suika.fam.cx>. All rights reserved.
303 w 1.3
304     This program is free software; you can redistribute it and/or
305     modify it under the same terms as Perl itself.
306    
307     =cut
308 w 1.1
309 wakaba 1.17.2.1 1; # $Date: 2004/04/25 07:12:56 $

admin@suikawiki.org
ViewVC Help
Powered by ViewVC 1.1.24