1 ###############################################################################
3 # InterWikiName¤Î¥Ñ¡¼¥µ
5 ###############################################################################
6 package Wiki::InterWiki;
9 #==============================================================================
11 #==============================================================================
17 $self->{wiki} = $wiki;
18 $self->{interwiki} = [];
22 $self->_add_children($wiki);
27 #==============================================================================
28 # »ÒWiki¤òInterWiki¤ËÄɲÃ
29 #==============================================================================
35 my @children = $wiki->get_wiki_list();
36 $self->_add_child($wiki,"",@children);
39 #==============================================================================
40 # »ÒWiki¤òInterWiki¤ËÄɲáʺƵ¢Åª¤Ëcall¤µ¤ì¤ë¥á¥½¥Ã¥É¡Ë
41 #==============================================================================
49 foreach my $item (@items){
50 if(ref($item) eq "ARRAY"){
52 $self->_add_child($wiki,"$prev",@$item);
54 $self->_add_child($wiki,"$parent/$prev",@$item);
58 $self->add_inter_wiki($wiki->config('script_name')."/$item?page=","$item");
60 $self->add_inter_wiki($wiki->config('script_name')."/$parent/$item?page=","$parent/$item");
67 #==============================================================================
68 # ¥Ñ¡¼¥¹¡Ê¥³¥ó¥¹¥È¥é¥¯¥¿¤«¤é¸Æ¤Ð¤ì¤Þ¤¹¡Ë
69 #==============================================================================
72 my $wiki = $self->{wiki};
73 if($wiki->page_exists("InterWikiName")){
74 my $source = $wiki->get_page("InterWikiName");
76 my @lines = split(/\n/,$source);
77 foreach my $line (@lines){
78 if(index($line,"*")==0){
79 $self->_parse_line($line);
85 #==============================================================================
87 #==============================================================================
92 if ($source =~ /\[([^\[]+?)\|((http|https|ftp|mailto):[\w\.,%~^+\-%\/\?\(\)!\$&=:;\*#\@']*)\]\s*([\w\-]+)/
93 || $source =~ /\[([^\[]+?)\|((file:[^\[\]]*))\]\s*([\w\-]+)/
94 || $source =~ /\[([^\[]+?)\|((\/|\.\/|\.\.\/)+[\w\.,%~^+\-%\/\?\(\)!\$&=:;\*#\@']*)\]\s*([\w\-]+)/) {
98 $self->add_inter_wiki($url,$label,$enc);
100 # ʸ»ú¥³¡¼¥É¤Î»ØÄê¤Ê¤·
101 elsif ($source =~ /\[([^\[]+?)\|((http|https|ftp|mailto):[a-zA-Z0-9\.,%~^_+\-%\/\?\(\)!\$&=:;\*#\@']*)\]/
102 || $source =~ /\[([^\[]+?)\|(file:[^\[\]]*)\]/
103 || $source =~ /\[([^\[]+?)\|((\/|\.\/|\.\.\/)+[a-zA-Z0-9\.,%~^_+\-%\/\?\(\)!\$&=:;\*#\@']*)\]/) {
107 $self->add_inter_wiki($url,$label,$enc);
110 elsif ($source =~ /\[([^\[]+?)\|(.+?)\]\s*([\w\-]+)/) {
114 $self->add_inter_wiki($url,$label,$enc);
116 # Ǥ°Õ¤ÎURL¥ê¥ó¥¯(ʸ»ú¥³¡¼¥É¤Î»ØÄê¤Ê¤·)
117 elsif ($source =~ /\[([^\[]+?)\|(.+?)\]/) {
121 $self->add_inter_wiki($url,$label,$enc);
126 #==============================================================================
127 # InterWikiName¤òÄɲÃ
128 #==============================================================================
135 push(@{$self->{interwiki}},{label=>$label,quote=>quotemeta($label),url=>$url,enc=>$enc});
138 #==============================================================================
139 # InterWikiName¤¬´Þ¤Þ¤ì¤ë¤«¤É¤¦¤«¥Á¥§¥Ã¥¯
140 #==============================================================================
141 sub exists_interwiki {
145 return 0 if (not defined $str);
147 # $str ¤ÎÀèƬ¤Ë InterWikiName ¤Ë¤Ê¤ê¤¦¤ë½ñ¼°¤¬¤Ê¤±¤ì¤Ð¡¢µ¶¤òÊÖ¤·¤Æ½ªÎ»
148 return 0 if (not $str =~ /^\[\[/);
150 my @keywords = @{ $self->{interwiki} };
152 # ÄêµÁ¤µ¤ì¤¿Á´¤Æ¤Î InterWikiName ¤Ë¤Ä¤¤¤Æ·«¤êÊÖ¤¹¡£
153 foreach my $keyword (@keywords) {
154 my $label = $keyword->{quote};
156 # ÊÌ̾¤Ê¤·¤Î InterWikiName
157 if ($str =~ /^\[\[$label:(.+?)\]\]/) {
158 $self->{g_post} = $';
159 my $enc = $keyword->{enc};
161 $self->{g_label} = $keyword->{label}.':'.$param;
162 &Jcode::convert(\$param, $enc);
163 $self->{g_url} = $keyword->{url}._url_encode($param);
167 # ÊÌ̾¤¢¤ê¤Î InterWikiName
168 elsif ($str =~ /^\[\[([^\[]+?)\|$label:(.+?)\]\]/) {
169 $self->{g_post} = $';
170 $self->{g_label} = $1;
171 my $enc = $keyword->{enc};
173 &Jcode::convert(\$param, $enc);
174 $self->{g_url} = $keyword->{url}._url_encode($param);
183 $retstr =~ s/([^ 0-9A-Za-z])/sprintf("%%%.2X", ord($1))/eg;