##
# 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 method="html".  These defaults use output_xml.properties 
# as a base.
#

# XSLT properties do not need namespace qualification.
method=html
indent=yes
media-type=text/html
version=4.0

# 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.ToHTMLStream
{http\u003a//xml.apache.org/xalan}entities=org/apache/xml/serializer/HTMLEntities
{http\u003a//xml.apache.org/xalan}use-url-escaping=yes
{http\u003a//xml.apache.org/xalan}omit-meta-tag=no
