/[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 - (show annotations) (download)
Wed Aug 11 00:02:08 2004 UTC (20 years, 9 months ago) by wakaba
Branch: paragraph-200404
Changes since 1.17: +57 -32 lines
Experimental paragraph-oriented wiki implementation

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;
22
23 ## 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 push our @Config, sub ($) {
35 my $WIKI = shift;
36 use Cwd qw(abs_path);
37
38 ## -- Filesystem path mapping
39 for (
40 [db__cache__dir => q"./wikidata/cache/"],
41 [db__cache_struct__file => q"./wikidata/cache/struct.db"],
42 [db__content__dir => q"./wikidata/page/"],
43 [db__content__error_log => q"./wikidata/log/db-content.log"],
44 [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 [db__lock__dir => q"./wikidata/lock/"],
49 [db__lock__log_file => q"./wikidata/log/lock.log"],
50 [db__log__dir => q"./wikidata/log/"],
51 [db__temp__dir => q"./wikidata/lock/"],
52 # [namazu__index_dir => q"/var/namazu/index/wiki"],
53 ) {
54 ## 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 }
58
59 =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 =cut
79
80 ## -- WikiPlugin
81 push @{$WIKI->{event}->{plugin_manager_loaded}}, sub {
82 my $wiki = shift;
83
84 ## Installed plugin modules
85 $wiki->{plugin}->load_directory (qw(
86 lib/SuikaWiki/Plugin/
87 misc/plugins/
88 misc/plugins/form/
89 misc/plugins/format/
90 misc/plugins/link/
91 misc/plugins/view/
92 ));
93
94 ## Configuration file as pseudo-plugin module
95 require 'wikidata/config.ph';
96 };
97
98 ## -- WikiDatabase: Mapping logical to physical
99 push @{$WIKI->{event}->{database_loaded}}, sub {
100 my $wiki = shift;
101
102 ## Main content
103 $wiki->{db}->_set_prop_db (content => {-db_open => sub {
104 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 require SuikaWiki::DB::FileSystem::LeafFile;
146 SuikaWiki::DB::FileSystem::LeafFile->new
147 (base_directory => $wiki->{config}->{path_to}->{db__content__dir},
148 directory_suffix => 'nnn.ns',
149 file_suffix => '.map',
150 -lock => $wiki->{var}->{db}->{lock_prop}
151 ->('content', name => 'content_map'));
152 }, -db_close => sub {
153 my %opt = @_;
154 $opt{prop_info}->{-db}->close;
155 delete $opt{prop_info}->{-db};
156 }});
157
158 ## 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 -lock => $wiki->{var}->{db}->{lock_prop}->('content_prop'));
167 }, -db_close => sub {
168 my %opt = @_;
169 $opt{prop_info}->{-db}->close;
170 delete $opt{prop_info}->{-db};
171 }});
172
173 ## Last modified
174 $wiki->{db}->_set_prop_db (lastmodified => {-db_open => sub {
175 require SuikaWiki::DB::FileSystem::SuikaWikiMetaInfo09;
176 SuikaWiki::DB::FileSystem::SuikaWikiMetaInfo09->new
177 (directory => $wiki->{config}->{path_to}->{db__content__dir},
178 -lock => $wiki->{var}->{db}->{lock_prop}->('lastmodified'));
179 }, -prop => sub {'last_modified'}, -db_close => sub {
180 my %opt = @_;
181 $opt{prop_info}->{-db}->close;
182 delete $opt{prop_info}->{-db};
183 }});
184
185 ## Cache DBs
186 require SuikaWiki::DB::FileSystem::SuikaWikiCache09;
187 my $cachedb = SuikaWiki::DB::FileSystem::SuikaWikiCache09->new
188 (directory => $wiki->{config}->{path_to}->{db__cache__dir},
189 expires => 86400 * 3, removes => 86400 * 3); # 3 days
190 $wiki->{db}->_set_prop_db (m__search_result =>
191 {-db => $cachedb, -db_close => sub {
192 my %opt = @_;
193 $opt{prop_info}->{-db}->close;
194 delete $opt{prop_info}->{-db};
195 }});
196 $wiki->{db}->_set_prop_db (wpp__headsummary =>
197 {-db => $cachedb, -db_close => sub {
198 my %opt = @_;
199 $opt{prop_info}->{-db}->close;
200 delete $opt{prop_info}->{-db};
201 }});
202 $wiki->{db}->_set_prop_db (ref__item_template =>
203 {-db => $cachedb, -db_close => sub {
204 my %opt = @_;
205 $opt{prop_info}->{-db}->close;
206 delete $opt{prop_info}->{-db};
207 }});
208
209 ## Referer Database (See Referer plugin module)
210 $wiki->{db}->_set_prop_db (referer => {-db_open => sub {
211 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 }});
224
225 ## Additional WikiDB properties should be defined here
226 # ...
227 };
228
229 ## -- WikiName of special purpose WikiPages
230 $WIKI->{config}->{page} = {
231 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 };
236
237 ## -- Mode
238 $WIKI->{config}->{mode}->{default} = 'para--read';
239
240 ## -- WikiNamespace constants
241 $WIKI->{config}->{name}->{space} = {
242 separator => '//',
243 separator_reg => qr#\s*//\s*#,
244 self => '.',
245 parent => '..',
246 root => '//',
247 };
248
249 ## -- Default character codes
250 $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
266 ## -- 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 ## -- Expires duration templates
275 $WIKI->{config}->{entity}->{expires} = {
276 edit => {delta => 60},
277 view => {delta => 2*3600},
278 list => {delta => 60},
279 lm_flaged => {delta => 30*24*3600},
280 stylesheet => {delta => 30*24*3600},
281 error => {delta => 60},
282 };
283
284 ## -- Debug mode
285 $WIKI->{config}->{debug} = {
286 general => 0,
287 db => 0,
288 format => 0,
289 view => 0,
290 };
291
292 };
293
294 =head1 SEE ALSO
295
296 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
300 =head1 LICENSE
301
302 Copyright 2003-2004 Wakaba <w@suika.fam.cx>. All rights reserved.
303
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
309 1; # $Date: 2004/04/25 07:12:56 $

admin@suikawiki.org
ViewVC Help
Powered by ViewVC 1.1.24