<?xml version="1.0" encoding="ISO-8859-1" ?>
<!--
  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.
--><taglib xmlns="http://java.sun.com/xml/ns/javaee"
      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
      xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
      http://java.sun.com/xml/ns/javaee/web-jsptaglibrary_2_1.xsd"
      version="2.1">
  <tlib-version>1.0</tlib-version>
  <short-name>BugTags</short-name>
  <uri>http://tomcat.apache.org/bugs</uri>

  <tag>
    <name>Bug46816a</name>
    <tag-class>org.apache.jasper.compiler.TestScriptingVariabler$Bug48616aTag</tag-class>
    <body-content>JSP</body-content>
  </tag>
  <tag>
    <name>Bug48616b</name>
    <tag-class>org.apache.jasper.compiler.TestScriptingVariabler$Bug48616bTag</tag-class>
    <tei-class>org.apache.jasper.compiler.TestScriptingVariabler$Bug48616bTei</tei-class>
    <body-content>JSP</body-content>
  </tag>

  <tag>
    <name>Bug48701a</name>
    <tag-class>org.apache.jasper.compiler.TestGenerator$Bug48701</tag-class>
    <tei-class>org.apache.jasper.compiler.TestGenerator$Bug48701TEI</tei-class>
    <body-content>empty</body-content>
  </tag>
  <tag>
    <name>Bug48701b</name>
    <tag-class>org.apache.jasper.compiler.TestGenerator$Bug48701</tag-class>
    <body-content>empty</body-content>
    <variable>
      <name-given>now</name-given>
      <variable-class>org.apache.jasper.compiler.TestGenerator.Bean</variable-class>
      <scope>AT_END</scope>
    </variable>
  </tag>
  <tag>
    <name>Bug48701c</name>
    <tag-class>org.apache.jasper.compiler.TestGenerator$Bug48701</tag-class>
    <body-content>empty</body-content>
    <attribute>
      <name>beanName</name>
      <type>java.lang.String</type>
    </attribute>
    <variable>
      <name-from-attribute>beanName</name-from-attribute>
      <variable-class>org.apache.jasper.compiler.TestGenerator.Bean</variable-class>
      <scope>AT_END</scope>
    </variable>
  </tag>
  <tag>
    <name>Bug56529</name>
    <tag-class>org.apache.jasper.compiler.TestGenerator$Bug56529</tag-class>
    <body-content>JSP</body-content>
    <attribute>
      <name>attribute1</name>
      <required>true</required>
      <rtexprvalue>true</rtexprvalue>
    </attribute>
    <attribute>
      <name>attribute2</name>
      <required>true</required>
    </attribute>
  </tag>
  <function>
    <name>bug49555</name>
    <function-class>org.apache.el.TesterFunctions$Inner$Class</function-class>
    <function-signature>java.lang.String bug49555()</function-signature>
  </function>
</taglib>