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

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

差分表示


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

* [auto link]

** 関連するカスタマイズ

-[[WalWiki/カスタマイズ/汎用サブルーチン]] の make_cachedlink()
-[[WalWiki/カスタマイズ/エイリアス定義]] 2003/08/13以前とは実装が変わっています。

** グローバル変数定義

$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()追加

- 2003-08-19 (Tue) 16:36:28 リンクの途中に改行が入ってしまっていたのを修正
- [[#now]] WikiNameを無効にしていると%fixedpageに対して自動的にリンクが張られないので%fixedpageも自動リンク対象にするように変更

 # yakt yadd [auto link] start
 # 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($page);
         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");
     }
     if(@autolink){
         $auto_link_name = join("|", @autolink);
     } else {
         $auto_link_name = q(\b{2});
     }
     $auto_link_name = join("|", @autolink);
 }
 # yakty add [auto link] end


03999