[ 新規 | 編集 | 差分 ] [ 検索 | 一覧 | 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()追加

編集
# 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
}

02523