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

- 2004-01-16 (Fri) 17:07:09 ykwk($1)にもとりあえず対応したつもり(未テスト)
- 2004-01-23 (Fri) 23:01:00 SmartInterWiki変換を行わない条件を追加

 # 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()内の変更

- 2004-01-16 (Fri) 13:18:22 エイリアスでも処理できるように変更
- 2004-01-16 (Fri) 15:28:22 ページがAliasLinkName,InterWikiNameの場合には置換を行わないように変更
- 2004-01-16 (Fri) 18:17:34 AntennaSiteNameの場合にも置換を行わないように変更
- 2004-04-14 (Wed) 00:28:04 変換位置を差分を取得する前に変更

     if ($form{mymsg}) {
         # 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
     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


02585