<?xml version='1.0' encoding='UTF-8'?>

<!--
 * 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.
-->
<!--
According to the spec we normally should divide between facelet 1.0 and facelet 2.0
but since this seems to be a spec errata in the JSF 2.0 rev 0 spec and both implementations
now pick up facelet 1.0 files as expected we centralize everything and keep everything on 1.2
jsf level for now.
Maybe in the long run we will divide both component classes into one for jsf 1.2 and
one for jsf 2.0 but for now this approach is fine enough.
-->

<!DOCTYPE facelet-taglib PUBLIC "-//Sun Microsystems, Inc.//DTD Facelet Taglib 1.0//EN" "facelet-taglib_1_0.dtd">
<facelet-taglib>
    <namespace>http://myfaces.apache.org/ext-scripting</namespace>
    <tag>
        <tag-name>compilerOutput</tag-name>
        <component>
            <component-type>org.apache.myfaces.extensions.scripting.components.CompilerComponent</component-type>
            <renderer-type>org.apache.myfaces.extensions.scripting.components.CompilerComponentRenderer</renderer-type>
        </component>
    </tag>
    <tag>
         <tag-name>taintHistory</tag-name>
         <component>
             <component-type>org.apache.myfaces.extensions.scripting.components.TaintHistory</component-type>
             <renderer-type>org.apache.myfaces.extensions.scripting.components.TaintHistoryRenderer</renderer-type>
         </component>
     </tag>
</facelet-taglib>
