[ 新規 ] [ 検索 | 一覧 | FrontPage ] [ 履歴 (RSS) | 差分履歴 (RSS) ] [ ログイン ]
【PR】Amazon | SL-C3000 | SL-C1000(3/18発売!) | SL-C860 | SL-6000W | SL-6000L | SL-6000N

WalWiki/カスタマイズ/複数パラメータ対応InterWiki

差分表示


編集前の状態に戻します。
複数パラメータ対応InterWiki

* [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
 }


02528