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 = "";
$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 = "";
# InterWikiName¤¬´Þ¤Þ¤ì¤ë¤«¤É¤¦¤«¥Á¥§¥Ã¥¯
#==============================================================================
sub exists_interwiki {
- my ($self, $str) = @_;
+ my $self = shift;
+ my $str = shift;
return 0 if (not defined $str);
# ÄêµÁ¤µ¤ì¤¿Á´¤Æ¤Î InterWikiName ¤Ë¤Ä¤¤¤Æ·«¤êÊÖ¤¹¡£
foreach my $keyword (@keywords) {
-
my $label = $keyword->{quote};
# ÊÌ̾¤Ê¤·¤Î InterWikiName
if ($str =~ /^\[\[$label:(.+?)\]\]/) {
- $self->{g_post} = substr($str, $+[0]); # as $'
+ $self->{g_post} = $';
my $enc = $keyword->{enc};
my $param = $1;
- $self->{g_label} = $keyword->{label} . ':' . $param;
+ $self->{g_label} = $keyword->{label}.':'.$param;
if ($enc ne q{}) {
&Jcode::convert(\$param, $enc);
}
- $self->{g_url} = $keyword->{url} . Util::url_encode($param);
+ $self->{g_url} = $keyword->{url}.Util::url_encode($param);
return 1;
}
# ÊÌ̾¤¢¤ê¤Î InterWikiName
elsif ($str =~ /^\[\[([^\[]+?)\|$label:(.+?)\]\]/) {
- $self->{g_post} = substr($str, $+[0]); # as $'
+ $self->{g_post} = $';
$self->{g_label} = $1;
my $enc = $keyword->{enc};
my $param = $2;
if ($enc ne q{}) {
&Jcode::convert(\$param, $enc);
}
- $self->{g_url} = $keyword->{url} . Util::url_encode($param);
+ $self->{g_url} = $keyword->{url}.Util::url_encode($param);
return 1;
}
}
my @array = ();
my $pre = q{};
- my $parsed;
+ my @parsed = ();
# $source ¤¬¶õ¤Ë¤Ê¤ë¤Þ¤Ç·«¤êÊÖ¤¹¡£
SOURCE:
while ($source ne q{}) {
- # ¤É¤Î¥¤¥ó¥é¥¤¥ó Wiki ½ñ¼°¤ÎÀèƬ¤Ë¤â match ¤·¤Ê¤¤¤Ê¤é¡¢
- if (not $source
- =~ /^(.*?)((?:{{|\[\[?|https?:|mailto:|f(?:tp:|ile:)|'''?|==|__|<<).*)$/
- )
- {
-
- # ¥¡¼¥ï¡¼¥É¸¡º÷¡¦ÃÖ´¹½èÍý¤Î¤ß¼Â»Ü¤·¤Æ½ªÎ»¡£
+ # ¤É¤Î¥¤¥ó¥é¥¤¥ó Wiki ½ñ¼°¤ÎÀèƬ¤Ë¤â match ¤·¤Ê¤¤¾ì¹ç
+ if (!($source =~ /^(.*?)((?:{{|\[\[?|https?:|mailto:|f(?:tp:|ile:)|'''?|==|__|<<).*)$/)) {
+ # ¥¡¼¥ï¡¼¥É¸¡º÷¡¦ÃÖ´¹½èÍý¤Î¤ß¼Â»Ü¤·¤Æ½ªÎ»¤¹¤ë
push @array, $self->_parse_line_keyword($pre . $source);
return @array;
}
- $pre .= $1; # match ¤·¤Ê¤«¤Ã¤¿ÀèƬÉôʬ¤Ïί¤á¤Æ¤ª¤¤¤Æ¸å¤Ç½èÍý
- $source = $2; # match Éôʬ¡£¤³¤Î¸å¡¢¾ÜºÙ match ¤ò»î¤ß¤ë¡£
- $parsed = q{};
+ $pre .= $1; # match ¤·¤Ê¤«¤Ã¤¿ÀèƬÉôʬ¤Ïί¤á¤Æ¤ª¤¤¤Æ¸å¤Ç½èÍý¤¹¤ë
+ $source = $2; # match Éôʬ¤Ï¸å³½èÍý¤Ë¤Æ¾ÜºÙ¥Á¥§¥Ã¥¯¤ò¹Ô¤¦
+ @parsed = ();
# ¥×¥é¥°¥¤¥ó
if ($source =~ /^{{/) {
-
- # ¤â¤· $pre ¤¬Î¯¤Þ¤Ã¤Æ¤¤¤ë¤Ê¤é¡¢¥¡¼¥ï¡¼¥É¤Î½èÍý¤ò¼Â»Ü¡£
- push @array, $self->_parse_line_keyword($pre) if ($pre ne q{});
-
- # ¥ª¥ê¥¸¥Ê¥ë¤Î Wiki::Parser::parse_line() ¤Ë½èÍý¤ò¤ªÇ¤¤»¡£
- # (¥×¥é¥°¥¤¥ó¤Î½èÍý¤Ï¡¢¥ª¥ê¥¸¥Ê¥ë¤Ç¤âºÇÍ¥Àè¤Î½èÍý¤Ê¤Î¤Ç²Äǽ)
- push @array, $self->SUPER::parse_line($source);
-
- # $self->orig_parse_line() ¤Ç $source ¤ÏÁ´¤Æ½èÍýºÑ¤Ê¤Î¤Ç½ªÎ»
- return @array;
+ $source = $';
+ my $plugin = $self->{wiki}->parse_inline_plugin($source);
+ unless($plugin){
+ push @parsed, '{{';
+ push @parsed, $self->parse_line($source);
+ } else {
+ my $info = $self->{wiki}->get_plugin_info($plugin->{command});
+ if($info->{TYPE} eq "inline"){
+ push @parsed, $self->plugin($plugin);
+ } else {
+ push @parsed, $self->parse_line("<<".$plugin->{command}."¥×¥é¥°¥¤¥ó¤Ï¸ºß¤·¤Þ¤»¤ó¡£>>");
+ }
+ if ($source ne "") {
+ $source = $plugin->{post};
+ }
+ }
}
# InterWikiName
my $label = $self->{interwiki}->{g_label};
my $url = $self->{interwiki}->{g_url};
$source = $self->{interwiki}->{g_post};
- $parsed = $self->url_anchor($url, $label);
+ push @parsed, $self->url_anchor($url, $label);
}
# ¥Ú¡¼¥¸ÊÌ̾¥ê¥ó¥¯
elsif ($source =~ /^\[\[([^\[]+?)\|([^\|\[]+?)\]\]/) {
my $label = $1;
my $page = $2;
- $source = substr($source, $+[0]); # as $'
- $parsed = $self->wiki_anchor($page, $label);
+ $source = $';
+ push @parsed, $self->wiki_anchor($page, $label);
}
# URLÊÌ̾¥ê¥ó¥¯
{
my $label = $1;
my $url = $2;
- $source = substr($source, $+[0]); # as $'
+ $source = $';
if ( index($url, q{"}) >= 0
|| index($url, '><') >= 0
|| index($url, 'javascript:') >= 0)
{
- $parsed = $self->parse_line('<<ÉÔÀµ¤Ê¥ê¥ó¥¯¤Ç¤¹¡£>>');
+ push @parsed, $self->parse_line('<<ÉÔÀµ¤Ê¥ê¥ó¥¯¤Ç¤¹¡£>>');
}
else {
- $parsed = $self->url_anchor($url, $label);
+ push @parsed, $self->url_anchor($url, $label);
}
}
=~ /^(?:https?|ftp|mailto):[a-zA-Z0-9\.,%~^_+\-%\/\?\(\)!&=:;\*#\@'\$]*/
|| $source =~ /^file:[^\[\]]*/)
{
- my $url = substr($source, $-[0], $+[0] - $-[0]); # as $&
- $source = substr($source, $+[0]); # as $'
+ my $url = $&;
+ $source = $';
if ( index($url, q{"}) >= 0
|| index($url, '><') >= 0
|| index($url, 'javascript:') >= 0)
{
- $parsed = $self->parse_line('<<ÉÔÀµ¤Ê¥ê¥ó¥¯¤Ç¤¹¡£>>');
+ push @parsed, $self->parse_line('<<ÉÔÀµ¤Ê¥ê¥ó¥¯¤Ç¤¹¡£>>');
}
else {
- $parsed = $self->url_anchor($url);
+ push @parsed, $self->url_anchor($url);
}
}
# ¥Ú¡¼¥¸¥ê¥ó¥¯
elsif ($source =~ /^\[\[([^\|]+?)\]\]/) {
my $page = $1;
- $source = substr($source, $+[0]); # as $'
- $parsed = $self->wiki_anchor($page);
+ $source = $';
+ push @parsed, $self->wiki_anchor($page);
}
# Ǥ°Õ¤ÎURL¥ê¥ó¥¯
elsif ($source =~ /^\[([^\[]+?)\|(.+?)\]/) {
my $label = $1;
my $url = $2;
- $source = substr($source, $+[0]); # as $'
+ $source = $';
if ( index($url, q{"}) >= 0
|| index($url, '><') >= 0
|| index($url, 'javascript:') >= 0)
{
- $parsed = $self->parse_line('<<ÉÔÀµ¤Ê¥ê¥ó¥¯¤Ç¤¹¡£>>');
+ push @parsed, $self->parse_line('<<ÉÔÀµ¤Ê¥ê¥ó¥¯¤Ç¤¹¡£>>');
}
else {
. $wiki->get_CGI->url(-absolute => 1)
. $wiki->get_CGI()->path_info();
}
- $parsed = $self->url_anchor($uri . '/../' . $url, $label);
+ push @parsed, $self->url_anchor($uri . '/../' . $url, $label);
}
}
elsif ($source =~ /^('''?|==|__)(.+?)\1/) {
my $type = $1;
my $label = $2;
- $source = substr($source, $+[0]); # as $'
+ $source = $';
if ($type eq q{'''}) {
- $parsed = $self->bold($label);
+ push @parsed, $self->bold($label);
}
elsif ($type eq q{__}) {
- $parsed = $self->underline($label);
+ push @parsed, $self->underline($label);
}
elsif ($type eq q{''}) {
- $parsed = $self->italic($label);
+ push @parsed, $self->italic($label);
}
else { ## elsif ($type eq q{==}) {
- $parsed = $self->denialline($label);
+ push @parsed, $self->denialline($label);
}
}
# ¥¨¥é¡¼¥á¥Ã¥»¡¼¥¸
elsif ($source =~ /^<<(.+?)>>/) {
my $label = $1;
- $source = substr($source, $+[0]); # as $'
- $parsed = $self->error($label);
+ $source = $';
+ push @parsed, $self->error($label);
}
# ¥¤¥ó¥é¥¤¥ó Wiki ½ñ¼°Á´ÂÎ¤Ë¤Ï macth ¤·¤Ê¤«¤Ã¤¿¤È¤
else {
-
# 1 ʸ»ú¿Ê¤à¡£
- $pre .= substr($source, 0, 1);
- $source = substr($source, 1);
-
+ if ($source =~ /^(.)/) {
+ $pre .= $1;
+ $source = $';
+ }
+
# parse ·ë²Ì¤ò @array ¤ËÊݸ¤¹¤ë½èÍý¤òÈô¤Ð¤·¤Æ·«¤êÊÖ¤·¡£
next SOURCE;
}
$pre = q{};
}
- push @array, $parsed;
+ push @array, @parsed;
}
# ¤â¤· $pre ¤¬Î¯¤Þ¤Ã¤Æ¤¤¤ë¤Ê¤é¡¢¥¡¼¥ï¡¼¥É¤Î½èÍý¤ò¼Â»Ü¡£
- push @array, $self->_parse_line_keyword($pre) if ($pre ne q{});
+ if ($pre ne q{}) {
+ push @array, $self->_parse_line_keyword($pre);
+ }
return @array;
}
# </p>
#========================================================================
sub _parse_line_keyword {
- my $self = shift;
- my $source = shift;
-
- return () if (not defined $source);
-
- my @array = ();
-
- # $source ¤¬¶õ¤Ë¤Ê¤ë¤Þ¤Ç·«¤êÊÖ¤¹¡£
- while ($source ne q{}) {
-
- # ¥¡¼¥ï¡¼¥É
- if ($self->{keyword}->exists_keyword($source)) {
- my $pre = $self->{keyword}->{g_pre};
- my $label = $self->{keyword}->{g_label};
- my $url = $self->{keyword}->{g_url};
- my $page = $self->{keyword}->{g_page};
- $source = $self->{keyword}->{g_post};
- if ($pre ne q{}) {
- push @array, $self->_parse_line_keyword($pre);
- }
- if (defined($url) && $url ne q{}) {
- push @array, $self->url_anchor($url, $label);
- }
- else {
- push @array, $self->wiki_anchor($page, $label);
- }
-
- }
-
- # WikiName
- elsif ($self->{wiki}->config('wikiname') == 1
- && $source =~ /[A-Z]+?[a-z]+?(?:[A-Z]+?[a-z]+)+/)
- {
- my $pre = substr($source, 0, $-[0]); # as $`
- my $page = substr($source, $-[0], $+[0] - $-[0]); # as $&
- $source = substr($source, $+[0]); # as $'
- if ($pre ne q{}) {
- push @array, $self->_parse_line_keyword($pre);
- }
- push @array, $self->wiki_anchor($page);
- }
-
- # ¥¡¼¥ï¡¼¥É¤â WikiName ¤â¸«¤Ä¤«¤é¤Ê¤«¤Ã¤¿¤È¤
- else {
- push @array, $self->text($source);
- return @array;
- }
- }
- return @array;
+ my $self = shift;
+ my $source = shift;
+
+ return () if (not defined $source);
+
+ my @array = ();
+
+ # $source ¤¬¶õ¤Ë¤Ê¤ë¤Þ¤Ç·«¤êÊÖ¤¹¡£
+ while ($source ne q{}) {
+
+ # ¥¡¼¥ï¡¼¥É
+ if ($self->{keyword}->exists_keyword($source)) {
+ my $pre = $self->{keyword}->{g_pre};
+ my $label = $self->{keyword}->{g_label};
+ my $url = $self->{keyword}->{g_url};
+ my $page = $self->{keyword}->{g_page};
+ $source = $self->{keyword}->{g_post};
+ if ($pre ne q{}) {
+ push @array, $self->_parse_line_keyword($pre);
+ }
+ if (defined($url) && $url ne q{}) {
+ push @array, $self->url_anchor($url, $label);
+ } else {
+ push @array, $self->wiki_anchor($page, $label);
+ }
+
+ }
+
+ # WikiName
+ elsif ($self->{wiki}->config('wikiname') == 1 && $source =~ /[A-Z]+?[a-z]+?(?:[A-Z]+?[a-z]+)+/) {
+ my $pre = $`;
+ my $page = $&;
+ $source = $';
+ if ($pre ne q{}) {
+ push @array, $self->_parse_line_keyword($pre);
+ }
+ push @array, $self->wiki_anchor($page);
+ }
+
+ # ¥¡¼¥ï¡¼¥É¤â WikiName ¤â¸«¤Ä¤«¤é¤Ê¤«¤Ã¤¿¤È¤
+ else {
+ push @array, $self->text($source);
+ return @array;
+ }
+ }
+ return @array;
}
#===============================================================================