<!--
	Copyright 2009 The Go Authors. All rights reserved.
	Use of this source code is governed by a BSD-style
	license that can be found in the LICENSE file.
-->
<!-- Table of contents; must be named manual-nav to turn off auto nav. -->
<div id="manual-nav">
{{with .PDoc}}
	<dl>
	<dd><a href="#Overview">Overview</a></dd>
	{{if .Consts}}
		<dd><a href="#Constants">Constants</a></dd>
	{{end}}
	{{if .Vars}}
		<dd><a href="#Variables">Variables</a></dd>
	{{end}}
	{{range .Funcs}}
		{{$name_html := html .Name}}
		<dd><a href="#{{$name_html}}">{{node_html .Decl $.FSet}}</a></dd>
	{{end}}
	{{range .Types}}
		{{$tname := printf "%s" .Type.Name}}
		{{$tname_html := node_html .Type.Name $.FSet}}
		<dd><a href="#{{$tname_html}}">type {{$tname_html}}</a></dd>
		{{range .Funcs}}
			{{$name_html := html .Name}}
			<dd>&nbsp; &nbsp; <a href="#{{$name_html}}">{{node_html .Decl $.FSet}}</a></dd>
		{{end}}
		{{range .Methods}}
			{{$name_html := html .Name}}
			<dd>&nbsp; &nbsp; <a href="#{{$tname_html}}.{{$name_html}}">{{node_html .Decl $.FSet}}</a></dd>
		{{end}}
	{{end}}
	{{if .Bugs}}
		<dd><a href="#Bugs">Bugs</a></dd>
	{{end}}
	</dl>
{{end}}
</div>

<!-- Main page -->		
{{with .PAst}}
	<pre>{{node_html . $.FSet}}</pre>
{{end}}
{{with .PDoc}}
	<h2 id="Overview">Overview</h2>
	<!-- The package's Name is printed as title by the top-level template -->
	{{if $.IsPkg}}
		<p><code>import "{{html .ImportPath}}"</code></p>
	{{end}}
	{{comment_html .Doc}}
	{{if $.IsPkg}}
		{{with .Filenames}}
			<h4>Package files</h4>
			<p>
			<span style="font-size:90%">
			{{range .}}
				<a href="/{{.|srcLink}}">{{.|filename|html}}</a>
			{{end}}
			</span>
			</p>
		{{end}}
	{{end}}
	{{with .Consts}}
		<h2 id="Constants">Constants</h2>
		{{range .}}
			{{comment_html .Doc}}
			<pre>{{node_html .Decl $.FSet}}</pre>
		{{end}}
	{{end}}
	{{with .Vars}}
		<h2 id="Variables">Variables</h2>
		{{range .}}
			{{comment_html .Doc}}
			<pre>{{node_html .Decl $.FSet}}</pre>
		{{end}}
	{{end}}
	{{range .Funcs}}
		{{/* Name is a string - no need for FSet */}}
		{{$name_html := html .Name}}
		<h2 id="{{$name_html}}">func <a href="/{{posLink_url .Decl $.FSet}}">{{$name_html}}</a></h2>
		<p><code>{{node_html .Decl $.FSet}}</code></p>
		{{comment_html .Doc}}
		{{example_html .Name $.Examples $.FSet}}
	{{end}}
	{{range .Types}}
		{{$tname := printf "%s" .Type.Name}}
		{{$tname_html := node_html .Type.Name $.FSet}}
		<h2 id="{{$tname_html}}">type <a href="/{{posLink_url .Decl $.FSet}}">{{$tname_html}}</a></h2>
		{{comment_html .Doc}}
		<pre>{{node_html .Decl $.FSet}}</pre>
		{{range .Consts}}
			{{comment_html .Doc}}
			<pre>{{node_html .Decl $.FSet}}</pre>
		{{end}}
		{{range .Vars}}
			{{comment_html .Doc}}
			<pre>{{node_html .Decl $.FSet}}</pre>
		{{end}}
		{{example_html $tname $.Examples $.FSet}}
		{{range .Funcs}}
			{{$name_html := html .Name}}
			<h3 id="{{$name_html}}">func <a href="/{{posLink_url .Decl $.FSet}}">{{$name_html}}</a></h3>
			<p><code>{{node_html .Decl $.FSet}}</code></p>
			{{comment_html .Doc}}
			{{example_html .Name $.Examples $.FSet}}
		{{end}}
		{{range .Methods}}
			{{$name_html := html .Name}}
			<h3 id="{{$tname_html}}.{{$name_html}}">func ({{node_html .Recv $.FSet}}) <a href="/{{posLink_url .Decl $.FSet}}">{{$name_html}}</a></h3>
			<p><code>{{node_html .Decl $.FSet}}</code></p>
			{{comment_html .Doc}}
			{{$name := printf "%s_%s" $tname .Name}}
			{{example_html $name $.Examples $.FSet}}
		{{end}}
	{{end}}
	{{with .Bugs}}
		<h2 id="Bugs">Bugs</h2>
		{{range .}}
		{{comment_html .}}
		{{end}}
	{{end}}
{{end}}
{{with .PList}}
	<h2>Other packages</h2>
	<p>
	{{/* PList entries are strings - no need for FSet */}}
	{{range .}}
	<a href="?p={{urlquery .}}">{{html .}}</a><br />
	{{end}}
	</p>
{{end}}
{{with .Dirs}}
	<p class="detail">
	Need more packages? The
	<a href="http://godashboard.appspot.com/package">Package Dashboard</a>
	provides a list of <a href="/cmd/goinstall/">goinstallable</a> packages.
	</p>
	{{/* DirList entries are numbers and strings - no need for FSet */}}
	<h2 id="Subdirectories">Subdirectories</h2>
	<p>
	<table class="layout">
	<tr>
	{{if $.DirFlat}}
		<th align="left">Name</th>
	{{else}}
		<th align="left" colspan="{{html .MaxHeight}}">Name</th>
	{{end}}
	<th width="25"></th>
	<th align="left">Synopsis</th>
	</tr>
	<tr>
	<td align="left"><a href="..">..</a></td>
	</tr>
	{{range .List}}
		<tr>
		{{if $.DirFlat}}
			<td align="left"><a href="{{html .Path}}">{{html .Path}}</a></td>
		{{else}}
			{{repeat `<td width="20"></td>` .Depth}}
			<td align="left" colspan="{{html .Height}}"><a href="{{html .Path}}">{{html .Name}}</a></td>
		{{end}}
		<td></td>
		<td align="left">{{html .Synopsis}}</td>
		</tr>
	{{end}}
	</table>
	</p>
{{end}}
