<?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.
-->
<!DOCTYPE taglib
        PUBLIC "-//Sun Microsystems, Inc.//DTD JSP Tag Library 1.1//EN"
        "http://java.sun.com/j2ee/dtds/web-jsptaglib_1_1.dtd">

<!-- a tab library descriptor -->

<taglib>
  <!-- after this the default space is
        "http://java.sun.com/j2ee/dtds/jsptaglibrary_1_2.dtd"
   -->

  <tlibversion>2.0</tlibversion>
  <jspversion>1.2</jspversion>
  <shortname>BSF JSP Support</shortname>
  <uri>http://jakarta.apache.org/taglibs/</uri>
  <info> Just testing </info>

  <tag>
    <name>scriptlet</name>
    <tagclass>org.apache.taglibs.bsf.scriptlet</tagclass>
    <bodycontent>tagdependent</bodycontent>
    <info>Run script</info>
    <attribute>
      <name>language</name>
      <required>true</required>
    </attribute>
  </tag>

  <tag>
    <name>expression</name>
    <tagclass>org.apache.taglibs.bsf.expression</tagclass>
    <bodycontent>tagdependent</bodycontent>
    <info>Run expression</info>
    <attribute>
      <name>language</name>
      <required>true</required>
    </attribute>
  </tag>

</taglib>
