<?xml version="1.0"?>
<!--
   Copyright 2004 The Apache Software Foundation
  
   Licensed under the Apache License, Version 2.0 (the "License");
   you may not use this file except in compliance with the License.
   You may obtain a copy of the License at
  
       http://www.apache.org/licenses/LICENSE-2.0
  
   Unless required by applicable law or agreed to in writing, software
   distributed under the License is distributed on an "AS IS" BASIS,
   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
   See the License for the specific language governing permissions and
   limitations under the License.
-->
<!-- $Id$ -->
<!DOCTYPE document PUBLIC "-//APACHE//DTD Documentation V1.2//EN" "./dtd/document-v12.dtd">
<document>

 <header>
  <title>Jakarta Tapestry - Documentation</title>
 </header>

<body>




<section>
		<title>
				Tapestry API Documentation
		</title>
		


Full documentation for the Tapestry framework, the <code>contrib</code>
framework (which contains additional components and classes), 
and all the example code.


<p>
<link href="site:api">[HTML]</link>	
</p>
</section>

<section>
		<title>
				Tapestry Component Reference
		</title>

A handy refrence to the built-in Tapestry components, with example
specifications, HTML templates and code.

<p>
<link href="site:comp-ref">[HTML]</link>	
</p>
</section>

<section>
		<title>
		Developer's Guide
		</title>
		
Exhaustive reference for Tapestry, in extreme detail.
          
<p>
			<link href="doc/DevelopersGuide/DevelopersGuide.html">[HTML]</link>
			<link href="doc/DevelopersGuide/DevelopersGuide.pdf">[PDF]</link>
	</p>          
          
<warning label="Out of date">This document is out of date, and is being replaced with a new 
User's Guide.
</warning>

</section>
	
<section>
	<title>
		User's Guide
	</title>
		
Complete reference to the Tapestry framework.
           
<p>
		<link href="doc/TapestryUsersGuide/TapestryUsersGuide.html">[HTML]</link>
		<link href="doc/TapestryUsersGuide/TapestryUsersGuide.pdf">[PDF]</link>	
</p>           
           
<warning label="Incomplete">This document is currently being constructed and is incomplete. It is a replacement
	for the Developer's Guide.
</warning>
</section>

<section>
	<title>
	Contributor's Guide
	</title>
		
Guide for users and prospective developers who wish to contribute code and patches to the
Tapestry project.

<p>
		<link href="doc/ContributorsGuide/ContributorsGuide.html">[HTML]</link>
		<link href="doc/ContributorsGuide/ContributorsGuide.pdf">[PDF]</link>
</p>

</section>

<section>
	<title>External Documentation</title>		
	
	<p>
	Kevin C. Dorff has created a <a href="http://dorffweb.com/?page=taptutorial">Tapestry Tutorial</a>
	that shows off the new features in Tapestry 3.0.
	</p>
	
	<p>
	<a href="http://www.manning.com">Manning Publications</a>	 has published
	<a href="http://www.manning.com/lewisship/">Tapestry In Action</a>, written
	by Howard Lewis Ship, the creator of Tapestry.
	</p>
		
</section>

</body>
</document>
