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 (&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