#--------#
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 $modul = 1;
eval "use URI::Find; 1;" or $modul = 0;
my (%uris,%zuordnung);
my $erkennung = 1;
while ($$text =~ m/\|{$erkennung,$erkennung}/) { # eindeutigen temporären Ersetzungsstring finden
$erkennung ++;
}
if ($modul) {
my $lfd_uri = 0;
my $finder = URI::Find -> new (
sub { # URI und geschriebenen Link speichern
$lfd_uri ++;
$uris{$lfd_uri} = $_[0];
$lfd_uri ++;
$uris{$lfd_uri} = $_[1];
return sprintf ($link,@_);
}
);
$finder -> find ($text);
}
my $ersatz = 0;
if (keys %uris) { # alle URI's verbergen vor E-Mail Erkennung
$ersatz = 1;
foreach my $lfd_uri (keys %uris) {
my $ersatz = '|' x $erkennung . $lfd_uri . '|' x $erkennung;
$$text =~ s/\Q$uris{$lfd_uri}/$ersatz/g;
}
}
if ($email_link ne '') { # E-Mail auch erwünscht?
eval "use Email::Find; 1;" or $modul = 0;
if ($modul) {
my $finder = Email::Find -> new (
sub { return sprintf ($email_link,$_[0] -> format,$_[1]); }
);
$finder -> find ($text);
}
}
if ($ersatz) { # alle verborgenen URI's wieder hervorholen
foreach my $lfd_uri (keys %uris) {
my $ersatz = '|' x $erkennung . $lfd_uri . '|' x $erkennung;
$$text =~ s/\Q$ersatz/$uris{$lfd_uri}/g;
}
}
}
#--------#