<?xml version="1.0"?>
<!--
   Licensed to the Apache Software Foundation (ASF) under one or more
  contributor license agreements.  See the NOTICE file distributed with
  this work for additional information regarding copyright ownership.
  The ASF licenses this file to You 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.
-->

<document>
  <properties>
    <title>Apache Taglibs</title>
    <author email="dev@tomcat.apache.org">Apache Taglibs Team</author>
  </properties>
  <body>
    <section name="Apache Taglibs">
     <p> 
      This project is an open source repository for JSP(tm) Tag Libraries. 
     </p>
     <p>
      In particular, Apache Taglibs hosts the <a href="standard/">Apache Standard Taglib</a>, an implementation of the
      <a href="http://java.sun.com/products/jsp/jstl">JSP Standard Tag Library specification</a>. Versions 1.0 and 1.1 
      of JSTL are implemented, and a 1.2 implementation is in the works. 
     </p>
    </section>

    <section name="Formerly Jakarta Taglibs">
     <p>
      Apache Taglibs was originally called Jakarta Taglibs. When the project changed name, and moved over to coexist 
      with the Tomcat project, many of the original taglibs were retired. See the 
      <a href="http://attic.apache.org/projects/jakarta-taglibs.html">Jakarta Taglibs retirement page</a> for 
      more on these taglibs. 
     </p>
    </section>

    <section name="News">

    <table border="0" cellspacing="5" cellpadding="5" width="100%">

      <tr><td bgcolor="#CCCCCC"><b><font size="-1">2009/06/07</font></b></td><td bgcolor="#CCCCCC"><font size="-1">[ALL]</font><font size="-1">
        The Standard and RDC Taglibs have moved over to Tomcat. All other taglibs back at Jakarta have been deprecated 
        and a new Extended Taglib created. 
      </font></td></tr>

    </table>


    </section>
  </body>
</document>
