]> sipb.mit.edu Git - ikiwiki.git/commitdiff
toc: Add startlevel parameter. (kerravonsen)
authorJoey Hess <joey@gnu.kitenet.net>
Fri, 25 Dec 2009 20:28:18 +0000 (15:28 -0500)
committerJoey Hess <joey@gnu.kitenet.net>
Fri, 25 Dec 2009 20:28:18 +0000 (15:28 -0500)
IkiWiki/Plugin/toc.pm
debian/changelog
doc/ikiwiki/directive/toc.mdwn

index a585564e74761045ee8e178b6dd8262ede94ee97..b8537d3eb02ac47e74fa13e8ca81b5df56fad424 100644 (file)
@@ -53,8 +53,8 @@ sub format (@) {
        my $page="";
        my $index="";
        my %anchors;
        my $page="";
        my $index="";
        my %anchors;
-       my $curlevel;
-       my $startlevel=0;
+       my $startlevel=($params{startlevel} ? $params{startlevel} : 0);
+       my $curlevel=$startlevel-1;
        my $liststarted=0;
        my $indent=sub { "\t" x $curlevel };
        $p->handler(start => sub {
        my $liststarted=0;
        my $indent=sub { "\t" x $curlevel };
        $p->handler(start => sub {
@@ -65,12 +65,17 @@ sub format (@) {
                        my $anchor="index".++$anchors{$level}."h$level";
                        $page.="$text<a name=\"$anchor\"></a>";
        
                        my $anchor="index".++$anchors{$level}."h$level";
                        $page.="$text<a name=\"$anchor\"></a>";
        
-                       # Take the first header level seen as the topmost level,
+                       # Unless we're given startlevel as a parameter,
+                       # take the first header level seen as the topmost level,
                        # even if there are higher levels seen later on.
                        if (! $startlevel) {
                                $startlevel=$level;
                                $curlevel=$startlevel-1;
                        }
                        # even if there are higher levels seen later on.
                        if (! $startlevel) {
                                $startlevel=$level;
                                $curlevel=$startlevel-1;
                        }
+                       elsif (defined $params{startlevel} &&
+                              $level < $params{startlevel}) {
+                           return;
+                       }
                        elsif ($level < $startlevel) {
                                $level=$startlevel;
                        }
                        elsif ($level < $startlevel) {
                                $level=$startlevel;
                        }
index d3a510d4abd5568bd5c708e8dc3dd15e3c2bd228..ae0b5eefde0d0ab11bad2a0a59f1f0366ebf1e15 100644 (file)
@@ -1,6 +1,7 @@
 ikiwiki (3.20091219) UNRELEASED; urgency=low
 
   * pagestats: Add show parameter. Closes: #562129 (David Paleino)
 ikiwiki (3.20091219) UNRELEASED; urgency=low
 
   * pagestats: Add show parameter. Closes: #562129 (David Paleino)
+  * toc: Add startlevel parameter. (kerravonsen)
 
  -- Joey Hess <joeyh@debian.org>  Fri, 25 Dec 2009 14:31:22 -0500
 
 
  -- Joey Hess <joeyh@debian.org>  Fri, 25 Dec 2009 14:31:22 -0500
 
index bf504dafc35d818a1f5a934ed11318490fc259a8..bb1afa1acdc98bebff9f0cf887425d66dfd6552a 100644 (file)
@@ -14,6 +14,12 @@ the `levels` parameter:
 The toc directive will take the level of the first header as the topmost
 level, even if there are higher levels seen later in the file.
 
 The toc directive will take the level of the first header as the topmost
 level, even if there are higher levels seen later in the file.
 
+To create a table of contents that only shows headers starting with a given
+level, use the `startlevel` parameter. For example, to show only h2 and
+smaller headers:
+
+       \[[!toc startlevel=2]]
+
 The table of contents will be created as an ordered list. If you want
 an unordered list instead, you can change the list-style in your local
 style sheet.
 The table of contents will be created as an ordered list. If you want
 an unordered list instead, you can change the list-style in your local
 style sheet.