##
# 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.
##
#
# $Id$
#
# Specify defaults when no method="..." is specified.
# This type of output will quickly switch to "xml" or "html"
# depending on the first element name.
#

# XSLT properties do not need namespace qualification.
method=xml
version=1.0
encoding=UTF-8
indent=no
omit-xml-declaration=no
standalone=no
media-type=text/xml

# Xalan-specific output properties.  These can be overridden in the stylesheet 
# assigning a xalan namespace.  For example:
# <xsl:stylesheet version="1.0"
#          xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
#          xmlns:xalan="http://xml.apache.org/xalan">
#  <xsl:output method="html" encoding="UTF-8"
#              xalan:content-handler="MyContentHandler"/>
#  ...
# Note that the colon after the protocol needs to be escaped.
{http\u003a//xml.apache.org/xalan}indent-amount=0
{http\u003a//xml.apache.org/xalan}content-handler=org.apache.xml.serializer.ToUnknownStream

