/[pub]/suikawiki/script/wiki.cgi
Suika

Diff of /suikawiki/script/wiki.cgi

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

revision 1.54.2.1 by wakaba, Thu Nov 27 05:30:13 2003 UTC revision 1.62 by wakaba, Wed Jun 16 23:25:26 2010 UTC
# Line 1  Line 1 
1  #!/usr/bin/perl  #!/usr/bin/perl
 ## wiki.cgi --- This is SuikaWiki, yet another WikiEngine  
 $0 = ''.$0;  
2  use strict;  use strict;
3  use CGI::Carp qw(fatalsToBrowser);  use lib qw[/home/httpd/html/www/markup/html/whatpm
4  require 'wikidata/suikawiki-config.ph'; ## the site configuration script             /home/wakaba/work/manakai2/lib
5  require 'suikawiki.pl'; ## the main script             /home/httpd/html/swe/lib/];
6    
7  package SuikaWiki;  use CGI::Carp qw[fatalsToBrowser];
8  our $VERSION = '2.2';  require Message::CGI::Carp;
9    
10  =head1 NAME  my $sw4_url = q<http://suika.fam.cx/~wakaba/wiki/sw/>;
11    
12  wiki.cgi --- SuikaWiki: Yet yet another WikiEngine  require Message::CGI::HTTP;
13    require Encode::EUCJPSW;
14  =head1 SEE ALSO  my $cgi = Message::CGI::HTTP->new;
15    
16  <IW:SuikaWiki:SuikaWiki>  my $page = $ENV{QUERY_STRING};
17    $page =~ s/^ru=[^&;]+[&;]//;
18  =head1 LICENSE  if ($page =~ /[&;]/) {
19      $page = $cgi->get_parameter ('mypage') // '';
20  Copyright 2002-2003 Wakaba <w@suika.fam.cx>  
21      my $charset = $cgi->get_parameter ('_charset_') // 'euc-jp-sw';
22  This program is free software; you can redistribute it and/or    $charset = 'euc-jp-sw' unless $charset eq 'utf-8';
23  modify it under the same terms as Perl itself.    $page = Encode::decode ($charset, $page);
24    } else {
25  =cut    $page = Encode::decode ('euc-jp-sw', percent_decode_byte ($page));
26    }
27  1; # $Date$  
28    my $url = get_page_url ($page);
29    
30    print qq[Status: 301 Moved
31    Location: $url
32    Content-Type: text/html; charset=utf-8
33    
34    <!DOCTYPE HTML>
35    <html lang=en>
36    <title>301 Moved</title>
37    <h1>Moved</h1>
38    <p>See <a href="@{[htescape ($url)]}">other page</a>.];
39    exit;
40    
41    sub get_page_url ($) {
42      my $wiki_name = shift;
43      $wiki_name = percent_encode ($wiki_name);
44      $wiki_name =~ s/%2F/+/g;
45      $wiki_name = $sw4_url . 'n/' . $wiki_name;
46      return $wiki_name;
47    } # get_page_url
48    
49    sub percent_encode ($) {
50      my $s = Encode::encode ('utf8', $_[0]);
51      $s =~ s/([^A-Za-z0-9_~-])/sprintf '%%%02X', ord $1/ges;
52      return $s;
53    } # percent_encode
54    
55    sub percent_decode ($) { # input should be a byte string.
56      my $s = shift;
57      $s =~ s/%([0-9A-Fa-f]{2})/pack 'C', hex $1/ge;
58      return Encode::decode ('utf-8', $s); # non-UTF-8 octet converted to \xHH
59    } # percent_decode
60    
61    sub percent_decode_byte ($) { # input should be a byte string.
62      my $s = shift;
63      $s =~ s/%([0-9A-Fa-f]{2})/pack 'C', hex $1/ge;
64      return $s;
65    } # percent_decode_byte
66    
67    sub htescape ($) {
68      my $s = shift;
69      $s =~ s/&/&amp;/g;
70      $s =~ s/</&lt;/g;
71      $s =~ s/"/&quot;/g;
72      return $s;
73    } # htescape

Legend:
Removed from v.1.54.2.1  
changed lines
  Added in v.1.62

admin@suikawiki.org
ViewVC Help
Powered by ViewVC 1.1.24