[multiparam interwiki]
InterWikiを複数パラメータ($1,$2,$3...)対応にします。
csv_split()追加
# yakty add [multiparam interwiki] start sub csv_split { my ($tmp, $sep) = (@_, ','); $tmp .= "$sep"; my @values = map {/^"(.*)"$/ ? scalar($_ = $1, s/""/"/g, $_) : $_} ($tmp =~/("[^"]*(?:""[^"]*)*"|[^$sep]*)$sep/g); return @values; } # yakty add [multiparam interwiki] end
multiparam_interwiki()追加
- 2004-02-08 (Sun) 16:35:06 パラメータを一つしかとらないInterWikiNameの場合は:で分解したのをつなげてから渡すように変更。
# yakty add [multiparam interwiki] start sub multiparam_interewiki { my ($s, @list) = @_; if($s =~ /\b(euc|sjis|ykwk|asis|isbn)\(\$2\)/){ for(my $i=1; $i<=@list; $i++){ $s =~ s/\b(euc|sjis|ykwk|asis|isbn)\(\$$i\)/&interwiki_convert($1, $list[$i-1])/e; } } else { $s =~ s/\b(euc|sjis|ykwk|asis|isbn)\(\$1\)/&interwiki_convert($1, join(":", @list))/e; } return $s; } # yakty add [multiparam interwiki] end
make_link()内の変更
if ($name =~ /^$interwiki_name$/ and $interwiki{$1}) { my ($remoteurl, $localname) = ($interwiki{$1}, $2); #$remoteurl =~ s/\b(euc|sjis|ykwk|asis|isbn)\(\$1\)/&interwiki_convert($1, $localname)/e; # yakty del [multiparam interwiki] $remoteurl = &multiparam_interewiki($remoteurl, &csv_split($localname, ':')); # yakty add [multiparam interwiki] $name = $remoteurl if ($remoteurl =~ /^(https?|ftp):[^\?]+\.(gif|png|jpe?g)$/ and $use_autoimg); } if ($chunk =~ /^$interwiki_name$/ and $interwiki{$1}) { ($chunk, my $localname) = ($interwiki{$1}, $2); #$chunk =~ s/\b(euc|sjis|ykwk|asis|isbn)\(\$1\)/&interwiki_convert($1, $localname)/e; # yakty del [multiparam interwiki] $chunk = &multiparam_interewiki($chunk, &csv_split($localname, ':')); # yakty add [multiparam interwiki] }
[multiparam interwikibox]
InterWikiBoxも複数パラメータ対応に。
グローバル変数定義
#my $embed_interwiki = '^\[\[#(box|text|password):(\S+)\]\]$'; # Walrus add [InterWikiBox] # yakty del [multiparam interwikibox] my $embed_interwiki = '^\[\[#(((box|text|password)(\(\d+\))?:)+)(\S+)\]\]$'; # Walrus add [InterWikiBox] # yakty add [multiparam interwikibox]
embedded_to_html()内の変更
# Walrus add [InterWikiBox] start #} elsif ($embedded =~ /$embed_interwiki/ and my $remoteurl = $interwiki{$2}) { # yakty del [multiparam interwikibox] # $_ = &make_interwiki_box($1, $2); # yakty del [multiparam interwikibox] } elsif ($embedded =~ /$embed_interwiki/ and my $remoteurl = $interwiki{$+}) { # yakty add [multiparam interwikibox] $_ = &make_interwiki_box($1, $+); # yakty add [multiparam interwikibox] return ($_) ? $_ : &escape($embedded); # Walrus add [InterWikiBox] end
do_interwiki_box()内の変更
# Walrus add [InterWikiBox] start sub do_interwiki_box { my $remoteurl = $interwiki{$form{'myintername'}}; if ($remoteurl) { #$remoteurl =~ s/\b(euc|sjis|ykwk|asis|isbn)\(\$1\)/&interwiki_convert($1, $form{'mylocalname'})/e; # yakty del [multiparam interwikibox] $remoteurl = &multiparam_interewiki($remoteurl, param('mylocalname')); # yakty add [multiparam interwikibox] print "Location: $remoteurl\n\n"; exit(1); } else { &do_read; } } # Walrus add [InterWikiBox] end
make_interwiki_box()内の変更
sub make_interwiki_box { my ($localname, $intername) = @_; my %ignoretype = ( 'box' => 'text', 'text' => 'text', 'pass' => 'password', 'password' => 'password' ); # yakty add [multiparam interwikibox] start my @names = split /:/, $localname; my @boxes; foreach my $name (split /:/, $localname){ next unless($name =~ /^(.+?)(\((\d+)\))?$/); next unless(defined($ignoretype{$1})); my ($type, $size) = ($1, $3); push @boxes, qq(<input type="$ignoretype{$type}" name="mylocalname" value="" size="$size">); } # yakty add [multiparam interwikibox] end #my $converted = ($ignoretype{$localname}) ? <<EOD : undef; # yakty del [multiparam interwikibox] return (@boxes) ? <<EOD : undef; # yakty add [multiparam interwikibox] <form action="$url_xcg" method="post"><!-- yakty mod [for XREA] --> <input type="hidden" name="mycmd" value="interwikibox"> <input type="hidden" name="mypage" value="$form{mypage}"> <input type="hidden" name="myintername" value="$intername"> $intername: <!--input type="\$ignoretype{\$localname}" name="mylocalname" value="" size="50"--><!-- yakty del [multiparam interwikibox] --> @{[join("\n", @boxes)]} <!-- yakty add [multiparam interwikibox] --> <input type="submit" value="Submit"> </form> EOD }