#--------#
sub identifylinks {
#
# Erkennt und markiert Hyperlinks in einem Text
#
# Aufruf:
# =======
# my $testtext = 'test: http://www.test.de';
# identifylinks (\$testtext,'%s','%s');
# print $testtext;
#
my $text = $_[0];
my $link = $_[1];
my $email_link = (defined $_[2] ? $_[2] : '');
my %uris;
# eindeutigen temporären Ersetzungsstring finden
my $kennung = 'X';
$kennung+=chr(int(65+rand(25))) while (index($kennung,$$text)>-1);
my $uri_mod=eval "use URI::Find; 1;" || 0;
my $mail_mod=0;
$mail_mod=1 if($email_link ne '' && eval "use Email::Find; 1;");
if ($uri_mod)
{
my $lfd_uri = 0;
my $finder = URI::Find -> new (
sub {
# URI und geschriebenen Link speichern
if($mail_mod)
{
my $origin=shift;
my $text=shift;
my $symbol_o=sprintf('%s%u',$kennung,++$lfd_uri);
my $symbol_t=sprintf('%s%u',$kennung,++$lfd_uri);
$uris{$symbol_o}=$origin;
$uris{$symbol_t}=$text;
return sprintf ($link,$symbol_o,$symbol_t);
}
else
{ return sprintf ($link,@_); }
}
);
$finder -> find ($text);
}
# E-Mail auch erwünscht?
if ($mail_mod)
{
my $finder = Email::Find -> new (
sub { return sprintf ($email_link,$_[0] -> format,$_[1]); }
);
$finder -> find ($text);
$$text=~s/$_/$uris{$_}/g for(keys(%uris));
}
}
#--------#