<?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" version="2.1" 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">
  <tlib-version>3.0</tlib-version>
  <short-name>FreeMarker-test-taglib</short-name>
  <uri>http://freemarker.org/test/taglibs/el-functions-tag-name-clash</uri>

  <tag>
    <name>foo</name>
    <tag-class>freemarker.ext.jsp.taglibmembers.TestSimpleTag2</tag-class>
    <body-content>empty</body-content>
  </tag>

  <tag>
    <name>bar</name>
    <tag-class>freemarker.ext.jsp.taglibmembers.TestTag</tag-class>
    <body-content>JSP</body-content>
  </tag>

  <function>
    <name>foo</name>
    <function-class>freemarker.ext.jsp.taglibmembers.TestFunctions</function-class>
    <function-signature>java.lang.String reverse(java.lang.String)</function-signature>
  </function>

  <function>
    <name>bar</name>
    <function-class>freemarker.ext.jsp.taglibmembers.TestFunctions</function-class>
    <function-signature>java.lang.String reverse(java.lang.String)</function-signature>
  </function>

</taglib>