差分表示
- 最後の更新で追加された行はこのように表示します。
- 最後の更新で削除された行はこのように表示します。
不正なHTML出力をしないようにする。
* [fix invalid html]
記法によって不正なHTMLが出力される場合があったのでそれを修正。
下記の点が修正されています。
-空<p></p>問題
-リストの途中で改行した場合の問題
-<blockquote>問題
-見出しの次の行に空行を入れなかった場合の問題
-リストの入れ子が不正になる問題(まだ不完全かも?)
-<img>タグのalt属性
さらにブロック要素の入れ子にも対応しました。
↓のような記述が可能になりました。
-リスト
整形済み
整形済み
--リスト
整形済み
整形済み
--リスト
** back_push()変更
-2003-08-06 (Wed) 13:16:33 リストの不正な入れ子を修正する為に、処理を変更
-2003-08-06 (Wed) 16:57:37 エラーになる場合があったので修正
-2003-08-06 (Wed) 17:42:17 もっとスマートな実装を思いついたので変更
-2003-08-07 (Thu) 00:04:07 さらに修正
# yakty del [fix invalid html] start
#sub back_push {
# my ($tag, $level, $savedref, $resultref, $attr) = @_;
# while (@$savedref > $level) {
# push(@$resultref, shift(@$savedref));
# }
# if ($savedref->[0] ne "</$tag>") {
# push(@$resultref, splice(@$savedref));
# }
# while (@$savedref < $level) {
# unshift(@$savedref, "</$tag>");
# push(@$resultref, "<$tag$attr>");
# }
#}
# yakty del [fix invalid html] end
# yakty add [fix invalid html] start
sub back_push {
#my ($tag, $level, $savedref, $resultref, $attr) = @_;
my ($tag, $level, $savedref, $resultref, $attr, $ignoreref) = @_;
while(grep(/$tag/, @$savedref) > $level){
push(@$resultref, shift(@$savedref));
}
if($savedref->[0] eq "</p>"){
push(@$resultref, shift(@$savedref));
}
while($savedref->[0] ne "</$tag>"
and $savedref->[0] ne "</li>"
and grep(/<\/li>/, @$savedref) > 0){
push(@$resultref, shift(@$savedref));
}
#while(@$savedref and $savedref->[0] ne "</$tag>"){
while($savedref->[0] ne "</$tag>" and grep(/<\/$tag>/, @$savedref) >= $level){
push(@$resultref, shift(@$savedref));
}
while (grep(/$tag/, @$savedref) < $level) {
unshift(@$savedref, "</$tag>");
push(@$resultref, "<$tag$attr>");
}
}
# yakty add [fix invalid html] end
** text_to_html()内の変更
-2003-08-06 (Wed) 09:21:09 ページの先頭に見出しがあると空<p></p>が生成されるのを抑制
my (@txt) = split(/\n/, $txt);
my (@toc);
my $tocnum = 0;
my (@saved, @result);
#unshift(@saved, "</p>"); # yakty del [fix invalid html]
#push(@result, "<p>"); # yakty del [fix invalid html]
# foreach (@txt) {
for (my $line = 0; $line < @txt; $line++) {
- リストの不正な入れ子を修正
- back_push()の処理変更で対応できるようになったので元に戻しました
} elsif (/^(-{1,3})(.*)/) {
&back_push('ul', length($1), \@saved, \@result);
#push(@result, '<li>' . &inline($2) . '</li>'); # yakty del [fix invalid html]
# yakty add [fix invalid html] start
if($form{mypage} eq $RecentChanges){
push(@result, '<li>' . &inline($2) . '</li>');
} else {
push(@result, shift(@saved)) if(@saved[0] eq '</li>');
push(@result, shift(@saved)) if($saved[0] eq '</li>');
push(@result, '<li>' . &inline($2));
unshift(@saved,'</li>');
}
# yakty add [fix invalid html] end
} elsif (/^(>{1,3})(.*)/) {
&back_push('blockquote', length($1), \@saved, \@result);
push(@result, '<p>' . &inline($2));
unshift(@saved, '</p>'); # yakty add [fix invalid html]
# } elsif (/^\s*$/) { # Walrus del [convine pre]
} elsif (/^[\x0D\x0A]*$/) { # Walrus add [convine pre]
push(@result, splice(@saved));
#unshift(@saved, "</p>"); # yakty del [fix invalid html]
#push(@result, "<p>"); # yakty del [fix invalid html]
} else {
# yakty add [fix invalid html] start
if($#saved < 0){
unshift(@saved, "</p>");
push(@result, "<p>");
}
# yakty add [fix invalid html] end
push(@result, &inline($_));
# yakty add [keep newline] start
if(@saved[0] eq '</p>'){
if($saved[0] eq '</p>'){
push(@result, '<br />');
}
# yakty add [keep newline] end
}
foreach (@toc) {
if (/^(-{1,3})(.*)/) {
&back_push('ul', length($1), \@tocsaved, \@tocresult);
#push(@tocresult, '<li>' . $2 . '</li>'); # yakty del [fix invalid html]
# yakty add [fix invalid html] start
push(@tocresult, shift(@tocsaved)) if(@tocsaved[0] eq '</li>');
push(@tocresult, shift(@tocsaved)) if($tocsaved[0] eq '</li>');
push(@tocresult, '<li>' . $2);
unshift(@tocsaved,'</li>');
# yakty add [fix invalid html] end
}
}
** make_link()内の変更
#if ($name =~ /^(https?|ftp):[^\?]+\.(gif|png|jpe?g)$/ and $use_autoimg) { # yakty del [fix invalid html]
# $escapedname = qq(<img src="$escapedname">); # yakty del [fix invalid html]
if ($name =~ /^(https?|ftp):[^\?]+?([^\/]+\.(gif|png|jpe?g))$/ and $use_autoimg) { # yakty add [fix invalid html]
$escapedname = qq(<img src="$escapedname" alt="$2">); # yakty add [fix invalid html]
return $escapedname if ($name eq $chunk);
}
03682