]> sipb.mit.edu Git - ikiwiki.git/blobdiff - IkiWiki/Plugin/toc.pm
web commit by PatrickWinnertz
[ikiwiki.git] / IkiWiki / Plugin / toc.pm
index c36ce289368c945eff3f3e94164bfc004e2b5235..bc62f71d6858cb302ef23549e5f63fe9152957e9 100644 (file)
@@ -4,17 +4,15 @@ package IkiWiki::Plugin::toc;
 
 use warnings;
 use strict;
-use IkiWiki;
+use IkiWiki 2.00;
 use HTML::Parser;
 
 sub import { #{{{
-       IkiWiki::hook(type => "preprocess", id => "toc",
-               call => \&preprocess);
-       IkiWiki::hook(type => "format", id => "toc",
-               call => \&format);
+       hook(type => "preprocess", id => "toc", call => \&preprocess);
+       hook(type => "format", id => "toc", call => \&format);
 } # }}}
 
-my @tocs;
+my %tocpages;
 
 sub preprocess (@) { #{{{
        my %params=@_;
@@ -23,17 +21,17 @@ sub preprocess (@) { #{{{
 
        # It's too early to generate the toc here, so just record the
        # info.
-       push @tocs, \%params;
+       $tocpages{$params{destpage}}=\%params;
 
-       return "\n[[toc $#tocs]]\n";
+       return "\n<div class=\"toc\"></div>\n";
 } # }}}
 
-sub format ($) { #{{{
-       my $content=shift;
+sub format (@) { #{{{
+       my %params=@_;
+       my $content=$params{content};
        
-       return $content unless @tocs && $content=~/\[\[toc (\d+)\]\]/ && $#tocs >= $1;
-       my $id=$1;
-       my %params=%{$tocs[$id]};
+       return $content unless exists $tocpages{$params{page}};
+       %params=%{$tocpages{$params{page}}};
 
        my $p=HTML::Parser->new(api_version => 3);
        my $page="";
@@ -49,7 +47,7 @@ sub format ($) { #{{{
                if ($tagname =~ /^h(\d+)$/i) {
                        my $level=$1;
                        my $anchor="index".++$anchors{$level}."h$level";
-                       $page.="$text<a name=\"$anchor\" />";
+                       $page.="$text<a name=\"$anchor\"></a>";
        
                        # Take the first header level seen as the topmost level,
                        # even if there are higher levels seen later on.
@@ -107,9 +105,7 @@ sub format ($) { #{{{
                $index.=&$indent."</ol>\n";
        }
 
-       # Ignore cruft around the toc marker, probably <p> tags added by
-       # markdown which shouldn't appear in a list anyway.
-       $page=~s/\n.*\[\[toc $id\]\].*\n/$index/;
+       $page=~s/(<div class=\"toc\">)/$1\n$index/;
        return $page;
 }