Name:
	Map
FullName:
	Wiki linking and page relation map
URI:
	IW:SuikaWiki:WikiPage
Require:
	SuikaWiki::Markup::XML SuikaWiki::Plugin::WikiPage main SuikaWiki::Plugin::WikiLinking
Initialize:
	my $NS_XHTML1 = 'http://www.w3.org/1999/xhtml';
	my $NS_RDF = 'http://www.w3.org/1999/02/22-rdf-syntax-ns#';
	my $NS_RSS = 'http://purl.org/rss/1.0/';
	my $NS_DC = 'http://purl.org/dc/elements/1.1/';
	my $NS_MAP = 'http://members.jcom.home.ne.jp/jintrick/2003/02/site-concept.xml#';

{
Name:
	wikiview/link-map
FullName:
	Hyperlink map from the WikiPage
Format:
	my %option = (level => 0+$o->resource('Map:Depth'), weight_list => {},
		not_exist => {}, map_from_here => $o->resource('Map:FromHere'),
		map_from_here_description => $o->resource('Map:FromHereLong'),
		o => $o);
	&map_make_list ($o->{page}, %option);
	if (0 && ($o->{media}->{type} =~ /xml/)) {	# XML (maybe XHTML)
	  $r = SuikaWiki::Markup::XML->new (namespace_uri => $NS_RDF, local_name => 'RDF');
	  $r->define_new_namespace ('' => $NS_MAP);
	  $r->define_new_namespace (rss => $NS_RSS);
	  $r->define_new_namespace (dc => $NS_DC);
	  $r->append_text ("\n");
	  $option{weight_list}->{''}->{$o->{page}} = 1;
	  $r->append_node (map_list_to_xml ('', $option{weight_list}, %option));
	} else {
	  $r = map_list_to_html ($o->{page}, $option{weight_list}, %option);
	}
}

{
Name:
	wikiview/map-children-pages
FullName:
	Children of the WikiPage
Format:
	#if ($o->_database) {
	  $r = SuikaWiki::Markup::XML->new (type => '#document');
	  #$r->append_new_node (type => '#pi', local_name => 'xml')
	  #  ->set_attribute (version => '1.0');
	  #$r->append_text ("\n");
	  # stylesheets
	  my $RDF = $r->append_new_node (namespace_uri => $NS_RDF, local_name => 'RDF');
	  $RDF->define_new_namespace ('' => $NS_MAP);
	  $RDF->define_new_namespace (rss => $NS_RSS);
	  $RDF->define_new_namespace (dc => $NS_DC);
	  $RDF->append_text ("\n");
	  $RDF->append_node (rdfmap_make_pageinfo ($o, $p, ($p->{page} || $o->{page})));
	  $RDF->append_text ("\n");
	#}
}


{
Name:
	wikiform_input/recent-change-list
FullName:
	Recent-changed-pages list
Format:
	#eval q{	# Currently not all database has '->mtime' and '->recent_changes'.  Abstracted WikiDatabase system is needed
	  if ($o->{to} eq 'RSS') {
	      $r = SuikaWiki::Markup::XML->new (namespace_uri => $NS_RDF, local_name => 'RDF');
	        $r->define_new_namespace (rdf => $NS_RDF);
	        $r->define_new_namespace ('' => $NS_RSS);
	        $r->define_new_namespace (dc => $NS_DC);
	        my $channel = $r->append_new_node (namespace_uri => $NS_RSS, local_name => 'channel');
	          $channel->set_attribute (about => $o->_uri_wiki_page (($o->{page} || $p->{page})), namespace_uri => $NS_RDF);
	          $channel->append_text ("\n");
	          $channel->append_new_node (namespace_uri => $NS_RSS, local_name => 'title')
	                  ->append_text ($o->resource ('RSS:WikiTitle'));
	          $channel->append_text ("\n");
	          $channel->append_new_node (namespace_uri => $NS_RSS, local_name => 'link')
	                  ->append_text ($o->uri ('wiki'));
	          $channel->append_text ("\n");
	          $channel->append_new_node (namespace_uri => $NS_RSS, local_name => 'description')
	                  ->append_text ($o->resource ('RSS:WikiDescription'));
	          $channel->append_text ("\n");
	          $channel->append_new_node (namespace_uri => $NS_DC, local_name => 'date')
	                  ->append_text (&main::_rfc3339_date (time));
	          $channel->append_text ("\n");
	          my $items = $channel->append_new_node (namespace_uri => $NS_RSS, local_name => 'items')
	                              ->append_new_node (namespace_uri => $NS_RDF, local_name => 'Seq');
	      $p->{ns} .= '//' if $p->{ns} && $p->{ns} !~ m#//$#;
	      for my $page_name ($o->_database->recent_changes (($p->{n} || 10),0,{ns => $p->{ns}, recursive => (defined $p->{recursive} ? $p->{recursive} : 1)})) {
	        next unless $page_name;
	        my $page_uri = $o->_uri_wiki_page ($page_name);
	        $items->append_new_node (namespace_uri => $NS_RDF, local_name => 'li')
	              ->set_attribute (resource => $page_uri, namespace_uri => $NS_RDF);
	        $items->append_text ("\n");
	        $r->append_text ("\n");
	        my $page = $r->append_new_node (namespace_uri => $NS_RSS, local_name => 'item');
	          $page->set_attribute (about => $page_uri, namespace_uri => $NS_RDF);
	          $page->append_text ("\n");
	          $page->append_new_node (namespace_uri => $NS_RSS, local_name => 'title')
	               ->append_text ($page_name);
	          $page->append_text ("\n");
	          $page->append_new_node (namespace_uri => $NS_RSS, local_name => 'link')
	               ->append_text ($page_uri);
	          $page->append_text ("\n");
	          $page->append_new_node (namespace_uri => $NS_RSS, local_name => 'description')
	               ->append_text (SuikaWiki::Plugin::WikiPage->_get_subjectline($page_name, delimiter => ''));
	          $page->append_text ("\n");
	          $page->append_new_node (namespace_uri => $NS_DC, local_name => 'date')
	               ->append_text (&main::_rfc3339_date ($o->_database->mtime ($page_name)));
	          $page->append_text ("\n");
	      }
	      1;
	  } else {
	    $r = SuikaWiki::Markup::XML->new (type => '#element', namespace_uri => $NS_XHTML1,
	                                      local_name => 'ol');
	      $r->set_attribute (class => 'm--recent-changes');
	    $p->{ns} .= '//' if $p->{ns} && $p->{ns} !~ m#//$#;
	    for ($o->_database->recent_changes (($p->{n} || 10), 0,
	                                        {ns => $p->{ns},
	                                         recursive => (defined $p->{recursive}
	                                                       ? $p->{recursive} : 1)})) {
	      next unless $_;
	      my $li = $r->append_new_node (namespace_uri => $NS_XHTML1, local_name => 'li');
	      $li->append_node (SuikaWiki::Plugin::WikiLinking->to_wikipage_in_html ({
	      	label	=> ($p->{template}
	      	         || $o->resource ('Link:toWikiPage:SourceLabelLong:RecentChangeItem')),
	      } => {
	      	base	=> $o->{page},
	      	page_name_relative	=> $_,
	      	wiki_mode	=> $p->{mode},
	      }, {
	      	o	=> $o,
	      }));
	    }
	  }
	  1;
	#} or $r = '<p xmlns="http://www.w3.org/1999/xhtml">Error: '.$o->escape ($@).'</p>';
}

{
Name:
	wikiview/recent-change-dated
FullName:
	Recent-changed-pages list, grouped by modified date
Format:
	eval q{
	    $r = qq(<div class="recent-changes">\n);
	    my $date = '';
	    $p->{ns} .= '//' if $p->{ns} && $p->{ns} !~ m#//$#;
	    for ($main::database->recent_changes (($p->{n} || 10),0,{ns => $p->{ns}, recursive => (defined $p->{recursive} ? $p->{recursive} : 1)})) {
	      next unless $_;
	      my @date = gmtime $main::database->mtime ($_);
	      my $ndate = sprintf '%04d-%02d-%02d', $date[5]+1900,$date[4]+1,$date[3];
	      if ($ndate ne $date) {
	        $r .= "</ol>\n" if $date;
	        my $id = 'h'.$o->new_index ('heading');
	        my $level = $p->{level}+0||1;
	        $r .= qq(<h$level id="$id">$ndate</h$level>\n<ol>\n);
	        push @{$o->{toc}}, [$level-1 => $id => $ndate] if !defined $p->{add_to_toc} || $p->{add_to_toc};
	        $date = $ndate;
	      }
	      $date[0] = sprintf '%s %02d:%02d:%02d+00:00', $ndate, @date[2,1,0];
	      $r .= qq(<li><a href="@{[$o->uri('wiki')]}?@{[$o->encode($_)]}" class="wiki" title="@{[$o->escape (SuikaWiki::Plugin::WikiPage->_get_subjectline ($_,delimiter=>''))]} [$date[0]]">) . $o->escape ($_) . qq(</a></li>\n);
	    }
	    $r .= '</ol></div>';
	} or $r = $o->escape($@);
}
{
Name:
	wikiform_input/recent-change-dated
FullName:
	Recent-changed-pages list, grouped by modified date
Format:
	eval q{
	    $r = qq(<div class="recent-changes">\n);
	    my $date = '';
	    $p->{ns} .= '//' if $p->{ns} && $p->{ns} !~ m#//$#;
	    for ($main::database->recent_changes (($p->{n} || 10),0,{ns => $p->{ns}, recursive => (defined $p->{recursive} ? $p->{recursive} : 1)})) {
	      next unless $_;
	      my @date = gmtime $main::database->mtime ($_);
	      my $ndate = sprintf '%04d-%02d-%02d', $date[5]+1900,$date[4]+1,$date[3];
	      if ($ndate ne $date) {
	        $r .= "</ol>\n" if $date;
	        my $id = 'h'.$o->new_index ('heading');
	        my $level = ($p->{level}+0||1)+1;
	        $r .= qq(<h$level id="$id">$ndate</h$level>\n<ol>\n);
	        push @{$o->{toc}}, [$level-1 => $id => $ndate] if !defined $p->{add_to_toc} || $p->{add_to_toc};
	        $date = $ndate;
	      }
	      $date[0] = sprintf '%s %02d:%02d:%02d+00:00', $ndate, @date[2,1,0];
	      $r .= qq(<li><a href="@{[$o->uri('wiki')]}?@{[$o->encode($_)]}" class="wiki" title="@{[$o->escape($_)]} [$date[0]]">) . $o->escape ($_) . qq(</a></li>\n);
	    }
	    $r .= '</ol></div>';
	} or $r = $o->escape($@);
}

{
Name:
	wikiform-input/page-list
	wikiview/page-list
FullName:
	WikiPage list
Format:
	#eval q{
	  my $re = $p->{match} || '.';	## WARNING: This can be dangerous!
	  $r = SuikaWiki::Markup::XML->new (namespace_uri => $NS_XHTML1, local_name => 'ul');
	  if ($o->_database) {
	    $p->{ns} .= '//' if $p->{ns} && substr ($p->{ns}, -2) ne '//';
	    my %outputed;
	    for (sort grep /$re/, $o->_database->list_items ({ns => $p->{ns}, type => ($p->{type}||'key'), recursive => $p->{recursive}})) {
	      s!//$!!;
	      $outputed{$_} ? next : ($outputed{$_} = 1);
	      my $li = $r->append_new_node (namespace_uri => $NS_XHTML1, local_name => 'li');
	      $li->append_node (SuikaWiki::Plugin::WikiLinking->to_wikipage_in_html ({
	      	label	=> ($p->{template} || $o->resource ('Link:toWikiPage:SourceLabelLong')),
	      } => {
	      	base	=> $o->{page},
	      	page_name_relative	=> $_,
	      	#page_anchor_no	=> $,
	      	wiki_mode	=> $p->{mode},
	      }, {
	      	o	=> $o,
	      }));
	    }
	  }
	  if ($r->count) {
	    $r->set_attribute (class => 'pages');
	  } else {
	    $r = '';
	  }
	#} or $r = qq(<div class="error">@{[$o->escape ($@)]}</div>);
}

{
Name:
	wikiformat/SuikaWiki/0.9-to-RSS
FullName:
	SuikaWiki/0.9 document format -> RSS
URI:
	IW:SuikaWiki:SuikaWiki
Format:
	$o->{content} =~ s($main::embed_command{form}){
	  my $i = $2;
	  $i =~ s/\\(.)/$1/gs;
	  if ($i =~ /(%recent-change-list(?:\((?:[^)]|\\.)*\))?;)/s) {
	    $r = $o->formatter ('form_input')->replace ($1 => $o);
	    return $r;
	  }
	''}ge;
	$r = '<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"/>';
}

{
Name:
	wikiview/map-link-alternate-version-xml-rdf-rss
FullName:
	Linking alternate version -- RSS 1.0 format
Format:
	if ($main::database{$o->{page} || $p->{page}} =~ /%recent-change-list/) {
	  $r = SuikaWiki::Markup::XML->new (namespace_uri => $NS_XHTML1, local_name => 'link');
	  $r->set_attribute (rel => 'alternate');
	  $r->set_attribute (type => 'application/rss+xml');
	  $r->set_attribute (href => $o->_uri_wiki_page (($o->{page} || $p->{page}), mode => 'rss'));
	  $r->set_attribute (title => $o->resource ('Map:Link:Alternate:RSS:Long'));
	}
}

MODULE:
	SuikaWiki::View->definition (rss => {
		media => {type => 'application/rss+xml',
			expires => 3600, charset => 1},
		check => sub { ref $_[0]->format_converter ($_[0]->{magic} => 'RSS') ? 1 : 0 },
		template => '%styles-wiki-xml(page=>"'.$main::PageName{StyleList}.'XML//RDF//RSS");
	%read(to=>RSS);'});
	SuikaWiki::View->definition (m_xml_rdf_sitemap => {
		media => {type => 'application/rdf+xml',
			expires => 3600, charset => 1},
		template => '%styles-wiki-xml(page=>"'.$main::PageName{StyleList}.'XML//RDF//Sitemap");
	%map-children-pages;'});
	SuikaWiki::View->template ('links')->add_line (<<EOH);
	%link-wiki(rel=>sitemap,mode=>m-xml-rdf-sitemap,class=>wiki,type=>"application/rdf+xml",title=>{%res(name=>{Nav:Sitemap:Children:Title});}p);
	%link-wiki(mode=>map,rel=>sitemap,class=>wiki-cmd,title=>"%res(name=>ShowMapOfThisPageLink);"p);
	%link-wiki(page=>@{[$main::PageName{IndexPage}]},rel=>index,class=>wiki,title=>"%res(name=>GoToIndexPageLink,safe);"p);
	%link-wiki(page=>@{[$main::PageName{RecentChanges}]},rel=>News,class=>wiki,title=>"%res(name=>GoToRecentChangesLink);"p);
	%link-wiki(page=>@{[$main::PageName{RecentChanges}]},mode=>rss,rel=>News,class=>wiki,title=>"%res(name=>GoToRssPageLink);"p,type=>"application/rss+xml");
	%map-link-alternate-version-xml-rdf-rss();
	EOH
	
	sub rdfmap_make_pageinfo ($$$) {
	  my ($o, $p, $page) = @_;
	  my $re = $p->{match} || '.';
	  my $c = new SuikaWiki::Markup::XML (namespace_uri => $NS_MAP, local_name => 'Document');
	  $c->append_new_node (namespace_uri => $NS_DC, local_name => 'title')
	    ->append_text ($page);
	  $c->append_new_node (namespace_uri => $NS_RSS, local_name => 'description')
	    ->append_text (SuikaWiki::Plugin::WikiPage->_get_subjectline ($page, delimiter => ''));
	  my @date = gmtime $main::database->mtime ($page);
	  $c->append_new_node (namespace_uri => $NS_DC, local_name => 'date')
	    ->append_text (sprintf '%04d-%02d-%02d %02d:%02d:%02d+00:00', $date[5]+1900,$date[4]+1,@date[3,2,1,0]);
	  $c->set_attribute (about => $o->uri ('wiki').'?'.$o->encode($page), namespace_uri => $NS_RDF);
	  my %children;
	  map {s!\Q$SuikaWiki::Name::Space::Delimiter\E$!!; $children{$_} = 1} grep /$re/, $o->_database->list_items ({ns => $page.'//', type => ('both'), recursive => 0});
	  if (scalar (keys %children)) {
	    my $c = $c->append_new_node (namespace_uri => $NS_RSS, local_name => 'items')
	              ->append_new_node (namespace_uri => $NS_RDF, local_name => 'Bag');
	    for (sort keys %children) {
	      $c->append_new_node (namespace_uri => $NS_RDF, local_name => 'li')
	        ->append_node (rdfmap_make_pageinfo ($o, $p, $_));
	    }
	  }
	  $c;
	}
	
	sub map_make_list ($;%) {
	  my ($page, %option) = @_;
	  $option{level} ||= 3;
	  my %weight;
	  my $content = $main::database{$page};
	  $content =~ s{^\#\?([^\x0A\x0D]+)}{
	    if ($1 =~ /import="([^"]+)"/) {
	      for (split /\s*,\s*/, $1) {
	        $weight{$_} += 2;
	      }
	    }
	    '';
	  }es;
	  ## Bug: this code does not support content type.
	  $content =~ s{\[\[([^\#\]]+)\](?:>>\d+)?\]}{
	    $weight{$1} += 2; '';
	  }ge;
	  delete $weight{$page};	## Delete myself
	  for my $page (keys %weight) {
	    $weight{$page} += ($content =~ s/\Q$page\E//g);
	    ($weight{$page} *= 0.1, $option{not_exist}->{$page} = 1) unless exists $main::database {$page};
	  }
	  $option{weight_list}->{$page} = \%weight;
	  if (--$option{level}) {
	    for my $page (keys %weight) {
	      &map_make_list ($page, %option) unless $option{weight_list}->{$page};
	    }
	  }
	  $option{weight_list};
	}
	
	sub map_list_to_html ($$;%) {
	  my ($Page, $wlist, %option) = @_;
	  
	  my $o = $option{o};
	  if ($o->feature ('SuikaWiki::Markup::XML')) {
	    my $r = SuikaWiki::Markup::XML->new (local_name => 'ul', namespace_uri => $NS_XHTML1);
	    $option{outputed}->{$Page} = 1;
	    for my $page (sort {$wlist->{$Page}->{$b} <=> $wlist->{$Page}->{$a}} keys %{$wlist->{$Page}}) {
	      for my $LI ($r->append_new_node (local_name => 'li', namespace_uri => $NS_XHTML1)) {
	        for my $weight ($LI->append_new_node (local_name => 'span', namespace_uri => $NS_XHTML1)) {
	          $weight->set_attribute (class => 'weight');
	          $weight->append_text ('{' . (0+$wlist->{$Page}->{$page}) . '}');
	        }
	        $LI->append_text (' ');
	        for my $A ($LI->append_new_node (local_name => 'a', namespace_uri => $NS_XHTML1)) {
	          $A->set_attribute (href => $o->uri('wiki').'?'.$o->encode($page));
	          $A->append_text ($page);
	          my $CLASS = $A->set_attribute (class => 'wiki');
	          if ($option{not_exist}->{$page}) {
	            $CLASS->append_text (' not-exist');
	            for my $mark ($A->append_new_node (local_name => 'span', namespace_uri => $NS_XHTML1)) {
	              $mark->set_attribute (class => 'mark');
	              $mark->append_text ($o->resource('JumpAndEditWikiPageMark'));
	            }
	          }
	        }
	        $LI->append_text (' ');
	        for my $A ($LI->append_new_node (local_name => 'a', namespace_uri => $NS_XHTML1)) {
	          $A->set_attribute (href => $o->uri('wiki').'?mycmd=map;mypage='.$o->encode($page));
	          $A->set_attribute (class => 'wiki-cmd map-from-here');
	          $A->set_attribute (title => $option{map_from_here_description});
	          $A->append_text ($option{map_from_here});
	        }
	        $LI->append_text (' ');
	        for my $hl ($LI->append_new_node (local_name => 'span', namespace_uri => $NS_XHTML1)) {
	          $hl->set_attribute (class => 'headline');
	          $hl->append_text (SuikaWiki::Plugin::WikiPage->_get_subjectline($page));
	        }
	        unless ($option{outputed}->{$page}) {	## child
	          my $c = &map_list_to_html ($page, $wlist, %option);
	          $LI->append_text ("\n");
	          if (ref ($c) eq ref ($LI)) {
	            $LI->append_node ($c);
	          } elsif ($c) {
	            $LI->append_new_node (type => '#xml', value => $c);
	          }
	        }
	      }	# LI
	    }
	    return $r->count ? $r : '';
	  } else {
	  
	  my $r = '';
	  $option{outputed}->{$Page} = 1;
	  for my $page (sort {$wlist->{$Page}->{$b} <=> $wlist->{$Page}->{$a}} keys %{$wlist->{$Page}}) {
	    $r .= qq(<li><span class="weight">[@{[0+$wlist->{$Page}->{$page}]}]</span> <a href="$main::url_cgi?@{[$o->encode($page)]}" class="wiki@{[$option{not_exist}->{$page}?' not-exist':'']}">@{[$o->escape ($page).($option{not_exist}->{$page}?qq(<span class="mark">@{[$o->resource('JumpAndEditWikiPageMark',escape=>1)]}</span>):'')]}</a> <a href="$main::url_cgi?mycmd=map;mypage=@{[$o->encode($page)]}" class="wiki-cmd map-from-here" title="@{[$o->escape($option{map_from_here_description})]}">@{[$o->escape($option{map_from_here})]}</a> <span class="summary">@{[$o->escape(SuikaWiki::Plugin::WikiPage->_get_subjectline($page))]}</span>);
	    unless ($option{outputed}->{$page}) {
	      $r .= &map_list_to_html ($page, $wlist, %option);
	    }
	    $r .= "</li>\n";
	  }
	  return $r ? qq(<ul class="map">$r</ul>) : '';
	  
	  }
	  
	}
	
	sub map_list_to_xml ($$;%) {
	  my ($Page, $wlist, %option) = @_;
	  my $o = $option{o};
	  
	  my $r = SuikaWiki::Markup::XML->new (type => '#fragment');
	    $option{outputed}->{$Page} = 1;
	    for my $page (sort {$wlist->{$Page}->{$b} <=> $wlist->{$Page}->{$a}} keys %{$wlist->{$Page}}) {
	      for my $D ($r->append_new_node (local_name => 'Document', namespace_uri => $NS_MAP)) {
	        $D->set_attribute (about => $o->uri('wiki').'?'.$o->encode($page), namespace_uri => $NS_RDF);
	        #for my $weight ($D->append_new_node (local_name => 'span', namespace_uri => $NS_XHTML1)) {
	        #  $weight->set_attribute (class => 'weight');
	        #  $weight->append_text ('{' . (0+$wlist->{$Page}->{$page}) . '}');
	        #}
	        #$D->append_text ("\n");
	        $D->append_new_node (local_name => 'title', namespace_uri => $NS_DC)
	          ->append_text ($page);
	        #if ($option{not_exist}->{$page}) {
	        #  $CLASS->append_text (' not-exist');
	        #}
	        $D->append_text ("\n");
	        $D->append_new_node (local_name => 'description', namespace_uri => $NS_RSS)
	          ->append_text (SuikaWiki::Plugin::WikiPage->_get_subjectline($page));
	        unless ($option{outputed}->{$page}) {	## child
	          my $c = &map_list_to_xml ($page, $wlist, %option);
	          if (ref $c) {
	            $D->append_text ("\n");
	            my $B = $D->append_new_node (local_name => 'items', namespace_uri => $NS_RSS)
	                      ->append_new_node (local_name => 'Bag', namespace_uri => $NS_RDF);
	            for (@{$c->child_nodes}) {
	              $B->append_new_node (local_name => 'li', namespace_uri => $NS_RDF)
	                ->append_node ($_);
	              $B->append_text ("\n");
	            }
	          }
	        }
	      }	# LI
	    }
	    return $r->count ? $r : '';
	}
	
	SuikaWiki::View->definition (map => {
		media	=> {type => 'text/html', charset => 1, expires => 120},
		xmedia	=> {type => 'application/xhtml+xml', charset => 1, expires => 120},
		template => <<'EOH'});
	%html-document(title=>{%res(name=>{View:WebPageTitle});}p,link-meta=>{%predefined-template(name=>links);}p,content=>{
	  %section(level=>1,add-to-toc=>0,type=>body,title=>{%ns-short-page-name;}p,heading,content=>{
	    %section(id=>tools1,class=>tools,add-to-toc=>0,content=>{%predefined-template(name=>navbar);}p);
	    %section(level=>2,id=>link-map,title=>{Map:Title},heading,content=>{
	      %paragraph(content=>{%res(name=>{Map:Description});}p);
	      %link-map;
	    }p);
	    %section(level=>2,id=>children,title=>{%res(name=>{Children:Title});}p,heading,
	    content=>{%page-list(ns=>{%page-name;}p,recursive=>0,type=>both,template=>{%res(name=>{Children:Item});}p);}p);
	    %section(level=>2,id=>see-also,title=>{%res(name=>SeeAlso);}p,heading,content=>{%search-result;}p);
	    %section(level=>2,id=>referer,title=>{%res(name=>Referer);}p,heading,content=>{%referer-list;}p);
	    %section(level=>2,id=>toc,title=>{%res(name=>{TOC:Title};}p,heading,add_to_toc=>0,content=>{%toc(drag);}p);
	    %section(id=>last-modified,add_to_toc=>0,content=>{%res(name=>{LastModified=});%last-modified;}p);
	    %section(class=>tools,add_to_toc=>0,content=>{%predefined-template(name=>navbar);}p);
	    %section(id=>footer,add-to-toc=>0,content=>{%predefined-template(name=>footer);}p);
	    %apply-user-preferred-style;
	  }p);
	}p);
	EOH
	

POD:SEE ALSO:
	SuikaWiki::Plugin::Referer, SuikaWiki::Plugin::WikiPage,
	SuikaWiki::Plugin::InterWikiCore
POD:LICENSE:
	Copyright 2003 Wakaba <w@suika.fam.cx>
	
	%%GNUGPL2%%