X-Git-Url: http://git.vanrenterghem.biz/git.ikiwiki.info.git/blobdiff_plain/19dcd50c8497eca4981f9a90cc3e014789a50f76..a241942f17b8ffbc0d4f3251aad00708271b8344:/IkiWiki/Plugin/link.pm?ds=sidebyside

diff --git a/IkiWiki/Plugin/link.pm b/IkiWiki/Plugin/link.pm
index 7d4692ef0..1ba28eafd 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/^.+@.+$/;
+my $email_regexp = qr/^.+@.+\..+$/;
 my $url_regexp = qr/^(?:[^:]+:\/\/|mailto:).*/i;
 
 sub import {
@@ -64,23 +64,27 @@ 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) {
 		$pagetitle = $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 =~ /(?<!\\)$link_regexp/g) {
-		if (! is_externallink($page, $2 . ($3 ? "#$3" : ""))) {
+		if (! is_externallink($page, $2, $3)) {
 			add_link($page, linkpage($2));
 		}
 	}
@@ -140,9 +144,9 @@ sub renamepage (@) {
 	my $old=$params{oldpage};
 	my $new=$params{newpage};
 
-	$params{content} =~ s{(?<!\\)$link_regexp}{
-		if (! is_externallink($page, $2 . ($3 ? "#$3" : ""))) {
-			my $linktext=$2;
+	$params{content} =~ s{(?<!\\)($link_regexp)}{
+		if (! is_externallink($page, $3, $4)) {
+			my $linktext=$3;
 			my $link=$linktext;
 			if (bestlink($page, linkpage($linktext)) eq $old) {
 				$link=pagetitle($new, 1);
@@ -157,9 +161,12 @@ sub renamepage (@) {
 					$link="/$link";
 				}
 			}
-			defined $1
-				? ( "[[$1|$link".($3 ? "#$3" : "")."]]" )
-				: ( "[[$link".   ($3 ? "#$3" : "")."]]" )
+			defined $2
+				? ( "[[$2|$link".($4 ? "#$4" : "")."]]" )
+				: ( "[[$link".   ($4 ? "#$4" : "")."]]" )
+		}
+		else {
+			$1
 		}
 	}eg;