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 |
# 修正者の氏名(自由に変更してください) |
# 修正者の氏名(自由に変更してください) |
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; } |
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"; |
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> |
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://... |
(?:<(?:mailto|http|https|ftp|urn):[\x21-\x7E]*)> |
571 |
| |
#| (?:$WikiName) # LocalLinkLikeThis |
572 |
($WikiName) # LocalLinkLikeThis |
| (?:$BracketName) # [[日本語リンク]] |
573 |
| |
) |
|
($BracketName) # [[日本語リンク]] |
|
|
) |
|
574 |
! |
! |
575 |
&make_link($1) |
&make_link($1) |
576 |
!gex; |
!gex; |
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やページの名前からリンクを作る |
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/^<(.*)>$/$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|<<a href="$name">$name</a>>|; |
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|<<a href="$name">$address</a>>|; |
691 |
} elsif ($database{$name}) { |
} elsif ($name =~ m#^urn:[0-9A-Za-z_:;/.-]+#) { |
692 |
my $percent_name = &encode_percent($name); |
return qq|<<a href="/uri-res/N2L?${name}">$name</a>>|; |
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 |
|
|
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$/) { |
862 |
---- |
---- |
863 |
*大見出し2 |
*大見出し2 |
864 |
**小見出し2-1 |
**小見出し2-1 |
865 |
http://www.hyuki.com/ |
<http://suika.fam.cx/> |
866 |
**小見出し2-2 |
**小見出し2-2 |
867 |
|
|
868 |
[[結城浩]] |
[[結城浩]] |