【しばらく編集不可モードで運営します】 編集(管理者用) | 差分 | 新規作成 | 一覧 | RSS | FrontPage | 検索 | 更新履歴

YukiWiki2不具合報告/整形済みテキストとコメント欄 - 両者が絡んだ問題。

目次

両者が絡んだ問題。

問題点

問題点1

整形済みテキスト内にコメント欄を示す句があると、それ以降に設置されたコメント欄への投稿が、整形済みテキスト内のものに反映されてしまいます。

例。 ページ下部からコメントを投稿してみてください。

 [[#comment]]

問題点2

整形済みテキストの次行にコメント欄などを置くと、コメント欄が整形済みテキスト中に表示されます。 正しく整形済みテキスト部を閉じられないようです。 以下はその例になります。

 [[#comment]]

次のように記述しています。

 (行頭) てすと
 (行頭)[[#commnet]]

塚本さんからの修正案

 28c28
 < my $version = '2.0.5';
 ---
 > my $version = '2.0.5.1';
 474a475
 >         push(@result, shift(@saved)) if (@saved and $saved[0] eq '</pre>' and /^[^ \t]/);
 1056c1057,1061
 <     if ($content =~ s/(\Q$embed_comment\E)/- $datestr$namestr$form{mymsg}\n$1/) {
 ---
 >     if ($content =~ s/^(\Q$embed_comment\E)/- $datestr$namestr$form{mymsg}\n$1/
 >      or $content =~ s/(\x0D\x0A|\x0D|\x0A)([^ \t]*?\S[^\n]*?)?(\Q$embed_comment\E)/$1$2- $datestr$namestr$form{mymsg}\n$3/
 >      or $content =~ s/^(\Q$embed_rcomment\E)/- $datestr$namestr$form{mymsg}\n$1/
 >      or $content =~ s/(\x0D\x0A|\x0D|\x0A)([^ \t]*?\S[^\n]*?)?(\Q$embed_rcomment\E)/$1$2$3\n- $datestr$namestr$form{mymsg}/
 >     ) {
 1058,1059d1062
 <     } else {
 <         $content =~ s/(\Q$embed_rcomment\E)/$1\n- $datestr$namestr$form{mymsg}/;

解決編

次のようにして解決しました。 この修正は次回の公開のタイミングで反映します。 修正部分だけメモしておきます。

    -----------------------
    sub text_to_html {
    (略)
        foreach (@txt) {
            chomp;
            push(@result, shift(@saved)) if (@saved and $saved[0] eq '</pre>' and /^[^ \t]/);
            if (/^\*\*(.*)/) {
                push(@toc, qq(-- <a href="#i$tocnum">@{[&escape($1)]}</a>\n));
    (略)
    -----------------------
    sub do_comment {
        my ($content) = $database{$form{mypage}};
        my $datestr = &get_now;
        my $namestr = $form{myname} ? " ''[[$form{myname}]]'' : " : " ";
        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}/;
        }
    -----------------------

↑に対するコメント

2003/07/07 15:22:45 by y-Aki

 -    if ($content =~ s/(^|\n)(\Q$embed_comment\E)/- $datestr$namestr$form{mymsg}\n$1$2/) {
 +    if ($content =~ s/(^|\n)(\Q$embed_comment\E)/$1- $datestr$namestr$form{mymsg}\n$2/) {

のほうがよさそう。そうでないと、コメントの前に空行がないと、前の行の末尾にくっついてしまうかも。

この変更の場合、<ul>の中にformができちゃうな。あちらを立てればこちらが立たず状態だな。

 -    if ($content =~ s/(^|\n)(\Q$embed_comment\E)/- $datestr$namestr$form{mymsg}\n$1$2/) {
 +    if ($content =~ s/(^|\n{1,2})(\Q$embed_comment\E)/@{[length($1) != 0 ? "\n" : ""]}- $datestr$namestr$form{mymsg}\n\n$2/) {

↑別の案(カコワル!)

ついでにrcommentのほうも乱れにくく(激しくカコワルイ^^;)↓

 -        $content =~ s/(^|\n)(\Q$embed_rcomment\E)/$1$2\n- $datestr$namestr$form{mymsg}/;
 +        $content =~ s/(^|\n)(\Q$embed_rcomment\E) *([^\n]*)(\n{0,2})/$1$2\n\n- $datestr$namestr$form{mymsg}@{[length($3) != 0 ? "\n\n".$3."\n\n" : "\n"]}/;


y-Akiさん、上の件は理解しました。とりあえずは、
 +    if ($content =~ s/(^|\n)(\Q$embed_comment\E)/$1- $datestr$namestr$form{mymsg}\n$2/) {
として対処中。やっぱりBellsAndWhistlesを入れると汚くなりますねえ。--結城2003-07-12