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

WalWiki/カスタマイズ/自動リンク

編集

存在するページ名、および別名に対して自動的にリンクを張ります。

[auto link]

編集

関連するカスタマイズ

編集

グローバル変数定義

編集

$auto_link_lengthで指定した文字数以上のページに対して自動的にリンクを張ります。

my %auto_link_list;                                         # yakty add [auto link]
my $auto_link_name = q(\b{2});                              # yakty add [auto link]
my $auto_link_length = 4;                                   # yakty add [auto link]

main()内の変更

編集

※ [alias link definition]を適用してる場合には必ずinit_AliasLinkの後にinit_AutoLinkを記述する。
※ [format rule definition]を適用していない場合は[format rule definition]の行は不要。

sub main {
    open(LOG, ">>${modifier_dir_data}/log.txt") if ($walrus_debugging >= 2);    # Walrus add [for debug]
    &init_resource;
    &check_modifiers;
    &open_db;
    &init_form;
    &init_InterWikiName;
    &init_AntennaSite;
    &init_FormatRules;   # yakty add [format rule definition]
    &init_AliasLink;     # yakty add [alias link definition]
    &init_AutoLink;      # yakty add [auto link]

inline()内の変更

編集
    $line =~ s!
                (
                    ((mailto|http|https|ftp):([^\x00-\x20()<>\x7F-\xFF])*)  # Direct http://...
                        |
                    ($bracket_name)             # [[likethis]], [[#comment]], [[Friend:remotelink]]
                        |
                    ($interwiki_definition)     # [[Friend http://somewhere/?q=sjis($1)]]
                        |
                    ($wiki_name)                # LocalLinkLikeThis
                        |                       # yakty add [auto link]
                    ($auto_link_name)           # yakty add [auto link]
                )
            !
#               &make_link($1)                  # Walrus del [link cache]
#                (defined($link_cache{$1})) ? $link_cache{$1} : (length($_ = &make_link($1)) < 1024) ? ($link_cache{$1} = $_) : $_ # Walrus add [link cache] # yakty del [make cached link]
                &make_cachedlink($1)            # yakty add [make cached link]
            !gex;

init_AutoLink()追加

編集
# yakty add [auto link] start
sub init_AutoLink
{
    my %list;
    foreach my $page (sort keys %database){
        my @chunk = split(/\//, $page);
        my $name = pop(@chunk);
        my $link = &make_link(&armor_name($page));
        if($1 eq $name){
            $page = '';
        }
        next if(length($name) < $auto_link_length);
        $list{$name}{$page} = $link;
    }
    # alias
    my @autolink;
    foreach my $name (sort {length($b) <=> length($a)} keys %alias_link_list){
        next if($alias_link_list{$name} =~ /<img/);
        my $page = &unarmor_name($name);
        next if(length($page) < $auto_link_length);
        $auto_link_list{$page} = $alias_link_list{$name};
        push(@autolink, "\Q$page\E");
    }
    # fixedpage
    foreach my $name (sort {length($b) <=> length($a)} keys %fixedpage){
        $auto_link_list{$name} = &make_link(&armor_name($name));
        push(@autolink, "\Q$name\E");
    }
    # database
    foreach my $name (sort {length($b) <=> length($a)} keys %list){
        if($list{$name}{''}){
            $auto_link_list{$name} = $list{$name}{''};
        } else {
            my $link;
            my $escapedname = &escape($name);
            if(%{$list{$name}} > 1){
                $link = sprintf(qq(<a href="$url_cgi?mycmd=search&mysearchtarget=title&mysearchcombo=and&mymsg=%s" title="$resource{searchthispage}">%s</a>),
                    #&encode(join(' ', keys %{$list{$name}})),
                    &encode($name),
                    $escapedname);
            } else {
                ($link) = (values %{$list{$name}});
                $link =~ s|(<a [^<>]*>)(.*)(<\/a>)|$1$escapedname$3|;
            }
            $auto_link_list{$name} = $link;
        }
        push(@autolink, "\Q$name\E");
    }
    $auto_link_name = join("|", @autolink);
}
# yakty add [auto link] end

03598