X-Git-Url: http://git.vanrenterghem.biz/git.ikiwiki.info.git/blobdiff_plain/851712cb0ececf5f0396283aa7e908900bc2c194..d8ab913061a60be86ca7ee8f3f7ffb76cb712377:/IkiWiki/Plugin/link.pm diff --git a/IkiWiki/Plugin/link.pm b/IkiWiki/Plugin/link.pm index d41965bd3..ef01f1107 100644 --- a/IkiWiki/Plugin/link.pm +++ b/IkiWiki/Plugin/link.pm @@ -7,7 +7,7 @@ use IkiWiki 3.00; my $link_regexp; -my $email_regexp = qr/^(?:[a-z0-9!#$%&'*+\/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+\/=?^_`{|}~-]+)*|"(?:[\x01-\x08\x0b\x0c\x0e-\x1f\x21\x23-\x5b\x5d-\x7f]|\\[\x01-\x09\x0b\x0c\x0e-\x7f])*")@(?:(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?|\[(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?|[a-z0-9-]*[a-z0-9]:(?:[\x01-\x08\x0b\x0c\x0e-\x1f\x21-\x5a\x53-\x7f]|\\[\x01-\x09\x0b\x0c\x0e-\x7f])+)\])$/i; +my $email_regexp = qr/^.+@.+\..+$/; my $url_regexp = qr/^(?:[^:]+:\/\/|mailto:).*/i; sub import { @@ -64,25 +64,29 @@ sub checkconfig () { } } -sub is_externallink ($$) { +sub is_externallink ($$;$) { my $page = shift; my $url = shift; - if ($url =~ /$email_regexp/) { - # url looks like an email address, so we assume it - # is supposed to be an external link if there is no - # page with that name. - $url =~ s/#.*//; - return (! (bestlink($page, linkpage($url)))) + my $anchor = shift; + + if (defined $anchor) { + $url.="#".$anchor; } - return ($url =~ /$url_regexp/) + + return ($url =~ /$url_regexp|$email_regexp/) } -sub externallink ($;@) { +sub externallink ($$;$) { my $url = shift; + my $anchor = shift; my $pagetitle = shift; + if (defined $anchor) { + $url.="#".$anchor; + } + # build pagetitle - if (!($pagetitle)) { + if (! $pagetitle) { $pagetitle = $url; # use only the email address as title for mailto: urls if ($pagetitle =~ /^mailto:.*/) { @@ -90,8 +94,8 @@ sub externallink ($;@) { } } - # handle email-addresses (without mailto:): - if ($url =~ /$email_regexp/) { + if ($url !~ /$url_regexp/) { + # handle email addresses (without mailto:) $url = "mailto:" . $url; } @@ -106,15 +110,15 @@ sub linkify (@) { $params{content} =~ s{(\\?)$link_regexp}{ defined $2 ? ( $1 - ? "[[$2|$3".($4 ? "#$4" : "")."]]" - : is_externallink($page, $3 . ($4 ? "#$4" : "")) - ? externallink("$3" . ($4 ? "#$4" : ""), $2) + ? "[[$2|$3".(defined $4 ? "#$4" : "")."]]" + : is_externallink($page, $3, $4) + ? externallink($3, $4, $2) : htmllink($page, $destpage, linkpage($3), anchor => $4, linktext => pagetitle($2))) : ( $1 - ? "[[$3".($4 ? "#$4" : "")."]]" - : is_externallink($page, $3 . ($4 ? "#$4" : "")) - ? externallink("$3" . ($4 ? "#$4" : "")) + ? "[[$3".(defined $4 ? "#$4" : "")."]]" + : is_externallink($page, $3, $4) + ? externallink($3, $4) : htmllink($page, $destpage, linkpage($3), anchor => $4)) }eg; @@ -128,7 +132,7 @@ sub scan (@) { my $content=$params{content}; while ($content =~ /(?