#
# Copyright 2002,2004 The Apache Software Foundation.
# 
# Licensed 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.
#

# register the default tag libraries with an abbreviated name
core        = org.apache.commons.jelly.tags.core.CoreTagLibrary

# optional taglibs
ant         = org.apache.commons.jelly.tags.ant.AntTagLibrary
antlr       = org.apache.commons.jelly.tags.antlr.AntlrTagLibrary
bean        = org.apache.commons.jelly.tags.bean.BeanTagLibrary
beanshell   = org.apache.commons.jelly.tags.beanshell.BeanShellTagLibrary
betwixt     = org.apache.commons.jelly.tags.betwixt.BetwixtTagLibrary
bsf         = org.apache.commons.jelly.tags.bsf.BSFTagLibrary
define      = org.apache.commons.jelly.tags.define.DefineTagLibrary
dynabean    = org.apache.commons.jelly.tags.dynabean.DynabeanTagLibrary
email       = org.apache.commons.jelly.tags.email.EmailTagLibrary
fmt         = org.apache.commons.jelly.tags.fmt.FmtTagLibrary
html        = org.apache.commons.jelly.tags.html.HTMLTagLibrary
http        = org.apache.commons.jelly.tags.http.HttpTagLibrary
interaction = org.apache.commons.jelly.tags.interaction.InteractionTagLibrary
javascript  = org.apache.commons.jelly.tags.bsf.JavaScriptTagLibrary
jface       = org.apache.commons.jelly.tags.jface.JFaceTagLibrary
jetty       = org.apache.commons.jelly.tags.jetty.JettyTagLibrary
jms         = org.apache.commons.jelly.tags.jms.JMSTagLibrary
jmx         = org.apache.commons.jelly.tags.jmx.JMXTagLibrary
jpython     = org.apache.commons.jelly.tags.bsf.JPythonTagLibrary
jython      = org.apache.commons.jelly.tags.bsf.JythonTagLibrary
jsl         = org.apache.commons.jelly.tags.jsl.JSLTagLibrary
junit       = org.apache.commons.jelly.tags.junit.JUnitTagLibrary
log         = org.apache.commons.jelly.tags.log.LogTagLibrary
ojb         = org.apache.commons.jelly.tags.ojb.OjbTagLibrary
pnuts       = org.apache.commons.jelly.tags.bsf.PNutsTagLibrary
quartz      = org.apache.commons.jelly.tags.quartz.QuartzTagLibrary
regexp      = org.apache.commons.jelly.tags.regexp.RegexpTagLibrary
soap        = org.apache.commons.jelly.tags.soap.SoapTagLibrary
sql         = org.apache.commons.jelly.tags.sql.SqlTagLibrary
swing       = org.apache.commons.jelly.tags.swing.SwingTagLibrary
swt         = org.apache.commons.jelly.tags.swt.SwtTagLibrary
threads     = org.apache.commons.jelly.tags.threads.ThreadsTagLibrary
util        = org.apache.commons.jelly.tags.util.UtilTagLibrary
validate    = org.apache.commons.jelly.tags.validate.ValidateTagLibrary
velocity    = org.apache.commons.jelly.tags.velocity.VelocityTagLibrary
xml         = org.apache.commons.jelly.tags.xml.XMLTagLibrary
xmlunit     = org.apache.commons.jelly.tags.xmlunit.XMLUnitTagLibrary
