表紙 | 新規 | 編集 | 編集 | 差分 | 一覧 | RSS | 検索 | 閲覧履歴 | 作成履歴 | 更新履歴

make_link関数 - YukiWikiベースのPonyWikiのソースを読んでみる その23

YukiWikiベースのPonyWikiのソースを読んでみる その23

渡された引数のデータ(テキスト)からhtmlのリンクを作成していく関数。

処理は以下の通り。

sub make_link {
    my $chunk = shift;
    if ($chunk =~ /^(http|https|ftp):/) {
        if ($use_autoimg and $chunk =~ /\.(gif|png|jpeg|jpg)$/) {
            return qq(<a href="$chunk"><img src="$chunk"></a>);
        } else {
            return qq(<a href="$chunk">$chunk</a>);
        }
    } elsif ($chunk =~ /^(mailto):(.*)/) {
        return qq(<a href="$chunk">$2</a>);
    } elsif ($chunk =~ /^$embedded_name$/) {
        return &embedded_to_html($chunk);
    } elsif ($chunk =~ /^$inline_plugin$/) {
        # InlinePlugin.
        my $plugin_name = $1;
        my $argument = $2;
        my $result = $plugin_manager->call($plugin_name, 'inline', $argument);
        if (defined($result)) {
            return $result;
        } else {
            return $chunk;
        }
    } else {
        $chunk = &unarmor_name($chunk);
        $chunk = &unescape($chunk); # To treat '&' or '>' or '<' correctly.
        my $cookedchunk = &encode($chunk);
        my $escapedchunk = &escape($chunk);

        if ($database{$chunk}) {
            my $subject = &escape(&get_subjectline($chunk, delimiter => ''));
            return qq(<a title="$subject" href="$url_cgi?$cookedchunk">$escapedchunk</a>);
        } elsif ($page_command{$chunk}) {
            return qq(<a title="$escapedchunk" href="$url_cgi?$cookedchunk">$escapedchunk</a>);
        } else {
            return qq($escapedchunk<a title="$resource{editthispage}" class="editlink" href="$url_cgi?mycmd=edit&amp;mypage=$cookedchunk">$editchar</a>);
        }
    }
}

''TrackBack'' - http://you-like.to/cgi-bin/ponytail/yukiwiki/wiki.cgi/make_link%b4%d8%bf%f4

先頭へ