[multi comment]
グローバル変数を使ってるのがちょっと気にくわないんだけどこれ以上スマートな実装を思いつかなかった…
もっとスマートな実装方法があれば教えて下さい。
こんな感じに動作します。
グローバル変数定義
- グローバル変数定義に下記の変数を追加してついでに-1に初期化
my $comment_no = -1;
inline()内の変更
- inline() 内で $embed_comment、$embed_rcomment に対しては %link_cache を使用しないように変更
$line =~ s! ( ((mailto|http|https|ftp):([^\x00-\x20()<>\x7F-\xFF])*) # Direct http://... | ($bracket_name) # [[likethis]], [[#comment]], [[Friend:remotelink]] | ($interwiki_definition) # [[Friend http://somewhere/?q=sjis($1)]] | ($wiki_name) # LocalLinkLikeThis ) ! # &make_link($1) # Walrus del [link cache] # (defined($link_cache{$1})) ? $link_cache{$1} : (length($_ = &make_link($1)) < 1024) ? ($link_cache{$1} = $_) : $_ # Walrus add [link cache] # yakty del [multi comment] # yakty add [multi comment] start (defined($link_cache{$1})) ? $link_cache{$1} : ($1 eq $embed_comment or $1 eq $embed_rcomment) ? &make_link($1) : (length($_ = &make_link($1)) < 1024) ? ($link_cache{$1} = $_) : $_ # yakty add [multi comment] end !gex;
embedded_to_html()内の変更
- embedded_to_html() で コメントの場合には $comment_no をインクリメントし、フォームのhidden属性に name="mycmtno" value="$comment_no" を追加
my $lastmodified = &get_info($form{mypage}, $info_LastModified); $comment_no++; # yakty add [multi comment] return <<"EOD"; <form action="$url_cgi" method="post"> <input type="hidden" name="mycmd" value="comment"> <input type="hidden" name="mypage" value="$escapedmypage"> <input type="hidden" name="myLastModified" value="$lastmodified"> <input type="hidden" name="mytouch" value="on"> <input type="hidden" name="mycmtno" value="$comment_no"><!-- yakty add [multi comment] --> $resource{yourname} <input type="text" name="myname" value="" size="10"> <input type="text" name="mymsg" value="" size="80"> <input type="submit" value="$resource{commentbutton}"> </form> EOD
do_comment()内の変更
- do_comment() で $form{mycmtno} 分だけ、コメントのブロックを読み飛ばしてから 追加されたコメントを付加
sub do_comment { my ($content) = $database{$form{mypage}}; my $datestr = &get_now; my $namestr = $form{myname} ? " ''[[$form{myname}]]'' : " : " "; # yakty del [multi comment] start #if ($content =~ s/(^|\n)(\Q$embed_comment\E)/- $datestr$namestr$form{mymsg}\n$1$2/) { # ; #} else { # $content =~ s/(^|\n)(\Q$embed_rcomment\E)/$1$2\n- $datestr$namestr$form{mymsg}/; #} # yakty del [multi comment] end # yakty add [multi comment] start my $cmtno = 0 + $form{mycmtno}; my $contenthead = ""; for(my $i=0; $i<=$cmtno; $i++){ if($content =~ /(^|\n)((\Q$embed_comment\E)|(\Q$embed_rcomment\E))/){ $contenthead .= $`; $content = $'; my $matchstr = $&; if($i == $cmtno){ if ($matchstr =~ s/(\Q$embed_comment\E)/- $datestr$namestr$form{mymsg}\n$1/) { ; } else { $matchstr =~ s/(\Q$embed_rcomment\E)/$1\n- $datestr$namestr$form{mymsg}/; } } $contenthead .= $matchstr; } } $content = $contenthead . $content; # yakty add [multi comment] end