X-Git-Url: http://git.vanrenterghem.biz/git.ikiwiki.info.git/blobdiff_plain/e16746a52f40f478af1b634c532d90c25cc0ec76..8daaa11baa70e07f6405ccb4474e97cac9627961:/IkiWiki/Plugin/toc.pm diff --git a/IkiWiki/Plugin/toc.pm b/IkiWiki/Plugin/toc.pm index c36ce2893..279eef008 100644 --- a/IkiWiki/Plugin/toc.pm +++ b/IkiWiki/Plugin/toc.pm @@ -8,13 +8,11 @@ use IkiWiki; 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
\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=""; @@ -107,9 +105,7 @@ sub format ($) { #{{{ $index.=&$indent."\n"; } - # Ignore cruft around the toc marker, probably

tags added by - # markdown which shouldn't appear in a list anyway. - $page=~s/\n.*\[\[toc $id\]\].*\n/$index/; + $page=~s/(

)/$1\n$index/; return $page; }