<?xml version="1.0"?>
<!--
  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.
-->
<!--
Skin configuration file. This file contains details of your project,
which will be used to configure the chosen Forrest skin.

Explanation of some elements has been removed from this file.
See main/fresh-site/src/documentation/skinconf.xml for details.
-->
<!DOCTYPE skinconfig PUBLIC "-//APACHE//DTD Skin Configuration V0.8-2//EN" "http://forrest.apache.org/dtd/skinconfig-v08-2.dtd">
<skinconfig>
<!-- To enable lucene search add provider="lucene"
    Add box-location="alt" to move the search box to an alternate location
    (if the skin supports it) and box-location="all" to show it in all
    available locations on the page.  Remove the <search> element to show
    no search box.
  -->
  <search name="Apache Forrest" domain="forrest.apache.org" provider="google"/>
<!-- Disable the print link? If enabled, invalid HTML 4.0.1 -->
  <disable-print-link>true</disable-print-link>
<!-- Disable the PDF link? -->
  <disable-pdf-link>false</disable-pdf-link>
<!-- Disable the xml source link? -->
<!-- The xml source link makes it possible to access the xml rendition
    of the source frim the html page, and to have it generated statically.
    This can be used to enable other sites and services to reuse the
    xml format for their uses. Keep this disabled if you don't want other
    sites to easily reuse your pages.-->
  <disable-xml-link>true</disable-xml-link>
<!-- Disable navigation icons on all external links? -->
  <disable-external-link-image>true</disable-external-link-image>
<!-- Disable w3c compliance links? -->
  <disable-compliance-links>false</disable-compliance-links>
<!-- Render mailto: links unrecognisable by spam harvesters? -->
  <obfuscate-mail-links>true</obfuscate-mail-links>
  <obfuscate-mail-value>.at.</obfuscate-mail-value>
<!-- Disable the javascript facility to change the font size -->
  <disable-font-script>false</disable-font-script>
<!-- mandatory project logo
       skin: forrest-site renders it at the top -->
  <project-name>Forrest</project-name>
  <project-description>Apache Forrest</project-description>
  <project-url>http://forrest.apache.org/</project-url>
  <project-logo>images/project-logo.gif</project-logo>
<!-- optional group logo
       skin: forrest-site renders it at the top-left corner -->
  <group-name>Apache</group-name>
  <group-description>The Apache Software Foundation</group-description>
  <group-url>http://www.apache.org/</group-url>
  <group-logo>images/apache-forrest.png</group-logo>
<!-- optional host logo (e.g. sourceforge logo)
       skin: forrest-site renders it at the bottom-left corner -->
  <host-url></host-url>
  <host-logo></host-logo>
<!-- relative url of a favicon file, normally favicon.ico -->
  <favicon-url>favicon.ico</favicon-url>
<!-- The following are used to construct a copyright statement -->
  <year inception="true">2002</year>
  <vendor>The Apache Software Foundation.</vendor>
  <copyright-link>http://www.apache.org/licenses/</copyright-link>
<!-- Some skins use this to form a 'breadcrumb trail' of links.
    If you don't want these, then set the attributes to blank.
    The DTD purposefully requires them.
    Use location="alt" to move the trail to an alternate location
    (if the skin supports it).
  -->
  <trail>
    <link1 name="apache" href="http://www.apache.org/"/>
    <link2 name="forrest" href="http://forrest.apache.org/"/>
    <link3 name="" href=""/>
  </trail>
<!-- Configure the TOC, i.e. the Table of Contents.
  @max-depth
   how many "section" levels need to be included in the
   generated Table of Contents (TOC). 
  @min-sections
   Minimum required to create a TOC.
  @location ("page","menu","page,menu")
   Where to show the TOC.
  -->
  <toc max-depth="2" min-sections="1" location="page"/>
<!-- Heading types can be clean|underlined|boxed  -->
  <headings type="underlined"/>
  <motd>
    <motd-option pattern="index.html" starts-with="true">
      <motd-page location="page">
        18 April 2007 Forrest-0.8 released: Features the Locationmap.
      </motd-page>
      <motd-page-url>http://forrest.apache.org/mirrors.cgi</motd-page-url>
    </motd-option>
    <motd-option pattern="docs_0_90">
      <motd-title>v0.9-dev</motd-title>
      <motd-page location="both">
        This is documentation for development version v0.9-dev
      </motd-page>
      <motd-page-url>http://forrest.apache.org/versions/</motd-page-url>
    </motd-option>
    <motd-option pattern="plugins_0_90">
      <motd-title>v0.9-dev</motd-title>
      <motd-page location="both">
        This is documentation for development version v0.9-dev
      </motd-page>
      <motd-page-url>http://forrest.apache.org/pluginDocs/</motd-page-url>
    </motd-option>
    <motd-option pattern="docs_0_80">
      <motd-title>v0.8</motd-title>
      <motd-page location="both">
        This is documentation for current version v0.8
      </motd-page>
      <motd-page-url>http://forrest.apache.org/versions/</motd-page-url>
    </motd-option>
    <motd-option pattern="plugins_0_80">
      <motd-title>v0.8</motd-title>
      <motd-page location="both">
        This is documentation for current version v0.8
      </motd-page>
      <motd-page-url>http://forrest.apache.org/pluginDocs/</motd-page-url>
    </motd-option>
    <motd-option pattern="docs_0_70">
      <motd-title>v0.7</motd-title>
      <motd-page location="both">
        This is documentation for past version v0.7
      </motd-page>
      <motd-page-url>http://forrest.apache.org/versions/</motd-page-url>
    </motd-option>
    <motd-option pattern="plugins_0_70">
      <motd-title>v0.7</motd-title>
      <motd-page location="both">
        This is documentation for current version v0.7
      </motd-page>
      <motd-page-url>http://forrest.apache.org/pluginDocs/</motd-page-url>
    </motd-option>
  </motd>
  <extra-css>
#footer a { color: #0F3660; }
#footer a:visited { color: #009999; }
  </extra-css>
  <colors>
<!-- These values are used for the generated CSS files. -->
<!-- Forrest -->
    <color name="header"    value="#294563"/>
    <color name="tab-selected" value="#4a6d8c" link="#cedfef" vlink="#cedfef" hlink="#cedfef"/>
    <color name="tab-unselected" value="#b5c7e7" link="#0F3660" vlink="#0F3660" hlink="#000066"/>
    <color name="subtab-selected" value="#4a6d8c" link="#cedfef" vlink="#cedfef" hlink="#cedfef"/>
    <color name="subtab-unselected" value="#b5c7e7" link="#0F3660" vlink="#0F3660" hlink="#0F3660"/>
    <color name="heading" value="#294563"/>
    <color name="subheading" value="#4a6d8c"/>
    <color name="published" value="#4C6C8F" font="#FFFFFF"/>
    <color name="feedback" value="#4C6C8F" font="#FFFFFF" align="center"/>
    <color name="navstrip" value="#4a6d8c" font="#ffffff" link="#0F3660" vlink="#0F3660" hlink="#000066"/>
    <color name="toolbox" value="#cedfef" font="#000000"/>
    <color name="border" value="#cedfef"/>
    <color name="menu" value="#4a6d8c" font="#cedfef" link="#ffffff" vlink="#ffffff" hlink="#ffcf00"/>
    <color name="menuheading" value="#cfdced" font="#000000" />
    <color name="searchbox" value="#4a6d8c" font="#000000"/>
    <color name="dialog" value="#4a6d8c"/>
    <color name="body" value="#ffffff"  link="#0F3660" vlink="#009999" hlink="#000066"/>
    <color name="table" value="#7099C5"/>
    <color name="table-cell" value="#f0f0ff"/>
    <color name="highlight" value="#ffff00"/>
    <color name="fixme" value="#cc6600"/>
    <color name="note" value="#006699"/>
    <color name="warning" value="#990000"/>
    <color name="code" value="#CFDCED"/>
    <color name="footer" value="#cedfef"/>
  </colors>
<!-- Settings specific to PDF output.  -->
  <pdf>
<!-- 
       Supported page sizes are a0, a1, a2, a3, a4, a5, executive,
       folio, legal, ledger, letter, quarto, tabloid (default letter).
       Supported page orientations are portrait, landscape (default
       portrait).
       Supported text alignments are left, right, justify (default left).
    -->
    <page size="a4" orientation="portrait" text-align="left"/>
<!-- 
       Pattern of the page numbering in the footer - Default is "Page x".
       first occurrence of '1' digit represents the current page number,
       second occurrence of '1' digit represents the total page number,
       anything else is considered as the static part of the numbering pattern.
       Examples : x is the current page number, y the total page number.
       <page-numbering-format>none</page-numbering-format> Do not displays the page numbering
       <page-numbering-format>1</page-numbering-format> Displays "x"
       <page-numbering-format>p1.</page-numbering-format> Displays "px."
       <page-numbering-format>Page 1/1</page-numbering-format> Displays "Page x/y"
       <page-numbering-format>(1-1)</page-numbering-format> Displays "(x-y)"
    -->
    <page-numbering-format>Page 1/1</page-numbering-format>
<!--
       Margins can be specified for top, bottom, inner, and outer
       edges. If double-sided="false", the inner edge is always left
       and the outer is always right. If double-sided="true", the
       inner edge will be left on odd pages, right on even pages,
       the outer edge vice versa.
       Specified below are the default settings.
    -->
    <margins double-sided="false">
      <top>1cm</top>
      <bottom>1cm</bottom>
      <inner>2cm</inner>
      <outer>1.5cm</outer>
    </margins>
<!--
      Print the URL text next to all links going outside the file
    -->
    <show-external-urls>false</show-external-urls>
<!--
      Normally all links inside a Forrest site are relative. This
      does not work well in PDFs which are typically viewed outside of
      the web site. Setting this option adds the given prefix to all
      relative URLs, both to the link as well as the optional, additional text.
    -->
    <url-prefix>http://forrest.apache.org/</url-prefix> 
  </pdf>
<!-- 
    Credits are typically rendered as a set of small clickable
    images in the page footer.
    
    Use box-location="alt" to move the credits to an alternate location
    (if the skin supports it).

    For example, pelt skin:
    - box-location="alt" will place the logo at the end of the
      left-hand coloured menu panel.
    - box-location="alt2" will place them underneath that panel
      in the left-hand whitespace.
    - Otherwise they are placed next to the compatibility icons
      at the bottom of the screen.

    Comment out the whole <credit>-element if you want no credits in the
    web pages 
  -->
  <credits>
    <credit>
      <name>Built with Apache Forrest</name>
      <url>http://forrest.apache.org/</url>
      <image>skin/images/built-with-forrest-button.png</image>
      <width>88</width>
      <height>31</height>
    </credit>
    <credit>
      <name>Built with Apache Cocoon</name>
      <url>http://cocoon.apache.org/</url>
      <image>images/built-with-cocoon.gif</image>
      <width>88</width>
      <height>31</height>
    </credit>
    <credit>
      <name>thanks to ASF, thanks from ASF</name>
      <url>http://www.apache.org/foundation/thanks.html</url>
      <image>images/icon.png</image>
      <width>26</width>
      <height>22</height>
    </credit>
    <credit box-location="alt2">
      <name>ApacheCon US 2007</name>
      <url>http://us.apachecon.com/</url>
      <image>http://apache.org/ads/ApacheCon/2007-usa-125x125.png</image>
      <width>125</width>
      <height>125</height>
    </credit>
    <credit box-location="alt2">
      <name>OS Summit Asia 2007</name>
      <url>http://www.ossummit.com/</url>
      <image>http://www.ossummit.com/ads/ossummit_button_3.jpg</image>
      <width>125</width>
      <height>125</height>
    </credit>
    <credit box-location="alt2">
      <name>ApacheCon Europe 2008</name>
      <url>http://eu.apachecon.com/</url>
      <image>http://apache.org/ads/ApacheCon/2008-europe-125x125.png</image>
      <width>125</width>
      <height>125</height>
    </credit>
<!-- A credit with @role='pdf' will have its name and url
      displayed in the PDF page's footer. -->
  </credits>
</skinconfig>
