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

##############
# Default properties used by forrest.build.xml for building the website
##############

# Prints out a summary of Forrest settings for this project
#forrest.echo=true 

# Project name (used to name .war file)
project.name=my-project


# Specifies name of Forrest skin to use
project.skin=pelt
#project.skin=tigris

# Descriptors for plugins and skins
# comma separated list, file:// is supported
forrest.skins.descriptors=http://forrest.apache.org/skins/skins.xml
forrest.plugins.descriptors=http://forrest.apache.org/plugins/plugins.xml,http://forrest.apache.org/plugins/whiteboard-plugins.xml

##############
# behavioural properties
project.menu-scheme=tab_attributes
#project.menu-scheme=directories

##############
# layout properties

# Properties that must be set to override the default locations
#
# Parent properties must be set. This usually means uncommenting
# project.content-dir if any other property using it is uncommented

project.status=status.xml
project.content-dir=src/documentation
project.raw-content-dir=${project.content-dir}/content
project.conf-dir=${project.content-dir}/conf
project.sitemap-dir=${project.content-dir}
project.sitemap=${project.content-dir}/sitemap.xmap
project.xdocs-dir=${project.content-dir}/content/xdocs
project.resources-dir=${project.content-dir}/resources
project.stylesheets-dir=${project.resources-dir}/stylesheets
project.images-dir=${project.resources-dir}/images
project.schema-dir=${project.resources-dir}/schema
project.grammars-dir=${project.resources-dir}/grammars
project.skins-dir=${project.content-dir}/skins
project.skinconf=${project.content-dir}/skinconf.xml
project.lib-dir=${project.content-dir}/lib
project.classes-dir=${project.content-dir}/classes
project.translations-dir=${project.content-dir}/translations

project.build-dir=${project.home}/build
project.site=site
project.temp-dir=${project.build-dir}/tmp


##############
# Cocoon catalog entity resolver properties
# A local OASIS catalog file to supplement the default Forrest catalog
project.catalog=${project.schema-dir}/catalog.xcat

##############
# validation properties

# This set of properties determine if validation is performed
# Values are inherited unless overridden.
# e.g. if forrest.validate=false then all others are false unless set to true.
#forrest.validate=true
#forrest.validate.xdocs=${forrest.validate}
#forrest.validate.skinconf=${forrest.validate}
#forrest.validate.sitemap=${forrest.validate}
#forrest.validate.stylesheets=${forrest.validate}
#forrest.validate.skins=${forrest.validate}
#forrest.validate.skins.stylesheets=${forrest.validate.skins}

# Key:
# *.failonerror=(true|false) - stop when an XML file is invalid
# *.includes=(pattern) - comma-separated list of path patterns to validate
# *.excludes=(pattern) - comma-separated list of path patterns to not validate

#forrest.validate.failonerror=true
#forrest.validate.includes=**/*
#forrest.validate.excludes=
#
#forrest.validate.xdocs.failonerror=${forrest.validate.failonerror}
#
#forrest.validate.xdocs.includes=**/*.x*
#forrest.validate.xdocs.excludes=site.xml
#
#forrest.validate.skinconf.includes=${skinconf-file}
#forrest.validate.skinconf.excludes=
#forrest.validate.skinconf.failonerror=${forrest.validate.failonerror}
#
#forrest.validate.sitemap.includes=${sitemap-file}
#forrest.validate.sitemap.excludes=
#forrest.validate.sitemap.failonerror=${forrest.validate.failonerror}
#
#forrest.validate.stylesheets.includes=**/*.xsl
#forrest.validate.stylesheets.excludes=
#forrest.validate.stylesheets.failonerror=${forrest.validate.failonerror}
#
#forrest.validate.skins.includes=**/*
#forrest.validate.skins.excludes=**/*.xsl
#forrest.validate.skins.failonerror=${forrest.validate.failonerror}
#
#forrest.validate.skins.stylesheets.includes=**/*.xsl
#forrest.validate.skins.stylesheets.excludes=
#forrest.validate.skins.stylesheets.failonerror=${forrest.validate.skins.failonerror}

##############
# General Forrest properties

# The URL to start crawling from
project.start-uri=linkmap.html

# Set logging level for messages printed to the console
# (DEBUG, INFO, WARN, ERROR, FATAL_ERROR)
project.debuglevel=ERROR

# Max memory to allocate to Java
forrest.maxmemory=64m

# Any other arguments to pass to the JVM. For example, to run on an X-less
# server, set to -Djava.awt.headless=true
forrest.jvmargs=

# The bugtracking URL - the issue number will be appended
#project.bugtracking-url=http://issues.apache.org/bugzilla/show_bug.cgi?id=
project.bugtracking-url=http://issues.apache.org/jira/browse/

# The issues list as rss
#project.issues-rss-url=
project.i18n=false

# The names of plugins that are required to build the project
# comma separated list (no spaces)
# Run "forrest available-plugins" for a list of plug-ins currently available
project.required.plugins=org.apache.forrest.plugin.output.pdf

# The names of src directories where project should find required plugins src
# comma separated list (no spaces)
project.required.plugins.src=${forrest.home}/plugins,${forrest.home}/whiteboard/plugins

