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

WalWiki/カスタマイズ/SmartInterWiki

編集

URLから登録されているInterWikiに自動変換

[smart interwiki]

編集

YukiWiki:SmartInterWikiを実装してみました。

ブラケットで括られたリンク内にInterWikiとして登録されているURLがあれば
InterWikiに自動的に変換します。

url_convert()追加

編集
# yakty add [smart interwiki] start
sub url_convert {
    my ($url) = @_;
    foreach my $name (keys %interwiki){
        if($interwiki{$name} =~ /(.+)\b(euc|sjis|ykwk|asis|isbn)\(\$1\)(.*)/){
            my ($head, $type, $tail) = ($1, $2, $3);
            if($url =~ /\Q$head\E(.+)\Q$tail\E/){
                my $param = $1;
                next if($param =~ /[=\&]/);
                if($type eq 'sjis' or $type eq 'euc'){
                    $param = &decode($param);
                    &code_convert(\$param, $kanjicode);
                } elsif($type eq 'ykwk'){
                    $param = &decode($param);
                    if(&is_bracket_name($param)){
                        $param = &unarmor_name($param);
                    }
                }
                return $name . ":" . $param;
            }
        }
    }
    return $url;
}
# yakty add [smart interwiki] end

smart_interwiki()追加

編集
# yakty add [smart interwiki] start
sub smart_interwiki {
    my $chunk = shift;
    return $chunk if($chunk =~ /''''''/);
    return $chunk if($chunk =~ /\b(euc|sjis|ykwk|asis|isbn)\(\$1\)/);

    $chunk =~ s!((mailto|http|https|ftp):([^\x00-\x20()<>\x7F-\xFF&?])*(\?([^\x00-\x20()<>\x7F-\xFF])*)?)!
                &url_convert($1)!ex;
    return $chunk;
}
# yakty add [smart interwiki] end

do_write()内の変更

編集
    if (&conflict($form{mypage}, $form{mymsg})) {
        return;
    }

    $form{mymsg} =~ s/\x0D\x0A|\x0D|\x0A/\n/g;                             # Walrus add [unify new-line]
    # yakty add [smart interwiki] start
    if($form{mypage} ne $AliasLinkName and $form{mypage} ne $InterWikiName and $form{mypage} ne $AntennaSiteName){
        $form{mymsg} =~ s/(\[\[(.+?)\]\])/&smart_interwiki($1)/gex;
    }
    # yakty add [smart interwiki] end

02481