差分表示
- 最後の更新で追加された行はこのように表示します。
- 最後の更新で削除された行はこのように表示します。
*[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} 分だけ、コメントのブロックを読み飛ばしてから
追加されたコメントを付加
--WalWiki2.0.5.wal.4.2対応(似たような正規表現を使ってるだけ…処理は全然違うし…(苦笑))
--WalWiki2.0.5.wal.4.3対応
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
04484