/[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.2 by wakaba, Mon Feb 4 13:31:47 2002 UTC revision 1.13 by wakaba, Tue Apr 2 00:28:14 2002 UTC
# Line 40  my $dbmopen = 0; Line 40  my $dbmopen = 0;
40  # データベース名(.pag, .dir, .dbなどは不要)  # データベース名(.pag, .dir, .dbなどは不要)
41  # $dbmopen = 1のときはデータベース名、  # $dbmopen = 1のときはデータベース名、
42  # $dbmopen = 0のときはディレクトリ名になる。  # $dbmopen = 0のときはディレクトリ名になる。
43  my $dbname = './wiki';  my $dbname = './wikidata';
44  my $diffdbname = './wikidiff';  my $diffdbname = './wikidiff';
45  ##############################  ##############################
46  # 修正者の氏名(自由に変更してください)  # 修正者の氏名(自由に変更してください)
# Line 75  my $preview_color = '#FFCCCC'; Line 75  my $preview_color = '#FFCCCC';
75  ##############################  ##############################
76  # 全ページのスタイル  # 全ページのスタイル
77  my $style = <<'EOD';  my $style = <<'EOD';
78    @import '/s/simpledoc';
79  pre, dl, ul, ol, p, blockquote { line-height:120%; }  pre, dl, ul, ol, p, blockquote { line-height:120%; }
80    a.wiki .mark    {vertical-align: sub, color: GrayText}
81  a { text-decoration: none; }  a { text-decoration: none; }
82  a:link { color: #0000FF; background-color: #FFFFFF; }  a:link { color: #0000FF; background-color: #FFFFFF; }
83  a:visited { color: #9900CC; background-color: #FFFFFF; }  a:visited { color: #9900CC; background-color: #FFFFFF; }
# Line 108  my @uneditable = ( $whatsnew ); Line 110  my @uneditable = ( $whatsnew );
110  # 文字']'を1つ多くとるようにしている。  # 文字']'を1つ多くとるようにしている。
111  #  #
112  my $WikiName = '([A-Z][a-z]+([A-Z][a-z]+)+)';  my $WikiName = '([A-Z][a-z]+([A-Z][a-z]+)+)';
113  my $BracketName = '\[\[([^>\s]+?\]?)\]\]';  my $BracketName = '\[\[([^>\x09]+?\]?)\]\]';
114    
115  # アイコン部分のタグ  # アイコン部分のタグ
116  my $IconTag = ''; #<<"EOD";  my $IconTag = ''; #<<"EOD";
# Line 233  sub editpage { Line 235  sub editpage {
235      $page_msg = &escape($page_msg);      $page_msg = &escape($page_msg);
236      print <<"EOD";      print <<"EOD";
237  <form action="$thisurl" method="post">  <form action="$thisurl" method="post">
238  <input type="hidden" name="mycmd" value="preview">  <!--<input type="hidden" name="mycmd" value="preview">-->
239  <input type="hidden" name="mypage" value="$page_name">  <input type="hidden" name="mypage" value="$page_name">
240  <input type="hidden" name="mydigest" value="$digest">  <input type="hidden" name="mydigest" value="$digest">
241  <textarea cols="$cols" rows="$rows" name="mymsg" wrap="virtual">$page_msg</textarea><br>  <textarea cols="$cols" rows="$rows" name="mymsg" wrap="virtual">$page_msg</textarea><br>
242  <input type="submit" value="プレビュー">  <input type="submit" name="myspecial_preview" value="確認">
243    <input type="submit" name="myspecial_write" value="確認せず変更">
244  </form>  </form>
245  <hr>  <hr>
246  <h3>テキスト整形のルール</h3>  <h3>テキスト整形のルール</h3>
# Line 563  sub inline { Line 566  sub inline {
566      $line =~ s|'''([^']+?)'''|<strong>$1</strong>|g;      $line =~ s|'''([^']+?)'''|<strong>$1</strong>|g;
567      $line =~ s|''([^']+?)''|<em>$1</em>|g;                $line =~ s|''([^']+?)''|<em>$1</em>|g;          
568      $line =~ s!      $line =~ s!
569                  (         (
570                      ((mailto|http|https|ftp):[\x21-\x7E]*) # Direct http://...           (?:&lt;(?:mailto|http|https|ftp|urn):[\x21-\x7E]*)&gt;
571                          |         #| (?:$WikiName)                         # LocalLinkLikeThis
572                      ($WikiName)                         # LocalLinkLikeThis         | (?:$BracketName)                      # [[日本語リンク]]
573                          |         )
                     ($BracketName)                      # [[日本語リンク]]  
                 )  
574              !              !
575                  &make_link($1)                  &make_link($1)
576              !gex;              !gex;
# Line 579  sub inline { Line 580  sub inline {
580  # ページのタイトルからページの内容を得る  # ページのタイトルからページの内容を得る
581  sub get_page {  sub get_page {
582      my $page_name = shift;      my $page_name = shift;
583      return $database{$page_name};      return $database{$page_name} || $database{'[['.$page_name.']]'};
584  }  }
585    
586  # ページの内容を与える  # ページの内容を与える
# Line 616  sub set_page { Line 617  sub set_page {
617  sub print_header {  sub print_header {
618      my $title = shift;      my $title = shift;
619      print <<"EOD";      print <<"EOD";
620  Content-type: text/html  Content-type: text/html; charset=${charset}
621    
622  <html><head>  <html><head>
623  <title>$title</title>  <title>$title</title>
# Line 646  EOD Line 647  EOD
647  <a href="$thisurl?mycmd=list">一覧</a> |  <a href="$thisurl?mycmd=list">一覧</a> |
648  $editlink  $editlink
649  <a href="$thisurl?mycmd=search">単語検索</a> |  <a href="$thisurl?mycmd=search">単語検索</a> |
650  <a href="$thisurl?mycmd=read;mypage=$whatsnew">最終更新</a>  <a href="$thisurl?mycmd=read;mypage=$whatsnew">最近の更新</a>
651   ]   ]
652  </p>  </p>
653  EOD  EOD
# Line 655  EOD Line 656  EOD
656  # ページのフッタを出力  # ページのフッタを出力
657  sub print_footer {  sub print_footer {
658      print <<"EOD";      print <<"EOD";
659  <address>  <div class="navigation">
 <a href="http://www.hyuki.com/yukiwiki/">YukiWiki</a> 1.6.6 Copyright (C) 2000,2001 by <a href="http://www.hyuki.com/">Hiroshi Yuki.</a>  
 + <a href="$modifierlink">$modifier</a> ${version}.  
660  [<a href="/" title="このサーバーの首頁">/</a>  [<a href="/" title="このサーバーの首頁">/</a>
661  <a href="/map" title="このサーバーの案内">地図</a>  <a href="/map" title="このサーバーの案内">地図</a>
662  <a href="/search/" title="このサーバーの検索">検索</a>]  <a href="/search/" title="このサーバーの検索">検索</a>]
663  </address>  </div>
 </body></html>  
664  EOD  EOD
665      print <<'EOH';
666    <div class="update">
667    <a href="http://www.hyuki.com/yukiwiki/">YukiWiki</a> 1.6.6 Copyright (C) 2000,2001 by <a href="http://www.hyuki.com/">Hiroshi Yuki.</a> ${version}
668    + <a href="$modifierlink">$modifier</a>.
669    <a href="/gate/cvs/wakaba/wiki/" title="CVS Repository">
670    $Revision$ $Date$
671    </a>
672    </div>
673    </body></html>
674    EOH
675  }  }
676    
677  # URLやページの名前からリンクを作る  # URLやページの名前からリンクを作る
678  sub make_link {  sub make_link {
679      my $name = shift;      my $name = shift;
680      if ($name =~ /^(http|https|ftp).*?(\.gif|\.png|\.jpeg|\.jpg)?$/) {      $name =~ s/^&lt;(.*)&gt;$/$1/;
681        $name =~ s/^\[\[(.*)\]\]$/$1/;
682        if ($name =~ /^(http|https|ftp).*?(\.png|\.jpeg|\.jpg)?$/) {
683          if ($2) {          if ($2) {
684              return qq|<a href="$name"><img border="0" src="$name" /></a>|;              return qq|<a href="$name"><img border="0" src="$name" /></a>|;
685          } else {          } else {
686              return qq|<a href="$name">$name</a>|;              return qq|&lt;<a href="$name">$name</a>&gt;|;
687          }          }
688      } elsif ($name =~ /^mailto:(.*)/) {      } elsif ($name =~ /^mailto:(.*)/) {
689          my $address = $1;          my $address = $1;
690          return qq|<a href="$name">$address</a>|;          return qq|&lt;<a href="$name">$address</a>&gt;|;
691      } elsif ($database{$name}) {      } elsif ($name =~ m#^urn:[0-9A-Za-z_:;/.-]+#) {
692          my $percent_name = &encode_percent($name);          return qq|&lt;<a href="/uri-res/N2L?${name}">$name</a>&gt;|;
693          return qq|<a href="$thisurl?mycmd=read;mypage=$percent_name">$name</a>|;      } else {
694      } else {        my $name2 = $name; $name2 =~ tr/\x20/-/;
695          my $percent_name = &encode_percent($name);        if ($database{$name2}) {
696          return qq|$name<a href="$thisurl?mycmd=edit;mypage=$percent_name">?</a>|;          my $percent_name = &encode_percent($name2);
697            return qq|<a href="$thisurl?mycmd=read;mypage=$percent_name" class="wiki">$name</a>|;
698          } elsif ($database{'[['.$name2.']]'}) {
699            my $percent_name = &encode_percent('[['.$name2.']]');
700            return qq|<a href="$thisurl?mycmd=read;mypage=$percent_name" class="wiki">$name</a>|;
701          } else {
702            my $percent_name = &encode_percent($name2);
703            return qq|<a href="$thisurl?mycmd=edit;mypage=$percent_name" class="wiki newpage">$name<span class="mark">?</span></a>|;
704          }
705      }      }
706  }  }
707    
# Line 711  sub convert_html { Line 729  sub convert_html {
729      my (@txt) = split(/\n/, $txt);      my (@txt) = split(/\n/, $txt);
730      foreach (@txt) {      foreach (@txt) {
731          chomp;          chomp;
732          if (/^\*\*(.*)/) {          if (/^\*\*\*\*\*(.*)/) {
733                push(@result, splice(@saved), '<h6>' . &inline($1) . '</h6>');
734            } elsif (/^\*\*\*\*(.*)/) {
735                push(@result, splice(@saved), '<h5>' . &inline($1) . '</h5>');
736            } elsif (/^\*\*\*(.*)/) {
737                push(@result, splice(@saved), '<h4>' . &inline($1) . '</h4>');
738            } elsif (/^\*\*(.*)/) {
739              push(@result, splice(@saved), '<h3>' . &inline($1) . '</h3>');              push(@result, splice(@saved), '<h3>' . &inline($1) . '</h3>');
740          } elsif (/^\*(.*)/) {          } elsif (/^\*(.*)/) {
741              push(@result, splice(@saved), '<h2>' . &inline($1) . '</h2>');              push(@result, splice(@saved), '<h2>' . &inline($1) . '</h2>');
# Line 720  sub convert_html { Line 744  sub convert_html {
744          } elsif (/^(-{1,3})(.*)/) {          } elsif (/^(-{1,3})(.*)/) {
745              &back_push('ul', length($1));              &back_push('ul', length($1));
746              push(@result, '<li>' . &inline($2) . '</li>');              push(@result, '<li>' . &inline($2) . '</li>');
747            } elsif (/^(={1,3})(.*)/) {
748                &back_push('ol', length($1));
749                push(@result, '<li>' . &inline($2) . '</li>');
750          } elsif (/^:([^:]+):(.*)/) {          } elsif (/^:([^:]+):(.*)/) {
751              &back_push('dl', 1);              &back_push('dl', 1);
752              push(@result, '<dt>' . &inline($1) . '</dt>', '<dd>' . &inline($2) . '</dd>');              push(@result, '<dt>' . &inline($1) . '</dt>', '<dd>' . &inline($2) . '</dd>');
# Line 732  sub convert_html { Line 759  sub convert_html {
759              push(@result, "<p>");              push(@result, "<p>");
760          } elsif (/^(\s+.*)$/) {          } elsif (/^(\s+.*)$/) {
761              &back_push('pre', 1);              &back_push('pre', 1);
762              push(@result, &escape($1)); # Not &inline, but &escape              #push(@result, &escape($1)); # Not &inline, but &escape
763                push(@result, &inline($1)); # Not &inline, but &escape
764          } else {          } else {
765              push(@result, &inline($_));              push(@result, &inline($_));
766          }          }
# Line 758  sub back_push { Line 786  sub back_push {
786  }  }
787    
788  # 編集可能ページか?  # 編集可能ページか?
789  sub is_editable {  sub is_editable {return 1;
790    ## TODO: ...
791      my ($pagename) = @_;      my ($pagename) = @_;
792      foreach (@uneditable) {      foreach (@uneditable) {
793          if ($pagename eq $_) {          if ($pagename eq $_) {
# Line 771  sub is_editable { Line 800  sub is_editable {
800      return 0;      return 0;
801  }  }
802    
803  # Validな名前か?  # Validな名前か?
804  sub is_valid_name {  sub is_valid_name {
805      my ($pagename) = @_;      my ($pagename) = @_;
806      if ($pagename =~ /^$WikiName$/) {      if ($pagename =~ /^$WikiName$/) {
# Line 833  sub print_sample { Line 862  sub print_sample {
862  ----  ----
863  *大見出し2  *大見出し2
864  **小見出し2-1  **小見出し2-1
865  http://www.hyuki.com/  &lt;http://suika.fam.cx/&gt;
866  **小見出し2-2  **小見出し2-2
867    
868  [[結城浩]]  [[結城浩]]

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

admin@suikawiki.org
ViewVC Help
Powered by ViewVC 1.1.24