#############################################################################
#    Copyright 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.
#############################################################################

# This file registers the interpreter factories for the
# script languages that Batik understands.

# ECMAScript
org.apache.flex.forks.batik.script.rhino.RhinoInterpreterFactory
# TCL
#org.apache.flex.forks.batik.script.jacl.JaclInterpreterFactory
# Python
#org.apache.flex.forks.batik.script.jacl.JPythonInterpreterFactory
