OSDN Git Service

子WikiをInterWikiに追加する際のエンコード指定("euc")を追加
[fswiki/fswiki.git] / lib / Wiki / InterWiki.pm
index 58f3a92..ac5ff54 100644 (file)
@@ -55,9 +55,9 @@ sub _add_child {
                        }
                } else {
                        if($parent eq ""){
-                               $self->add_inter_wiki($wiki->config('script_name')."/$item?page=","$item");
+                               $self->add_inter_wiki($wiki->config('script_name')."/$item?page=","$item","euc");
                        } else {
-                               $self->add_inter_wiki($wiki->config('script_name')."/$parent/$item?page=","$parent/$item");
+                               $self->add_inter_wiki($wiki->config('script_name')."/$parent/$item?page=","$parent/$item","euc");
                        }
                        $prev = $item;
                }
@@ -89,35 +89,35 @@ sub _parse_line {
        my $self   = shift;
        my $source = shift;
        # ÊÌ̾¥ê¥ó¥¯
-       if($source =~ /\[([^\[]+?)\|((http|https|ftp|mailto):[\w\.,%~^+\-%\/\?\(\)!\$&=:;\*#\@']*)\]\s*([\w\-]+)/
-           ||  $source =~ /\[([^\[]+?)\|((file:[^\[\]]*))\]\s*([\w\-]+)/
-           ||  $source =~ /\[([^\[]+?)\|((\/|\.\/|\.\.\/)+[\w\.,%~^+\-%\/\?\(\)!\$&=:;\*#\@']*)\]\s*([\w\-]+)/){
+       if ($source =~ /\[([^\[]+?)\|((http|https|ftp|mailto):[\w\.,%~^+\-%\/\?\(\)!\$&=:;\*#\@']*)\]\s*([\w\-]+)/
+        || $source =~ /\[([^\[]+?)\|((file:[^\[\]]*))\]\s*([\w\-]+)/
+        || $source =~ /\[([^\[]+?)\|((\/|\.\/|\.\.\/)+[\w\.,%~^+\-%\/\?\(\)!\$&=:;\*#\@']*)\]\s*([\w\-]+)/) {
                my $label = $1;
                my $url   = $2;
                my $enc   = $4;
                $self->add_inter_wiki($url,$label,$enc);
-
+       }
        # Ê¸»ú¥³¡¼¥É¤Î»ØÄê¤Ê¤·
-       } elsif($source =~ /\[([^\[]+?)\|((http|https|ftp|mailto):[a-zA-Z0-9\.,%~^_+\-%\/\?\(\)!\$&=:;\*#\@']*)\]/
-           ||  $source =~ /\[([^\[]+?)\|(file:[^\[\]]*)\]/
-           ||  $source =~ /\[([^\[]+?)\|((\/|\.\/|\.\.\/)+[a-zA-Z0-9\.,%~^_+\-%\/\?\(\)!\$&=:;\*#\@']*)\]/){
+       elsif ($source =~ /\[([^\[]+?)\|((http|https|ftp|mailto):[a-zA-Z0-9\.,%~^_+\-%\/\?\(\)!\$&=:;\*#\@']*)\]/
+           || $source =~ /\[([^\[]+?)\|(file:[^\[\]]*)\]/
+           || $source =~ /\[([^\[]+?)\|((\/|\.\/|\.\.\/)+[a-zA-Z0-9\.,%~^_+\-%\/\?\(\)!\$&=:;\*#\@']*)\]/) {
                my $label = $1;
                my $url   = $2;
-               my $enc   = "";
+               my $enc   = "euc";
                $self->add_inter_wiki($url,$label,$enc);
-
+       }
        # Ç¤°Õ¤ÎURL¥ê¥ó¥¯
-       } elsif($source =~ /\[([^\[]+?)\|(.+?)\]\s*([\w\-]+)/){
+       elsif ($source =~ /\[([^\[]+?)\|(.+?)\]\s*([\w\-]+)/) {
                my $label = $1;
                my $url   = $2;
                my $enc   = $3;
                $self->add_inter_wiki($url,$label,$enc);
-
+       }
        # Ç¤°Õ¤ÎURL¥ê¥ó¥¯(ʸ»ú¥³¡¼¥É¤Î»ØÄê¤Ê¤·)
-       } elsif($source =~ /\[([^\[]+?)\|(.+?)\]/){
+       elsif ($source =~ /\[([^\[]+?)\|(.+?)\]/) {
                my $label = $1;
                my $url   = $2;
-               my $enc   = "";
+               my $enc   = "euc";
                $self->add_inter_wiki($url,$label,$enc);
 
        }
@@ -142,37 +142,48 @@ sub exists_interwiki {
        my $self = shift;
        my $str  = shift;
 
-       my @keywords = @{$self->{interwiki}};
+       return 0 if (not defined $str);
+
+       # $str ¤ÎÀèƬ¤Ë InterWikiName ¤Ë¤Ê¤ê¤¦¤ë½ñ¼°¤¬¤Ê¤±¤ì¤Ð¡¢µ¶¤òÊÖ¤·¤Æ½ªÎ»
+       return 0 if (not $str =~ /^\[\[/);
 
-       foreach my $keyword (@keywords){
+       my @keywords = @{ $self->{interwiki} };
+
+       # ÄêµÁ¤µ¤ì¤¿Á´¤Æ¤Î InterWikiName ¤Ë¤Ä¤¤¤Æ·«¤êÊÖ¤¹¡£
+       foreach my $keyword (@keywords) {
                my $label = $keyword->{quote};
 
-               if($str =~ /\[\[$label:(.+?)\]\]/){
-                       $self->{g_pre}   = $`;
-                       $self->{g_post}  = $';
+               # ÊÌ̾¤Ê¤·¤Î InterWikiName
+               if ($str =~ /^\[\[$label:(.+?)\]\]/) {
+                       $self->{g_post} = $';
                        my $enc   = $keyword->{enc};
                        my $param = $1;
-                       $self->{g_label} = $keyword->{label}.":".$param;
-                       if($enc ne ""){
-                               &Jcode::convert(\$param,$enc);
-                       }
-                       $self->{g_url} = $keyword->{url}.Util::url_encode($param);
+                       $self->{g_label} = $keyword->{label}.':'.$param;
+                       &Jcode::convert(\$param, $enc);
+                       $self->{g_url} = $keyword->{url}._url_encode($param);
                        return 1;
+               }
 
-               } elsif($str =~ /\[\[([^\[]+?)\|$label:(.+?)\]\]/){
-                       $self->{g_pre}   = $`;
-                       $self->{g_post}  = $';
+               # ÊÌ̾¤¢¤ê¤Î InterWikiName
+               elsif ($str =~ /^\[\[([^\[]+?)\|$label:(.+?)\]\]/) {
+                       $self->{g_post} = $';
                        $self->{g_label} = $1;
                        my $enc   = $keyword->{enc};
                        my $param = $2;
-                       if($enc ne ""){
-                               &Jcode::convert(\$param,$enc);
-                       }
-                       $self->{g_url} = $keyword->{url}.Util::url_encode($param);
+                       &Jcode::convert(\$param, $enc);
+                       $self->{g_url} = $keyword->{url}._url_encode($param);
                        return 1;
                }
        }
        return 0;
 }
 
+sub _url_encode {
+       my $retstr = shift;
+       $retstr =~ s/([^ 0-9A-Za-z])/sprintf("%%%.2X", ord($1))/eg;
+       $retstr =~ tr/ /+/;
+       return $retstr;
+}
+
+
 1;