/[pub]/suikawiki/script/lib/suikawiki.pl
Suika

Diff of /suikawiki/script/lib/suikawiki.pl

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

revision 1.2 by wakaba, Thu Mar 27 07:18:51 2003 UTC revision 1.3 by wakaba, Thu Apr 3 01:09:07 2003 UTC
# Line 2  Line 2 
2  use strict;  use strict;
3    
4  package main;  package main;
5    our $VERSION = '2.'.do{my @r=(q$Revision$=~/\d+/g);sprintf "%d."."%02d" x $#r,@r};
6  binmode STDOUT; binmode STDIN;  binmode STDOUT; binmode STDIN;
 require Yuki::YukiWikiCache;  
7  use Fcntl;  use Fcntl;
8    require Yuki::YukiWikiCache;
9    require SuikaWiki::Name::Space;
10    require SuikaWiki::View;
11  require SuikaWiki::Plugin;  require SuikaWiki::Plugin;
12  our %fmt;       ## formatter objects  our %fmt;       ## formatter objects
13  our %embed_command = (  our %embed_command = (
14          searched        => '^\[\[#searched:([^\]]+)\]\]$',          searched        => '^\[\[#searched:([^\]]+)\]\]$',      ## Deprecated
15          form    => qr/\[\[\#form(?:\(([A-Za-z0-9-]+)\))?:'((?:[^'\\]|\\.)*)':'((?:[^'\\]|\\.)*)'(?::'((?:[^'\\]|\\.)*)')?\]\]/,          form    => qr/\[\[\#form(?:\(([A-Za-z0-9-]+)\))?:'((?:[^'\\]|\\.)*)':'((?:[^'\\]|\\.)*)'(?::'((?:[^'\\]|\\.)*)')?\]\]/,
16  );  );
17  our ($modifier_dbtype,$url_cgi,%uri,%PathTo);  our ($modifier_dbtype,$url_cgi,%uri,%PathTo);
18  our (%PageName,$kanjicode,$lang,%ViewDefinition);  our (%PageName,$kanjicode,$lang);
19    
20  my %form;  my %form;
21  our %database;  our %database;
# Line 67  sub do_view { Line 70  sub do_view {
70    my $o = bless {param => \%form, page => $form{mypage}, toc => [],    my $o = bless {param => \%form, page => $form{mypage}, toc => [],
71                   magic => $magic, content => $content,                   magic => $magic, content => $content,
72                   formatter => $fmt{view}, &_compatible_options ()}, 'SuikaWiki::Plugin';                   formatter => $fmt{view}, &_compatible_options ()}, 'SuikaWiki::Plugin';
73    if (!ref $ViewDefinition{$view} || !&{$ViewDefinition{$view}->{check}} ($o)) {    my $view_def = SuikaWiki::View->definition ($view);
74      if (!$view_def->check ($o)) {
75      print "Status: 406 Unsupported Media Type\n";      print "Status: 406 Unsupported Media Type\n";
76      $view = '-UnsupportedMediaType';      $view = '-UnsupportedMediaType';
77        $view_def = SuikaWiki::View->definition ($view);
78    }    }
79    my $media = $ViewDefinition{$view}->{media};    my $media = $view_def->properties->{media};
80    if ($ViewDefinition{$view}->{xmedia} && $UA =~ /Gecko/) {    if ($view_def->properties->{xmedia} && $UA =~ /Gecko/) {
81      $media = $ViewDefinition{$view}->{xmedia};      $media = $view_def->properties->{xmedia};
82      $o->{media} = $media;      $o->{media} = $media;
83    } elsif ($UA =~ m#Mozilla/0\..+Windows#) {    } elsif ($UA =~ m#Mozilla/0\..+Windows#) {
84      $kanjicode = 'shift_jis';      $kanjicode = 'shift_jis';
# Line 87  sub do_view { Line 92  sub do_view {
92                                     -magic => $magic, -last_modified => $lm, o => $o);                                     -magic => $magic, -last_modified => $lm, o => $o);
93      }      }
94    if ($kanjicode ne 'euc') {    if ($kanjicode ne 'euc') {
95      my $s = $fmt{view}->replace ($ViewDefinition{$view}->{template} => $o);      my $s = $fmt{view}->replace ($view_def->as_string => $o, {formatter => $fmt{view}});
96      print &code_convert (\$s => $kanjicode);      print &code_convert (\$s => $kanjicode);
97    } else {    } else {
98      print $fmt{view}->replace ($ViewDefinition{$view}->{template} => $o);      print $fmt{view}->replace ($view_def->as_string => $o, {formatter => $fmt{view}});
99    }    }
100  }  }
101    
# Line 99  sub _do_view_msg (%) { Line 104  sub _do_view_msg (%) {
104    &load_formatter ('view');    &load_formatter ('view');
105    my $o = bless {param => \%form, page => $option{-page}, toc => [], condition => \%option,    my $o = bless {param => \%form, page => $option{-page}, toc => [], condition => \%option,
106                   formatter => $fmt{view}, &_compatible_options ()}, 'SuikaWiki::Plugin';                   formatter => $fmt{view}, &_compatible_options ()}, 'SuikaWiki::Plugin';
107    unless (&{$ViewDefinition{$option{-view}}->{check}} ($o)) {    my $view_def = SuikaWiki::View->definition ($option{-view});
108      unless ($view_def->check ($o)) {
109      print "Status: 406 Unsupported Media Type\n";      print "Status: 406 Unsupported Media Type\n";
110      $option{-view} = '-UnsupportedMediaType';      $option{-view} = '-UnsupportedMediaType';
111        $view_def = SuikaWiki::View->definition ($option{-view});
112    }    }
113    my $media = $ViewDefinition{$option{-view}}->{media};    my $media = $view_def->properties->{media};
114    if ($ViewDefinition{$option{-view}}->{xmedia} && $UA =~ /Gecko/) {    if ($view_def->properties->{xmedia} && $UA =~ /Gecko/) {
115      $media = $ViewDefinition{$option{-view}}->{xmedia};      $media = $view_def->properties->{xmedia};
116      $o->{media} = $media;      $o->{media} = $media;
117    }    }
118    &print_header($option{-page}, -media => $media, o => $o, -goto => $option{-goto});    &print_header($option{-page}, -media => $media, o => $o, -goto => $option{-goto});
119    print $fmt{view}->replace ($ViewDefinition{$option{-view}}->{template} => $o);    print $fmt{view}->replace ($view_def->as_string => $o, {formatter => $fmt{view}});
120  }  }
121    
122  sub id_and_name ($) {  sub id_and_name ($) {
# Line 497  sub make_wikilink ($%) { Line 504  sub make_wikilink ($%) {
504    $option{latest} = $option{latest} ? qq(mycmd=default;x-param=@{[time.[0..9]->[rand 10]]};mypage=) : '';    $option{latest} = $option{latest} ? qq(mycmd=default;x-param=@{[time.[0..9]->[rand 10]]};mypage=) : '';
505        
506    ## Namespace    ## Namespace
507    if ($wiki::page::ns::delimiter && ($name =~ m#\Q$wiki::page::ns::delimiter\E#    #if ($SuikaWiki::Name::Space::VERSION) {
508                                    || $name eq $wiki::page::ns::parent      $name = SuikaWiki::Name::Space::normalize_name (    ## Foo// + .//Bar -> Foo////Bar
509                                    || $name eq $wiki::page::ns::self)) {                SuikaWiki::Name::Space::resolve_relative_name (
510      my @name = split m#\Q$wiki::page::ns::delimiter\E#, $name;                  SuikaWiki::Name::Space::normalize_name ($option{base}, -might_be_ns_path => 1)
511      my @base = split m#\Q$wiki::page::ns::delimiter\E#, $option{base};                    =>
512      if ($name[0] eq $wiki::page::ns::self) {    ## .//Foo//Bar                  SuikaWiki::Name::Space::normalize_name ($name)));
513        @name = (@base, @name[1..$#name]);    #}
     } elsif ($name[0] eq $wiki::page::ns::parent) {     ## ..//Foo//Bar  
       @base = grep {$_} @base; $#base--;  
       @name = (@base, @name[1..$#name]);  
     }  
     $name = join $wiki::page::ns::delimiter, grep {$_} @name;  
   }  
514    $name ||= $PageName{FrontPage};    $name ||= $PageName{FrontPage};
515        
516    if ($database{$name}) {    if ($database{$name}) {
# Line 632  sub init_form { Line 633  sub init_form {
633      }      }
634      $form{mypage} ||= $PageName{FrontPage};      $form{mypage} ||= $PageName{FrontPage};
635      $form{mypage} =~ tr/\x00-\x1F\x7F//d;      $form{mypage} =~ tr/\x00-\x1F\x7F//d;
636        $form{mypage} = SuikaWiki::Name::Space::normalize_name ($form{mypage});
637      $form{mycmd} ||= 'default';      $form{mycmd} ||= 'default';
638    
639      # mypreview_edit        -> do_edit, with preview.      # mypreview_edit        -> do_edit, with preview.
# Line 648  sub init_form { Line 650  sub init_form {
650      # $form{mycmd} is frozen here.      # $form{mycmd} is frozen here.
651      #      #
652    
653      for (grep /^wikiform__/, keys %form) {      for (grep /^(?:wikiform__|pi_)/, keys %form) {
654          $form{$_} = &code_convert (\$form{$_}, $kanjicode);          $form{$_} = &code_convert (\$form{$_}, $kanjicode);
655      }      }
656      $form{mymsg} = &code_convert(\$form{mymsg}, $kanjicode);      $form{mymsg} = &code_convert(\$form{mymsg}, $kanjicode);
# Line 756  EOD Line 758  EOD
758    
759  sub is_editable {  sub is_editable {
760      my ($page) = @_;      my ($page) = @_;
761      if ($page =~ /[\x00-\x20\x7F]/) {      if ($page =~ /[\x00-\x20\[\]\x7F]/) {
762        return 0;        return 0;
763      } elsif ($wiki::page::ns::delimiter) {      ## Use namespace      } elsif ($wiki::page::ns::delimiter) {      ## Use namespace
764        if ($page eq $wiki::page::ns::delimiter        if ($page eq $wiki::page::ns::delimiter
# Line 1167  sub __get_datetime ($) { main::get_now ( Line 1169  sub __get_datetime ($) { main::get_now (
1169  sub resource ($$;%) { shift; &main::Resource (@_) }  sub resource ($$;%) { shift; &main::Resource (@_) }
1170  sub uri ($$) { $main::uri{$_[1]} }  sub uri ($$) { $main::uri{$_[1]} }
1171  sub user_agent_names ($) { $main::UA }  sub user_agent_names ($) { $main::UA }
1172    
1173  sub formatter ($$) {  sub formatter ($$) {
1174    &main::load_formatter ($_[1]);    &main::load_formatter ($_[1]);
1175    $main::fmt{$_[1]};    $main::fmt{$_[1]};
# Line 1176  sub format_converter ($$$) { Line 1179  sub format_converter ($$$) {
1179    $main::fmt{format}->{($_[1]=~/([A-Za-z0-9]\S+)/?$1:'SuikaWiki/0.9').'_to_'.$_[2]}    $main::fmt{format}->{($_[1]=~/([A-Za-z0-9]\S+)/?$1:'SuikaWiki/0.9').'_to_'.$_[2]}
1180    || $main::fmt{format}->{($_[1]=~/([A-Za-z0-9](?:(?!\/)\S)+)/?$1:'SuikaWiki').'_to_'.$_[2]};    || $main::fmt{format}->{($_[1]=~/([A-Za-z0-9](?:(?!\/)\S)+)/?$1:'SuikaWiki').'_to_'.$_[2]};
1181  }  }
1182    sub formatter_replace_if_not_parsed_yet ($$$$) {
1183      my ($o, $context, $p, $attr_name) = @_;
1184      &main::load_formatter ($context);
1185      index ($p->{-option}->{$attr_name}, 'p') > -1 ?
1186        $p->{$attr_name}    ## Already parsed
1187        :
1188        $main::fmt{$context}->replace ($p->{$attr_name}, $o, {formatter => $main::fmt{$context}})
1189      ;
1190    }
1191    
1192  sub cache ($$) {  sub cache ($$) {
1193    our %Cache;    our %Cache;
1194    my (undef, $name, %option) = @_;    my (undef, $name, %option) = @_;
# Line 1238  sub get ($;\%) { Line 1251  sub get ($;\%) {
1251    for my $lang (sort {$option->{accept_language}->{$b} <=> $option->{accept_language}->{$a}} grep {$option->{accept_language}->{$_}!=0} keys %{$option->{accept_language}}) {    for my $lang (sort {$option->{accept_language}->{$b} <=> $option->{accept_language}->{$a}} grep {$option->{accept_language}->{$_}!=0} keys %{$option->{accept_language}}) {
1252      while (length $lang) {      while (length $lang) {
1253        unless ($option->{accept_language}->{defined $option->{accept_language}->{$lang} ? $lang : '*'} == 0) {        unless ($option->{accept_language}->{defined $option->{accept_language}->{$lang} ? $lang : '*'} == 0) {
1254          $option->{resource}->{$lang} ||= &wiki::suikawikiconst::to_hash ($main::database{'WikiResource:'.$lang});          $option->{resource}->{$lang} ||= &wiki::suikawikiconst::to_hash ($main::database{$main::PageName{ResourceNS}.$lang});
1255          $v = $option->{resource}->{$lang}->{$resname};          $v = $option->{resource}->{$lang}->{$resname};
1256          last if defined $v;          last if defined $v;
1257        }        }

Legend:
Removed from v.1.2  
changed lines
  Added in v.1.3

admin@suikawiki.org
ViewVC Help
Powered by ViewVC 1.1.24