################################################################### # #
linklist generator
## {{linklist <mode>}} ##
# regular & reverse indexing #
## {{linklist 0}} => regular indexing # {{linklist 1}} => reverse indexing ## ################################################################### package plugin::linklist::LinkList; use strict; use FileHandle; use lib '../../'; use lib '../../lib'; use plugin::linklist::LLParser; sub new { my $class = shift; my $self = {}; return bless $self,$class; } my %index_list = (); sub paragraph { my $self = shift; my $wiki = shift; my $mode = shift; # mode: 0 regular index, 1: reverse index my $buf = ''; my @page_list = $wiki->get_page_list({-permit=>'show'}); # make index foreach my $page (@page_list) { my $key; my $value; my $parser = plugin::linklist::LLParser->new($wiki,$page); my $source = $wiki->get_page($page); # if ($source eq '') { # `echo $page > ./data/hogehoge.wiki`; # } $parser->parse($source); if (defined($parser->{wiki_anchor_list})) { my @wiki_anchor_list = @{$parser->{wiki_anchor_list}}; for my $wiki_anchor (@wiki_anchor_list) { my $mode = 1; if ($mode == 0) { # regular indexing $key = $page; $value = $wiki_anchor; } else { # reverse indexing $key = $wiki_anchor; $value = $page; } my @list = (); if (exists $index_list{$key}) { @list = @{$index_list{$key}}; } $index_list{$key} = [(@list, $value)]; } } unless (exists $index_list{$page}) { $index_list{$page} = [()]; } } # make html from index $buf .= "
"; my $encoded_url = &Util::url_encode($page); $buf .= "config('script_name')."?page=" . $encoded_url . "\" class=\"wikipage\" " . "target=\"" . $encoded_url . "\">" . &Util::escapeHTML($page) . ""; $buf .= " | \n"; my @list = (); if (defined($index_list{$page})) { @list = @{$index_list{$page}}; } my $list_n = @list; $buf .= "$list_n | \n"; foreach my $p (@list) { $buf .= ""; $buf .= "config('script_name') . "?page=" . &Util::url_encode($p) . "\" class=\"wikipage\" " . "target=\"" . &Util::url_encode($p) . "\">" . &Util::escapeHTML($p) . ""; $buf .= " | \n"; } $buf .= "