| 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; } |
| 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 |
# ページの内容を与える |
# ページの内容を与える |
| 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> |
| 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 |
| 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やページの名前からリンクを作る |
| 688 |
} elsif ($name =~ /^mailto:(.*)/) { |
} elsif ($name =~ /^mailto:(.*)/) { |
| 689 |
my $address = $1; |
my $address = $1; |
| 690 |
return qq|<<a href="$name">$address</a>>|; |
return qq|<<a href="$name">$address</a>>|; |
| 691 |
} elsif ($name =~ /^urn:[0-9A-Za-z_:-]+/) { |
} elsif ($name =~ m#^urn:[0-9A-Za-z_:;/.-]+#) { |
| 692 |
return qq|<<a href="/uri-res/N2L?${name}">$name</a>>|; |
return qq|<<a href="/uri-res/N2L?${name}">$name</a>>|; |
| 693 |
} else { |
} else { |
| 694 |
my $name2 = $name; $name2 =~ tr/\x20/-/; |
my $name2 = $name; $name2 =~ tr/\x20/-/; |
| 700 |
return qq|<a href="$thisurl?mycmd=read;mypage=$percent_name" class="wiki">$name</a>|; |
return qq|<a href="$thisurl?mycmd=read;mypage=$percent_name" class="wiki">$name</a>|; |
| 701 |
} else { |
} else { |
| 702 |
my $percent_name = &encode_percent($name2); |
my $percent_name = &encode_percent($name2); |
| 703 |
return qq|<a href="$thisurl?mycmd=edit;mypage=$percent_name" class="wiki newpage">$name?</a>|; |
return qq|<a href="$thisurl?mycmd=edit;mypage=$percent_name" class="wiki newpage">$name<span class="mark">?</span></a>|; |
| 704 |
} |
} |
| 705 |
} |
} |
| 706 |
} |
} |
| 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>'); |
| 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>'); |
| 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 |
} |
} |
| 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 $_) { |
| 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$/) { |