X-Git-Url: http://git.vanrenterghem.biz/git.ikiwiki.info.git/blobdiff_plain/45e2c23e030a6ae60c79c1b97a7a906290f26abe..1ef7d6de125a6e49af3f2493a29d11a63b7b2164:/IkiWiki/Plugin/toc.pm

diff --git a/IkiWiki/Plugin/toc.pm b/IkiWiki/Plugin/toc.pm
index bc62f71d6..639cae4a9 100644
--- a/IkiWiki/Plugin/toc.pm
+++ b/IkiWiki/Plugin/toc.pm
@@ -17,13 +17,20 @@ my %tocpages;
 sub preprocess (@) { #{{{
 	my %params=@_;
 
-	$params{levels}=1 unless exists $params{levels};
+	if ($params{page} eq $params{destpage}) {
+		$params{levels}=1 unless exists $params{levels};
 
-	# It's too early to generate the toc here, so just record the
-	# info.
-	$tocpages{$params{destpage}}=\%params;
+		# It's too early to generate the toc here, so just record the
+		# info.
+		$tocpages{$params{destpage}}=\%params;
 
-	return "\n<div class=\"toc\"></div>\n";
+		return "\n<div class=\"toc\"></div>\n";
+	}
+	else {
+		# Don't generate toc in an inlined page, doesn't work
+		# right.
+		return "";
+	}
 } # }}}
 
 sub format (@) { #{{{
@@ -79,17 +86,25 @@ sub format (@) { #{{{
 				}
 				$liststarted=0;
 			}
+				
+			$index.=&$indent."</li>\n" unless $liststarted;
+			$liststarted=0;
+			$index.=&$indent."<li class=\"L$curlevel\">".
+				"<a href=\"#$anchor\">";
 	
 			$p->handler(text => sub {
 				$page.=join("", @_);
-				$index.=&$indent."</li>\n" unless $liststarted;
-				$liststarted=0;
-				$index.=&$indent."<li class=\"L$curlevel\">".
-					"<a href=\"#$anchor\">".
-					join("", @_).
-					"</a>\n";
-				$p->handler(text => undef);
+				$index.=join("", @_);
 			}, "dtext");
+			$p->handler(end => sub {
+				my $tagname=shift;
+				if ($tagname =~ /^h(\d+)$/i) {
+					$p->handler(text => undef);
+					$p->handler(end => undef);
+					$index.="</a>\n";
+				}
+				$page.=join("", @_);
+			}, "tagname, text");
 		}
 		else {
 			$page.=$text;