<?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://www.oracle.com/technetwork/java/index-jsp-135995.html">JSP Standard Tag Library (JSTL) specification</a>. Versions 1.0, 1.1 and 1.2 
      of JSTL are all implemented.
     </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">2014/01/02</font></b></td><td bgcolor="#CCCCCC"><font size="-1">
    [<a href="../standard/">Standard</a>]
      </font><font size="-1">
        The Apache Standard Taglib 1.2.1, an implementation of JSTL 1.2, has been released.
      </font></td></tr>

      <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>
