LUCENE-1706: backport Lucene/Solr search to 2.4.1 site, as it is the current release
git-svn-id: https://svn.apache.org/repos/asf/lucene/java/tags/lucene_2_4_1@788074 13f79535-47bb-0310-9956-ffa450edef68
diff --git a/docs/benchmarks.html b/docs/benchmarks.html
index 71c464d..7b74baa 100644
--- a/docs/benchmarks.html
+++ b/docs/benchmarks.html
@@ -4,7 +4,7 @@
<META http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta content="Apache Forrest" name="Generator">
<meta name="Forrest-version" content="0.8">
-<meta name="Forrest-skin-name" content="pelt">
+<meta name="Forrest-skin-name" content="lucene">
<title>Apache Lucene - Resources - Performance Benchmarks</title>
<link type="text/css" href="skin/basic.css" rel="stylesheet">
<link media="screen" type="text/css" href="skin/screen.css" rel="stylesheet">
@@ -49,10 +49,12 @@
|start Search
+-->
<div class="searchbox">
-<form action="http://www.google.com/search" method="get" class="roundtopsmall">
-<input value="lucene.apache.org" name="sitesearch" type="hidden"><input onFocus="getBlank (this, 'Search the site with google');" size="25" name="q" id="query" type="text" value="Search the site with google">
+<form action="http://search.lucidimagination.com/p:lucene" method="get" class="roundtopsmall">
+<input onFocus="getBlank (this, 'Search the site with Lucene');" size="25" name="q" id="query" type="text" value="Search the site with Lucene">
<input name="Search" value="Search" type="submit">
</form>
+<div style="position: relative; top: -5px; left: -10px">Powered by <a href="http://www.lucidimagination.com" style="color: #033268">Lucid Imagination</a>
+</div>
</div>
<!--+
|end search
diff --git a/docs/broken-links.xml b/docs/broken-links.xml
index f95aa9be..0355644 100644
--- a/docs/broken-links.xml
+++ b/docs/broken-links.xml
@@ -1,2 +1,14 @@
<broken-links>
+ <link message="/Users/grantingersoll/projects/lucene/java/lucene_2_4_1/src/site/src/documentation/content/xdocs/images.instruction_arrow.png (No such file or directory)" uri="images/instruction_arrow.png">
+ <referrer uri="skin/screen.css"/>
+ </link>
+ <link message="/usr/local/apache-forrest-0.8/main/webapp/. (No such file or directory)" uri="skin/images/chapter.gif">
+ <referrer uri="skin/screen.css"/>
+ </link>
+ <link message="/usr/local/apache-forrest-0.8/main/webapp/. (No such file or directory)" uri="skin/images/page.gif">
+ <referrer uri="skin/screen.css"/>
+ </link>
+ <link message="/usr/local/apache-forrest-0.8/main/webapp/. (No such file or directory)" uri="skin/images/current.gif">
+ <referrer uri="skin/screen.css"/>
+ </link>
</broken-links>
diff --git a/docs/contributions.html b/docs/contributions.html
index 42de6f0..3c23420 100644
--- a/docs/contributions.html
+++ b/docs/contributions.html
@@ -4,7 +4,7 @@
<META http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta content="Apache Forrest" name="Generator">
<meta name="Forrest-version" content="0.8">
-<meta name="Forrest-skin-name" content="pelt">
+<meta name="Forrest-skin-name" content="lucene">
<title>
Apache Lucene - Contributions
</title>
@@ -51,10 +51,12 @@
|start Search
+-->
<div class="searchbox">
-<form action="http://www.google.com/search" method="get" class="roundtopsmall">
-<input value="lucene.apache.org" name="sitesearch" type="hidden"><input onFocus="getBlank (this, 'Search the site with google');" size="25" name="q" id="query" type="text" value="Search the site with google">
+<form action="http://search.lucidimagination.com/p:lucene" method="get" class="roundtopsmall">
+<input onFocus="getBlank (this, 'Search the site with Lucene');" size="25" name="q" id="query" type="text" value="Search the site with Lucene">
<input name="Search" value="Search" type="submit">
</form>
+<div style="position: relative; top: -5px; left: -10px">Powered by <a href="http://www.lucidimagination.com" style="color: #033268">Lucid Imagination</a>
+</div>
</div>
<!--+
|end search
diff --git a/docs/demo.html b/docs/demo.html
index 73df0c6..a376aea 100644
--- a/docs/demo.html
+++ b/docs/demo.html
@@ -4,7 +4,7 @@
<META http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta content="Apache Forrest" name="Generator">
<meta name="Forrest-version" content="0.8">
-<meta name="Forrest-skin-name" content="pelt">
+<meta name="Forrest-skin-name" content="lucene">
<title>
Apache Lucene - Building and Installing the Basic Demo
</title>
@@ -51,10 +51,12 @@
|start Search
+-->
<div class="searchbox">
-<form action="http://www.google.com/search" method="get" class="roundtopsmall">
-<input value="lucene.apache.org" name="sitesearch" type="hidden"><input onFocus="getBlank (this, 'Search the site with google');" size="25" name="q" id="query" type="text" value="Search the site with google">
+<form action="http://search.lucidimagination.com/p:lucene" method="get" class="roundtopsmall">
+<input onFocus="getBlank (this, 'Search the site with Lucene');" size="25" name="q" id="query" type="text" value="Search the site with Lucene">
<input name="Search" value="Search" type="submit">
</form>
+<div style="position: relative; top: -5px; left: -10px">Powered by <a href="http://www.lucidimagination.com" style="color: #033268">Lucid Imagination</a>
+</div>
</div>
<!--+
|end search
diff --git a/docs/demo2.html b/docs/demo2.html
index 60eda12..d7389ae 100644
--- a/docs/demo2.html
+++ b/docs/demo2.html
@@ -4,7 +4,7 @@
<META http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta content="Apache Forrest" name="Generator">
<meta name="Forrest-version" content="0.8">
-<meta name="Forrest-skin-name" content="pelt">
+<meta name="Forrest-skin-name" content="lucene">
<title>
Apache Lucene - Basic Demo Sources Walk-through
</title>
@@ -51,10 +51,12 @@
|start Search
+-->
<div class="searchbox">
-<form action="http://www.google.com/search" method="get" class="roundtopsmall">
-<input value="lucene.apache.org" name="sitesearch" type="hidden"><input onFocus="getBlank (this, 'Search the site with google');" size="25" name="q" id="query" type="text" value="Search the site with google">
+<form action="http://search.lucidimagination.com/p:lucene" method="get" class="roundtopsmall">
+<input onFocus="getBlank (this, 'Search the site with Lucene');" size="25" name="q" id="query" type="text" value="Search the site with Lucene">
<input name="Search" value="Search" type="submit">
</form>
+<div style="position: relative; top: -5px; left: -10px">Powered by <a href="http://www.lucidimagination.com" style="color: #033268">Lucid Imagination</a>
+</div>
</div>
<!--+
|end search
diff --git a/docs/demo3.html b/docs/demo3.html
index 8bc7be9..a19b865 100644
--- a/docs/demo3.html
+++ b/docs/demo3.html
@@ -4,7 +4,7 @@
<META http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta content="Apache Forrest" name="Generator">
<meta name="Forrest-version" content="0.8">
-<meta name="Forrest-skin-name" content="pelt">
+<meta name="Forrest-skin-name" content="lucene">
<title>
Apache Lucene - Building and Installing the Basic Demo
</title>
@@ -51,10 +51,12 @@
|start Search
+-->
<div class="searchbox">
-<form action="http://www.google.com/search" method="get" class="roundtopsmall">
-<input value="lucene.apache.org" name="sitesearch" type="hidden"><input onFocus="getBlank (this, 'Search the site with google');" size="25" name="q" id="query" type="text" value="Search the site with google">
+<form action="http://search.lucidimagination.com/p:lucene" method="get" class="roundtopsmall">
+<input onFocus="getBlank (this, 'Search the site with Lucene');" size="25" name="q" id="query" type="text" value="Search the site with Lucene">
<input name="Search" value="Search" type="submit">
</form>
+<div style="position: relative; top: -5px; left: -10px">Powered by <a href="http://www.lucidimagination.com" style="color: #033268">Lucid Imagination</a>
+</div>
</div>
<!--+
|end search
diff --git a/docs/demo4.html b/docs/demo4.html
index 0478d43..17e2846 100644
--- a/docs/demo4.html
+++ b/docs/demo4.html
@@ -4,7 +4,7 @@
<META http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta content="Apache Forrest" name="Generator">
<meta name="Forrest-version" content="0.8">
-<meta name="Forrest-skin-name" content="pelt">
+<meta name="Forrest-skin-name" content="lucene">
<title>
Apache Lucene - Basic Demo Sources Walkthrough
</title>
@@ -51,10 +51,12 @@
|start Search
+-->
<div class="searchbox">
-<form action="http://www.google.com/search" method="get" class="roundtopsmall">
-<input value="lucene.apache.org" name="sitesearch" type="hidden"><input onFocus="getBlank (this, 'Search the site with google');" size="25" name="q" id="query" type="text" value="Search the site with google">
+<form action="http://search.lucidimagination.com/p:lucene" method="get" class="roundtopsmall">
+<input onFocus="getBlank (this, 'Search the site with Lucene');" size="25" name="q" id="query" type="text" value="Search the site with Lucene">
<input name="Search" value="Search" type="submit">
</form>
+<div style="position: relative; top: -5px; left: -10px">Powered by <a href="http://www.lucidimagination.com" style="color: #033268">Lucid Imagination</a>
+</div>
</div>
<!--+
|end search
diff --git a/docs/fileformats.html b/docs/fileformats.html
index 3a22229..50cbd7b 100644
--- a/docs/fileformats.html
+++ b/docs/fileformats.html
@@ -4,7 +4,7 @@
<META http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta content="Apache Forrest" name="Generator">
<meta name="Forrest-version" content="0.8">
-<meta name="Forrest-skin-name" content="pelt">
+<meta name="Forrest-skin-name" content="lucene">
<title>
Apache Lucene - Index File Formats
</title>
@@ -51,10 +51,12 @@
|start Search
+-->
<div class="searchbox">
-<form action="http://www.google.com/search" method="get" class="roundtopsmall">
-<input value="lucene.apache.org" name="sitesearch" type="hidden"><input onFocus="getBlank (this, 'Search the site with google');" size="25" name="q" id="query" type="text" value="Search the site with google">
+<form action="http://search.lucidimagination.com/p:lucene" method="get" class="roundtopsmall">
+<input onFocus="getBlank (this, 'Search the site with Lucene');" size="25" name="q" id="query" type="text" value="Search the site with Lucene">
<input name="Search" value="Search" type="submit">
</form>
+<div style="position: relative; top: -5px; left: -10px">Powered by <a href="http://www.lucidimagination.com" style="color: #033268">Lucid Imagination</a>
+</div>
</div>
<!--+
|end search
diff --git a/docs/gettingstarted.html b/docs/gettingstarted.html
index f8c34da..732def0 100644
--- a/docs/gettingstarted.html
+++ b/docs/gettingstarted.html
@@ -4,7 +4,7 @@
<META http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta content="Apache Forrest" name="Generator">
<meta name="Forrest-version" content="0.8">
-<meta name="Forrest-skin-name" content="pelt">
+<meta name="Forrest-skin-name" content="lucene">
<title>
Apache Lucene - Getting Started Guide
</title>
@@ -51,10 +51,12 @@
|start Search
+-->
<div class="searchbox">
-<form action="http://www.google.com/search" method="get" class="roundtopsmall">
-<input value="lucene.apache.org" name="sitesearch" type="hidden"><input onFocus="getBlank (this, 'Search the site with google');" size="25" name="q" id="query" type="text" value="Search the site with google">
+<form action="http://search.lucidimagination.com/p:lucene" method="get" class="roundtopsmall">
+<input onFocus="getBlank (this, 'Search the site with Lucene');" size="25" name="q" id="query" type="text" value="Search the site with Lucene">
<input name="Search" value="Search" type="submit">
</form>
+<div style="position: relative; top: -5px; left: -10px">Powered by <a href="http://www.lucidimagination.com" style="color: #033268">Lucid Imagination</a>
+</div>
</div>
<!--+
|end search
diff --git a/docs/index.html b/docs/index.html
index f41efc8..87501f8 100644
--- a/docs/index.html
+++ b/docs/index.html
@@ -4,7 +4,7 @@
<META http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta content="Apache Forrest" name="Generator">
<meta name="Forrest-version" content="0.8">
-<meta name="Forrest-skin-name" content="pelt">
+<meta name="Forrest-skin-name" content="lucene">
<title>Lucene Java Documentation</title>
<link type="text/css" href="skin/basic.css" rel="stylesheet">
<link media="screen" type="text/css" href="skin/screen.css" rel="stylesheet">
@@ -49,10 +49,12 @@
|start Search
+-->
<div class="searchbox">
-<form action="http://www.google.com/search" method="get" class="roundtopsmall">
-<input value="lucene.apache.org" name="sitesearch" type="hidden"><input onFocus="getBlank (this, 'Search the site with google');" size="25" name="q" id="query" type="text" value="Search the site with google">
+<form action="http://search.lucidimagination.com/p:lucene" method="get" class="roundtopsmall">
+<input onFocus="getBlank (this, 'Search the site with Lucene');" size="25" name="q" id="query" type="text" value="Search the site with Lucene">
<input name="Search" value="Search" type="submit">
</form>
+<div style="position: relative; top: -5px; left: -10px">Powered by <a href="http://www.lucidimagination.com" style="color: #033268">Lucid Imagination</a>
+</div>
</div>
<!--+
|end search
diff --git a/docs/linkmap.html b/docs/linkmap.html
index 50301b8..8189733 100644
--- a/docs/linkmap.html
+++ b/docs/linkmap.html
@@ -4,7 +4,7 @@
<META http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta content="Apache Forrest" name="Generator">
<meta name="Forrest-version" content="0.8">
-<meta name="Forrest-skin-name" content="pelt">
+<meta name="Forrest-skin-name" content="lucene">
<title>Site Linkmap Table of Contents</title>
<link type="text/css" href="skin/basic.css" rel="stylesheet">
<link media="screen" type="text/css" href="skin/screen.css" rel="stylesheet">
@@ -49,10 +49,12 @@
|start Search
+-->
<div class="searchbox">
-<form action="http://www.google.com/search" method="get" class="roundtopsmall">
-<input value="lucene.apache.org" name="sitesearch" type="hidden"><input onFocus="getBlank (this, 'Search the site with google');" size="25" name="q" id="query" type="text" value="Search the site with google">
+<form action="http://search.lucidimagination.com/p:lucene" method="get" class="roundtopsmall">
+<input onFocus="getBlank (this, 'Search the site with Lucene');" size="25" name="q" id="query" type="text" value="Search the site with Lucene">
<input name="Search" value="Search" type="submit">
</form>
+<div style="position: relative; top: -5px; left: -10px">Powered by <a href="http://www.lucidimagination.com" style="color: #033268">Lucid Imagination</a>
+</div>
</div>
<!--+
|end search
diff --git a/docs/lucene-sandbox/index.html b/docs/lucene-sandbox/index.html
index cdcdbfd..b595166 100644
--- a/docs/lucene-sandbox/index.html
+++ b/docs/lucene-sandbox/index.html
@@ -4,7 +4,7 @@
<META http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta content="Apache Forrest" name="Generator">
<meta name="Forrest-version" content="0.8">
-<meta name="Forrest-skin-name" content="pelt">
+<meta name="Forrest-skin-name" content="lucene">
<title>
Apache Lucene - Lucene Sandbox
</title>
@@ -51,10 +51,12 @@
|start Search
+-->
<div class="searchbox">
-<form action="http://www.google.com/search" method="get" class="roundtopsmall">
-<input value="lucene.apache.org" name="sitesearch" type="hidden"><input onFocus="getBlank (this, 'Search the site with google');" size="25" name="q" id="query" type="text" value="Search the site with google">
+<form action="http://search.lucidimagination.com/p:lucene" method="get" class="roundtopsmall">
+<input onFocus="getBlank (this, 'Search the site with Lucene');" size="25" name="q" id="query" type="text" value="Search the site with Lucene">
<input name="Search" value="Search" type="submit">
</form>
+<div style="position: relative; top: -5px; left: -10px">Powered by <a href="http://www.lucidimagination.com" style="color: #033268">Lucid Imagination</a>
+</div>
</div>
<!--+
|end search
diff --git a/docs/queryparsersyntax.html b/docs/queryparsersyntax.html
index 3139424..d987417 100644
--- a/docs/queryparsersyntax.html
+++ b/docs/queryparsersyntax.html
@@ -4,7 +4,7 @@
<META http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta content="Apache Forrest" name="Generator">
<meta name="Forrest-version" content="0.8">
-<meta name="Forrest-skin-name" content="pelt">
+<meta name="Forrest-skin-name" content="lucene">
<title>
Apache Lucene - Query Parser Syntax
</title>
@@ -51,10 +51,12 @@
|start Search
+-->
<div class="searchbox">
-<form action="http://www.google.com/search" method="get" class="roundtopsmall">
-<input value="lucene.apache.org" name="sitesearch" type="hidden"><input onFocus="getBlank (this, 'Search the site with google');" size="25" name="q" id="query" type="text" value="Search the site with google">
+<form action="http://search.lucidimagination.com/p:lucene" method="get" class="roundtopsmall">
+<input onFocus="getBlank (this, 'Search the site with Lucene');" size="25" name="q" id="query" type="text" value="Search the site with Lucene">
<input name="Search" value="Search" type="submit">
</form>
+<div style="position: relative; top: -5px; left: -10px">Powered by <a href="http://www.lucidimagination.com" style="color: #033268">Lucid Imagination</a>
+</div>
</div>
<!--+
|end search
diff --git a/docs/scoring.html b/docs/scoring.html
index 9f39f1f..c83f2f4 100644
--- a/docs/scoring.html
+++ b/docs/scoring.html
@@ -4,7 +4,7 @@
<META http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta content="Apache Forrest" name="Generator">
<meta name="Forrest-version" content="0.8">
-<meta name="Forrest-skin-name" content="pelt">
+<meta name="Forrest-skin-name" content="lucene">
<title>
Apache Lucene - Scoring
</title>
@@ -51,10 +51,12 @@
|start Search
+-->
<div class="searchbox">
-<form action="http://www.google.com/search" method="get" class="roundtopsmall">
-<input value="lucene.apache.org" name="sitesearch" type="hidden"><input onFocus="getBlank (this, 'Search the site with google');" size="25" name="q" id="query" type="text" value="Search the site with google">
+<form action="http://search.lucidimagination.com/p:lucene" method="get" class="roundtopsmall">
+<input onFocus="getBlank (this, 'Search the site with Lucene');" size="25" name="q" id="query" type="text" value="Search the site with Lucene">
<input name="Search" value="Search" type="submit">
</form>
+<div style="position: relative; top: -5px; left: -10px">Powered by <a href="http://www.lucidimagination.com" style="color: #033268">Lucid Imagination</a>
+</div>
</div>
<!--+
|end search
diff --git a/docs/skin/images/corner-imports.svg.xslt b/docs/skin/images/corner-imports.svg.xslt
index 3c335b4..95b58d2 100644
--- a/docs/skin/images/corner-imports.svg.xslt
+++ b/docs/skin/images/corner-imports.svg.xslt
@@ -1,11 +1,11 @@
<?xml version="1.0"?>
<!--
- Copyright 2002-2004 The Apache Software Foundation or its licensors,
- as applicable.
-
- 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
+ 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
@@ -16,81 +16,77 @@
limitations under the License.
-->
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
-
- <xsl:param name="orientation-tb"/>
- <xsl:param name="orientation-lr"/>
- <xsl:param name="size"/>
- <xsl:param name="bg-color-name"/>
- <xsl:param name="stroke-color-name"/>
- <xsl:param name="fg-color-name"/>
-
- <!-- if not all colors are present, don't even try to render the corners -->
- <xsl:variable name="isize"><xsl:choose>
- <xsl:when test="$bg-color-name and $stroke-color-name and $fg-color-name"><xsl:value-of select="$size"/></xsl:when>
- <xsl:otherwise>0</xsl:otherwise>
- </xsl:choose></xsl:variable>
- <xsl:variable name="smallersize" select="number($isize)-1"/>
- <xsl:variable name="biggersize" select="number($isize)+1"/>
- <xsl:variable name="bg"><xsl:if test="skinconfig/colors/color[@name=$bg-color-name]">fill:<xsl:value-of select="skinconfig/colors/color[@name=$bg-color-name]/@value"/>;</xsl:if></xsl:variable>
- <xsl:variable name="fill"><xsl:if test="skinconfig/colors/color[@name=$stroke-color-name]">fill:<xsl:value-of select="skinconfig/colors/color[@name=$stroke-color-name]/@value"/>;</xsl:if></xsl:variable>
- <xsl:variable name="stroke"><xsl:if test="skinconfig/colors/color[@name=$fg-color-name]">stroke:<xsl:value-of select="skinconfig/colors/color[@name=$fg-color-name]/@value"/>;</xsl:if></xsl:variable>
-
- <xsl:template match="skinconfig">
-
-
-
-<svg width="{$isize}" height="{$isize}">
- <!-- background-->
- <rect x="-1" y="-1" width="{$biggersize}" height="{$biggersize}" style="{$bg}stroke-width:0"/>
+ <xsl:param name="orientation-tb"/>
+ <xsl:param name="orientation-lr"/>
+ <xsl:param name="size"/>
+ <xsl:param name="bg-color-name"/>
+ <xsl:param name="stroke-color-name"/>
+ <xsl:param name="fg-color-name"/>
+<!-- if not all colors are present, don't even try to render the corners -->
+ <xsl:variable name="isize">
+ <xsl:choose>
+ <xsl:when test="$bg-color-name and $stroke-color-name and $fg-color-name">
+ <xsl:value-of select="$size"/>
+ </xsl:when>
+ <xsl:otherwise>0</xsl:otherwise>
+ </xsl:choose>
+ </xsl:variable>
+ <xsl:variable name="smallersize" select="number($isize)-1"/>
+ <xsl:variable name="biggersize" select="number($isize)+1"/>
+ <xsl:variable name="bg">
+ <xsl:if test="skinconfig/colors/color[@name=$bg-color-name]">fill:<xsl:value-of select="skinconfig/colors/color[@name=$bg-color-name]/@value"/>;</xsl:if>
+ </xsl:variable>
+ <xsl:variable name="fill">
+ <xsl:if test="skinconfig/colors/color[@name=$stroke-color-name]">fill:<xsl:value-of select="skinconfig/colors/color[@name=$stroke-color-name]/@value"/>;</xsl:if>
+ </xsl:variable>
+ <xsl:variable name="stroke">
+ <xsl:if test="skinconfig/colors/color[@name=$fg-color-name]">stroke:<xsl:value-of select="skinconfig/colors/color[@name=$fg-color-name]/@value"/>;</xsl:if>
+ </xsl:variable>
+ <xsl:template match="skinconfig">
+ <svg width="{$isize}" height="{$isize}">
+<!-- background-->
+ <rect x="-1" y="-1" width="{$biggersize}" height="{$biggersize}" style="{$bg}stroke-width:0"/>
<!-- 0,0 0,-4 4,0 4,-4-->
-
- <xsl:variable name="flip-tb-scale">
- <xsl:choose>
- <xsl:when test="$orientation-tb='t'">1</xsl:when>
- <xsl:otherwise>-1</xsl:otherwise>
- </xsl:choose>
- </xsl:variable>
-
- <xsl:variable name="flip-lr-scale">
- <xsl:choose>
- <xsl:when test="$orientation-lr='l'">1</xsl:when>
- <xsl:otherwise>-1</xsl:otherwise>
- </xsl:choose>
- </xsl:variable>
-
- <xsl:variable name="flip-tb-translate">
- <xsl:choose>
- <xsl:when test="$orientation-tb='t'">0</xsl:when>
- <xsl:otherwise>-<xsl:value-of select="$isize" /></xsl:otherwise>
- </xsl:choose>
- </xsl:variable>
-
- <xsl:variable name="flip-lr-translate">
- <xsl:choose>
- <xsl:when test="$orientation-lr='l'">0</xsl:when>
- <xsl:otherwise>-<xsl:value-of select="$isize" /></xsl:otherwise>
- </xsl:choose>
- </xsl:variable>
-
- <!-- flip transform -->
- <g transform="scale({$flip-lr-scale},{$flip-tb-scale}) translate({$flip-lr-translate}, {$flip-tb-translate})">
- <xsl:call-template name="figure" />
- </g>
-</svg>
-</xsl:template>
-
-
- <xsl:template name="figure">
- <!-- Just change shape here -->
- <g transform="translate(0.5 0.5)">
- <ellipse cx="{$smallersize}" cy="{$smallersize}" rx="{$smallersize}" ry="{$smallersize}"
- style="{$fill}{$stroke}stroke-width:1"/>
- </g>
- <!-- end -->
+ <xsl:variable name="flip-tb-scale">
+ <xsl:choose>
+ <xsl:when test="$orientation-tb='t'">1</xsl:when>
+ <xsl:otherwise>-1</xsl:otherwise>
+ </xsl:choose>
+ </xsl:variable>
+ <xsl:variable name="flip-lr-scale">
+ <xsl:choose>
+ <xsl:when test="$orientation-lr='l'">1</xsl:when>
+ <xsl:otherwise>-1</xsl:otherwise>
+ </xsl:choose>
+ </xsl:variable>
+ <xsl:variable name="flip-tb-translate">
+ <xsl:choose>
+ <xsl:when test="$orientation-tb='t'">0</xsl:when>
+ <xsl:otherwise>-<xsl:value-of select="$isize" />
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:variable>
+ <xsl:variable name="flip-lr-translate">
+ <xsl:choose>
+ <xsl:when test="$orientation-lr='l'">0</xsl:when>
+ <xsl:otherwise>-<xsl:value-of select="$isize" />
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:variable>
+<!-- flip transform -->
+ <g transform="scale({$flip-lr-scale},{$flip-tb-scale}) translate({$flip-lr-translate}, {$flip-tb-translate})">
+ <xsl:call-template name="figure" />
+ </g>
+ </svg>
</xsl:template>
-
-
+ <xsl:template name="figure">
+<!-- Just change shape here -->
+ <g transform="translate(0.5 0.5)">
+ <ellipse cx="{$smallersize}" cy="{$smallersize}" rx="{$smallersize}" ry="{$smallersize}"
+ style="{$fill}{$stroke}stroke-width:1"/>
+ </g>
+<!-- end -->
+ </xsl:template>
<xsl:template match="*"></xsl:template>
<xsl:template match="text()"></xsl:template>
-
</xsl:stylesheet>
diff --git a/docs/skin/images/dc.svg.xslt b/docs/skin/images/dc.svg.xslt
index fb8cfb0..f900f2f 100644
--- a/docs/skin/images/dc.svg.xslt
+++ b/docs/skin/images/dc.svg.xslt
@@ -1,11 +1,11 @@
<?xml version="1.0"?>
<!--
- Copyright 2002-2004 The Apache Software Foundation or its licensors,
- as applicable.
-
- 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
+ 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
@@ -17,15 +17,12 @@
-->
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:import href="corner-imports.svg.xslt" />
-
- <!-- Diagonal 45 degrees corner -->
+<!-- Diagonal 45 degrees corner -->
<xsl:template name="figure">
- <xsl:variable name="biggersize" select="number($size)+number($size)"/>
- <g transform="translate(0 0.5)">
- <polygon points="0,{$size} {$size},0 {$biggersize},0 {$biggersize},{$biggersize} 0,{$biggersize}"
+ <xsl:variable name="biggersize" select="number($size)+number($size)"/>
+ <g transform="translate(0 0.5)">
+ <polygon points="0,{$size} {$size},0 {$biggersize},0 {$biggersize},{$biggersize} 0,{$biggersize}"
style="{$fill}{$stroke}stroke-width:1"/>
- </g>
+ </g>
</xsl:template>
-
</xsl:stylesheet>
-
diff --git a/docs/skin/images/pdfdoc.gif b/docs/skin/images/pdfdoc.gif
index ec13eb5..00dee28 100644
--- a/docs/skin/images/pdfdoc.gif
+++ b/docs/skin/images/pdfdoc.gif
Binary files differ
diff --git a/docs/skin/images/poddoc.svg.xslt b/docs/skin/images/poddoc.svg.xslt
index 160d3da..6097d2b 100644
--- a/docs/skin/images/poddoc.svg.xslt
+++ b/docs/skin/images/poddoc.svg.xslt
@@ -1,11 +1,11 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!--
- Copyright 2002-2004 The Apache Software Foundation or its licensors,
- as applicable.
-
- 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
+ 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
@@ -30,13 +30,11 @@
gradientUnits="objectBoundingBox" spreadMethod="pad" />
<path d="M 0 0 L 200 0" style="stroke:#000000;stroke-width:1pt;" id="hr"/>
</defs>
-
<g transform="scale(0.08)">
<g transform="translate(40, 0)">
<rect width="230" height="300" x="0" y="0"
style="fill:url(#pageshade);fill-rule:evenodd;
stroke:#000000;stroke-width:1.25;"/>
-
<g transform="translate(15, 60)">
<use xlink:href="#hr" x="0" y="0"/>
<use xlink:href="#hr" x="0" y="60"/>
@@ -44,7 +42,6 @@
<use xlink:href="#hr" x="0" y="180"/>
</g>
</g>
-
<g transform="translate(0,70),scale(1.1,1.6)">
<rect width="200" height="100" x="0" y="0"
style="fill:#ff0000;fill-rule:evenodd;
diff --git a/docs/skin/images/printer.gif b/docs/skin/images/printer.gif
index a8d0d41..5021187 100644
--- a/docs/skin/images/printer.gif
+++ b/docs/skin/images/printer.gif
Binary files differ
diff --git a/docs/skin/images/rc-b-l-15-1body-2menu-3menu.png b/docs/skin/images/rc-b-l-15-1body-2menu-3menu.png
index cdb460a..dd790d3 100644
--- a/docs/skin/images/rc-b-l-15-1body-2menu-3menu.png
+++ b/docs/skin/images/rc-b-l-15-1body-2menu-3menu.png
Binary files differ
diff --git a/docs/skin/images/rc-b-r-15-1body-2menu-3menu.png b/docs/skin/images/rc-b-r-15-1body-2menu-3menu.png
index 3eff254..790f43f 100644
--- a/docs/skin/images/rc-b-r-15-1body-2menu-3menu.png
+++ b/docs/skin/images/rc-b-r-15-1body-2menu-3menu.png
Binary files differ
diff --git a/docs/skin/images/rc-b-r-5-1header-2tab-selected-3tab-selected.png b/docs/skin/images/rc-b-r-5-1header-2tab-selected-3tab-selected.png
index b175f27..1987c0a 100644
--- a/docs/skin/images/rc-b-r-5-1header-2tab-selected-3tab-selected.png
+++ b/docs/skin/images/rc-b-r-5-1header-2tab-selected-3tab-selected.png
Binary files differ
diff --git a/docs/skin/images/rc-t-l-5-1header-2searchbox-3searchbox.png b/docs/skin/images/rc-t-l-5-1header-2searchbox-3searchbox.png
index e9f4440..b69812a 100644
--- a/docs/skin/images/rc-t-l-5-1header-2searchbox-3searchbox.png
+++ b/docs/skin/images/rc-t-l-5-1header-2searchbox-3searchbox.png
Binary files differ
diff --git a/docs/skin/images/rc-t-l-5-1header-2tab-selected-3tab-selected.png b/docs/skin/images/rc-t-l-5-1header-2tab-selected-3tab-selected.png
index f1e015b..07e5ebe 100644
--- a/docs/skin/images/rc-t-l-5-1header-2tab-selected-3tab-selected.png
+++ b/docs/skin/images/rc-t-l-5-1header-2tab-selected-3tab-selected.png
Binary files differ
diff --git a/docs/skin/images/rc-t-l-5-1header-2tab-unselected-3tab-unselected.png b/docs/skin/images/rc-t-l-5-1header-2tab-unselected-3tab-unselected.png
index e9f4440..b69812a 100644
--- a/docs/skin/images/rc-t-l-5-1header-2tab-unselected-3tab-unselected.png
+++ b/docs/skin/images/rc-t-l-5-1header-2tab-unselected-3tab-unselected.png
Binary files differ
diff --git a/docs/skin/images/rc-t-r-15-1body-2menu-3menu.png b/docs/skin/images/rc-t-r-15-1body-2menu-3menu.png
index 29388b5..5e44a80 100644
--- a/docs/skin/images/rc-t-r-15-1body-2menu-3menu.png
+++ b/docs/skin/images/rc-t-r-15-1body-2menu-3menu.png
Binary files differ
diff --git a/docs/skin/images/rc-t-r-5-1header-2searchbox-3searchbox.png b/docs/skin/images/rc-t-r-5-1header-2searchbox-3searchbox.png
index 944ed73..cbaea9c 100644
--- a/docs/skin/images/rc-t-r-5-1header-2searchbox-3searchbox.png
+++ b/docs/skin/images/rc-t-r-5-1header-2searchbox-3searchbox.png
Binary files differ
diff --git a/docs/skin/images/rc-t-r-5-1header-2tab-selected-3tab-selected.png b/docs/skin/images/rc-t-r-5-1header-2tab-selected-3tab-selected.png
index c4d4a8c..6fe87de 100644
--- a/docs/skin/images/rc-t-r-5-1header-2tab-selected-3tab-selected.png
+++ b/docs/skin/images/rc-t-r-5-1header-2tab-selected-3tab-selected.png
Binary files differ
diff --git a/docs/skin/images/rc-t-r-5-1header-2tab-unselected-3tab-unselected.png b/docs/skin/images/rc-t-r-5-1header-2tab-unselected-3tab-unselected.png
index 944ed73..cbaea9c 100644
--- a/docs/skin/images/rc-t-r-5-1header-2tab-unselected-3tab-unselected.png
+++ b/docs/skin/images/rc-t-r-5-1header-2tab-unselected-3tab-unselected.png
Binary files differ
diff --git a/docs/skin/images/rc.svg.xslt b/docs/skin/images/rc.svg.xslt
index fe097eb..d8924fe 100644
--- a/docs/skin/images/rc.svg.xslt
+++ b/docs/skin/images/rc.svg.xslt
@@ -1,11 +1,11 @@
<?xml version="1.0"?>
<!--
- Copyright 2002-2004 The Apache Software Foundation or its licensors,
- as applicable.
-
- 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
+ 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
@@ -17,14 +17,11 @@
-->
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:import href="corner-imports.svg.xslt" />
-
- <!-- Rounded corner -->
+<!-- Rounded corner -->
<xsl:template name="figure">
- <g transform="translate(0.5 0.5)">
- <ellipse cx="{$smallersize}" cy="{$smallersize}" rx="{$smallersize}" ry="{$smallersize}"
+ <g transform="translate(0.5 0.5)">
+ <ellipse cx="{$smallersize}" cy="{$smallersize}" rx="{$smallersize}" ry="{$smallersize}"
style="{$fill}{$stroke}stroke-width:1"/>
- </g>
+ </g>
</xsl:template>
-
</xsl:stylesheet>
-
diff --git a/docs/skin/images/txtdoc.svg.xslt b/docs/skin/images/txtdoc.svg.xslt
index ebbdef5..d85715c 100644
--- a/docs/skin/images/txtdoc.svg.xslt
+++ b/docs/skin/images/txtdoc.svg.xslt
@@ -1,11 +1,11 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!--
- Copyright 2002-2004 The Apache Software Foundation or its licensors,
- as applicable.
-
- 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
+ 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
@@ -30,13 +30,11 @@
gradientUnits="objectBoundingBox" spreadMethod="pad" />
<path d="M 0 0 L 200 0" style="stroke:#000000;stroke-width:1pt;" id="hr"/>
</defs>
-
<g transform="scale(0.08)">
<g transform="translate(40, 0)">
<rect width="230" height="300" x="0" y="0"
style="fill:url(#pageshade);fill-rule:evenodd;
stroke:#000000;stroke-width:1.25;"/>
-
<g transform="translate(15, 60)">
<use xlink:href="#hr" x="0" y="0"/>
<use xlink:href="#hr" x="0" y="60"/>
@@ -44,7 +42,6 @@
<use xlink:href="#hr" x="0" y="180"/>
</g>
</g>
-
<g transform="translate(0,70),scale(1.1,1.6)">
<rect width="200" height="100" x="0" y="0"
style="fill:#ff0000;fill-rule:evenodd;
diff --git a/docs/skin/images/xmldoc.gif b/docs/skin/images/xmldoc.gif
index c92d9b9..ca1224f 100644
--- a/docs/skin/images/xmldoc.gif
+++ b/docs/skin/images/xmldoc.gif
Binary files differ
diff --git a/docs/skin/skinconf.xsl b/docs/skin/skinconf.xsl
index 4a21644..2f8df12 100644
--- a/docs/skin/skinconf.xsl
+++ b/docs/skin/skinconf.xsl
@@ -1,11 +1,11 @@
<?xml version="1.0"?>
<!--
- Copyright 2002-2004 The Apache Software Foundation or its licensors,
- as applicable.
-
- 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
+ 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
@@ -16,138 +16,122 @@
limitations under the License.
-->
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
-
- <xsl:template match="skinconfig">
-
- <xsl:if test="not(colors)">
- <colors>
+ <xsl:template match="skinconfig">
+ <xsl:if test="not(colors)">
+ <colors>
<!-- Lenya -->
- <color name="header" value="#ffffff"/>
-
- <color name="tab-selected" value="#4C6C8F" link="#ffffff" vlink="#ffffff" hlink="#ffffff"/>
- <color name="tab-unselected" value="#E5E4D9" link="#000000" vlink="#000000" hlink="#000000"/>
- <color name="subtab-selected" value="#4C6C8F" link="#ffffff" vlink="#ffffff" hlink="#ffffff"/>
- <color name="subtab-unselected" value="#E5E4D9" link="#000000" vlink="#000000" hlink="#000000"/>
-
- <color name="heading" value="#E5E4D9"/>
- <color name="subheading" value="#E5E4D9"/>
- <color name="published" value="#4C6C8F" font="#FFFFFF"/>
- <color name="feedback" value="#4C6C8F" font="#FFFFFF" align="center"/>
- <color name="navstrip" value="#E5E4D9" font="#000000"/>
-
- <color name="toolbox" value="#CFDCED" font="#000000"/>
-
- <color name="border" value="#999999"/>
- <color name="menu" value="#4C6C8F" font="#ffffff" link="#ffffff" vlink="#ffffff" hlink="#ffffff" />
- <color name="menuheading" value="#cfdced" font="#000000" />
- <color name="searchbox" value="#E5E4D9" font="#000000"/>
-
- <color name="dialog" value="#E5E4D9" font="#000000"/>
- <color name="body" value="#ffffff" />
-
- <color name="table" value="#ccc"/>
- <color name="table-cell" value="#ffffff"/>
- <color name="highlight" value="#ffff00"/>
- <color name="fixme" value="#cc6600"/>
- <color name="note" value="#006699"/>
- <color name="warning" value="#990000"/>
- <color name="code" value="#003366"/>
-
- <color name="footer" value="#E5E4D9"/>
- </colors>
- </xsl:if>
-
- <xsl:copy>
- <xsl:copy-of select="@*"/>
- <xsl:copy-of select="node()[not(name(.)='colors')]"/>
- <xsl:apply-templates select="colors"/>
- </xsl:copy>
-
- </xsl:template>
-
- <xsl:template match="colors">
- <xsl:copy>
- <xsl:copy-of select="@*"/>
- <xsl:copy-of select="node()[name(.)='color']"/>
-
- <xsl:if test="not(color[@name='header'])">
- <color name="header" value="#FFFFFF"/>
- </xsl:if>
- <xsl:if test="not(color[@name='tab-selected'])">
- <color name="tab-selected" value="#4C6C8F" link="#ffffff" vlink="#ffffff" hlink="#ffffff"/>
- </xsl:if>
- <xsl:if test="not(color[@name='tab-unselected'])">
- <color name="tab-unselected" value="#E5E4D9" link="#000000" vlink="#000000" hlink="#000000"/>
- </xsl:if>
- <xsl:if test="not(color[@name='subtab-selected'])">
- <color name="subtab-selected" value="#4C6C8F" link="#ffffff" vlink="#ffffff" hlink="#ffffff"/>
- </xsl:if>
- <xsl:if test="not(color[@name='subtab-unselected'])">
- <color name="subtab-unselected" value="#E5E4D9" link="#000000" vlink="#000000" hlink="#000000"/>
- </xsl:if>
- <xsl:if test="not(color[@name='heading'])">
- <color name="heading" value="#E5E4D9"/>
- </xsl:if>
- <xsl:if test="not(color[@name='subheading'])">
- <color name="subheading" value="#E5E4D9"/>
- </xsl:if>
- <xsl:if test="not(color[@name='published'])">
- <color name="feedback" value="#4C6C8F" font="#FFFFFF" align="center"/>
- </xsl:if>
- <xsl:if test="not(color[@name='published'])">
+ <color name="header" value="#ffffff"/>
+ <color name="tab-selected" value="#4C6C8F" link="#ffffff" vlink="#ffffff" hlink="#ffffff"/>
+ <color name="tab-unselected" value="#E5E4D9" link="#000000" vlink="#000000" hlink="#000000"/>
+ <color name="subtab-selected" value="#4C6C8F" link="#ffffff" vlink="#ffffff" hlink="#ffffff"/>
+ <color name="subtab-unselected" value="#E5E4D9" link="#000000" vlink="#000000" hlink="#000000"/>
+ <color name="heading" value="#E5E4D9"/>
+ <color name="subheading" value="#E5E4D9"/>
<color name="published" value="#4C6C8F" font="#FFFFFF"/>
- </xsl:if>
- <xsl:if test="not(color[@name='navstrip'])">
- <color name="navstrip" value="#E5E4D9" font="#000000"/>
- </xsl:if>
- <xsl:if test="not(color[@name='toolbox'])">
- <color name="toolbox" value="#CFDCED" font="#000000"/>
- </xsl:if>
- <xsl:if test="not(color[@name='border'])">
- <color name="border" value="#999999"/>
- </xsl:if>
- <xsl:if test="not(color[@name='menu'])">
- <color name="menu" value="#4C6C8F" font="#ffffff" link="#ffffff" vlink="#ffffff" hlink="#ffffff" />
- </xsl:if>
- <xsl:if test="not(color[@name='menuheading'])">
- <color name="menuheading" value="#cfdced" font="#000000" />
- </xsl:if>
- <xsl:if test="not(color[@name='searchbox'])">
- <color name="searchbox" value="#E5E4D9" font="#000000"/>
- </xsl:if>
- <xsl:if test="not(color[@name='dialog'])">
- <color name="dialog" value="#E5E4D9" font="#000000" link="#000000" vlink="#000000" hlink="#000000"/>
- </xsl:if>
- <xsl:if test="not(color[@name='body'])">
- <color name="body" value="#ffffff" />
- </xsl:if>
- <xsl:if test="not(color[@name='table'])">
- <color name="table" value="#ccc"/>
- </xsl:if>
- <xsl:if test="not(color[@name='table-cell'])">
- <color name="table-cell" value="#ffffff"/>
- </xsl:if>
- <xsl:if test="not(color[@name='highlight'])">
- <color name="highlight" value="#ffff00"/>
- </xsl:if>
- <xsl:if test="not(color[@name='fixme'])">
- <color name="fixme" value="#c60"/>
- </xsl:if>
- <xsl:if test="not(color[@name='note'])">
- <color name="note" value="#069"/>
- </xsl:if>
- <xsl:if test="not(color[@name='warning'])">
- <color name="warning" value="#900"/>
- </xsl:if>
- <xsl:if test="not(color[@name='code'])">
- <color name="code" value="#a5b6c6"/>
- </xsl:if>
- <xsl:if test="not(color[@name='footer'])">
- <color name="footer" value="#E5E4D9"/>
- </xsl:if>
-
- </xsl:copy>
-
- </xsl:template>
-
+ <color name="feedback" value="#4C6C8F" font="#FFFFFF" align="center"/>
+ <color name="navstrip" value="#E5E4D9" font="#000000"/>
+ <color name="toolbox" value="#CFDCED" font="#000000"/>
+ <color name="border" value="#999999"/>
+ <color name="menu" value="#4C6C8F" font="#ffffff" link="#ffffff" vlink="#ffffff" hlink="#ffffff" />
+ <color name="menuheading" value="#cfdced" font="#000000" />
+ <color name="searchbox" value="#E5E4D9" font="#000000"/>
+ <color name="dialog" value="#E5E4D9" font="#000000"/>
+ <color name="body" value="#ffffff" />
+ <color name="table" value="#ccc"/>
+ <color name="table-cell" value="#ffffff"/>
+ <color name="highlight" value="#ffff00"/>
+ <color name="fixme" value="#cc6600"/>
+ <color name="note" value="#006699"/>
+ <color name="warning" value="#990000"/>
+ <color name="code" value="#003366"/>
+ <color name="footer" value="#E5E4D9"/>
+ </colors>
+ </xsl:if>
+ <xsl:copy>
+ <xsl:copy-of select="@*"/>
+ <xsl:copy-of select="node()[not(name(.)='colors')]"/>
+ <xsl:apply-templates select="colors"/>
+ </xsl:copy>
+ </xsl:template>
+ <xsl:template match="colors">
+ <xsl:copy>
+ <xsl:copy-of select="@*"/>
+ <xsl:copy-of select="node()[name(.)='color']"/>
+ <xsl:if test="not(color[@name='header'])">
+ <color name="header" value="#FFFFFF"/>
+ </xsl:if>
+ <xsl:if test="not(color[@name='tab-selected'])">
+ <color name="tab-selected" value="#4C6C8F" link="#ffffff" vlink="#ffffff" hlink="#ffffff"/>
+ </xsl:if>
+ <xsl:if test="not(color[@name='tab-unselected'])">
+ <color name="tab-unselected" value="#E5E4D9" link="#000000" vlink="#000000" hlink="#000000"/>
+ </xsl:if>
+ <xsl:if test="not(color[@name='subtab-selected'])">
+ <color name="subtab-selected" value="#4C6C8F" link="#ffffff" vlink="#ffffff" hlink="#ffffff"/>
+ </xsl:if>
+ <xsl:if test="not(color[@name='subtab-unselected'])">
+ <color name="subtab-unselected" value="#E5E4D9" link="#000000" vlink="#000000" hlink="#000000"/>
+ </xsl:if>
+ <xsl:if test="not(color[@name='heading'])">
+ <color name="heading" value="#E5E4D9"/>
+ </xsl:if>
+ <xsl:if test="not(color[@name='subheading'])">
+ <color name="subheading" value="#E5E4D9"/>
+ </xsl:if>
+ <xsl:if test="not(color[@name='feedback'])">
+ <color name="feedback" value="#4C6C8F" font="#FFFFFF" align="center"/>
+ </xsl:if>
+ <xsl:if test="not(color[@name='published'])">
+ <color name="published" value="#4C6C8F" font="#FFFFFF"/>
+ </xsl:if>
+ <xsl:if test="not(color[@name='navstrip'])">
+ <color name="navstrip" value="#E5E4D9" font="#000000"/>
+ </xsl:if>
+ <xsl:if test="not(color[@name='toolbox'])">
+ <color name="toolbox" value="#CFDCED" font="#000000"/>
+ </xsl:if>
+ <xsl:if test="not(color[@name='border'])">
+ <color name="border" value="#999999"/>
+ </xsl:if>
+ <xsl:if test="not(color[@name='menu'])">
+ <color name="menu" value="#4C6C8F" font="#ffffff" link="#ffffff" vlink="#ffffff" hlink="#ffffff" />
+ </xsl:if>
+ <xsl:if test="not(color[@name='menuheading'])">
+ <color name="menuheading" value="#cfdced" font="#000000" />
+ </xsl:if>
+ <xsl:if test="not(color[@name='searchbox'])">
+ <color name="searchbox" value="#E5E4D9" font="#000000"/>
+ </xsl:if>
+ <xsl:if test="not(color[@name='dialog'])">
+ <color name="dialog" value="#E5E4D9" font="#000000" link="#000000" vlink="#000000" hlink="#000000"/>
+ </xsl:if>
+ <xsl:if test="not(color[@name='body'])">
+ <color name="body" value="#ffffff" />
+ </xsl:if>
+ <xsl:if test="not(color[@name='table'])">
+ <color name="table" value="#ccc"/>
+ </xsl:if>
+ <xsl:if test="not(color[@name='table-cell'])">
+ <color name="table-cell" value="#ffffff"/>
+ </xsl:if>
+ <xsl:if test="not(color[@name='highlight'])">
+ <color name="highlight" value="#ffff00"/>
+ </xsl:if>
+ <xsl:if test="not(color[@name='fixme'])">
+ <color name="fixme" value="#c60"/>
+ </xsl:if>
+ <xsl:if test="not(color[@name='note'])">
+ <color name="note" value="#069"/>
+ </xsl:if>
+ <xsl:if test="not(color[@name='warning'])">
+ <color name="warning" value="#900"/>
+ </xsl:if>
+ <xsl:if test="not(color[@name='code'])">
+ <color name="code" value="#a5b6c6"/>
+ </xsl:if>
+ <xsl:if test="not(color[@name='footer'])">
+ <color name="footer" value="#E5E4D9"/>
+ </xsl:if>
+ </xsl:copy>
+ </xsl:template>
</xsl:stylesheet>
diff --git a/src/site/forrest.properties b/src/site/forrest.properties
index 9474f4b..10da2e1 100755
--- a/src/site/forrest.properties
+++ b/src/site/forrest.properties
@@ -26,7 +26,7 @@
# Specifies name of Forrest skin to use
# See list at http://forrest.apache.org/docs/skins.html
-#project.skin=pelt
+project.skin=lucene
# Descriptors for plugins and skins
# comma separated list, file:// is supported
diff --git a/src/site/src/documentation/skinconf.xml b/src/site/src/documentation/skinconf.xml
index d6ee9fc..dfc7dea 100755
--- a/src/site/src/documentation/skinconf.xml
+++ b/src/site/src/documentation/skinconf.xml
@@ -30,7 +30,7 @@
no search box. @domain will enable sitesearch for the specific domain with google.
In other words google will search the @domain for the query string.
-->
- <search name="Lucene Java" domain="lucene.apache.org" provider="google"/>
+ <search name="Lucene Java" provider="Lucene"/>
<!-- Disable the print link? If enabled, invalid HTML 4.0.1 -->
<disable-print-link>true</disable-print-link>
diff --git a/src/site/src/documentation/skins/common/css/forrest.css.xslt b/src/site/src/documentation/skins/common/css/forrest.css.xslt
new file mode 100644
index 0000000..fbfa020
--- /dev/null
+++ b/src/site/src/documentation/skins/common/css/forrest.css.xslt
@@ -0,0 +1,78 @@
+<?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.
+-->
+<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
+<!-- This is not used by Forrest but makes it possible to debug the
+ stylesheet in standalone editors -->
+ <xsl:output method = "text" omit-xml-declaration="yes" />
+<!--
+ If the skin doesn't override this, at least aural styles
+ and extra-css are present
+-->
+ <xsl:template match="skinconfig">
+ <xsl:call-template name="aural"/>
+ <xsl:call-template name="a-external"/>
+ <xsl:apply-templates/>
+ <xsl:call-template name="add-extra-css"/>
+ </xsl:template>
+ <xsl:template match="colors">
+ <xsl:apply-templates/>
+ </xsl:template>
+ <xsl:template name="aural">
+
+/* ==================== aural ============================ */
+
+@media aural {
+ h1, h2, h3, h4, h5, h6 { voice-family: paul, male; stress: 20; richness: 90 }
+ h1 { pitch: x-low; pitch-range: 90 }
+ h2 { pitch: x-low; pitch-range: 80 }
+ h3 { pitch: low; pitch-range: 70 }
+ h4 { pitch: medium; pitch-range: 60 }
+ h5 { pitch: medium; pitch-range: 50 }
+ h6 { pitch: medium; pitch-range: 40 }
+ li, dt, dd { pitch: medium; richness: 60 }
+ dt { stress: 80 }
+ pre, code, tt { pitch: medium; pitch-range: 0; stress: 0; richness: 80 }
+ em { pitch: medium; pitch-range: 60; stress: 60; richness: 50 }
+ strong { pitch: medium; pitch-range: 60; stress: 90; richness: 90 }
+ dfn { pitch: high; pitch-range: 60; stress: 60 }
+ s, strike { richness: 0 }
+ i { pitch: medium; pitch-range: 60; stress: 60; richness: 50 }
+ b { pitch: medium; pitch-range: 60; stress: 90; richness: 90 }
+ u { richness: 0 }
+
+ :link { voice-family: harry, male }
+ :visited { voice-family: betty, female }
+ :active { voice-family: betty, female; pitch-range: 80; pitch: x-high }
+}
+ </xsl:template>
+ <xsl:template name="a-external">
+a.external {
+ padding: 0 20px 0px 0px;
+ display:inline;
+ background-repeat: no-repeat;
+ background-position: center right;
+ background-image: url(images/external-link.gif);
+}
+ </xsl:template>
+ <xsl:template name="add-extra-css">
+<xsl:text>/* extra-css */</xsl:text>
+ <xsl:value-of select="extra-css"/>
+ </xsl:template>
+ <xsl:template match="*"></xsl:template>
+ <xsl:template match="text()"></xsl:template>
+</xsl:stylesheet>
diff --git a/src/site/src/documentation/skins/common/images/README.txt b/src/site/src/documentation/skins/common/images/README.txt
new file mode 100644
index 0000000..e0932f4
--- /dev/null
+++ b/src/site/src/documentation/skins/common/images/README.txt
@@ -0,0 +1 @@
+The images in this directory are used if the current skin lacks them.
diff --git a/src/site/src/documentation/skins/common/images/corner-imports.svg.xslt b/src/site/src/documentation/skins/common/images/corner-imports.svg.xslt
new file mode 100644
index 0000000..95b58d2
--- /dev/null
+++ b/src/site/src/documentation/skins/common/images/corner-imports.svg.xslt
@@ -0,0 +1,92 @@
+<?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.
+-->
+<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
+ <xsl:param name="orientation-tb"/>
+ <xsl:param name="orientation-lr"/>
+ <xsl:param name="size"/>
+ <xsl:param name="bg-color-name"/>
+ <xsl:param name="stroke-color-name"/>
+ <xsl:param name="fg-color-name"/>
+<!-- if not all colors are present, don't even try to render the corners -->
+ <xsl:variable name="isize">
+ <xsl:choose>
+ <xsl:when test="$bg-color-name and $stroke-color-name and $fg-color-name">
+ <xsl:value-of select="$size"/>
+ </xsl:when>
+ <xsl:otherwise>0</xsl:otherwise>
+ </xsl:choose>
+ </xsl:variable>
+ <xsl:variable name="smallersize" select="number($isize)-1"/>
+ <xsl:variable name="biggersize" select="number($isize)+1"/>
+ <xsl:variable name="bg">
+ <xsl:if test="skinconfig/colors/color[@name=$bg-color-name]">fill:<xsl:value-of select="skinconfig/colors/color[@name=$bg-color-name]/@value"/>;</xsl:if>
+ </xsl:variable>
+ <xsl:variable name="fill">
+ <xsl:if test="skinconfig/colors/color[@name=$stroke-color-name]">fill:<xsl:value-of select="skinconfig/colors/color[@name=$stroke-color-name]/@value"/>;</xsl:if>
+ </xsl:variable>
+ <xsl:variable name="stroke">
+ <xsl:if test="skinconfig/colors/color[@name=$fg-color-name]">stroke:<xsl:value-of select="skinconfig/colors/color[@name=$fg-color-name]/@value"/>;</xsl:if>
+ </xsl:variable>
+ <xsl:template match="skinconfig">
+ <svg width="{$isize}" height="{$isize}">
+<!-- background-->
+ <rect x="-1" y="-1" width="{$biggersize}" height="{$biggersize}" style="{$bg}stroke-width:0"/>
+<!-- 0,0 0,-4 4,0 4,-4-->
+ <xsl:variable name="flip-tb-scale">
+ <xsl:choose>
+ <xsl:when test="$orientation-tb='t'">1</xsl:when>
+ <xsl:otherwise>-1</xsl:otherwise>
+ </xsl:choose>
+ </xsl:variable>
+ <xsl:variable name="flip-lr-scale">
+ <xsl:choose>
+ <xsl:when test="$orientation-lr='l'">1</xsl:when>
+ <xsl:otherwise>-1</xsl:otherwise>
+ </xsl:choose>
+ </xsl:variable>
+ <xsl:variable name="flip-tb-translate">
+ <xsl:choose>
+ <xsl:when test="$orientation-tb='t'">0</xsl:when>
+ <xsl:otherwise>-<xsl:value-of select="$isize" />
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:variable>
+ <xsl:variable name="flip-lr-translate">
+ <xsl:choose>
+ <xsl:when test="$orientation-lr='l'">0</xsl:when>
+ <xsl:otherwise>-<xsl:value-of select="$isize" />
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:variable>
+<!-- flip transform -->
+ <g transform="scale({$flip-lr-scale},{$flip-tb-scale}) translate({$flip-lr-translate}, {$flip-tb-translate})">
+ <xsl:call-template name="figure" />
+ </g>
+ </svg>
+ </xsl:template>
+ <xsl:template name="figure">
+<!-- Just change shape here -->
+ <g transform="translate(0.5 0.5)">
+ <ellipse cx="{$smallersize}" cy="{$smallersize}" rx="{$smallersize}" ry="{$smallersize}"
+ style="{$fill}{$stroke}stroke-width:1"/>
+ </g>
+<!-- end -->
+ </xsl:template>
+ <xsl:template match="*"></xsl:template>
+ <xsl:template match="text()"></xsl:template>
+</xsl:stylesheet>
diff --git a/src/site/src/documentation/skins/common/images/dc.svg.xslt b/src/site/src/documentation/skins/common/images/dc.svg.xslt
new file mode 100644
index 0000000..f900f2f
--- /dev/null
+++ b/src/site/src/documentation/skins/common/images/dc.svg.xslt
@@ -0,0 +1,28 @@
+<?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.
+-->
+<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
+ <xsl:import href="corner-imports.svg.xslt" />
+<!-- Diagonal 45 degrees corner -->
+ <xsl:template name="figure">
+ <xsl:variable name="biggersize" select="number($size)+number($size)"/>
+ <g transform="translate(0 0.5)">
+ <polygon points="0,{$size} {$size},0 {$biggersize},0 {$biggersize},{$biggersize} 0,{$biggersize}"
+ style="{$fill}{$stroke}stroke-width:1"/>
+ </g>
+ </xsl:template>
+</xsl:stylesheet>
diff --git a/src/site/src/documentation/skins/common/images/poddoc.svg.xslt b/src/site/src/documentation/skins/common/images/poddoc.svg.xslt
new file mode 100644
index 0000000..6097d2b
--- /dev/null
+++ b/src/site/src/documentation/skins/common/images/poddoc.svg.xslt
@@ -0,0 +1,55 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!--
+ 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.
+-->
+<svg width="20pt" height="20pt"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:xlink="http://www.w3.org/1999/xlink">
+ <defs
+ id="defs550">
+ <linearGradient id="gray2white">
+ <stop style="stop-color:#7f7f7f;stop-opacity:1;" offset="0.000000"/>
+ <stop style="stop-color:#ffffff;stop-opacity:1;" offset="1.000000"/>
+ </linearGradient>
+ <linearGradient id="pageshade" xlink:href="#gray2white"
+ x1="0.95" y1="0.95"
+ x2="0.40" y2="0.20"
+ gradientUnits="objectBoundingBox" spreadMethod="pad" />
+ <path d="M 0 0 L 200 0" style="stroke:#000000;stroke-width:1pt;" id="hr"/>
+ </defs>
+ <g transform="scale(0.08)">
+ <g transform="translate(40, 0)">
+ <rect width="230" height="300" x="0" y="0"
+ style="fill:url(#pageshade);fill-rule:evenodd;
+ stroke:#000000;stroke-width:1.25;"/>
+ <g transform="translate(15, 60)">
+ <use xlink:href="#hr" x="0" y="0"/>
+ <use xlink:href="#hr" x="0" y="60"/>
+ <use xlink:href="#hr" x="0" y="120"/>
+ <use xlink:href="#hr" x="0" y="180"/>
+ </g>
+ </g>
+ <g transform="translate(0,70),scale(1.1,1.6)">
+ <rect width="200" height="100" x="0" y="0"
+ style="fill:#ff0000;fill-rule:evenodd;
+ stroke:#000000;stroke-width:2.33903;"/>
+ <text x="20" y="75"
+ style="stroke:#ffffff;stroke-width:1.0;
+ font-size:72;font-weight:normal;fill:#ffffff;
+ font-family:Arial;text-anchor:start;">POD</text>
+ </g>
+ </g>
+</svg>
diff --git a/src/site/src/documentation/skins/common/images/rc.svg.xslt b/src/site/src/documentation/skins/common/images/rc.svg.xslt
new file mode 100644
index 0000000..d8924fe
--- /dev/null
+++ b/src/site/src/documentation/skins/common/images/rc.svg.xslt
@@ -0,0 +1,27 @@
+<?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.
+-->
+<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
+ <xsl:import href="corner-imports.svg.xslt" />
+<!-- Rounded corner -->
+ <xsl:template name="figure">
+ <g transform="translate(0.5 0.5)">
+ <ellipse cx="{$smallersize}" cy="{$smallersize}" rx="{$smallersize}" ry="{$smallersize}"
+ style="{$fill}{$stroke}stroke-width:1"/>
+ </g>
+ </xsl:template>
+</xsl:stylesheet>
diff --git a/src/site/src/documentation/skins/common/images/txtdoc.svg.xslt b/src/site/src/documentation/skins/common/images/txtdoc.svg.xslt
new file mode 100644
index 0000000..d85715c
--- /dev/null
+++ b/src/site/src/documentation/skins/common/images/txtdoc.svg.xslt
@@ -0,0 +1,55 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!--
+ 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.
+-->
+<svg width="20pt" height="20pt"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:xlink="http://www.w3.org/1999/xlink">
+ <defs
+ id="defs550">
+ <linearGradient id="gray2white">
+ <stop style="stop-color:#7f7f7f;stop-opacity:1;" offset="0.000000"/>
+ <stop style="stop-color:#ffffff;stop-opacity:1;" offset="1.000000"/>
+ </linearGradient>
+ <linearGradient id="pageshade" xlink:href="#gray2white"
+ x1="0.95" y1="0.95"
+ x2="0.40" y2="0.20"
+ gradientUnits="objectBoundingBox" spreadMethod="pad" />
+ <path d="M 0 0 L 200 0" style="stroke:#000000;stroke-width:1pt;" id="hr"/>
+ </defs>
+ <g transform="scale(0.08)">
+ <g transform="translate(40, 0)">
+ <rect width="230" height="300" x="0" y="0"
+ style="fill:url(#pageshade);fill-rule:evenodd;
+ stroke:#000000;stroke-width:1.25;"/>
+ <g transform="translate(15, 60)">
+ <use xlink:href="#hr" x="0" y="0"/>
+ <use xlink:href="#hr" x="0" y="60"/>
+ <use xlink:href="#hr" x="0" y="120"/>
+ <use xlink:href="#hr" x="0" y="180"/>
+ </g>
+ </g>
+ <g transform="translate(0,70),scale(1.1,1.6)">
+ <rect width="200" height="100" x="0" y="0"
+ style="fill:#ff0000;fill-rule:evenodd;
+ stroke:#000000;stroke-width:2.33903;"/>
+ <text x="20" y="75"
+ style="stroke:#ffffff;stroke-width:1.0;
+ font-size:72;font-weight:normal;fill:#ffffff;
+ font-family:Arial;text-anchor:start;">TXT</text>
+ </g>
+ </g>
+</svg>
diff --git a/src/site/src/documentation/skins/common/scripts/breadcrumbs-optimized.js b/src/site/src/documentation/skins/common/scripts/breadcrumbs-optimized.js
new file mode 100644
index 0000000..507612a
--- /dev/null
+++ b/src/site/src/documentation/skins/common/scripts/breadcrumbs-optimized.js
@@ -0,0 +1,90 @@
+/*
+* 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.
+*/
+var PREPREND_CRUMBS=new Array();
+var link1="@skinconfig.trail.link1.name@";
+var link2="@skinconfig.trail.link2.name@";
+var link3="@skinconfig.trail.link3.name@";
+if(!(link1=="")&&!link1.indexOf( "@" ) == 0){
+ PREPREND_CRUMBS.push( new Array( link1, @skinconfig.trail.link1.href@ ) ); }
+if(!(link2=="")&&!link2.indexOf( "@" ) == 0){
+ PREPREND_CRUMBS.push( new Array( link2, @skinconfig.trail.link2.href@ ) ); }
+if(!(link3=="")&&!link3.indexOf( "@" ) == 0){
+ PREPREND_CRUMBS.push( new Array( link3, @skinconfig.trail.link3.href@ ) ); }
+var DISPLAY_SEPARATOR=" > ";
+var DISPLAY_PREPREND=" > ";
+var DISPLAY_POSTPREND=":";
+var CSS_CLASS_CRUMB="breadcrumb";
+var CSS_CLASS_TRAIL="breadcrumbTrail";
+var CSS_CLASS_SEPARATOR="crumbSeparator";
+var FILE_EXTENSIONS=new Array( ".html", ".htm", ".jsp", ".php", ".php3", ".php4" );
+var PATH_SEPARATOR="/";
+
+function sc(s) {
+ var l=s.toLowerCase();
+ return l.substr(0,1).toUpperCase()+l.substr(1);
+}
+function getdirs() {
+ var t=document.location.pathname.split(PATH_SEPARATOR);
+ var lc=t[t.length-1];
+ for(var i=0;i < FILE_EXTENSIONS.length;i++)
+ {
+ if(lc.indexOf(FILE_EXTENSIONS[i]))
+ return t.slice(1,t.length-1); }
+ return t.slice(1,t.length);
+}
+function getcrumbs( d )
+{
+ var pre = "/";
+ var post = "/";
+ var c = new Array();
+ if( d != null )
+ {
+ for(var i=0;i < d.length;i++) {
+ pre+=d[i]+postfix;
+ c.push(new Array(d[i],pre)); }
+ }
+ if(PREPREND_CRUMBS.length > 0 )
+ return PREPREND_CRUMBS.concat( c );
+ return c;
+}
+function gettrail( c )
+{
+ var h=DISPLAY_PREPREND;
+ for(var i=0;i < c.length;i++)
+ {
+ h+='<a href="'+c[i][1]+'" >'+sc(c[i][0])+'</a>';
+ if(i!=(c.length-1))
+ h+=DISPLAY_SEPARATOR; }
+ return h+DISPLAY_POSTPREND;
+}
+
+function gettrailXHTML( c )
+{
+ var h='<span class="'+CSS_CLASS_TRAIL+'">'+DISPLAY_PREPREND;
+ for(var i=0;i < c.length;i++)
+ {
+ h+='<a href="'+c[i][1]+'" class="'+CSS_CLASS_CRUMB+'">'+sc(c[i][0])+'</a>';
+ if(i!=(c.length-1))
+ h+='<span class="'+CSS_CLASS_SEPARATOR+'">'+DISPLAY_SEPARATOR+'</span>'; }
+ return h+DISPLAY_POSTPREND+'</span>';
+}
+
+if(document.location.href.toLowerCase().indexOf("http://")==-1)
+ document.write(gettrail(getcrumbs()));
+else
+ document.write(gettrail(getcrumbs(getdirs())));
+
diff --git a/src/site/src/documentation/skins/common/scripts/breadcrumbs.js b/src/site/src/documentation/skins/common/scripts/breadcrumbs.js
new file mode 100644
index 0000000..aea80ec
--- /dev/null
+++ b/src/site/src/documentation/skins/common/scripts/breadcrumbs.js
@@ -0,0 +1,237 @@
+/*
+* 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.
+*/
+/**
+ * This script, when included in a html file, builds a neat breadcrumb trail
+ * based on its url. That is, if it doesn't contains bugs (I'm relatively
+ * sure it does).
+ *
+ * Typical usage:
+ * <script type="text/javascript" language="JavaScript" src="breadcrumbs.js"></script>
+ */
+
+/**
+ * IE 5 on Mac doesn't know Array.push.
+ *
+ * Implement it - courtesy to fritz.
+ */
+var abc = new Array();
+if (!abc.push) {
+ Array.prototype.push = function(what){this[this.length]=what}
+}
+
+/* ========================================================================
+ CONSTANTS
+ ======================================================================== */
+
+/**
+ * Two-dimensional array containing extra crumbs to place at the front of
+ * the trail. Specify first the name of the crumb, then the URI that belongs
+ * to it. You'll need to modify this for every domain or subdomain where
+ * you use this script (you can leave it as an empty array if you wish)
+ */
+var PREPREND_CRUMBS = new Array();
+
+var link1 = "@skinconfig.trail.link1.name@";
+var link2 = "@skinconfig.trail.link2.name@";
+var link3 = "@skinconfig.trail.link3.name@";
+
+var href1 = "@skinconfig.trail.link1.href@";
+var href2 = "@skinconfig.trail.link2.href@";
+var href3 = "@skinconfig.trail.link3.href@";
+
+ if(!(link1=="")&&!link1.indexOf( "@" ) == 0){
+ PREPREND_CRUMBS.push( new Array( link1, href1 ) );
+ }
+ if(!(link2=="")&&!link2.indexOf( "@" ) == 0){
+ PREPREND_CRUMBS.push( new Array( link2, href2 ) );
+ }
+ if(!(link3=="")&&!link3.indexOf( "@" ) == 0){
+ PREPREND_CRUMBS.push( new Array( link3, href3 ) );
+ }
+
+/**
+ * String to include between crumbs:
+ */
+var DISPLAY_SEPARATOR = " > ";
+/**
+ * String to include at the beginning of the trail
+ */
+var DISPLAY_PREPREND = " > ";
+/**
+ * String to include at the end of the trail
+ */
+var DISPLAY_POSTPREND = "";
+
+/**
+ * CSS Class to use for a single crumb:
+ */
+var CSS_CLASS_CRUMB = "breadcrumb";
+
+/**
+ * CSS Class to use for the complete trail:
+ */
+var CSS_CLASS_TRAIL = "breadcrumbTrail";
+
+/**
+ * CSS Class to use for crumb separator:
+ */
+var CSS_CLASS_SEPARATOR = "crumbSeparator";
+
+/**
+ * Array of strings containing common file extensions. We use this to
+ * determine what part of the url to ignore (if it contains one of the
+ * string specified here, we ignore it).
+ */
+var FILE_EXTENSIONS = new Array( ".html", ".htm", ".jsp", ".php", ".php3", ".php4" );
+
+/**
+ * String that separates parts of the breadcrumb trail from each other.
+ * When this is no longer a slash, I'm sure I'll be old and grey.
+ */
+var PATH_SEPARATOR = "/";
+
+/* ========================================================================
+ UTILITY FUNCTIONS
+ ======================================================================== */
+/**
+ * Capitalize first letter of the provided string and return the modified
+ * string.
+ */
+function sentenceCase( string )
+{ return string;
+ //var lower = string.toLowerCase();
+ //return lower.substr(0,1).toUpperCase() + lower.substr(1);
+}
+
+/**
+ * Returns an array containing the names of all the directories in the
+ * current document URL
+ */
+function getDirectoriesInURL()
+{
+ var trail = document.location.pathname.split( PATH_SEPARATOR );
+
+ // check whether last section is a file or a directory
+ var lastcrumb = trail[trail.length-1];
+ for( var i = 0; i < FILE_EXTENSIONS.length; i++ )
+ {
+ if( lastcrumb.indexOf( FILE_EXTENSIONS[i] ) )
+ {
+ // it is, remove it and send results
+ return trail.slice( 1, trail.length-1 );
+ }
+ }
+
+ // it's not; send the trail unmodified
+ return trail.slice( 1, trail.length );
+}
+
+/* ========================================================================
+ BREADCRUMB FUNCTIONALITY
+ ======================================================================== */
+/**
+ * Return a two-dimensional array describing the breadcrumbs based on the
+ * array of directories passed in.
+ */
+function getBreadcrumbs( dirs )
+{
+ var prefix = "/";
+ var postfix = "/";
+
+ // the array we will return
+ var crumbs = new Array();
+
+ if( dirs != null )
+ {
+ for( var i = 0; i < dirs.length; i++ )
+ {
+ prefix += dirs[i] + postfix;
+ crumbs.push( new Array( dirs[i], prefix ) );
+ }
+ }
+
+ // preprend the PREPREND_CRUMBS
+ if(PREPREND_CRUMBS.length > 0 )
+ {
+ return PREPREND_CRUMBS.concat( crumbs );
+ }
+
+ return crumbs;
+}
+
+/**
+ * Return a string containing a simple text breadcrumb trail based on the
+ * two-dimensional array passed in.
+ */
+function getCrumbTrail( crumbs )
+{
+ var xhtml = DISPLAY_PREPREND;
+
+ for( var i = 0; i < crumbs.length; i++ )
+ {
+ xhtml += '<a href="' + crumbs[i][1] + '" >';
+ xhtml += unescape( crumbs[i][0] ) + '</a>';
+ if( i != (crumbs.length-1) )
+ {
+ xhtml += DISPLAY_SEPARATOR;
+ }
+ }
+
+ xhtml += DISPLAY_POSTPREND;
+
+ return xhtml;
+}
+
+/**
+ * Return a string containing an XHTML breadcrumb trail based on the
+ * two-dimensional array passed in.
+ */
+function getCrumbTrailXHTML( crumbs )
+{
+ var xhtml = '<span class="' + CSS_CLASS_TRAIL + '">';
+ xhtml += DISPLAY_PREPREND;
+
+ for( var i = 0; i < crumbs.length; i++ )
+ {
+ xhtml += '<a href="' + crumbs[i][1] + '" class="' + CSS_CLASS_CRUMB + '">';
+ xhtml += unescape( crumbs[i][0] ) + '</a>';
+ if( i != (crumbs.length-1) )
+ {
+ xhtml += '<span class="' + CSS_CLASS_SEPARATOR + '">' + DISPLAY_SEPARATOR + '</span>';
+ }
+ }
+
+ xhtml += DISPLAY_POSTPREND;
+ xhtml += '</span>';
+
+ return xhtml;
+}
+
+/* ========================================================================
+ PRINT BREADCRUMB TRAIL
+ ======================================================================== */
+
+// check if we're local; if so, only print the PREPREND_CRUMBS
+if( document.location.href.toLowerCase().indexOf( "http://" ) == -1 )
+{
+ document.write( getCrumbTrail( getBreadcrumbs() ) );
+}
+else
+{
+ document.write( getCrumbTrail( getBreadcrumbs( getDirectoriesInURL() ) ) );
+}
+
diff --git a/src/site/src/documentation/skins/common/scripts/fontsize.js b/src/site/src/documentation/skins/common/scripts/fontsize.js
new file mode 100644
index 0000000..11722bf
--- /dev/null
+++ b/src/site/src/documentation/skins/common/scripts/fontsize.js
@@ -0,0 +1,166 @@
+/*
+* 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.
+*/
+function init()
+{ //embedded in the doc
+ //ndeSetTextSize();
+}
+
+function checkBrowser(){
+ if (!document.getElementsByTagName){
+ return true;
+ }
+ else{
+ return false;
+ }
+}
+
+
+function ndeSetTextSize(chgsize,rs)
+{
+ var startSize;
+ var newSize;
+
+ if (!checkBrowser)
+ {
+ return;
+ }
+
+ startSize = parseInt(ndeGetDocTextSize());
+
+ if (!startSize)
+ {
+ startSize = 16;
+ }
+
+ switch (chgsize)
+ {
+ case 'incr':
+ newSize = startSize + 2;
+ break;
+
+ case 'decr':
+ newSize = startSize - 2;
+ break;
+
+ case 'reset':
+ if (rs) {newSize = rs;} else {newSize = 16;}
+ break;
+
+ default:
+ try{
+ newSize = parseInt(ndeReadCookie("nde-textsize"));
+ }
+ catch(e){
+ alert(e);
+ }
+
+ if (!newSize || newSize == 'NaN')
+ {
+ newSize = startSize;
+ }
+ break;
+
+ }
+
+ if (newSize < 10)
+ {
+ newSize = 10;
+ }
+
+ newSize += 'px';
+
+ document.getElementsByTagName('html')[0].style.fontSize = newSize;
+ document.getElementsByTagName('body')[0].style.fontSize = newSize;
+
+ ndeCreateCookie("nde-textsize", newSize, 365);
+}
+
+function ndeGetDocTextSize()
+{
+ if (!checkBrowser)
+ {
+ return 0;
+ }
+
+ var size = 0;
+ var body = document.getElementsByTagName('body')[0];
+
+ if (body.style && body.style.fontSize)
+ {
+ size = body.style.fontSize;
+ }
+ else if (typeof(getComputedStyle) != 'undefined')
+ {
+ size = getComputedStyle(body,'').getPropertyValue('font-size');
+ }
+ else if (body.currentStyle)
+ {
+ size = body.currentStyle.fontSize;
+ }
+
+ //fix IE bug
+ if( isNaN(size)){
+ if(size.substring(size.length-1)=="%"){
+ return
+ }
+
+ }
+
+ return size;
+
+}
+
+
+
+function ndeCreateCookie(name,value,days)
+{
+ var cookie = name + "=" + value + ";";
+
+ if (days)
+ {
+ var date = new Date();
+ date.setTime(date.getTime()+(days*24*60*60*1000));
+ cookie += " expires=" + date.toGMTString() + ";";
+ }
+ cookie += " path=/";
+
+ document.cookie = cookie;
+
+}
+
+function ndeReadCookie(name)
+{
+ var nameEQ = name + "=";
+ var ca = document.cookie.split(';');
+
+
+ for(var i = 0; i < ca.length; i++)
+ {
+ var c = ca[i];
+ while (c.charAt(0) == ' ')
+ {
+ c = c.substring(1, c.length);
+ }
+
+ ctest = c.substring(0,name.length);
+
+ if(ctest == name){
+ return c.substring(nameEQ.length,c.length);
+ }
+ }
+ return null;
+}
diff --git a/src/site/src/documentation/skins/common/scripts/getBlank.js b/src/site/src/documentation/skins/common/scripts/getBlank.js
new file mode 100644
index 0000000..d9978c0
--- /dev/null
+++ b/src/site/src/documentation/skins/common/scripts/getBlank.js
@@ -0,0 +1,40 @@
+/*
+* 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.
+*/
+/**
+ * getBlank script - when included in a html file and called from a form text field, will set the value of this field to ""
+ * if the text value is still the standard value.
+ * getPrompt script - when included in a html file and called from a form text field, will set the value of this field to the prompt
+ * if the text value is empty.
+ *
+ * Typical usage:
+ * <script type="text/javascript" language="JavaScript" src="getBlank.js"></script>
+ * <input type="text" id="query" value="Search the site:" onFocus="getBlank (this, 'Search the site:');" onBlur="getBlank (this, 'Search the site:');"/>
+ */
+<!--
+function getBlank (form, stdValue){
+if (form.value == stdValue){
+ form.value = '';
+ }
+return true;
+}
+function getPrompt (form, stdValue){
+if (form.value == ''){
+ form.value = stdValue;
+ }
+return true;
+}
+//-->
diff --git a/src/site/src/documentation/skins/common/scripts/getMenu.js b/src/site/src/documentation/skins/common/scripts/getMenu.js
new file mode 100644
index 0000000..b17aad6
--- /dev/null
+++ b/src/site/src/documentation/skins/common/scripts/getMenu.js
@@ -0,0 +1,45 @@
+/*
+* 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.
+*/
+/**
+ * This script, when included in a html file, can be used to make collapsible menus
+ *
+ * Typical usage:
+ * <script type="text/javascript" language="JavaScript" src="menu.js"></script>
+ */
+
+if (document.getElementById){
+ document.write('<style type="text/css">.menuitemgroup{display: none;}</style>')
+}
+
+
+function SwitchMenu(obj, thePath)
+{
+var open = 'url("'+thePath + 'images/chapter_open.gif")';
+var close = 'url("'+thePath + 'images/chapter.gif")';
+ if(document.getElementById) {
+ var el = document.getElementById(obj);
+ var title = document.getElementById(obj+'Title');
+
+ if(el.style.display != "block"){
+ title.style.backgroundImage = open;
+ el.style.display = "block";
+ }else{
+ title.style.backgroundImage = close;
+ el.style.display = "none";
+ }
+ }// end - if(document.getElementById)
+}//end - function SwitchMenu(obj)
diff --git a/src/site/src/documentation/skins/common/scripts/menu.js b/src/site/src/documentation/skins/common/scripts/menu.js
new file mode 100644
index 0000000..06ea471
--- /dev/null
+++ b/src/site/src/documentation/skins/common/scripts/menu.js
@@ -0,0 +1,48 @@
+/*
+* 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.
+*/
+/**
+ * This script, when included in a html file, can be used to make collapsible menus
+ *
+ * Typical usage:
+ * <script type="text/javascript" language="JavaScript" src="menu.js"></script>
+ */
+
+if (document.getElementById){
+ document.write('<style type="text/css">.menuitemgroup{display: none;}</style>')
+}
+
+function SwitchMenu(obj)
+{
+ if(document.getElementById) {
+ var el = document.getElementById(obj);
+ var title = document.getElementById(obj+'Title');
+
+ if(obj.indexOf("_selected_")==0&&el.style.display == ""){
+ el.style.display = "block";
+ title.className = "pagegroupselected";
+ }
+
+ if(el.style.display != "block"){
+ el.style.display = "block";
+ title.className = "pagegroupopen";
+ }
+ else{
+ el.style.display = "none";
+ title.className = "pagegroup";
+ }
+ }// end - if(document.getElementById)
+}//end - function SwitchMenu(obj)
diff --git a/src/site/src/documentation/skins/common/scripts/prototype.js b/src/site/src/documentation/skins/common/scripts/prototype.js
new file mode 100644
index 0000000..ed7d920
--- /dev/null
+++ b/src/site/src/documentation/skins/common/scripts/prototype.js
@@ -0,0 +1,1257 @@
+/* Prototype JavaScript framework, version 1.4.0_pre4
+ * (c) 2005 Sam Stephenson <sam@conio.net>
+ *
+ * THIS FILE IS AUTOMATICALLY GENERATED. When sending patches, please diff
+ * against the source tree, available from the Prototype darcs repository.
+ *
+ * Prototype is freely distributable under the terms of an MIT-style license.
+ *
+ * For details, see the Prototype web site: http://prototype.conio.net/
+ *
+/*--------------------------------------------------------------------------*/
+
+var Prototype = {
+ Version: '1.4.0_pre4',
+
+ emptyFunction: function() {},
+ K: function(x) {return x}
+}
+
+var Class = {
+ create: function() {
+ return function() {
+ this.initialize.apply(this, arguments);
+ }
+ }
+}
+
+var Abstract = new Object();
+
+Object.extend = function(destination, source) {
+ for (property in source) {
+ destination[property] = source[property];
+ }
+ return destination;
+}
+
+Function.prototype.bind = function(object) {
+ var __method = this;
+ return function() {
+ return __method.apply(object, arguments);
+ }
+}
+
+Function.prototype.bindAsEventListener = function(object) {
+ var __method = this;
+ return function(event) {
+ return __method.call(object, event || window.event);
+ }
+}
+
+Number.prototype.toColorPart = function() {
+ var digits = this.toString(16);
+ if (this < 16) return '0' + digits;
+ return digits;
+}
+
+var Try = {
+ these: function() {
+ var returnValue;
+
+ for (var i = 0; i < arguments.length; i++) {
+ var lambda = arguments[i];
+ try {
+ returnValue = lambda();
+ break;
+ } catch (e) {}
+ }
+
+ return returnValue;
+ }
+}
+
+/*--------------------------------------------------------------------------*/
+
+var PeriodicalExecuter = Class.create();
+PeriodicalExecuter.prototype = {
+ initialize: function(callback, frequency) {
+ this.callback = callback;
+ this.frequency = frequency;
+ this.currentlyExecuting = false;
+
+ this.registerCallback();
+ },
+
+ registerCallback: function() {
+ setInterval(this.onTimerEvent.bind(this), this.frequency * 1000);
+ },
+
+ onTimerEvent: function() {
+ if (!this.currentlyExecuting) {
+ try {
+ this.currentlyExecuting = true;
+ this.callback();
+ } finally {
+ this.currentlyExecuting = false;
+ }
+ }
+ }
+}
+
+/*--------------------------------------------------------------------------*/
+
+function $() {
+ var elements = new Array();
+
+ for (var i = 0; i < arguments.length; i++) {
+ var element = arguments[i];
+ if (typeof element == 'string')
+ element = document.getElementById(element);
+
+ if (arguments.length == 1)
+ return element;
+
+ elements.push(element);
+ }
+
+ return elements;
+}
+
+if (!Array.prototype.push) {
+ Array.prototype.push = function() {
+ var startLength = this.length;
+ for (var i = 0; i < arguments.length; i++)
+ this[startLength + i] = arguments[i];
+ return this.length;
+ }
+}
+
+if (!Function.prototype.apply) {
+ // Based on code from http://www.youngpup.net/
+ Function.prototype.apply = function(object, parameters) {
+ var parameterStrings = new Array();
+ if (!object) object = window;
+ if (!parameters) parameters = new Array();
+
+ for (var i = 0; i < parameters.length; i++)
+ parameterStrings[i] = 'parameters[' + i + ']';
+
+ object.__apply__ = this;
+ var result = eval('object.__apply__(' +
+ parameterStrings.join(', ') + ')');
+ object.__apply__ = null;
+
+ return result;
+ }
+}
+
+Object.extend(String.prototype, {
+ stripTags: function() {
+ return this.replace(/<\/?[^>]+>/gi, '');
+ },
+
+ escapeHTML: function() {
+ var div = document.createElement('div');
+ var text = document.createTextNode(this);
+ div.appendChild(text);
+ return div.innerHTML;
+ },
+
+ unescapeHTML: function() {
+ var div = document.createElement('div');
+ div.innerHTML = this.stripTags();
+ return div.childNodes[0].nodeValue;
+ },
+
+ parseQuery: function() {
+ var str = this;
+ if (str.substring(0,1) == '?') {
+ str = this.substring(1);
+ }
+ var result = {};
+ var pairs = str.split('&');
+ for (var i = 0; i < pairs.length; i++) {
+ var pair = pairs[i].split('=');
+ result[pair[0]] = pair[1];
+ }
+ return result;
+ }
+});
+
+
+var _break = new Object();
+var _continue = new Object();
+
+var Enumerable = {
+ each: function(iterator) {
+ var index = 0;
+ try {
+ this._each(function(value) {
+ try {
+ iterator(value, index++);
+ } catch (e) {
+ if (e != _continue) throw e;
+ }
+ });
+ } catch (e) {
+ if (e != _break) throw e;
+ }
+ },
+
+ all: function(iterator) {
+ var result = true;
+ this.each(function(value, index) {
+ if (!(result &= (iterator || Prototype.K)(value, index)))
+ throw _break;
+ });
+ return result;
+ },
+
+ any: function(iterator) {
+ var result = true;
+ this.each(function(value, index) {
+ if (result &= (iterator || Prototype.K)(value, index))
+ throw _break;
+ });
+ return result;
+ },
+
+ collect: function(iterator) {
+ var results = [];
+ this.each(function(value, index) {
+ results.push(iterator(value, index));
+ });
+ return results;
+ },
+
+ detect: function (iterator) {
+ var result;
+ this.each(function(value, index) {
+ if (iterator(value, index)) {
+ result = value;
+ throw _break;
+ }
+ });
+ return result;
+ },
+
+ findAll: function(iterator) {
+ var results = [];
+ this.each(function(value, index) {
+ if (iterator(value, index))
+ results.push(value);
+ });
+ return results;
+ },
+
+ grep: function(pattern, iterator) {
+ var results = [];
+ this.each(function(value, index) {
+ var stringValue = value.toString();
+ if (stringValue.match(pattern))
+ results.push((iterator || Prototype.K)(value, index));
+ })
+ return results;
+ },
+
+ include: function(object) {
+ var found = false;
+ this.each(function(value) {
+ if (value == object) {
+ found = true;
+ throw _break;
+ }
+ });
+ return found;
+ },
+
+ inject: function(memo, iterator) {
+ this.each(function(value, index) {
+ memo = iterator(memo, value, index);
+ });
+ return memo;
+ },
+
+ invoke: function(method) {
+ var args = $A(arguments).slice(1);
+ return this.collect(function(value) {
+ return value[method].apply(value, args);
+ });
+ },
+
+ max: function(iterator) {
+ var result;
+ this.each(function(value, index) {
+ value = (iterator || Prototype.K)(value, index);
+ if (value >= (result || value))
+ result = value;
+ });
+ return result;
+ },
+
+ min: function(iterator) {
+ var result;
+ this.each(function(value, index) {
+ value = (iterator || Prototype.K)(value, index);
+ if (value <= (result || value))
+ result = value;
+ });
+ return result;
+ },
+
+ partition: function(iterator) {
+ var trues = [], falses = [];
+ this.each(function(value, index) {
+ ((iterator || Prototype.K)(value, index) ?
+ trues : falses).push(value);
+ });
+ return [trues, falses];
+ },
+
+ pluck: function(property) {
+ var results = [];
+ this.each(function(value, index) {
+ results.push(value[property]);
+ });
+ return results;
+ },
+
+ reject: function(iterator) {
+ var results = [];
+ this.each(function(value, index) {
+ if (!iterator(value, index))
+ results.push(value);
+ });
+ return results;
+ },
+
+ sortBy: function(iterator) {
+ return this.collect(function(value, index) {
+ return {value: value, criteria: iterator(value, index)};
+ }).sort(function(left, right) {
+ var a = left.criteria, b = right.criteria;
+ return a < b ? -1 : a > b ? 1 : 0;
+ }).pluck('value');
+ },
+
+ toArray: function() {
+ return this.collect(Prototype.K);
+ },
+
+ zip: function() {
+ var iterator = Prototype.K, args = $A(arguments);
+ if (typeof args.last() == 'function')
+ iterator = args.pop();
+
+ var collections = [this].concat(args).map($A);
+ return this.map(function(value, index) {
+ iterator(value = collections.pluck(index));
+ return value;
+ });
+ }
+}
+
+Object.extend(Enumerable, {
+ map: Enumerable.collect,
+ find: Enumerable.detect,
+ select: Enumerable.findAll,
+ member: Enumerable.include,
+ entries: Enumerable.toArray
+});
+
+$A = Array.from = function(iterable) {
+ var results = [];
+ for (var i = 0; i < iterable.length; i++)
+ results.push(iterable[i]);
+ return results;
+}
+
+Object.extend(Array.prototype, {
+ _each: function(iterator) {
+ for (var i = 0; i < this.length; i++)
+ iterator(this[i]);
+ },
+
+ first: function() {
+ return this[0];
+ },
+
+ last: function() {
+ return this[this.length - 1];
+ }
+});
+
+Object.extend(Array.prototype, Enumerable);
+
+
+var Ajax = {
+ getTransport: function() {
+ return Try.these(
+ function() {return new ActiveXObject('Msxml2.XMLHTTP')},
+ function() {return new ActiveXObject('Microsoft.XMLHTTP')},
+ function() {return new XMLHttpRequest()}
+ ) || false;
+ }
+}
+
+Ajax.Base = function() {};
+Ajax.Base.prototype = {
+ setOptions: function(options) {
+ this.options = {
+ method: 'post',
+ asynchronous: true,
+ parameters: ''
+ }
+ Object.extend(this.options, options || {});
+ },
+
+ responseIsSuccess: function() {
+ return this.transport.status == undefined
+ || this.transport.status == 0
+ || (this.transport.status >= 200 && this.transport.status < 300);
+ },
+
+ responseIsFailure: function() {
+ return !this.responseIsSuccess();
+ }
+}
+
+Ajax.Request = Class.create();
+Ajax.Request.Events =
+ ['Uninitialized', 'Loading', 'Loaded', 'Interactive', 'Complete'];
+
+Ajax.Request.prototype = Object.extend(new Ajax.Base(), {
+ initialize: function(url, options) {
+ this.transport = Ajax.getTransport();
+ this.setOptions(options);
+ this.request(url);
+ },
+
+ request: function(url) {
+ var parameters = this.options.parameters || '';
+ if (parameters.length > 0) parameters += '&_=';
+
+ try {
+ if (this.options.method == 'get')
+ url += '?' + parameters;
+
+ this.transport.open(this.options.method, url,
+ this.options.asynchronous);
+
+ if (this.options.asynchronous) {
+ this.transport.onreadystatechange = this.onStateChange.bind(this);
+ setTimeout((function() {this.respondToReadyState(1)}).bind(this), 10);
+ }
+
+ this.setRequestHeaders();
+
+ var body = this.options.postBody ? this.options.postBody : parameters;
+ this.transport.send(this.options.method == 'post' ? body : null);
+
+ } catch (e) {
+ }
+ },
+
+ setRequestHeaders: function() {
+ var requestHeaders =
+ ['X-Requested-With', 'XMLHttpRequest',
+ 'X-Prototype-Version', Prototype.Version];
+
+ if (this.options.method == 'post') {
+ requestHeaders.push('Content-type',
+ 'application/x-www-form-urlencoded');
+
+ /* Force "Connection: close" for Mozilla browsers to work around
+ * a bug where XMLHttpReqeuest sends an incorrect Content-length
+ * header. See Mozilla Bugzilla #246651.
+ */
+ if (this.transport.overrideMimeType)
+ requestHeaders.push('Connection', 'close');
+ }
+
+ if (this.options.requestHeaders)
+ requestHeaders.push.apply(requestHeaders, this.options.requestHeaders);
+
+ for (var i = 0; i < requestHeaders.length; i += 2)
+ this.transport.setRequestHeader(requestHeaders[i], requestHeaders[i+1]);
+ },
+
+ onStateChange: function() {
+ var readyState = this.transport.readyState;
+ if (readyState != 1)
+ this.respondToReadyState(this.transport.readyState);
+ },
+
+ respondToReadyState: function(readyState) {
+ var event = Ajax.Request.Events[readyState];
+
+ if (event == 'Complete')
+ (this.options['on' + this.transport.status]
+ || this.options['on' + (this.responseIsSuccess() ? 'Success' : 'Failure')]
+ || Prototype.emptyFunction)(this.transport);
+
+ (this.options['on' + event] || Prototype.emptyFunction)(this.transport);
+
+ /* Avoid memory leak in MSIE: clean up the oncomplete event handler */
+ if (event == 'Complete')
+ this.transport.onreadystatechange = Prototype.emptyFunction;
+ }
+});
+
+Ajax.Updater = Class.create();
+Ajax.Updater.ScriptFragment = '(?:<script.*?>)((\n|.)*?)(?:<\/script>)';
+
+Object.extend(Object.extend(Ajax.Updater.prototype, Ajax.Request.prototype), {
+ initialize: function(container, url, options) {
+ this.containers = {
+ success: container.success ? $(container.success) : $(container),
+ failure: container.failure ? $(container.failure) :
+ (container.success ? null : $(container))
+ }
+
+ this.transport = Ajax.getTransport();
+ this.setOptions(options);
+
+ var onComplete = this.options.onComplete || Prototype.emptyFunction;
+ this.options.onComplete = (function() {
+ this.updateContent();
+ onComplete(this.transport);
+ }).bind(this);
+
+ this.request(url);
+ },
+
+ updateContent: function() {
+ var receiver = this.responseIsSuccess() ?
+ this.containers.success : this.containers.failure;
+
+ var match = new RegExp(Ajax.Updater.ScriptFragment, 'img');
+ var response = this.transport.responseText.replace(match, '');
+ var scripts = this.transport.responseText.match(match);
+
+ if (receiver) {
+ if (this.options.insertion) {
+ new this.options.insertion(receiver, response);
+ } else {
+ receiver.innerHTML = response;
+ }
+ }
+
+ if (this.responseIsSuccess()) {
+ if (this.onComplete)
+ setTimeout((function() {this.onComplete(
+ this.transport)}).bind(this), 10);
+ }
+
+ if (this.options.evalScripts && scripts) {
+ match = new RegExp(Ajax.Updater.ScriptFragment, 'im');
+ setTimeout((function() {
+ for (var i = 0; i < scripts.length; i++)
+ eval(scripts[i].match(match)[1]);
+ }).bind(this), 10);
+ }
+ }
+});
+
+Ajax.PeriodicalUpdater = Class.create();
+Ajax.PeriodicalUpdater.prototype = Object.extend(new Ajax.Base(), {
+ initialize: function(container, url, options) {
+ this.setOptions(options);
+ this.onComplete = this.options.onComplete;
+
+ this.frequency = (this.options.frequency || 2);
+ this.decay = 1;
+
+ this.updater = {};
+ this.container = container;
+ this.url = url;
+
+ this.start();
+ },
+
+ start: function() {
+ this.options.onComplete = this.updateComplete.bind(this);
+ this.onTimerEvent();
+ },
+
+ stop: function() {
+ this.updater.onComplete = undefined;
+ clearTimeout(this.timer);
+ (this.onComplete || Ajax.emptyFunction).apply(this, arguments);
+ },
+
+ updateComplete: function(request) {
+ if (this.options.decay) {
+ this.decay = (request.responseText == this.lastText ?
+ this.decay * this.options.decay : 1);
+
+ this.lastText = request.responseText;
+ }
+ this.timer = setTimeout(this.onTimerEvent.bind(this),
+ this.decay * this.frequency * 1000);
+ },
+
+ onTimerEvent: function() {
+ this.updater = new Ajax.Updater(this.container, this.url, this.options);
+ }
+});
+
+document.getElementsByClassName = function(className) {
+ var children = document.getElementsByTagName('*') || document.all;
+ var elements = new Array();
+
+ for (var i = 0; i < children.length; i++) {
+ var child = children[i];
+ var classNames = child.className.split(' ');
+ for (var j = 0; j < classNames.length; j++) {
+ if (classNames[j] == className) {
+ elements.push(child);
+ break;
+ }
+ }
+ }
+
+ return elements;
+}
+
+/*--------------------------------------------------------------------------*/
+
+if (!window.Element) {
+ var Element = new Object();
+}
+
+Object.extend(Element, {
+ toggle: function() {
+ for (var i = 0; i < arguments.length; i++) {
+ var element = $(arguments[i]);
+ element.style.display =
+ (element.style.display == 'none' ? '' : 'none');
+ }
+ },
+
+ hide: function() {
+ for (var i = 0; i < arguments.length; i++) {
+ var element = $(arguments[i]);
+ element.style.display = 'none';
+ }
+ },
+
+ show: function() {
+ for (var i = 0; i < arguments.length; i++) {
+ var element = $(arguments[i]);
+ element.style.display = '';
+ }
+ },
+
+ remove: function(element) {
+ element = $(element);
+ element.parentNode.removeChild(element);
+ },
+
+ getHeight: function(element) {
+ element = $(element);
+ return element.offsetHeight;
+ },
+
+ hasClassName: function(element, className) {
+ element = $(element);
+ if (!element)
+ return;
+ var a = element.className.split(' ');
+ for (var i = 0; i < a.length; i++) {
+ if (a[i] == className)
+ return true;
+ }
+ return false;
+ },
+
+ addClassName: function(element, className) {
+ element = $(element);
+ Element.removeClassName(element, className);
+ element.className += ' ' + className;
+ },
+
+ removeClassName: function(element, className) {
+ element = $(element);
+ if (!element)
+ return;
+ var newClassName = '';
+ var a = element.className.split(' ');
+ for (var i = 0; i < a.length; i++) {
+ if (a[i] != className) {
+ if (i > 0)
+ newClassName += ' ';
+ newClassName += a[i];
+ }
+ }
+ element.className = newClassName;
+ },
+
+ // removes whitespace-only text node children
+ cleanWhitespace: function(element) {
+ var element = $(element);
+ for (var i = 0; i < element.childNodes.length; i++) {
+ var node = element.childNodes[i];
+ if (node.nodeType == 3 && !/\S/.test(node.nodeValue))
+ Element.remove(node);
+ }
+ }
+});
+
+var Toggle = new Object();
+Toggle.display = Element.toggle;
+
+/*--------------------------------------------------------------------------*/
+
+Abstract.Insertion = function(adjacency) {
+ this.adjacency = adjacency;
+}
+
+Abstract.Insertion.prototype = {
+ initialize: function(element, content) {
+ this.element = $(element);
+ this.content = content;
+
+ if (this.adjacency && this.element.insertAdjacentHTML) {
+ this.element.insertAdjacentHTML(this.adjacency, this.content);
+ } else {
+ this.range = this.element.ownerDocument.createRange();
+ if (this.initializeRange) this.initializeRange();
+ this.fragment = this.range.createContextualFragment(this.content);
+ this.insertContent();
+ }
+ }
+}
+
+var Insertion = new Object();
+
+Insertion.Before = Class.create();
+Insertion.Before.prototype = Object.extend(new Abstract.Insertion('beforeBegin'), {
+ initializeRange: function() {
+ this.range.setStartBefore(this.element);
+ },
+
+ insertContent: function() {
+ this.element.parentNode.insertBefore(this.fragment, this.element);
+ }
+});
+
+Insertion.Top = Class.create();
+Insertion.Top.prototype = Object.extend(new Abstract.Insertion('afterBegin'), {
+ initializeRange: function() {
+ this.range.selectNodeContents(this.element);
+ this.range.collapse(true);
+ },
+
+ insertContent: function() {
+ this.element.insertBefore(this.fragment, this.element.firstChild);
+ }
+});
+
+Insertion.Bottom = Class.create();
+Insertion.Bottom.prototype = Object.extend(new Abstract.Insertion('beforeEnd'), {
+ initializeRange: function() {
+ this.range.selectNodeContents(this.element);
+ this.range.collapse(this.element);
+ },
+
+ insertContent: function() {
+ this.element.appendChild(this.fragment);
+ }
+});
+
+Insertion.After = Class.create();
+Insertion.After.prototype = Object.extend(new Abstract.Insertion('afterEnd'), {
+ initializeRange: function() {
+ this.range.setStartAfter(this.element);
+ },
+
+ insertContent: function() {
+ this.element.parentNode.insertBefore(this.fragment,
+ this.element.nextSibling);
+ }
+});
+
+var Field = {
+ clear: function() {
+ for (var i = 0; i < arguments.length; i++)
+ $(arguments[i]).value = '';
+ },
+
+ focus: function(element) {
+ $(element).focus();
+ },
+
+ present: function() {
+ for (var i = 0; i < arguments.length; i++)
+ if ($(arguments[i]).value == '') return false;
+ return true;
+ },
+
+ select: function(element) {
+ $(element).select();
+ },
+
+ activate: function(element) {
+ $(element).focus();
+ $(element).select();
+ }
+}
+
+/*--------------------------------------------------------------------------*/
+
+var Form = {
+ serialize: function(form) {
+ var elements = Form.getElements($(form));
+ var queryComponents = new Array();
+
+ for (var i = 0; i < elements.length; i++) {
+ var queryComponent = Form.Element.serialize(elements[i]);
+ if (queryComponent)
+ queryComponents.push(queryComponent);
+ }
+
+ return queryComponents.join('&');
+ },
+
+ getElements: function(form) {
+ var form = $(form);
+ var elements = new Array();
+
+ for (tagName in Form.Element.Serializers) {
+ var tagElements = form.getElementsByTagName(tagName);
+ for (var j = 0; j < tagElements.length; j++)
+ elements.push(tagElements[j]);
+ }
+ return elements;
+ },
+
+ getInputs: function(form, typeName, name) {
+ var form = $(form);
+ var inputs = form.getElementsByTagName('input');
+
+ if (!typeName && !name)
+ return inputs;
+
+ var matchingInputs = new Array();
+ for (var i = 0; i < inputs.length; i++) {
+ var input = inputs[i];
+ if ((typeName && input.type != typeName) ||
+ (name && input.name != name))
+ continue;
+ matchingInputs.push(input);
+ }
+
+ return matchingInputs;
+ },
+
+ disable: function(form) {
+ var elements = Form.getElements(form);
+ for (var i = 0; i < elements.length; i++) {
+ var element = elements[i];
+ element.blur();
+ element.disabled = 'true';
+ }
+ },
+
+ enable: function(form) {
+ var elements = Form.getElements(form);
+ for (var i = 0; i < elements.length; i++) {
+ var element = elements[i];
+ element.disabled = '';
+ }
+ },
+
+ focusFirstElement: function(form) {
+ var form = $(form);
+ var elements = Form.getElements(form);
+ for (var i = 0; i < elements.length; i++) {
+ var element = elements[i];
+ if (element.type != 'hidden' && !element.disabled) {
+ Field.activate(element);
+ break;
+ }
+ }
+ },
+
+ reset: function(form) {
+ $(form).reset();
+ }
+}
+
+Form.Element = {
+ serialize: function(element) {
+ var element = $(element);
+ var method = element.tagName.toLowerCase();
+ var parameter = Form.Element.Serializers[method](element);
+
+ if (parameter)
+ return encodeURIComponent(parameter[0]) + '=' +
+ encodeURIComponent(parameter[1]);
+ },
+
+ getValue: function(element) {
+ var element = $(element);
+ var method = element.tagName.toLowerCase();
+ var parameter = Form.Element.Serializers[method](element);
+
+ if (parameter)
+ return parameter[1];
+ }
+}
+
+Form.Element.Serializers = {
+ input: function(element) {
+ switch (element.type.toLowerCase()) {
+ case 'submit':
+ case 'hidden':
+ case 'password':
+ case 'text':
+ return Form.Element.Serializers.textarea(element);
+ case 'checkbox':
+ case 'radio':
+ return Form.Element.Serializers.inputSelector(element);
+ }
+ return false;
+ },
+
+ inputSelector: function(element) {
+ if (element.checked)
+ return [element.name, element.value];
+ },
+
+ textarea: function(element) {
+ return [element.name, element.value];
+ },
+
+ select: function(element) {
+ var value = '';
+ if (element.type == 'select-one') {
+ var index = element.selectedIndex;
+ if (index >= 0)
+ value = element.options[index].value || element.options[index].text;
+ } else {
+ value = new Array();
+ for (var i = 0; i < element.length; i++) {
+ var opt = element.options[i];
+ if (opt.selected)
+ value.push(opt.value || opt.text);
+ }
+ }
+ return [element.name, value];
+ }
+}
+
+/*--------------------------------------------------------------------------*/
+
+var $F = Form.Element.getValue;
+
+/*--------------------------------------------------------------------------*/
+
+Abstract.TimedObserver = function() {}
+Abstract.TimedObserver.prototype = {
+ initialize: function(element, frequency, callback) {
+ this.frequency = frequency;
+ this.element = $(element);
+ this.callback = callback;
+
+ this.lastValue = this.getValue();
+ this.registerCallback();
+ },
+
+ registerCallback: function() {
+ setInterval(this.onTimerEvent.bind(this), this.frequency * 1000);
+ },
+
+ onTimerEvent: function() {
+ var value = this.getValue();
+ if (this.lastValue != value) {
+ this.callback(this.element, value);
+ this.lastValue = value;
+ }
+ }
+}
+
+Form.Element.Observer = Class.create();
+Form.Element.Observer.prototype = Object.extend(new Abstract.TimedObserver(), {
+ getValue: function() {
+ return Form.Element.getValue(this.element);
+ }
+});
+
+Form.Observer = Class.create();
+Form.Observer.prototype = Object.extend(new Abstract.TimedObserver(), {
+ getValue: function() {
+ return Form.serialize(this.element);
+ }
+});
+
+/*--------------------------------------------------------------------------*/
+
+Abstract.EventObserver = function() {}
+Abstract.EventObserver.prototype = {
+ initialize: function(element, callback) {
+ this.element = $(element);
+ this.callback = callback;
+
+ this.lastValue = this.getValue();
+ if (this.element.tagName.toLowerCase() == 'form')
+ this.registerFormCallbacks();
+ else
+ this.registerCallback(this.element);
+ },
+
+ onElementEvent: function() {
+ var value = this.getValue();
+ if (this.lastValue != value) {
+ this.callback(this.element, value);
+ this.lastValue = value;
+ }
+ },
+
+ registerFormCallbacks: function() {
+ var elements = Form.getElements(this.element);
+ for (var i = 0; i < elements.length; i++)
+ this.registerCallback(elements[i]);
+ },
+
+ registerCallback: function(element) {
+ if (element.type) {
+ switch (element.type.toLowerCase()) {
+ case 'checkbox':
+ case 'radio':
+ element.target = this;
+ element.prev_onclick = element.onclick || Prototype.emptyFunction;
+ element.onclick = function() {
+ this.prev_onclick();
+ this.target.onElementEvent();
+ }
+ break;
+ case 'password':
+ case 'text':
+ case 'textarea':
+ case 'select-one':
+ case 'select-multiple':
+ element.target = this;
+ element.prev_onchange = element.onchange || Prototype.emptyFunction;
+ element.onchange = function() {
+ this.prev_onchange();
+ this.target.onElementEvent();
+ }
+ break;
+ }
+ }
+ }
+}
+
+Form.Element.EventObserver = Class.create();
+Form.Element.EventObserver.prototype = Object.extend(new Abstract.EventObserver(), {
+ getValue: function() {
+ return Form.Element.getValue(this.element);
+ }
+});
+
+Form.EventObserver = Class.create();
+Form.EventObserver.prototype = Object.extend(new Abstract.EventObserver(), {
+ getValue: function() {
+ return Form.serialize(this.element);
+ }
+});
+
+
+if (!window.Event) {
+ var Event = new Object();
+}
+
+Object.extend(Event, {
+ KEY_BACKSPACE: 8,
+ KEY_TAB: 9,
+ KEY_RETURN: 13,
+ KEY_ESC: 27,
+ KEY_LEFT: 37,
+ KEY_UP: 38,
+ KEY_RIGHT: 39,
+ KEY_DOWN: 40,
+ KEY_DELETE: 46,
+
+ element: function(event) {
+ return event.target || event.srcElement;
+ },
+
+ isLeftClick: function(event) {
+ return (((event.which) && (event.which == 1)) ||
+ ((event.button) && (event.button == 1)));
+ },
+
+ pointerX: function(event) {
+ return event.pageX || (event.clientX +
+ (document.documentElement.scrollLeft || document.body.scrollLeft));
+ },
+
+ pointerY: function(event) {
+ return event.pageY || (event.clientY +
+ (document.documentElement.scrollTop || document.body.scrollTop));
+ },
+
+ stop: function(event) {
+ if (event.preventDefault) {
+ event.preventDefault();
+ event.stopPropagation();
+ } else {
+ event.returnValue = false;
+ }
+ },
+
+ // find the first node with the given tagName, starting from the
+ // node the event was triggered on; traverses the DOM upwards
+ findElement: function(event, tagName) {
+ var element = Event.element(event);
+ while (element.parentNode && (!element.tagName ||
+ (element.tagName.toUpperCase() != tagName.toUpperCase())))
+ element = element.parentNode;
+ return element;
+ },
+
+ observers: false,
+
+ _observeAndCache: function(element, name, observer, useCapture) {
+ if (!this.observers) this.observers = [];
+ if (element.addEventListener) {
+ this.observers.push([element, name, observer, useCapture]);
+ element.addEventListener(name, observer, useCapture);
+ } else if (element.attachEvent) {
+ this.observers.push([element, name, observer, useCapture]);
+ element.attachEvent('on' + name, observer);
+ }
+ },
+
+ unloadCache: function() {
+ if (!Event.observers) return;
+ for (var i = 0; i < Event.observers.length; i++) {
+ Event.stopObserving.apply(this, Event.observers[i]);
+ Event.observers[i][0] = null;
+ }
+ Event.observers = false;
+ },
+
+ observe: function(element, name, observer, useCapture) {
+ var element = $(element);
+ useCapture = useCapture || false;
+
+ if (name == 'keypress' &&
+ ((/Konqueror|Safari|KHTML/.test(navigator.userAgent))
+ || element.attachEvent))
+ name = 'keydown';
+
+ this._observeAndCache(element, name, observer, useCapture);
+ },
+
+ stopObserving: function(element, name, observer, useCapture) {
+ var element = $(element);
+ useCapture = useCapture || false;
+
+ if (name == 'keypress' &&
+ ((/Konqueror|Safari|KHTML/.test(navigator.userAgent))
+ || element.detachEvent))
+ name = 'keydown';
+
+ if (element.removeEventListener) {
+ element.removeEventListener(name, observer, useCapture);
+ } else if (element.detachEvent) {
+ element.detachEvent('on' + name, observer);
+ }
+ }
+});
+
+/* prevent memory leaks in IE */
+Event.observe(window, 'unload', Event.unloadCache, false);
+
+var Position = {
+
+ // set to true if needed, warning: firefox performance problems
+ // NOT neeeded for page scrolling, only if draggable contained in
+ // scrollable elements
+ includeScrollOffsets: false,
+
+ // must be called before calling withinIncludingScrolloffset, every time the
+ // page is scrolled
+ prepare: function() {
+ this.deltaX = window.pageXOffset
+ || document.documentElement.scrollLeft
+ || document.body.scrollLeft
+ || 0;
+ this.deltaY = window.pageYOffset
+ || document.documentElement.scrollTop
+ || document.body.scrollTop
+ || 0;
+ },
+
+ realOffset: function(element) {
+ var valueT = 0, valueL = 0;
+ do {
+ valueT += element.scrollTop || 0;
+ valueL += element.scrollLeft || 0;
+ element = element.parentNode;
+ } while (element);
+ return [valueL, valueT];
+ },
+
+ cumulativeOffset: function(element) {
+ var valueT = 0, valueL = 0;
+ do {
+ valueT += element.offsetTop || 0;
+ valueL += element.offsetLeft || 0;
+ element = element.offsetParent;
+ } while (element);
+ return [valueL, valueT];
+ },
+
+ // caches x/y coordinate pair to use with overlap
+ within: function(element, x, y) {
+ if (this.includeScrollOffsets)
+ return this.withinIncludingScrolloffsets(element, x, y);
+ this.xcomp = x;
+ this.ycomp = y;
+ this.offset = this.cumulativeOffset(element);
+
+ return (y >= this.offset[1] &&
+ y < this.offset[1] + element.offsetHeight &&
+ x >= this.offset[0] &&
+ x < this.offset[0] + element.offsetWidth);
+ },
+
+ withinIncludingScrolloffsets: function(element, x, y) {
+ var offsetcache = this.realOffset(element);
+
+ this.xcomp = x + offsetcache[0] - this.deltaX;
+ this.ycomp = y + offsetcache[1] - this.deltaY;
+ this.offset = this.cumulativeOffset(element);
+
+ return (this.ycomp >= this.offset[1] &&
+ this.ycomp < this.offset[1] + element.offsetHeight &&
+ this.xcomp >= this.offset[0] &&
+ this.xcomp < this.offset[0] + element.offsetWidth);
+ },
+
+ // within must be called directly before
+ overlap: function(mode, element) {
+ if (!mode) return 0;
+ if (mode == 'vertical')
+ return ((this.offset[1] + element.offsetHeight) - this.ycomp) /
+ element.offsetHeight;
+ if (mode == 'horizontal')
+ return ((this.offset[0] + element.offsetWidth) - this.xcomp) /
+ element.offsetWidth;
+ },
+
+ clone: function(source, target) {
+ source = $(source);
+ target = $(target);
+ target.style.position = 'absolute';
+ var offsets = this.cumulativeOffset(source);
+ target.style.top = offsets[1] + 'px';
+ target.style.left = offsets[0] + 'px';
+ target.style.width = source.offsetWidth + 'px';
+ target.style.height = source.offsetHeight + 'px';
+ }
+}
diff --git a/src/site/src/documentation/skins/common/skinconf.xsl b/src/site/src/documentation/skins/common/skinconf.xsl
new file mode 100644
index 0000000..5d11320
--- /dev/null
+++ b/src/site/src/documentation/skins/common/skinconf.xsl
@@ -0,0 +1,238 @@
+<?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.
+-->
+<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
+ <xsl:template match="skinconfig">
+ <xsl:copy>
+ <xsl:if test="not(disable-print-link)">
+ <disable-print-link>true</disable-print-link>
+ </xsl:if>
+ <xsl:if test="not(disable-pdf-link)">
+ <disable-pdf-link>true</disable-pdf-link>
+ </xsl:if>
+ <xsl:if test="not(disable-txt-link)">
+ <disable-txt-link>true</disable-txt-link>
+ </xsl:if>
+ <xsl:if test="not(disable-pod-link)">
+ <disable-pod-link>true</disable-pod-link>
+ </xsl:if>
+ <xsl:if test="not(disable-xml-link)">
+ <disable-xml-link>true</disable-xml-link>
+ </xsl:if>
+ <xsl:if test="not(disable-external-link-image)">
+ <disable-external-link-image>false</disable-external-link-image>
+ </xsl:if>
+ <xsl:if test="not(disable-compliance-links)">
+ <disable-compliance-links>false</disable-compliance-links>
+ </xsl:if>
+ <xsl:if test="not(obfuscate-mail-links)">
+ <obfuscate-mail-links>true</obfuscate-mail-links>
+ </xsl:if>
+ <xsl:if test="not(obfuscate-mail-value)">
+ <obfuscate-mail-value>.at.</obfuscate-mail-value>
+ </xsl:if>
+ <xsl:if test="not(disable-font-script)">
+ <disable-font-script>true</disable-font-script>
+ </xsl:if>
+<!--
+ <xsl:if test="not(project-name)">
+ <project-name>MyProject</project-name>
+ </xsl:if>
+ <xsl:if test="not(project-description)">
+ <project-description>MyProject Description</project-description>
+ </xsl:if>
+ <xsl:if test="not(project-url)">
+ <project-url>http://myproj.mygroup.org/</project-url>
+ </xsl:if>
+ <xsl:if test="not(project-logo)">
+ <project-logo>images/project.png</project-logo>
+ </xsl:if>
+ <xsl:if test="not(group-name)">
+ <group-name>MyGroup</group-name>
+ </xsl:if>
+ <xsl:if test="not(group-description)">
+ <group-description>MyGroup Description</group-description>
+ </xsl:if>
+ <xsl:if test="not(group-url)">
+ <group-url>http://mygroup.org</group-url>
+ </xsl:if>
+ <xsl:if test="not(group-logo)">
+ <group-logo>images/group.png</group-logo>
+ </xsl:if>
+ <xsl:if test="not(host-url)">
+ <host-url/>
+ </xsl:if>
+ <xsl:if test="not(host-logo)">
+ <host-logo/>
+ </xsl:if>
+ <xsl:if test="not(year)">
+ <year>2006</year>
+ </xsl:if>
+ <xsl:if test="not(vendor)">
+ <vendor>The Acme Software Foundation.</vendor>
+ </xsl:if>
+ -->
+ <xsl:if test="not(trail)">
+ <trail>
+ <link1 name="" href=""/>
+ <link2 name="" href=""/>
+ <link3 name="" href=""/>
+ </trail>
+ </xsl:if>
+ <xsl:if test="not(toc)">
+ <toc level="2" location="page"/>
+ </xsl:if>
+ <xsl:if test="not(pdf/page-numbering-format)">
+ <pdf>
+ <page-numbering-format>Page 1</page-numbering-format>
+ </pdf>
+ </xsl:if>
+ <xsl:if test="not(pdf/show-external-urls)">
+ <pdf>
+ <show-external-urls>true</show-external-urls>
+ </pdf>
+ </xsl:if>
+<!--
+ <xsl:if test="not(colors)">
+ <colors>
+ <color name="header" value="#294563"/>
+
+ <color name="tab-selected" value="#4a6d8c"/>
+ <color name="tab-unselected" value="#b5c7e7"/>
+ <color name="subtab-selected" value="#4a6d8c"/>
+ <color name="subtab-unselected" value="#4a6d8c"/>
+
+ <color name="heading" value="#294563"/>
+ <color name="subheading" value="#4a6d8c"/>
+
+ <color name="navstrip" value="#cedfef"/>
+ <color name="toolbox" value="#294563"/>
+
+ <color name="menu" value="#4a6d8c"/>
+ <color name="dialog" value="#4a6d8c"/>
+
+ <color name="body" value="#ffffff"/>
+
+ <color name="table" value="#7099C5"/>
+ <color name="table-cell" value="#f0f0ff"/>
+ <color name="highlight" value="#ffff00"/>
+ <color name="fixme" value="#c60"/>
+ <color name="note" value="#069"/>
+
+ <color name="warning" value="#900"/>
+ <color name="code" value="#CFDCED"/>
+
+ <color name="footer" value="#cedfef"/>
+ </colors>
+ </xsl:if>
+-->
+ <xsl:if test="not(extra-css)">
+ <extra-css/>
+ </xsl:if>
+ <xsl:if test="not(credits)">
+ <credits>
+ <credit>
+ <name>Built with Apache Forrest</name>
+ <url>http://forrest.apache.org/</url>
+ <image>images/built-with-forrest-button.png</image>
+ <width>88</width>
+ <height>31</height>
+ </credit>
+<!-- A credit with @role='pdf' will have its name and url displayed in the
+ PDF page's footer. -->
+ </credits>
+ </xsl:if>
+ <xsl:copy-of select="@*"/>
+ <xsl:copy-of select="node()"/>
+<!--
+ <xsl:copy-of select="node()[not(name(.)='colors')]"/>
+ <xsl:apply-templates select="colors"/>-->
+ </xsl:copy>
+ </xsl:template>
+<!--
+ <xsl:template match="colors">
+ <colors>
+ <xsl:if test="not(color[@name='header'])">
+ <color name="header" value="#294563"/>
+ </xsl:if>
+ <xsl:if test="not(color[@name='tab-selected'])">
+ <color name="tab-selected" value="#4a6d8c"/>
+ </xsl:if>
+ <xsl:if test="not(color[@name='tab-unselected'])">
+ <color name="tab-unselected" value="#b5c7e7"/>
+ </xsl:if>
+ <xsl:if test="not(color[@name='subtab-selected'])">
+ <color name="subtab-selected" value="#4a6d8c"/>
+ </xsl:if>
+ <xsl:if test="not(color[@name='subtab-unselected'])">
+ <color name="subtab-unselected" value="#4a6d8c"/>
+ </xsl:if>
+ <xsl:if test="not(color[@name='heading'])">
+ <color name="heading" value="#294563"/>
+ </xsl:if>
+ <xsl:if test="not(color[@name='subheading'])">
+ <color name="subheading" value="#4a6d8c"/>
+ </xsl:if>
+ <xsl:if test="not(color[@name='navstrip'])">
+ <color name="navstrip" value="#cedfef"/>
+ </xsl:if>
+ <xsl:if test="not(color[@name='toolbox'])">
+ <color name="toolbox" value="#294563"/>
+ </xsl:if>
+ <xsl:if test="not(color[@name='menu'])">
+ <color name="menu" value="#4a6d8c"/>
+ </xsl:if>
+ <xsl:if test="not(color[@name='dialog'])">
+ <color name="dialog" value="#4a6d8c"/>
+ </xsl:if>
+ <xsl:if test="not(color[@name='body'])">
+ <color name="body" value="#ffffff"/>
+ </xsl:if>
+ <xsl:if test="not(color[@name='table'])">
+ <color name="table" value="#7099C5"/>
+ </xsl:if>
+ <xsl:if test="not(color[@name='table-cell'])">
+ <color name="table-cell" value="#f0f0ff"/>
+ </xsl:if>
+ <xsl:if test="not(color[@name='highlight'])">
+ <color name="highlight" value="#yellow"/>
+ </xsl:if>
+ <xsl:if test="not(color[@name='fixme'])">
+ <color name="fixme" value="#c60"/>
+ </xsl:if>
+ <xsl:if test="not(color[@name='note'])">
+ <color name="note" value="#069"/>
+ </xsl:if>
+ <xsl:if test="not(color[@name='warning'])">
+ <color name="warning" value="#900"/>
+ </xsl:if>
+ <xsl:if test="not(color[@name='code'])">
+ <color name="code" value="#CFDCED"/>
+ </xsl:if>
+ <xsl:if test="not(color[@name='footer'])">
+ <color name="footer" value="#cedfef"/>
+ </xsl:if>
+
+ <xsl:copy>
+ <xsl:copy-of select="@*"/>
+ <xsl:copy-of select="node()[name(.)='color']"/>
+ </xsl:copy>
+
+ </colors>
+ </xsl:template>
+-->
+</xsl:stylesheet>
diff --git a/src/site/src/documentation/skins/common/translations/CommonMessages_de.xml b/src/site/src/documentation/skins/common/translations/CommonMessages_de.xml
new file mode 100644
index 0000000..bc46119
--- /dev/null
+++ b/src/site/src/documentation/skins/common/translations/CommonMessages_de.xml
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<!--
+ 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.
+-->
+<catalogue>
+ <message key="Font size:">Schriftgrösse:</message>
+ <message key="Last Published:">Zuletzt veröffentlicht:</message>
+ <message key="Search">Suche:</message>
+ <message key="Search the site with">Suche auf der Seite mit</message>
+</catalogue>
diff --git a/src/site/src/documentation/skins/common/translations/CommonMessages_en_US.xml b/src/site/src/documentation/skins/common/translations/CommonMessages_en_US.xml
new file mode 100644
index 0000000..88dfe14
--- /dev/null
+++ b/src/site/src/documentation/skins/common/translations/CommonMessages_en_US.xml
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<!--
+ 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.
+-->
+<catalogue>
+ <message key="Font size:">Font size:</message>
+ <message key="Last Published:">Last Published:</message>
+ <message key="Search">Search</message>
+ <message key="Search the site with">Search site with</message>
+</catalogue>
diff --git a/src/site/src/documentation/skins/common/translations/CommonMessages_es.xml b/src/site/src/documentation/skins/common/translations/CommonMessages_es.xml
new file mode 100644
index 0000000..63be671
--- /dev/null
+++ b/src/site/src/documentation/skins/common/translations/CommonMessages_es.xml
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<!--
+ 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.
+-->
+<catalogue>
+ <message key="Font size:">Tamaño del texto:</message>
+ <message key="Last Published:">Fecha de publicación:</message>
+ <message key="Search">Buscar</message>
+ <message key="Search the site with">Buscar en</message>
+</catalogue>
diff --git a/src/site/src/documentation/skins/common/translations/CommonMessages_fr.xml b/src/site/src/documentation/skins/common/translations/CommonMessages_fr.xml
new file mode 100644
index 0000000..622569a
--- /dev/null
+++ b/src/site/src/documentation/skins/common/translations/CommonMessages_fr.xml
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<!--
+ 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.
+-->
+<catalogue>
+ <message key="Font size:">Taille :</message>
+ <message key="Last Published:">Dernière publication :</message>
+ <message key="Search">Rechercher</message>
+ <message key="Search the site with">Rechercher sur le site avec</message>
+</catalogue>
diff --git a/src/site/src/documentation/skins/common/xslt/fo/document-to-fo.xsl b/src/site/src/documentation/skins/common/xslt/fo/document-to-fo.xsl
new file mode 100644
index 0000000..6bae24b
--- /dev/null
+++ b/src/site/src/documentation/skins/common/xslt/fo/document-to-fo.xsl
@@ -0,0 +1,1014 @@
+<?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.
+-->
+<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
+ xmlns:fo="http://www.w3.org/1999/XSL/Format"
+ version="1.0">
+<!-- left, justify, right -->
+ <xsl:variable name="text-align" select="string(//skinconfig/pdf/page/@text-align)"/>
+<!-- print URL of external links -->
+ <xsl:variable name="show-external-urls" select="//skinconfig/pdf/show-external-urls"/>
+<!-- Get the section depth to use when generating the minitoc (default is 2) -->
+ <xsl:variable name="toc-max-depth" select="number(//skinconfig/toc/@max-depth)"/>
+<!-- The page size to be used -->
+ <xsl:variable name="pagesize"
+ select="string(//skinconfig/pdf/page/@size)"/>
+<!-- The page orientation ("portrait" or "landscape") -->
+ <xsl:variable name="pageorientation"
+ select="string(//skinconfig/pdf/page/@orientation)"/>
+<!-- Double-sided printing toggle -->
+ <xsl:variable name="doublesided"
+ select="string(//skinconfig/pdf/margins/@double-sided)"/>
+<!-- The top page margin -->
+ <xsl:variable name="topmargin"
+ select="string(//skinconfig/pdf/margins/top)"/>
+<!-- The bottom page margin -->
+ <xsl:variable name="bottommargin"
+ select="string(//skinconfig/pdf/margins/bottom)"/>
+<!-- The inner page margin (always the left margin if
+ double-sided printing is off, alternating between left and right if
+ it's on) -->
+ <xsl:variable name="innermargin"
+ select="string(//skinconfig/pdf/margins/inner)"/>
+<!-- The outer page margin (always the right margin if
+ double-sided printing is off, alternating between right and left if
+ it's on)-->
+ <xsl:variable name="outermargin"
+ select="string(//skinconfig/pdf/margins/outer)"/>
+ <xsl:param name="numbersections" select="'true'"/>
+<!-- page breaks after TOC and each page if an aggregate document -->
+ <xsl:variable name="page-break-top-sections" select="'true'"/>
+<!-- page numbering format -->
+ <xsl:variable name="page-numbering-format" select="string(//skinconfig/pdf/page-numbering-format)"/>
+<!-- Section depth at which we stop numbering and just indent -->
+ <xsl:param name="numbering-max-depth" select="'3'"/>
+ <xsl:param name="imagesdir" select="."/>
+ <xsl:param name="xmlbasedir"/>
+ <xsl:include href="pdfoutline.xsl"/>
+ <xsl:include href="footerinfo.xsl"/>
+<!-- Determine page height for various page sizes (US Letter portrait
+ is the default) -->
+<!-- FIXME: JJP:would this be better of a file? -->
+ <xsl:variable name="pageheight">
+ <xsl:choose>
+ <xsl:when test="$pageorientation = 'landscape'">
+ <xsl:choose>
+ <xsl:when test="$pagesize = 'a0'">841mm</xsl:when>
+ <xsl:when test="$pagesize = 'a1'">594mm</xsl:when>
+ <xsl:when test="$pagesize = 'a2'">420mm</xsl:when>
+ <xsl:when test="$pagesize = 'a3'">297mm</xsl:when>
+ <xsl:when test="$pagesize = 'a4'">210mm</xsl:when>
+ <xsl:when test="$pagesize = 'a5'">148mm</xsl:when>
+ <xsl:when test="$pagesize = 'executive'">7.25in</xsl:when>
+ <xsl:when test="$pagesize = 'folio'">8.5in</xsl:when>
+ <xsl:when test="$pagesize = 'ledger'">11in</xsl:when>
+ <xsl:when test="$pagesize = 'legal'">8.5in</xsl:when>
+ <xsl:when test="$pagesize = 'letter'">8.5in</xsl:when>
+ <xsl:when test="$pagesize = 'quarto'">8.5in</xsl:when>
+ <xsl:when test="$pagesize = 'tabloid'">11in</xsl:when>
+ <xsl:otherwise>8.5in</xsl:otherwise>
+ </xsl:choose>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:choose>
+ <xsl:when test="$pagesize = 'a0'">1189mm</xsl:when>
+ <xsl:when test="$pagesize = 'a1'">841mm</xsl:when>
+ <xsl:when test="$pagesize = 'a2'">594mm</xsl:when>
+ <xsl:when test="$pagesize = 'a3'">420mm</xsl:when>
+ <xsl:when test="$pagesize = 'a4'">297mm</xsl:when>
+ <xsl:when test="$pagesize = 'a5'">210mm</xsl:when>
+ <xsl:when test="$pagesize = 'executive'">10.5in</xsl:when>
+ <xsl:when test="$pagesize = 'folio'">13in</xsl:when>
+ <xsl:when test="$pagesize = 'ledger'">17in</xsl:when>
+ <xsl:when test="$pagesize = 'legal'">14in</xsl:when>
+ <xsl:when test="$pagesize = 'quarto'">10.83in</xsl:when>
+ <xsl:when test="$pagesize = 'tabloid'">17in</xsl:when>
+ <xsl:otherwise>11in</xsl:otherwise>
+ </xsl:choose>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:variable>
+<!-- Determine page width for various page sizes (US Letter portrait
+ is the default) -->
+ <xsl:variable name="pagewidth">
+ <xsl:choose>
+ <xsl:when test="$pageorientation = 'landscape'">
+ <xsl:choose>
+ <xsl:when test="$pagesize = 'a0'">1189mm</xsl:when>
+ <xsl:when test="$pagesize = 'a1'">841mm</xsl:when>
+ <xsl:when test="$pagesize = 'a2'">594mm</xsl:when>
+ <xsl:when test="$pagesize = 'a3'">420mm</xsl:when>
+ <xsl:when test="$pagesize = 'a4'">297mm</xsl:when>
+ <xsl:when test="$pagesize = 'a5'">210mm</xsl:when>
+ <xsl:when test="$pagesize = 'executive'">10.5in</xsl:when>
+ <xsl:when test="$pagesize = 'folio'">13in</xsl:when>
+ <xsl:when test="$pagesize = 'ledger'">17in</xsl:when>
+ <xsl:when test="$pagesize = 'legal'">14in</xsl:when>
+ <xsl:when test="$pagesize = 'quarto'">10.83in</xsl:when>
+ <xsl:when test="$pagesize = 'tabloid'">17in</xsl:when>
+ <xsl:otherwise>11in</xsl:otherwise>
+ </xsl:choose>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:choose>
+ <xsl:when test="$pagesize = 'a0'">841mm</xsl:when>
+ <xsl:when test="$pagesize = 'a1'">594mm</xsl:when>
+ <xsl:when test="$pagesize = 'a2'">420mm</xsl:when>
+ <xsl:when test="$pagesize = 'a3'">297mm</xsl:when>
+ <xsl:when test="$pagesize = 'a4'">210mm</xsl:when>
+ <xsl:when test="$pagesize = 'a5'">148mm</xsl:when>
+ <xsl:when test="$pagesize = 'executive'">7.25in</xsl:when>
+ <xsl:when test="$pagesize = 'folio'">8.5in</xsl:when>
+ <xsl:when test="$pagesize = 'ledger'">11in</xsl:when>
+ <xsl:when test="$pagesize = 'legal'">8.5in</xsl:when>
+ <xsl:when test="$pagesize = 'letter'">8.5in</xsl:when>
+ <xsl:when test="$pagesize = 'quarto'">8.5in</xsl:when>
+ <xsl:when test="$pagesize = 'tabloid'">11in</xsl:when>
+ <xsl:otherwise>8.5in</xsl:otherwise>
+ </xsl:choose>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:variable>
+ <xsl:template match="/">
+ <fo:root xmlns:fo="http://www.w3.org/1999/XSL/Format">
+ <fo:layout-master-set>
+ <fo:simple-page-master master-name="first-page"
+ page-height="{$pageheight}"
+ page-width="{$pagewidth}"
+ margin-top="{$topmargin}"
+ margin-bottom="{$bottommargin}"
+ margin-left="{$innermargin}"
+ margin-right="{$outermargin}">
+ <fo:region-body
+ margin-top="0.5in"
+ margin-bottom=".5in"/>
+ <fo:region-after
+ region-name="first-footer"
+ extent=".5in"
+ display-align="before"/>
+ </fo:simple-page-master>
+ <fo:simple-page-master master-name="even-page"
+ page-height="{$pageheight}"
+ page-width="{$pagewidth}"
+ margin-top="{$topmargin}"
+ margin-bottom="{$bottommargin}">
+ <xsl:choose>
+ <xsl:when test="$doublesided = 'true'">
+ <xsl:attribute name="margin-left">
+ <xsl:value-of select="$outermargin"/>
+ </xsl:attribute>
+ <xsl:attribute name="margin-right">
+ <xsl:value-of select="$innermargin"/>
+ </xsl:attribute>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:attribute name="margin-left">
+ <xsl:value-of select="$innermargin"/>
+ </xsl:attribute>
+ <xsl:attribute name="margin-right">
+ <xsl:value-of select="$outermargin"/>
+ </xsl:attribute>
+ </xsl:otherwise>
+ </xsl:choose>
+ <fo:region-before
+ region-name="even-header"
+ extent="0.5in"
+ border-bottom="0.5pt solid"/>
+ <fo:region-body
+ margin-top="0.5in"
+ margin-bottom=".5in"/>
+ <fo:region-after
+ region-name="even-footer"
+ extent=".5in"
+ display-align="before"/>
+ </fo:simple-page-master>
+ <fo:simple-page-master master-name="odd-page"
+ page-height="{$pageheight}"
+ page-width="{$pagewidth}"
+ margin-top="{$topmargin}"
+ margin-bottom="{$bottommargin}"
+ margin-left="{$innermargin}"
+ margin-right="{$outermargin}">
+ <fo:region-before
+ region-name="odd-header"
+ extent="0.5in"
+ border-bottom="0.5pt solid"/>
+ <fo:region-body
+ margin-top="0.5in"
+ margin-bottom=".5in"/>
+ <fo:region-after
+ region-name="odd-footer"
+ extent=".5in"
+ display-align="before"/>
+ </fo:simple-page-master>
+ <fo:page-sequence-master master-name="book">
+ <fo:repeatable-page-master-alternatives>
+ <fo:conditional-page-master-reference
+ page-position="first"
+ master-reference="first-page"/>
+ <fo:conditional-page-master-reference
+ odd-or-even="odd"
+ master-reference="odd-page"/>
+ <fo:conditional-page-master-reference
+ odd-or-even="even"
+ master-reference="even-page"/>
+ </fo:repeatable-page-master-alternatives>
+ </fo:page-sequence-master>
+ </fo:layout-master-set>
+ <xsl:apply-templates select="/site/document" mode="outline"/>
+ <fo:page-sequence master-reference="book">
+ <xsl:apply-templates select="/site/document"/>
+ </fo:page-sequence>
+ </fo:root>
+ </xsl:template>
+ <xsl:template match="document">
+ <fo:title>
+ <xsl:value-of select="header/title"/>
+ </fo:title>
+ <fo:static-content flow-name="first-footer">
+ <fo:block
+ border-top="0.25pt solid"
+ padding-before="6pt"
+ text-align="center">
+ <xsl:apply-templates select="footer"/>
+ </fo:block>
+<!-- don't list page number on first page if it's contents is just the TOC -->
+ <xsl:if test="not($toc-max-depth > 0 and $page-break-top-sections)">
+ <xsl:call-template name="insertPageNumber">
+ <xsl:with-param name="text-align">start</xsl:with-param>
+ </xsl:call-template>
+ </xsl:if>
+ <xsl:call-template name="info"/>
+ </fo:static-content>
+ <fo:static-content flow-name="even-header">
+ <fo:block
+ font-size="70%"
+ text-align="end"
+ font-style="italic">
+ <xsl:value-of select="header/title"/>
+ </fo:block>
+ </fo:static-content>
+ <fo:static-content flow-name="even-footer">
+ <fo:block
+ border-top="0.25pt solid"
+ padding-before="6pt"
+ text-align="center">
+ <xsl:apply-templates select="footer"/>
+ </fo:block>
+ <xsl:call-template name="insertPageNumber">
+ <xsl:with-param name="text-align">end</xsl:with-param>
+ </xsl:call-template>
+ <xsl:call-template name="info"/>
+ </fo:static-content>
+ <fo:static-content flow-name="odd-header">
+ <fo:block
+ font-size="70%"
+ text-align="start"
+ font-style="italic">
+ <xsl:value-of select="header/title"/>
+ </fo:block>
+ </fo:static-content>
+ <fo:static-content flow-name="odd-footer">
+ <fo:block
+ border-top="0.25pt solid"
+ padding-before="6pt"
+ text-align="center">
+ <xsl:apply-templates select="footer"/>
+ </fo:block>
+ <xsl:call-template name="insertPageNumber">
+ <xsl:with-param name="text-align">start</xsl:with-param>
+ </xsl:call-template>
+ <xsl:call-template name="info"/>
+ </fo:static-content>
+ <fo:flow flow-name="xsl-region-body">
+ <fo:block
+ padding-before="24pt"
+ padding-after="24pt"
+ font-size="24pt"
+ font-weight="bold"
+ id="{generate-id()}">
+ <xsl:value-of select="header/title"/>
+ </fo:block>
+ <fo:block
+ text-align="{$text-align}"
+ padding-before="18pt"
+ padding-after="18pt">
+ <xsl:apply-templates/>
+ </fo:block>
+<!-- Total number of pages calculation... -->
+ <fo:block id="term"/>
+ </fo:flow>
+ </xsl:template>
+ <xsl:template match="abstract">
+ <fo:block
+ font-size="12pt"
+ text-align="center"
+ space-before="20pt"
+ space-after="25pt"
+ width="7.5in"
+ font-family="serif"
+ font-style="italic">
+ <xsl:call-template name="insertPageBreaks"/>
+ <xsl:apply-templates/>
+ </fo:block>
+ </xsl:template>
+ <xsl:template match="notice">
+ <fo:block
+ font-size="10pt"
+ text-align="left"
+ space-before="20pt"
+ width="7.5in"
+ font-family="serif"
+ border-top="0.25pt solid"
+ border-bottom="0.25pt solid"
+ padding-before="6pt"
+ padding-after="6pt">
+ <xsl:call-template name="insertPageBreaks"/>
+<!-- insert i18n stuff here -->
+ NOTICE: <xsl:apply-templates/>
+ </fo:block>
+ </xsl:template>
+ <xsl:template match="anchor">
+ <fo:block id="{@id}"/>
+ <xsl:apply-templates/>
+ </xsl:template>
+ <xsl:template match="section">
+ <xsl:param name="level">0</xsl:param>
+ <xsl:variable name="size">
+<!-- 14pt for level 1 12pt for level 2 -->
+ <xsl:value-of select="14-number($level)"/>
+ </xsl:variable>
+ <xsl:variable name="background-color" select="//skinconfig/colors/color[@name='body']/@value"/>
+ <xsl:variable name="heading-color" select="//skinconfig/colors/color[@name='subheading']/@value"/>
+ <xsl:variable name="heading-type" select="//skinconfig/headings/@type"/>
+ <fo:block
+ font-family="serif"
+ font-size="{$size}pt"
+ font-weight="bold"
+ space-before="12pt"
+ space-after="4pt">
+ <xsl:call-template name="insertPageBreaks"/>
+ <xsl:if test="$heading-type = 'boxed'">
+ <xsl:attribute name="background-color">
+ <xsl:value-of select="$heading-color"/>
+ </xsl:attribute>
+ </xsl:if>
+ <xsl:attribute name="id">
+ <xsl:choose>
+ <xsl:when test="normalize-space(@id)!=''">
+ <xsl:value-of select="@id"/>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:value-of select="generate-id()"/>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:attribute>
+ <xsl:if test="$numbersections = 'true' and number($level) < $numbering-max-depth+1">
+ <xsl:number format="1.1.1.1.1.1.1" count="section" level="multiple"/>
+<xsl:text>. </xsl:text>
+ </xsl:if>
+<!-- For sections 4 or more nestings deep, indent instead of number -->
+ <xsl:if test="number($level) > $numbering-max-depth+1">
+ <xsl:attribute name="start-indent">
+ <xsl:value-of select="4+number($level)"/>
+<xsl:text>pt</xsl:text>
+ </xsl:attribute>
+ </xsl:if>
+ <xsl:value-of select="title"/>
+ </fo:block>
+ <xsl:if test="$heading-type = 'underlined'">
+<!-- The non-breaking space in this block is required, otherwise
+ the block won't be rendered at all. -->
+ <fo:block
+ font-family="serif"
+ font-size="{10 div (number($level) +1 )}pt"
+ background-color="{$heading-color}"> </fo:block>
+ </xsl:if>
+ <fo:block
+ background-color="{$background-color}">
+ <xsl:apply-templates>
+ <xsl:with-param name="level" select="number($level)+1"/>
+ </xsl:apply-templates>
+ </fo:block>
+ </xsl:template>
+ <xsl:template match="title">
+<!-- do nothing as titles are handled in their parent templates -->
+ </xsl:template>
+ <xsl:template match="subtitle">
+ <xsl:param name="level">0</xsl:param>
+ <xsl:variable name="size" select="16-(number($level)*1.5)"/>
+ <fo:block
+ font-weight="bold"
+ font-size="{$size}pt">
+ <xsl:call-template name="insertPageBreaks"/>
+ <xsl:apply-templates/>
+ </fo:block>
+ </xsl:template>
+ <xsl:template match="authors">
+ <fo:block
+ space-before="20pt"
+ font-weight="bold"
+ font-size="9pt">
+ <xsl:call-template name="insertPageBreaks"/>
+<!-- insert i18n stuff here -->
+ by
+ <xsl:for-each select="person">
+ <xsl:value-of select="@name"/>
+ <xsl:if test="not(position() = last())">, </xsl:if>
+ </xsl:for-each>
+ </fo:block>
+ </xsl:template>
+ <xsl:template match="p">
+ <xsl:choose>
+ <xsl:when test="ancestor::li and not(preceding-sibling::*)">
+ <fo:block
+ space-after="4pt"
+ font-family="serif">
+ <xsl:call-template name="insertPageBreaks"/>
+ <xsl:apply-templates/>
+ </fo:block>
+ </xsl:when>
+ <xsl:otherwise>
+ <fo:block
+ space-before="4pt"
+ space-after="4pt"
+ font-family="serif">
+ <xsl:call-template name="insertPageBreaks"/>
+ <xsl:apply-templates/>
+ </fo:block>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:template>
+ <xsl:template match="source">
+ <xsl:variable name="color" select="//skinconfig/colors/color[@name='code']/@value"/>
+ <fo:block
+ font-family="monospace"
+ font-size="10pt"
+ background-color="{$color}"
+ white-space-collapse="false"
+ linefeed-treatment="preserve"
+ white-space-treatment="preserve"
+ wrap-option="wrap"
+ text-align="start">
+ <xsl:call-template name="insertPageBreaks"/>
+ <xsl:apply-templates/>
+ </fo:block>
+ </xsl:template>
+ <xsl:template match="ol|ul">
+ <fo:list-block
+ provisional-distance-between-starts="18pt"
+ provisional-label-separation="3pt"
+ text-align="start">
+ <xsl:apply-templates/>
+ </fo:list-block>
+ </xsl:template>
+ <xsl:template match="ol/li">
+ <fo:list-item>
+ <xsl:if test="not(following-sibling::li[1])">
+ <xsl:attribute name="space-after">6pt"</xsl:attribute>
+ </xsl:if>
+ <fo:list-item-label
+ end-indent="label-end()">
+ <fo:block>
+ <xsl:number format="1."/>
+ </fo:block>
+ </fo:list-item-label>
+ <fo:list-item-body
+ start-indent="body-start()">
+ <fo:block
+ font-family="serif">
+ <xsl:apply-templates/>
+ </fo:block>
+ </fo:list-item-body>
+ </fo:list-item>
+ </xsl:template>
+<!-- Emulate browser handling of these invalid combinations that our DTD
+ unfortunately allows -->
+ <xsl:template match="ul/ul | ul/ol | ol/ul | ol/ol">
+ <fo:list-item>
+ <fo:list-item-label end-indent="label-end()">
+ <fo:block></fo:block>
+ </fo:list-item-label>
+ <fo:list-item-body start-indent="body-start()">
+ <fo:block font-family="serif">
+ <xsl:apply-templates/>
+ </fo:block>
+ </fo:list-item-body>
+ </fo:list-item>
+ </xsl:template>
+ <xsl:template match="ul/li">
+ <fo:list-item>
+ <xsl:if test="not(following-sibling::li[1])">
+ <xsl:attribute name="space-after">6pt</xsl:attribute>
+ </xsl:if>
+ <fo:list-item-label end-indent="label-end()">
+ <fo:block>•</fo:block>
+ </fo:list-item-label>
+ <fo:list-item-body start-indent="body-start()">
+ <fo:block
+ font-family="serif">
+ <xsl:apply-templates/>
+ </fo:block>
+ </fo:list-item-body>
+ </fo:list-item>
+ </xsl:template>
+ <xsl:template match="dl">
+ <fo:list-block
+ provisional-distance-between-starts="18pt"
+ provisional-label-separation="3pt"
+ text-align="start">
+ <xsl:apply-templates/>
+ </fo:list-block>
+ </xsl:template>
+ <xsl:template match="dt">
+ <fo:list-item>
+ <fo:list-item-label end-indent="label-end()">
+ <fo:block></fo:block>
+ </fo:list-item-label>
+ <fo:list-item-body start-indent="body-start()">
+ <fo:block
+ font-weight="bold">
+ <xsl:apply-templates/>
+ </fo:block>
+ </fo:list-item-body>
+ </fo:list-item>
+ </xsl:template>
+ <xsl:template match="dd">
+ <fo:list-item>
+ <fo:list-item-label end-indent="label-end()">
+ <fo:block></fo:block>
+ </fo:list-item-label>
+ <fo:list-item-body start-indent="body-start()">
+ <fo:block>
+ <xsl:apply-templates/>
+ </fo:block>
+ </fo:list-item-body>
+ </fo:list-item>
+ </xsl:template>
+ <xsl:template match="strong">
+ <fo:inline font-weight="bold">
+ <xsl:apply-templates/>
+ </fo:inline>
+ </xsl:template>
+ <xsl:template match="em">
+ <fo:inline font-style="italic">
+ <xsl:apply-templates/>
+ </fo:inline>
+ </xsl:template>
+ <xsl:template match="code">
+ <fo:inline font-family="monospace">
+ <xsl:apply-templates/>
+ </fo:inline>
+ </xsl:template>
+ <xsl:template match="warning">
+ <xsl:variable name="color" select="//skinconfig/colors/color[@name='warning']/@value"/>
+ <fo:block
+ margin-left="0.25in"
+ margin-right="0.25in"
+ font-weight="bold"
+ font-size="10pt"
+ font-family="serif"
+ space-before="10pt"
+ border-before-style="solid"
+ border-start-style="solid"
+ border-end-style="solid"
+ border-color="{$color}"
+ background-color="{$color}"
+ color="#ffffff">
+ <xsl:call-template name="insertPageBreaks"/>
+ <xsl:choose>
+ <xsl:when test="@label">
+ <xsl:value-of select="@label"/>
+ </xsl:when>
+ <xsl:otherwise>Warning: </xsl:otherwise>
+ </xsl:choose>
+ <xsl:value-of select="title"/>
+ </fo:block>
+ <fo:block
+ margin-left="0.25in"
+ margin-right="0.25in"
+ font-family="serif"
+ font-size="8pt"
+ border-after-style="solid"
+ border-start-style="solid"
+ border-end-style="solid"
+ border-color="{$color}"
+ background-color="#fff0f0"
+ padding-start="3pt"
+ padding-end="3pt"
+ padding-before="3pt"
+ padding-after="3pt"
+ space-after="10pt">
+ <xsl:apply-templates/>
+ </fo:block>
+ </xsl:template>
+ <xsl:template match="note">
+ <xsl:variable name="color" select="//skinconfig/colors/color[@name='note']/@value"/>
+ <fo:block
+ margin-left="0.25in"
+ margin-right="0.25in"
+ font-weight="bold"
+ font-size="10pt"
+ color="#ffffff"
+ font-family="serif"
+ space-before="10pt"
+ border-before-style="solid"
+ border-start-style="solid"
+ border-end-style="solid"
+ border-color="{$color}"
+ background-color="{$color}">
+ <xsl:call-template name="insertPageBreaks"/>
+ <xsl:choose>
+ <xsl:when test="@label">
+ <xsl:value-of select="@label"/>
+ </xsl:when>
+<!-- insert i18n stuff here -->
+ <xsl:otherwise>Note: </xsl:otherwise>
+ </xsl:choose>
+ <xsl:value-of select="title"/>
+ </fo:block>
+ <fo:block
+ margin-left="0.25in"
+ margin-right="0.25in"
+ font-family="serif"
+ font-size="8pt"
+ space-after="10pt"
+ border-after-style="solid"
+ border-start-style="solid"
+ border-end-style="solid"
+ border-color="{$color}"
+ background-color="#F0F0FF"
+ padding-start="3pt"
+ padding-end="3pt"
+ padding-before="3pt"
+ padding-after="3pt">
+ <xsl:apply-templates/>
+ </fo:block>
+ </xsl:template>
+ <xsl:template match="fixme">
+ <xsl:variable name="color" select="//skinconfig/colors/color[@name='fixme']/@value"/>
+ <fo:block
+ margin-left="0.25in"
+ margin-right="0.25in"
+ font-weight="bold"
+ font-size="10pt"
+ color="#FFFFFF"
+ font-family="serif"
+ space-before="10pt"
+ border-before-style="solid"
+ border-start-style="solid"
+ border-end-style="solid"
+ border-color="{$color}"
+ background-color="{$color}">
+ <xsl:call-template name="insertPageBreaks"/>
+<!-- insert i18n stuff here -->
+ FIXME (<xsl:value-of select="@author"/>): <xsl:value-of select="title"/>
+ </fo:block>
+ <fo:block
+ margin-left="0.25in"
+ margin-right="0.25in"
+ font-family="serif"
+ font-size="8pt"
+ space-after="10pt"
+ border-after-style="solid"
+ border-start-style="solid"
+ border-end-style="solid"
+ border-color="{$color}"
+ background-color="#FFF0F0"
+ padding-start="3pt"
+ padding-end="3pt"
+ padding-before="3pt"
+ padding-after="3pt">
+ <xsl:apply-templates/>
+ </fo:block>
+ </xsl:template>
+ <xsl:template match="link|fork|jump">
+ <xsl:variable name="color" select="//skinconfig/colors/color[@name = 'body']/@link"/>
+ <xsl:choose>
+ <xsl:when test="starts-with(@href, '#')">
+ <fo:basic-link color="{$color}" text-decoration="underline" internal-destination="{substring(@href,2)}">
+ <xsl:apply-templates/>
+ </fo:basic-link>
+ </xsl:when>
+ <xsl:otherwise>
+ <fo:basic-link color="{$color}" text-decoration="underline" external-destination="{@href}">
+ <xsl:apply-templates/>
+ </fo:basic-link>
+ <xsl:if test="$show-external-urls = 'true' and @href != string(.)">
+ (<xsl:value-of select="@href"/>)
+ </xsl:if>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:template>
+ <xsl:template match="figure|img">
+ <fo:block text-align="center">
+ <xsl:call-template name="insertPageBreaks"/>
+ <xsl:if test="normalize-space(@id)!=''">
+ <xsl:attribute name="id">
+ <xsl:value-of select="@id"/>
+ </xsl:attribute>
+ </xsl:if>
+<!-- Make relative paths absolute -->
+ <xsl:variable name="imgpath">
+ <xsl:choose>
+<!-- resources image dir -->
+ <xsl:when test="starts-with(string(@src),'images/')">
+ <xsl:value-of select="concat($imagesdir,substring-after(@src,'images'))"/>
+ </xsl:when>
+ <xsl:when test="contains(string(@src),'/images/')">
+ <xsl:value-of select="concat($imagesdir,substring-after(@src,'/images'))"/>
+ </xsl:when>
+<!-- already absolute -->
+ <xsl:when test="contains(string(@src),':') or starts-with(string(@src),'/')">
+ <xsl:value-of select="@src"/>
+ </xsl:when>
+<!-- relative to document -->
+ <xsl:otherwise>
+ <xsl:value-of select="concat($xmlbasedir,@src)"/>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:variable>
+ <fo:external-graphic src="{$imgpath}">
+ <xsl:if test="@height">
+ <xsl:attribute name="height">
+ <xsl:value-of select="@height"/>
+ </xsl:attribute>
+ </xsl:if>
+ <xsl:if test="@width">
+ <xsl:attribute name="width">
+ <xsl:value-of select="@width"/>
+ </xsl:attribute>
+ </xsl:if>
+ </fo:external-graphic>
+<!-- alt text -->
+ <xsl:if test="//skinconfig/pdf/show-image-alt-text='true'">
+ <xsl:if test="normalize-space(@alt)!=''">
+ <fo:block>
+ <xsl:value-of select="@alt"/>
+ </fo:block>
+ </xsl:if>
+ </xsl:if>
+ </fo:block>
+ </xsl:template>
+ <xsl:template match="table">
+<!-- FIXME: Apache FOP must have column widths specified at present,
+ this section can be removed when this limitation is removed from Fop.
+ Unfortunately, this means that each column is a fixed width,
+ but at least the table displays! -->
+ <xsl:variable name="max-number-columns-td">
+ <xsl:for-each select="tr">
+ <xsl:sort select="count(td|th)" data-type="number"
+ order="descending"/>
+ <xsl:if test="position() = 1">
+ <xsl:value-of select="count(td|th)"/>
+ </xsl:if>
+ </xsl:for-each>
+ </xsl:variable>
+ <xsl:variable name="max-number-columns-colspan">
+ <xsl:for-each select="tr">
+ <xsl:sort select="count(td|th)" data-type="number"
+ order="descending"/>
+ <xsl:if test="position() = 1">
+ <xsl:value-of
+ select="sum(td/@colspan|th/@colspan)"/>
+ </xsl:if>
+ </xsl:for-each>
+ </xsl:variable>
+ <xsl:variable name="max-number-columns">
+ <xsl:choose>
+ <xsl:when
+ test="$max-number-columns-colspan>$max-number-columns-td">
+ <xsl:value-of
+ select="$max-number-columns-colspan"/>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:value-of select="$max-number-columns-td"/>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:variable>
+ <xsl:variable name="column-width">
+ <xsl:value-of select="6.25 div number($max-number-columns)"/>in
+ </xsl:variable>
+ <fo:table>
+ <fo:table-column>
+ <xsl:attribute name="column-width">
+ <xsl:value-of select="$column-width"/>
+ </xsl:attribute>
+ <xsl:attribute name="number-columns-repeated">
+ <xsl:value-of select="number($max-number-columns)"/>
+ </xsl:attribute>
+ </fo:table-column>
+<!-- End of hack for Fop support (if removing this hack, remember
+ you need the <fo:table> element) -->
+ <fo:table-body
+ font-size="10pt"
+ font-family="sans-serif">
+ <xsl:apply-templates select="tr"/>
+ </fo:table-body>
+ </fo:table>
+<!-- FIXME: Apache Fop does not support the caption element yet.
+ This hack will display the table caption accordingly. -->
+ <xsl:if test="caption">
+ <fo:block
+ text-align="center"
+ font-weight="bold">
+<!-- insert i18n stuff here -->
+ Table
+ <xsl:text> </xsl:text>
+ <xsl:number count="table" level="multiple"/>
+<xsl:text>: </xsl:text>
+ <xsl:value-of select="caption"/>
+ </fo:block>
+ </xsl:if>
+ </xsl:template>
+ <xsl:template match="tr">
+ <fo:table-row>
+ <xsl:apply-templates/>
+ </fo:table-row>
+ </xsl:template>
+ <xsl:template match="th">
+ <xsl:variable name="border-color" select="//skinconfig/colors/color[@name = 'table']/@value"/>
+ <xsl:variable name="background-color" select="$border-color"/>
+ <fo:table-cell
+ padding-before="4pt"
+ padding-after="4pt"
+ padding-start="4pt"
+ padding-end="4pt"
+ color="#FFFFFF"
+ background-color="{$background-color}"
+ border="1pt solid {$border-color}">
+ <xsl:attribute name="number-columns-spanned">
+ <xsl:value-of select="@colspan"/>
+ </xsl:attribute>
+ <xsl:attribute name="number-rows-spanned">
+ <xsl:value-of select="@rowspan"/>
+ </xsl:attribute>
+ <fo:block
+ text-align="center">
+ <xsl:apply-templates/>
+ </fo:block>
+ </fo:table-cell>
+ </xsl:template>
+ <xsl:template match="td">
+ <xsl:variable name="border-color" select="//skinconfig/colors/color[@name = 'table']/@value"/>
+ <xsl:variable name="background-color" select="//skinconfig/colors/color[@name = 'table-cell']/@value"/>
+ <fo:table-cell
+ padding-before="4pt"
+ padding-after="4pt"
+ padding-start="4pt"
+ padding-end="4pt"
+ background-color="{$background-color}"
+ border="1pt solid {$border-color}">
+ <xsl:attribute name="number-columns-spanned">
+ <xsl:value-of select="@colspan"/>
+ </xsl:attribute>
+ <xsl:attribute name="number-rows-spanned">
+ <xsl:value-of select="@rowspan"/>
+ </xsl:attribute>
+ <fo:block>
+ <xsl:apply-templates/>
+ </fo:block>
+ </fo:table-cell>
+ </xsl:template>
+ <xsl:template match="br">
+ <fo:block></fo:block>
+ </xsl:template>
+ <xsl:template match="legal">
+ <fo:inline
+ font-size="8pt">
+ <xsl:apply-templates/>
+ </fo:inline>
+ </xsl:template>
+ <xsl:template match="body[count(//section) != 0]">
+ <xsl:if test="$toc-max-depth > 0">
+ <fo:block font-family="serif" font-size="14pt" font-weight="bold"
+ space-after="5pt" space-before="5pt" text-align="justify" width="7.5in">
+ <xsl:call-template name="insertPageBreaks"/>
+<!-- insert i18n stuff here -->
+<xsl:text>Table of contents</xsl:text>
+ </fo:block>
+ <fo:block font-family="sans" font-size="12pt" space-after="5pt"
+ space-before="0pt" text-align="justify" width="7.5in">
+ <xsl:if test="$page-break-top-sections">
+ <xsl:attribute name="break-after">page</xsl:attribute>
+ </xsl:if>
+ <xsl:apply-templates select="section" mode="toc" />
+ </fo:block>
+ </xsl:if>
+ <xsl:apply-templates />
+ </xsl:template>
+ <xsl:template match="section" mode="toc">
+<!-- FIXME: see bug FOR-640 -->
+ <xsl:param name="depth" select="'1'"/>
+ <fo:block space-before="5pt" text-align-last="justify" start-indent=".5em" text-indent=".5em">
+ <fo:inline>
+ <xsl:variable name="id">
+ <xsl:choose>
+ <xsl:when test="normalize-space(@id)!=''">
+ <xsl:value-of select="@id"/>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:value-of select="generate-id()"/>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:variable>
+ <fo:basic-link internal-destination="{$id}">
+ <xsl:value-of select="substring('          ', 0, 2 * $depth - 1)" />
+ <fo:inline font-size="10pt">
+ <xsl:number count="section" format="1.1.1.1.1.1.1" level="multiple" />
+ </fo:inline>
+<xsl:text> </xsl:text>
+ <xsl:value-of select="title" />
+ <fo:leader leader-pattern="dots" />
+ <fo:page-number-citation ref-id="{$id}" />
+ </fo:basic-link>
+ </fo:inline>
+ <xsl:if test="$toc-max-depth > $depth">
+ <xsl:apply-templates select="section" mode="toc">
+ <xsl:with-param name="depth" select="$depth + 1"/>
+ </xsl:apply-templates>
+ </xsl:if>
+ </fo:block>
+ </xsl:template>
+<!-- ====================================================================== -->
+<!-- Local Extensions section -->
+<!-- ====================================================================== -->
+ <xsl:template match="citation">
+ <fo:inline>
+ [<xsl:value-of select="@def"/>]
+ </fo:inline>
+ </xsl:template>
+ <xsl:template match="p[@class='quote']">
+ <fo:block start-indent="1em"
+ space-before="4pt"
+ space-after="4pt"
+ background-color="#f0f0f0"
+ font-family="monospace">
+ <xsl:call-template name="insertPageBreaks"/>
+ <xsl:apply-templates/>
+ </fo:block>
+ </xsl:template>
+ <xsl:template name="insertPageBreaks">
+<!-- if marked as a 'pageBreakBefore', and we're breaking on pages, and were not the first node -->
+ <xsl:if test="contains(@class, 'pageBreakBefore') and preceding-sibling::node()">
+ <xsl:attribute name="break-before">page</xsl:attribute>
+ </xsl:if>
+<!-- if marked as a 'pageBreakAfter', and we're breaking on pages, and were not the last node -->
+ <xsl:if test="contains(@class, 'pageBreakAfter') and following-sibling::node()">
+ <xsl:attribute name="break-after">page</xsl:attribute>
+ </xsl:if>
+ </xsl:template>
+<!-- Display the document numerotation -->
+ <xsl:template name="insertPageNumber">
+ <xsl:param name="text-align" select="'start'"/>
+ <xsl:variable name="prefixe" select="substring-before($page-numbering-format,'1')"/>
+ <xsl:variable name="sep" select="substring-before(substring-after($page-numbering-format,'1'),'1')"/>
+ <xsl:variable name="postfixe">
+ <xsl:choose>
+ <xsl:when test="contains(substring-after($page-numbering-format,'1'),'1')">
+ <xsl:value-of select="substring-after(substring-after($page-numbering-format,'1'),'1')"/>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:value-of select="substring-after($page-numbering-format,'1')"/>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:variable>
+<!-- if 'page-numbering-format' contains 1 digits, the page number is displayed in the footer -->
+ <xsl:if test="contains($page-numbering-format,'1')">
+ <fo:block font-size="70%" text-align="{$text-align}">
+<!-- if the separator is not found, the total page number is skipped -->
+ <xsl:value-of select="$prefixe"/>
+ <fo:page-number/>
+ <xsl:if test="$sep != ''">
+ <xsl:value-of select="$sep"/>
+ <fo:page-number-citation ref-id="term"/>
+ </xsl:if>
+ <xsl:value-of select="$postfixe"/>
+ </fo:block>
+ </xsl:if>
+ </xsl:template>
+<!-- ====================================================================== -->
+<!-- Temporary section - subject to change on short notice -->
+<!-- ====================================================================== -->
+ <xsl:template match="//style">
+<!-- HACK: The OpenOffice.org input plugin currently produces
+ intermediate documents that contain a style element, invalid per
+ the Forrest Document DTD. This style element must be ignored
+ here. To find out why this is done this way, read the comments
+ attached to issue FOR-433. -->
+ </xsl:template>
+</xsl:stylesheet>
diff --git a/src/site/src/documentation/skins/common/xslt/fo/footerinfo.xsl b/src/site/src/documentation/skins/common/xslt/fo/footerinfo.xsl
new file mode 100644
index 0000000..c5ba5c9
--- /dev/null
+++ b/src/site/src/documentation/skins/common/xslt/fo/footerinfo.xsl
@@ -0,0 +1,70 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ 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.
+-->
+<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
+ xmlns:fo="http://www.w3.org/1999/XSL/Format"
+ version="1.0">
+<!--
+Named template to generate a short message in the PDF footer, from text in
+skinconf.xml. By default, the message is a copyright statement. If a credit
+with @role='pdf' is present, that is used instead. Eg:
+
+<credit role="pdf">
+ <name>Generated by Apache FOP 1.0-dev</name>
+ <url>http://xml.apache.org/fop/dev/</url>
+</credit>
+-->
+ <xsl:template name="info">
+ <xsl:variable name="disable-copyright-footer" select="//skinconfig/pdf/disable-copyright-footer"/>
+ <xsl:variable name="pdfcredit" select="//skinconfig/credits/credit[@role = 'pdf']"/>
+ <xsl:variable name="text">
+ <xsl:if test="$pdfcredit">
+ <xsl:value-of select="$pdfcredit/name"/>
+ </xsl:if>
+ <xsl:if test="not($pdfcredit) and not($disable-copyright-footer = 'true')">
+<xsl:text>Copyright © </xsl:text>
+ <xsl:value-of select="//skinconfig/year"/> <xsl:value-of
+ select="//skinconfig/vendor"/>
+<xsl:text> All rights reserved.</xsl:text>
+ </xsl:if>
+ </xsl:variable>
+ <xsl:variable name="url" select="$pdfcredit/url"/>
+ <fo:block-container font-style="italic" absolute-position="absolute"
+ left="0pt" top="0pt" right="6.25in" bottom="150pt"
+ font-size="10pt">
+ <xsl:if test="not($url)">
+ <fo:block text-align="center" color="lightgrey">
+ <xsl:value-of select="$text"/>
+ </fo:block>
+ </xsl:if>
+ <xsl:if test="$url">
+ <fo:block text-align="center">
+ <fo:basic-link color="lightgrey"
+ external-destination="{$url}">
+ <xsl:value-of select="$text"/>
+ </fo:basic-link>
+ </fo:block>
+ <fo:block text-align="center">
+ <fo:basic-link color="lightgrey"
+ external-destination="{$url}">
+ <xsl:value-of select="$url"/>
+ </fo:basic-link>
+ </fo:block>
+ </xsl:if>
+ </fo:block-container>
+ </xsl:template>
+</xsl:stylesheet>
diff --git a/src/site/src/documentation/skins/common/xslt/fo/pdfoutline.xsl b/src/site/src/documentation/skins/common/xslt/fo/pdfoutline.xsl
new file mode 100644
index 0000000..acdc6ac
--- /dev/null
+++ b/src/site/src/documentation/skins/common/xslt/fo/pdfoutline.xsl
@@ -0,0 +1,45 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ 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.
+-->
+<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
+ xmlns:fo="http://www.w3.org/1999/XSL/Format"
+ xmlns:fox="http://xml.apache.org/fop/extensions"
+ version="1.0">
+ <xsl:template match="document" mode="outline">
+ <xsl:apply-templates select="body/section" mode="outline"/>
+ </xsl:template>
+ <xsl:template match="section" mode="outline">
+ <fox:outline>
+ <xsl:attribute name="internal-destination">
+ <xsl:choose>
+ <xsl:when test="normalize-space(@id)!=''">
+ <xsl:value-of select="@id"/>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:value-of select="generate-id()"/>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:attribute>
+ <fox:label>
+ <xsl:number format="1.1.1.1.1.1.1" count="section" level="multiple"/>
+<xsl:text> </xsl:text>
+ <xsl:value-of select="normalize-space(title)"/>
+ </fox:label>
+ <xsl:apply-templates select="section" mode="outline"/>
+ </fox:outline>
+ </xsl:template>
+</xsl:stylesheet>
diff --git a/src/site/src/documentation/skins/common/xslt/html/book-to-menu.xsl b/src/site/src/documentation/skins/common/xslt/html/book-to-menu.xsl
new file mode 100644
index 0000000..228b57e
--- /dev/null
+++ b/src/site/src/documentation/skins/common/xslt/html/book-to-menu.xsl
@@ -0,0 +1,139 @@
+<?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.
+-->
+<!--
+book-to-menu.xsl generates the HTML menu. It outputs XML/HTML of the form:
+ <div class="menu">
+ ...
+ </div>
+which is then merged with other HTML by site-to-xhtml.xsl
+
+-->
+<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
+<!-- ================================================================ -->
+<!-- These templates SHOULD be overridden -->
+<!-- ================================================================ -->
+ <xsl:template name="selected">
+ <xsl:value-of select="@label"/>
+ </xsl:template>
+ <xsl:template name="unselected"><a href="{@href}">
+ <xsl:if test="@description">
+ <xsl:attribute name="title">
+ <xsl:value-of select="@description"/>
+ </xsl:attribute>
+ </xsl:if>
+ <xsl:value-of select="@label"/></a>
+ </xsl:template>
+ <xsl:template name="print-external">
+<!-- Use apply-imports when overriding -->
+ <xsl:value-of select="@label"/>
+ </xsl:template>
+<!-- ================================================================ -->
+<!-- These templates CAN be overridden -->
+<!-- ================================================================ -->
+<!-- Eg, if tab href is 'index.html#foo', this will be called when index.html
+ is selected -->
+ <xsl:template name="selected-anchor">
+<!-- By default, render as unselected so that it is clickable (takes user
+ to the anchor) -->
+ <xsl:call-template name="unselected"/>
+ </xsl:template>
+ <xsl:template name="unselected-anchor">
+ <xsl:call-template name="unselected"/>
+ </xsl:template>
+ <xsl:template match="book">
+ <xsl:apply-templates select="menu"/>
+ </xsl:template>
+ <xsl:template match="menu">
+ <div class="menu">
+ <xsl:call-template name="base-menu"/>
+ </div>
+ </xsl:template>
+ <xsl:template match="menu-item">
+<!-- Use apply-imports when overriding -->
+ <xsl:variable name="href-nofrag">
+ <xsl:call-template name="path-nofrag">
+ <xsl:with-param name="path" select="@href"/>
+ </xsl:call-template>
+ </xsl:variable>
+ <xsl:variable name="node-path">
+ <xsl:call-template name="normalize">
+ <xsl:with-param name="path" select="concat($dirname, $href-nofrag)"/>
+ </xsl:call-template>
+ </xsl:variable>
+ <xsl:choose>
+<!-- Compare with extensions stripped -->
+ <xsl:when test="$node-path = $path-nofrag">
+ <xsl:choose>
+ <xsl:when test="contains(@href, '#')">
+ <xsl:call-template name="selected-anchor"/>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:call-template name="selected"/>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:choose>
+ <xsl:when test="contains(@href, '#')">
+ <xsl:call-template name="unselected-anchor"/>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:call-template name="unselected"/>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:template>
+<!-- ================================================================ -->
+<!-- These templates SHOULD NOT be overridden -->
+<!-- ================================================================ -->
+ <xsl:param name="path"/>
+ <xsl:include href="pathutils.xsl"/>
+ <xsl:variable name="filename">
+ <xsl:call-template name="filename">
+ <xsl:with-param name="path" select="$path"/>
+ </xsl:call-template>
+ </xsl:variable>
+ <xsl:variable name="path-nofrag">
+ <xsl:call-template name="path-nofrag">
+ <xsl:with-param name="path" select="$path"/>
+ </xsl:call-template>
+ </xsl:variable>
+ <xsl:variable name="dirname">
+ <xsl:call-template name="dirname">
+ <xsl:with-param name="path" select="$path"/>
+ </xsl:call-template>
+ </xsl:variable>
+ <xsl:template match="external">
+ <li><xsl:choose>
+ <xsl:when test="starts-with(@href, $path-nofrag)">
+ <span class="externalSelected">
+ <xsl:call-template name="print-external"/>
+ </span>
+ </xsl:when>
+ <xsl:otherwise><a href="{@href}" target="_blank">
+ <xsl:value-of select="@label"/></a>
+ </xsl:otherwise>
+ </xsl:choose></li>
+ </xsl:template>
+ <xsl:template match="menu-item[@type='hidden']"/>
+ <xsl:template match="external[@type='hidden']"/>
+ <xsl:template name="base-menu">
+ <xsl:apply-templates/>
+ </xsl:template>
+</xsl:stylesheet>
diff --git a/src/site/src/documentation/skins/common/xslt/html/document-to-html.xsl b/src/site/src/documentation/skins/common/xslt/html/document-to-html.xsl
new file mode 100644
index 0000000..d4496e0
--- /dev/null
+++ b/src/site/src/documentation/skins/common/xslt/html/document-to-html.xsl
@@ -0,0 +1,374 @@
+<?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.
+-->
+<!--
+This stylesheet contains the majority of templates for converting documentv11
+to HTML. It renders XML as HTML in this form:
+
+ <div class="content">
+ ...
+ </div>
+
+..which site-to-xhtml.xsl then combines with HTML from the index (book-to-menu.xsl)
+and tabs (tab-to-menu.xsl) to generate the final HTML.
+
+Section handling
+ - <a name/> anchors are added if the id attribute is specified
+
+-->
+<xsl:stylesheet version="1.0"
+ xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
+ <xsl:param name="dynamic-page" select="'false'"/>
+ <xsl:param name="notoc"/>
+ <xsl:param name="path"/>
+<!-- <xsl:include href="split.xsl"/> -->
+ <xsl:include href="dotdots.xsl"/>
+ <xsl:include href="pathutils.xsl"/>
+<!-- Path to site root, eg '../../' -->
+ <xsl:variable name="root">
+ <xsl:call-template name="dotdots">
+ <xsl:with-param name="path" select="$path"/>
+ </xsl:call-template>
+ </xsl:variable>
+ <xsl:variable name="skin-img-dir" select="concat(string($root), 'skin/images')"/>
+ <xsl:template match="/">
+ <xsl:apply-templates mode="toc"/>
+ <xsl:apply-templates/>
+ </xsl:template>
+ <xsl:template match="document">
+ <div class="content">
+ <table summary="" class="title">
+ <tr>
+ <td valign="middle">
+ <xsl:if test="normalize-space(header/title)!=''">
+ <h1>
+ <xsl:value-of select="header/title"/>
+ </h1>
+ </xsl:if>
+ </td>
+ <div id="skinconf-printlink"/>
+ <xsl:if test="$dynamic-page='false'">
+ <div id="skinconf-pdflink"/>
+ <div id="skinconf-xmllink"/>
+ </xsl:if>
+ </tr>
+ </table>
+ <xsl:if test="normalize-space(header/subtitle)!=''">
+ <h3>
+ <xsl:value-of select="header/subtitle"/>
+ </h3>
+ </xsl:if>
+ <xsl:apply-templates select="header/type"/>
+ <xsl:apply-templates select="header/notice"/>
+ <xsl:apply-templates select="header/abstract"/>
+ <xsl:apply-templates select="body"/>
+ <div class="attribution">
+ <xsl:apply-templates select="header/authors"/>
+ <xsl:if test="header/authors and header/version">
+<xsl:text>; </xsl:text>
+ </xsl:if>
+ <xsl:apply-templates select="header/version"/>
+ </div>
+ </div>
+ </xsl:template>
+ <xsl:template match="body">
+ <div id="skinconf-toc-page"/>
+ <xsl:apply-templates/>
+ </xsl:template>
+<!-- Generate a <a name="..."> tag for an @id -->
+ <xsl:template match="@id">
+ <xsl:if test="normalize-space(.)!=''"><a name="{.}"/>
+ </xsl:if>
+ </xsl:template>
+ <xsl:template match="section">
+<!-- count the number of section in the ancestor-or-self axis to compute
+ the title element name later on -->
+ <xsl:variable name="sectiondepth" select="count(ancestor-or-self::section)"/><a name="{generate-id()}"/>
+ <xsl:apply-templates select="@id"/>
+<!-- generate a title element, level 1 -> h3, level 2 -> h4 and so on... -->
+ <xsl:element name="{concat('h',$sectiondepth + 2)}">
+ <xsl:value-of select="title"/>
+ <xsl:if test="$notoc='true' and $sectiondepth = 3">
+ <span style="float: right"><a href="#{@id}-menu">^</a>
+ </span>
+ </xsl:if>
+ </xsl:element>
+<!-- Indent FAQ entry text 15 pixels -->
+ <xsl:variable name="indent">
+ <xsl:choose>
+ <xsl:when test="$notoc='true' and $sectiondepth = 3">
+<xsl:text>15</xsl:text>
+ </xsl:when>
+ <xsl:otherwise>
+<xsl:text>0</xsl:text>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:variable>
+ <div style="margin-left: {$indent} ; border: 2px">
+ <xsl:apply-templates select="*[not(self::title)]"/>
+ </div>
+ </xsl:template>
+ <xsl:template match="note | warning | fixme">
+ <xsl:apply-templates select="@id"/>
+ <div>
+ <xsl:call-template name="add.class">
+ <xsl:with-param name="class">
+ <xsl:value-of select="local-name()"/>
+ </xsl:with-param>
+ </xsl:call-template>
+ <div class="label">
+ <xsl:choose>
+<!-- FIXME: i18n Transformer here -->
+ <xsl:when test="@label">
+ <xsl:value-of select="@label"/>
+ </xsl:when>
+ <xsl:when test="local-name() = 'note'">Note</xsl:when>
+ <xsl:when test="local-name() = 'warning'">Warning</xsl:when>
+ <xsl:otherwise>Fixme (<xsl:value-of select="@author"/>)</xsl:otherwise>
+ </xsl:choose>
+ </div>
+ <div class="content">
+ <xsl:apply-templates/>
+ </div>
+ </div>
+ </xsl:template>
+ <xsl:template match="notice">
+ <div class="notice">
+<!-- FIXME: i18n Transformer here -->
+<xsl:text>Notice: </xsl:text>
+ <xsl:apply-templates/>
+ </div>
+ </xsl:template>
+ <xsl:template match="link">
+ <xsl:apply-templates select="@id"/><a>
+ <xsl:if test="@class='jump'">
+ <xsl:attribute name="target">_top</xsl:attribute>
+ </xsl:if>
+ <xsl:if test="@class='fork'">
+ <xsl:attribute name="target">_blank</xsl:attribute>
+ </xsl:if>
+ <xsl:copy-of select="@*"/>
+ <xsl:apply-templates/></a>
+ </xsl:template>
+ <xsl:template match="jump">
+ <xsl:apply-templates select="@id"/><a href="{@href}" target="_top">
+ <xsl:apply-templates/></a>
+ </xsl:template>
+ <xsl:template match="fork">
+ <xsl:apply-templates select="@id"/><a href="{@href}" target="_blank">
+ <xsl:apply-templates/></a>
+ </xsl:template>
+ <xsl:template match="p[@xml:space='preserve']">
+ <xsl:apply-templates select="@id"/>
+ <div class="pre">
+ <xsl:copy-of select="@id"/>
+ <xsl:apply-templates/>
+ </div>
+ </xsl:template>
+ <xsl:template match="source">
+ <xsl:apply-templates select="@id"/>
+ <pre class="code">
+<!-- Temporarily removed long-line-splitter ... gives out-of-memory problems -->
+ <xsl:copy-of select="@id"/>
+ <xsl:apply-templates/>
+<!--
+ <xsl:call-template name="format">
+ <xsl:with-param select="." name="txt" />
+ <xsl:with-param name="width">80</xsl:with-param>
+ </xsl:call-template>
+-->
+ </pre>
+ </xsl:template>
+ <xsl:template match="anchor"><a name="{@id}">
+ <xsl:copy-of select="@id"/></a>
+ </xsl:template>
+ <xsl:template match="icon">
+ <xsl:apply-templates select="@id"/>
+ <img class="icon">
+ <xsl:copy-of select="@height | @width | @src | @alt | @id"/>
+ </img>
+ </xsl:template>
+ <xsl:template match="code">
+ <xsl:apply-templates select="@id"/>
+ <span>
+ <xsl:call-template name="add.class">
+ <xsl:with-param name="class">codefrag</xsl:with-param>
+ </xsl:call-template>
+ <xsl:copy-of select="@id"/>
+ <xsl:value-of select="."/>
+ </span>
+ </xsl:template>
+ <xsl:template match="figure">
+ <xsl:apply-templates select="@id"/>
+ <div align="center">
+ <xsl:copy-of select="@id"/>
+ <img class="figure">
+ <xsl:copy-of select="@height | @width | @src | @alt | @id"/>
+ </img>
+ </div>
+ </xsl:template>
+ <xsl:template match="table">
+ <xsl:apply-templates select="@id"/>
+ <xsl:choose>
+<!-- Limit Forrest specific processing to tables without class -->
+ <xsl:when test="not(@class) or @class=''">
+ <table cellpadding="4" cellspacing="1" class="ForrestTable">
+ <xsl:copy-of select="@cellspacing | @cellpadding | @border | @class | @bgcolor |@id"/>
+ <xsl:apply-templates/>
+ </table>
+ </xsl:when>
+ <xsl:otherwise>
+<!-- Tables with class are passed without change -->
+ <xsl:copy>
+ <xsl:copy-of select="@*"/>
+ <xsl:apply-templates/>
+ </xsl:copy>
+ </xsl:otherwise>
+ </xsl:choose>
+ <xsl:if test="@class = ''"></xsl:if>
+ </xsl:template>
+ <xsl:template match="acronym/@title">
+ <xsl:attribute name="title">
+ <xsl:value-of select="normalize-space(.)"/>
+ </xsl:attribute>
+ </xsl:template>
+ <xsl:template match="header/authors">
+ <xsl:for-each select="person">
+ <xsl:choose>
+ <xsl:when test="position()=1">by</xsl:when>
+ <xsl:otherwise>,</xsl:otherwise>
+ </xsl:choose>
+<xsl:text> </xsl:text>
+ <xsl:value-of select="@name"/>
+ </xsl:for-each>
+ </xsl:template>
+ <xsl:template match="version">
+ <span class="version">
+ <xsl:apply-templates select="@major"/>
+ <xsl:apply-templates select="@minor"/>
+ <xsl:apply-templates select="@fix"/>
+ <xsl:apply-templates select="@tag"/>
+ <xsl:choose>
+ <xsl:when test="starts-with(., '$Revision: ')">
+ version <xsl:value-of select="substring(., 12, string-length(.) -11-2)"/>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:value-of select="."/>
+ </xsl:otherwise>
+ </xsl:choose>
+ </span>
+ </xsl:template>
+ <xsl:template match="@major">
+ v<xsl:value-of select="."/>
+ </xsl:template>
+ <xsl:template match="@minor | @fix">
+ <xsl:value-of select="concat('.',.)"/>
+ </xsl:template>
+ <xsl:template match="@tag">
+ <xsl:value-of select="concat('-',.)"/>
+ </xsl:template>
+ <xsl:template match="type">
+ <p class="type">
+<!-- FIXME: i18n Transformer here -->
+<xsl:text>Type: </xsl:text>
+ <xsl:value-of select="."/>
+ </p>
+ </xsl:template>
+ <xsl:template match="abstract">
+ <p>
+ <xsl:apply-templates/>
+ </p>
+ </xsl:template>
+ <xsl:template name="email"><a>
+ <xsl:attribute name="href">
+ <xsl:value-of select="concat('mailto:',@email)"/>
+ </xsl:attribute>
+ <xsl:value-of select="@name"/></a>
+ </xsl:template>
+ <xsl:template name="generate-id">
+ <xsl:choose>
+ <xsl:when test="@id">
+ <xsl:value-of select="@id"/>
+ </xsl:when>
+ <xsl:when test="@title">
+ <xsl:value-of select="@title"/>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:value-of select="generate-id(.)"/>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:template>
+<!-- Templates for "toc" mode. This will generate a complete
+ Table of Contents for the document. This will then be used
+ by the site2xhtml to generate a Menu ToC and a Page ToC -->
+ <xsl:template match="document" mode="toc">
+ <xsl:apply-templates mode="toc"/>
+ </xsl:template>
+ <xsl:template match="body" mode="toc">
+ <tocitems>
+ <xsl:if test="../header/meta[@name='forrest.force-toc'] = 'true'">
+ <xsl:attribute name="force">true</xsl:attribute>
+ </xsl:if>
+ <xsl:apply-templates select="section" mode="toc">
+ <xsl:with-param name="level" select="1"/>
+ </xsl:apply-templates>
+ </tocitems>
+ </xsl:template>
+ <xsl:template match="section" mode="toc">
+ <xsl:param name="level"/>
+ <tocitem level="{$level}">
+ <xsl:attribute name="href">#<xsl:call-template name="generate-id"/>
+ </xsl:attribute>
+ <xsl:attribute name="title">
+ <xsl:value-of select="title"/>
+ </xsl:attribute>
+ <xsl:apply-templates mode="toc">
+ <xsl:with-param name="level" select="$level+1"/>
+ </xsl:apply-templates>
+ </tocitem>
+ </xsl:template>
+ <xsl:template name="add.class">
+<!-- use the parameter to set class attribute -->
+<!-- if there are already classes set, adds to them -->
+ <xsl:param name="class"/>
+ <xsl:attribute name="class">
+ <xsl:choose>
+ <xsl:when test="@class">
+ <xsl:value-of select="$class"/>
+<xsl:text> </xsl:text>
+ <xsl:value-of select="@class"/>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:value-of select="$class"/>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:attribute>
+ </xsl:template>
+ <xsl:template match="node()|@*" mode="toc"/>
+<!-- End of "toc" mode templates -->
+ <xsl:template match="node()|@*" priority="-1">
+<!-- id processing will create its own a-element so processing has to
+ happen outside the copied element
+ -->
+ <xsl:apply-templates select="@id"/>
+ <xsl:copy>
+ <xsl:apply-templates select="@*[name(.) != 'id']"/>
+ <xsl:copy-of select="@id"/>
+ <xsl:apply-templates/>
+ </xsl:copy>
+ </xsl:template>
+</xsl:stylesheet>
diff --git a/src/site/src/documentation/skins/common/xslt/html/dotdots.xsl b/src/site/src/documentation/skins/common/xslt/html/dotdots.xsl
new file mode 100644
index 0000000..2ff9d1f
--- /dev/null
+++ b/src/site/src/documentation/skins/common/xslt/html/dotdots.xsl
@@ -0,0 +1,73 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ 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.
+-->
+<!--
+Contains the 'dotdots' template, which, given a path, will output a set of
+directory traversals to get back to the source directory. Handles both '/' and
+'\' directory separators.
+
+Examples:
+ Input Output
+ index.html ""
+ dir/index.html "../"
+ dir/subdir/index.html "../../"
+ dir//index.html "../"
+ dir/ "../"
+ dir// "../"
+ \some\windows\path "../../"
+ \some\windows\path\ "../../../"
+ \Program Files\mydir "../"
+
+Cannot handle ..'s in the path, so don't expect 'dir/subdir/../index.html' to
+work.
+
+-->
+<xsl:stylesheet
+ version="1.0"
+ xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
+ <xsl:template name="dotdots">
+ <xsl:param name="path"/>
+ <xsl:variable name="dirs" select="normalize-space(translate(concat($path, 'x'), ' /\', '_ '))"/>
+<!-- The above does the following:
+ o Adds a trailing character to the path. This prevents us having to deal
+ with the special case of ending with '/'
+ o Translates all directory separators to ' ', and normalize spaces,
+ cunningly eliminating duplicate '//'s. We also translate any real
+ spaces into _ to preserve them.
+ -->
+ <xsl:variable name="remainder" select="substring-after($dirs, ' ')"/>
+ <xsl:if test="$remainder">
+<xsl:text>../</xsl:text>
+ <xsl:call-template name="dotdots">
+ <xsl:with-param name="path" select="translate($remainder, ' ', '/')"/>
+<!-- Translate back to /'s because that's what the template expects. -->
+ </xsl:call-template>
+ </xsl:if>
+ </xsl:template>
+<!--
+ Uncomment to test.
+ Usage: saxon dotdots.xsl dotdots.xsl path='/my/test/path'
+
+ <xsl:param name="path"/>
+ <xsl:template match="/">
+ <xsl:message>Path: <xsl:value-of select="$path"/></xsl:message>
+ <xsl:call-template name="dotdots">
+ <xsl:with-param name="path" select="$path"/>
+ </xsl:call-template>
+ </xsl:template>
+ -->
+</xsl:stylesheet>
diff --git a/src/site/src/documentation/skins/common/xslt/html/pathutils.xsl b/src/site/src/documentation/skins/common/xslt/html/pathutils.xsl
new file mode 100644
index 0000000..c1639a4
--- /dev/null
+++ b/src/site/src/documentation/skins/common/xslt/html/pathutils.xsl
@@ -0,0 +1,231 @@
+<?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.
+-->
+<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
+<!--
+PathUtils.xsl
+
+A set of XSLT templates useful for parsing URI paths:
+
+dirname: return the directory part of a path
+filename: return the file part of a path
+ext: return the last extension of the filename in a path
+filename-noext: return the file part of a path without its last extension
+
+-->
+<!-- Returns the directory part of a path. Equivalent to Unix 'dirname'.
+Examples:
+'' -> ''
+'foo/index.html' -> 'foo/'
+-->
+ <xsl:template name="dirname">
+ <xsl:param name="path" />
+ <xsl:if test="contains($path, '/')">
+ <xsl:value-of select="concat(substring-before($path, '/'), '/')" />
+ <xsl:call-template name="dirname">
+ <xsl:with-param name="path"
+ select="substring-after($path, '/')" />
+ </xsl:call-template>
+ </xsl:if>
+ </xsl:template>
+<!-- Normalized (..'s eliminated) version of 'dirname' -->
+ <xsl:template name="dirname-nz">
+ <xsl:param name="path" />
+ <xsl:call-template name="normalize">
+ <xsl:with-param name="path">
+ <xsl:call-template name="dirname">
+ <xsl:with-param name="path" select="$path" />
+ </xsl:call-template>
+ </xsl:with-param>
+ </xsl:call-template>
+ </xsl:template>
+<!-- Returns the filename part of a path. Equivalent to Unix 'basename'
+Examples:
+'index.html' -> 'index.html'
+'foo/bar/' -> ''
+'foo/bar/index.html' -> 'index.html'
+-->
+ <xsl:template name="filename">
+ <xsl:param name="path"/>
+ <xsl:choose>
+ <xsl:when test="contains($path, '/')">
+ <xsl:call-template name="filename">
+ <xsl:with-param name="path" select="substring-after($path, '/')"/>
+ </xsl:call-template>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:value-of select="$path"/>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:template>
+<!-- Returns the last extension of a filename in a path.
+Examples:
+'index.html' -> '.html'
+'index.dtdx.html' -> '.html'
+'foo/bar/' -> ''
+'foo/bar/index.html' -> '.html'
+'foo/bar/index' -> ''
+-->
+ <xsl:template name="ext">
+ <xsl:param name="path"/>
+ <xsl:param name="subflag"/>
+<!-- Outermost call? -->
+ <xsl:choose>
+ <xsl:when test="contains($path, '.')">
+ <xsl:call-template name="ext">
+ <xsl:with-param name="path" select="substring-after($path, '.')"/>
+ <xsl:with-param name="subflag" select="'sub'"/>
+ </xsl:call-template>
+ </xsl:when>
+<!-- Handle extension-less filenames by returning '' -->
+ <xsl:when test="not($subflag) and not(contains($path, '.'))">
+<xsl:text/>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:value-of select="concat('.', $path)"/>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:template>
+<!-- Returns a filename of a path stripped of its last extension.
+Examples:
+'foo/bar/index.dtdx.html' -> 'index.dtdx'
+-->
+ <xsl:template name="filename-noext">
+ <xsl:param name="path"/>
+ <xsl:variable name="filename">
+ <xsl:call-template name="filename">
+ <xsl:with-param name="path" select="$path"/>
+ </xsl:call-template>
+ </xsl:variable>
+ <xsl:variable name="ext">
+ <xsl:call-template name="ext">
+ <xsl:with-param name="path" select="$filename"/>
+ </xsl:call-template>
+ </xsl:variable>
+ <xsl:value-of select="substring($filename, 1, string-length($filename) - string-length($ext))"/>
+ </xsl:template>
+<!-- Returns a path with the filename stripped of its last extension.
+Examples:
+'foo/bar/index.dtdx.html' -> 'foo/bar/index.dtdx'
+-->
+ <xsl:template name="path-noext">
+ <xsl:param name="path"/>
+ <xsl:variable name="ext">
+ <xsl:call-template name="ext">
+ <xsl:with-param name="path" select="$path"/>
+ </xsl:call-template>
+ </xsl:variable>
+ <xsl:value-of select="substring($path, 1, string-length($path) - string-length($ext))"/>
+ </xsl:template>
+<!-- Normalized (..'s eliminated) version of 'path-noext' -->
+ <xsl:template name="path-noext-nz">
+ <xsl:param name="path" />
+ <xsl:call-template name="normalize">
+ <xsl:with-param name="path">
+ <xsl:call-template name="path-noext">
+ <xsl:with-param name="path" select="$path" />
+ </xsl:call-template>
+ </xsl:with-param>
+ </xsl:call-template>
+ </xsl:template>
+<!-- Returns a path with any fragment identifier ('#...') stripped off
+Examples:
+'foo/bar/index.dtdx.html#blah' -> 'foo/bar/index.dtdx.html'
+-->
+ <xsl:template name="path-nofrag">
+ <xsl:param name="path"/>
+ <xsl:if test="not(contains($path, '#'))">
+ <xsl:value-of select="$path"/>
+ </xsl:if>
+ <xsl:if test="contains($path, '#')">
+ <xsl:value-of select="substring-before($path, '#')"/>
+ </xsl:if>
+ </xsl:template>
+<!-- Normalizes a path, converting '/' to '\' and eliminating ..'s
+Examples:
+'foo/bar/../baz/index.html' -> foo/baz/index.html'
+-->
+ <xsl:template name="normalize">
+ <xsl:param name="path"/>
+<!-- replace all \ with / -->
+ <xsl:variable name="path-" select="translate($path, '\', '/')"/>
+ <xsl:choose>
+<!-- process relative refs here -->
+ <xsl:when test="contains($path-, '/../')">
+<!-- put part before /../ into $pa: "foo/bar" -->
+ <xsl:variable name="pa" select="substring-before($path-, '/../')"/>
+<!-- put part after first occurrence /../ into $th: "baz/index.html" -->
+ <xsl:variable name="th" select="substring-after($path-, '/../')"/>
+<!-- cut last real directory name before /../ and put rest in $pa- : "foo/" -->
+ <xsl:variable name="pa-">
+ <xsl:call-template name="dirname">
+ <xsl:with-param name="path" select="$pa"/>
+ </xsl:call-template>
+ </xsl:variable>
+<!-- recombine pieces thus eliminating one .. and one dir step before it
+ and recurse into this template to eliminate more /../
+ -->
+ <xsl:variable name="pa-th" select="concat($pa-, $th)"/>
+ <xsl:call-template name="normalize">
+ <xsl:with-param name="path" select="$pa-th"/>
+ </xsl:call-template>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:value-of select="$path-"/>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:template>
+<!--
+Uncomment this to test.
+Usage: saxon pathutils.xsl pathutils.xsl path=foo/bar
+
+<xsl:param name="path" select="'/foo/bar/../baz/index.html'"/>
+<xsl:template match="/">
+ <xsl:message>
+ path = <xsl:value-of select="$path"/>
+ normalize = <xsl:call-template name="normalize">
+ <xsl:with-param name="path" select="$path"/>
+ </xsl:call-template>
+ dirname = <xsl:call-template name="dirname">
+ <xsl:with-param name="path" select="$path"/>
+ </xsl:call-template>
+ dirname-nz = <xsl:call-template name="dirname-nz">
+ <xsl:with-param name="path" select="$path"/>
+ </xsl:call-template>
+ filename = <xsl:call-template name="filename">
+ <xsl:with-param name="path" select="$path"/>
+ </xsl:call-template>
+ ext = <xsl:call-template name="ext">
+ <xsl:with-param name="path" select="$path"/>
+ </xsl:call-template>
+ filename-noext = <xsl:call-template name="filename-noext">
+ <xsl:with-param name="path" select="$path"/>
+ </xsl:call-template>
+ path-noext = <xsl:call-template name="path-noext">
+ <xsl:with-param name="path" select="$path"/>
+ </xsl:call-template>
+ path-noext-nz = <xsl:call-template name="path-noext-nz">
+ <xsl:with-param name="path" select="$path"/>
+ </xsl:call-template>
+ path-nofrag = <xsl:call-template name="path-nofrag">
+ <xsl:with-param name="path" select="$path"/>
+ </xsl:call-template>
+
+ </xsl:message>
+</xsl:template>
+-->
+</xsl:stylesheet>
diff --git a/src/site/src/documentation/skins/common/xslt/html/renderlogo.xsl b/src/site/src/documentation/skins/common/xslt/html/renderlogo.xsl
new file mode 100644
index 0000000..698156b
--- /dev/null
+++ b/src/site/src/documentation/skins/common/xslt/html/renderlogo.xsl
@@ -0,0 +1,67 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ 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.
+-->
+<!--
+A simple callable template that renders a logo for an entity. The logo will
+be a hyperlink and may include an image (with width and height if specified)
+or else it will just include the specified text.
+
+Note that text and image are mandatory parts of the template.
+-->
+<xsl:stylesheet
+ version="1.0"
+ xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
+ <xsl:template name="renderlogo">
+ <xsl:param name="name"/>
+ <xsl:param name="url"/>
+ <xsl:param name="logo"/>
+ <xsl:param name="width"/>
+ <xsl:param name="height"/>
+ <xsl:param name="root"/>
+ <xsl:param name="description"/><a href="{$url}">
+ <xsl:choose>
+ <xsl:when test="$logo and not($logo = '')">
+ <img alt="{$name}" class="logoImage">
+ <xsl:attribute name="src">
+ <xsl:if test="not(starts-with($logo, 'http://'))">
+ <xsl:value-of select="$root"/>
+ </xsl:if>
+ <xsl:value-of select="$logo"/>
+ </xsl:attribute>
+ <xsl:if test="$width">
+ <xsl:attribute name="width">
+ <xsl:value-of select="$width"/>
+ </xsl:attribute>
+ </xsl:if>
+ <xsl:if test="$height">
+ <xsl:attribute name="height">
+ <xsl:value-of select="$height"/>
+ </xsl:attribute>
+ </xsl:if>
+ <xsl:if test="$description">
+ <xsl:attribute name="title">
+ <xsl:value-of select="$description"/>
+ </xsl:attribute>
+ </xsl:if>
+ </img>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:value-of select="$name"/>
+ </xsl:otherwise>
+ </xsl:choose></a>
+ </xsl:template>
+</xsl:stylesheet>
diff --git a/src/site/src/documentation/skins/common/xslt/html/site-to-xhtml.xsl b/src/site/src/documentation/skins/common/xslt/html/site-to-xhtml.xsl
new file mode 100644
index 0000000..2f8b15c
--- /dev/null
+++ b/src/site/src/documentation/skins/common/xslt/html/site-to-xhtml.xsl
@@ -0,0 +1,388 @@
+<?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.
+-->
+<!--
+site-to-xhtml.xsl is the final stage in HTML page production. It merges HTML from
+document-to-html.xsl, tab-to-menu.xsl and book-to-menu.xsl, and adds the site header,
+footer, searchbar, css etc. As input, it takes XML of the form:
+
+<site>
+ <div class="menu">
+ ...
+ </div>
+ <div class="tab">
+ ...
+ </div>
+ <div class="content">
+ ...
+ </div>
+</site>
+
+-->
+<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
+ xmlns:java="http://xml.apache.org/xslt/java" exclude-result-prefixes="java">
+ <xsl:variable name="config" select="//skinconfig"/>
+<!-- If true, a txt link for this page will not be generated -->
+ <xsl:variable name="disable-txt-link" select="//skinconfig/disable-txt-link"/>
+<!-- If true, a PDF link for this page will not be generated -->
+ <xsl:variable name="disable-pdf-link" select="//skinconfig/disable-pdf-link"/>
+<!-- If true, a "print" link for this page will not be generated -->
+ <xsl:variable name="disable-print-link" select="//skinconfig/disable-print-link"/>
+<!-- If true, an XML link for this page will not be generated -->
+ <xsl:variable name="disable-xml-link" select="//skinconfig/disable-xml-link"/>
+<!-- If true, a POD link for this page will not be generated -->
+ <xsl:variable name="disable-pod-link" select="//skinconfig/disable-pod-link"/>
+<!-- Get the location where to generate the minitoc -->
+ <xsl:variable name="minitoc-location" select="//skinconfig/toc/@location"/>
+ <xsl:param name="path"/>
+ <xsl:include href="dotdots.xsl"/>
+ <xsl:include href="pathutils.xsl"/>
+ <xsl:include href="renderlogo.xsl"/>
+<!-- Path (..'s) to the root directory -->
+ <xsl:variable name="root">
+ <xsl:call-template name="dotdots">
+ <xsl:with-param name="path" select="$path"/>
+ </xsl:call-template>
+ </xsl:variable>
+<!-- Source filename (eg 'foo.xml') of current page -->
+ <xsl:variable name="filename">
+ <xsl:call-template name="filename">
+ <xsl:with-param name="path" select="$path"/>
+ </xsl:call-template>
+ </xsl:variable>
+<!-- Path of Lucene search results page (relative to $root) -->
+ <xsl:param name="lucene-search" select="'lucene-search.html'"/>
+ <xsl:variable name="filename-noext">
+ <xsl:call-template name="filename-noext">
+ <xsl:with-param name="path" select="$path"/>
+ </xsl:call-template>
+ </xsl:variable>
+<!-- Whether to obfuscate email links -->
+ <xsl:variable name="obfuscate-mail-links" select="//skinconfig/obfuscate-mail-links"/>
+<!-- If true, the font size script will not be rendered -->
+ <xsl:variable name="disable-font-script" select="//skinconfig/disable-font-script"/>
+<!-- If true, an the images on all external links will not be added -->
+ <xsl:variable name="disable-external-link-image" select="//skinconfig/disable-external-link-image"/>
+ <xsl:variable name="skin-img-dir" select="concat(string($root), 'skin/images')"/>
+ <xsl:variable name="spacer" select="concat($root, 'skin/images/spacer.gif')"/>
+ <xsl:template name="breadcrumbs">
+ <xsl:if test="(//skinconfig/trail/link1/@name)and(//skinconfig/trail/link1/@name!='')"><a href="{//skinconfig/trail/link1/@href}">
+ <xsl:value-of select="//skinconfig/trail/link1/@name"/></a>
+ </xsl:if>
+ <xsl:if test="(//skinconfig/trail/link2/@name)and(//skinconfig/trail/link2/@name!='')"> > <a href="{//skinconfig/trail/link2/@href}">
+ <xsl:value-of select="//skinconfig/trail/link2/@name"/></a>
+ </xsl:if>
+ <xsl:if test="(//skinconfig/trail/link3/@name)and(//skinconfig/trail/link3/@name!='')"> > <a href="{//skinconfig/trail/link3/@href}">
+ <xsl:value-of select="//skinconfig/trail/link3/@name"/></a>
+ </xsl:if>
+<script type="text/javascript" language="JavaScript" src="{$root}skin/breadcrumbs.js"/>
+ </xsl:template>
+ <xsl:template match="site">
+ <html>
+ <head>
+ <title><xsl:value-of select="div[@class='content']/table/tr/td/h1"/></title>
+ <xsl:if test="//skinconfig/favicon-url"><link rel="shortcut icon">
+ <xsl:attribute name="href">
+ <xsl:value-of select="concat($root,//skinconfig/favicon-url)"/>
+ </xsl:attribute></link>
+ </xsl:if>
+ </head>
+ <body>
+ <xsl:if test="//skinconfig/group-url">
+ <xsl:call-template name="renderlogo">
+ <xsl:with-param name="name" select="//skinconfig/group-name"/>
+ <xsl:with-param name="url" select="//skinconfig/group-url"/>
+ <xsl:with-param name="logo" select="//skinconfig/group-logo"/>
+ <xsl:with-param name="root" select="$root"/>
+ <xsl:with-param name="description" select="//skinconfig/group-description"/>
+ </xsl:call-template>
+ </xsl:if>
+ <xsl:call-template name="renderlogo">
+ <xsl:with-param name="name" select="//skinconfig/project-name"/>
+ <xsl:with-param name="url" select="//skinconfig/project-url"/>
+ <xsl:with-param name="logo" select="//skinconfig/project-logo"/>
+ <xsl:with-param name="root" select="$root"/>
+ <xsl:with-param name="description" select="//skinconfig/project-description"/>
+ </xsl:call-template>
+ <xsl:comment>================= start Tabs ==================</xsl:comment>
+ <xsl:apply-templates select="div[@class='tab']"/>
+ <xsl:comment>================= end Tabs ==================</xsl:comment>
+ <xsl:comment>================= start Menu items ==================</xsl:comment>
+ <xsl:apply-templates select="div[@class='menu']"/>
+ <xsl:comment>================= end Menu items ==================</xsl:comment>
+ <xsl:comment>================= start Content==================</xsl:comment>
+ <xsl:apply-templates select="div[@class='content']"/>
+ <xsl:comment>================= end Content==================</xsl:comment>
+ <xsl:comment>================= start Footer ==================</xsl:comment>
+ <xsl:choose>
+ <xsl:when test="$config/copyright-link"><a>
+ <xsl:attribute name="href">
+ <xsl:value-of select="$config/copyright-link"/>
+ </xsl:attribute>
+ Copyright © <xsl:value-of select="$config/year"/>
+ <xsl:call-template name="current-year">
+ <xsl:with-param name="copyrightyear" select="$config/year"/>
+ </xsl:call-template> 
+ <xsl:value-of select="$config/vendor"/></a>
+ </xsl:when>
+ <xsl:otherwise>
+ Copyright © <xsl:value-of select="$config/year"/>
+ <xsl:call-template name="current-year">
+ <xsl:with-param name="copyrightyear" select="$config/year"/>
+ </xsl:call-template> 
+ <xsl:value-of select="$config/vendor"/>
+ </xsl:otherwise>
+ </xsl:choose>
+ All rights reserved.
+ <script language="JavaScript" type="text/javascript"><![CDATA[<!--
+ document.write(" - "+"Last Published: " + document.lastModified);
+ // -->]]></script>
+ <xsl:if test="//skinconfig/host-logo and not(//skinconfig/host-logo = '')"><a href="{//skinconfig/host-url}">
+ <xsl:call-template name="renderlogo">
+ <xsl:with-param name="name" select="//skinconfig/host-name"/>
+ <xsl:with-param name="url" select="//skinconfig/host-url"/>
+ <xsl:with-param name="logo" select="//skinconfig/host-logo"/>
+ <xsl:with-param name="root" select="$root"/>
+ </xsl:call-template></a>
+ </xsl:if>
+ <xsl:if test="$filename = 'index.html' and //skinconfig/credits">
+ <xsl:for-each select="//skinconfig/credits/credit[not(@role='pdf')]">
+ <xsl:call-template name="renderlogo">
+ <xsl:with-param name="name" select="name"/>
+ <xsl:with-param name="url" select="url"/>
+ <xsl:with-param name="logo" select="image"/>
+ <xsl:with-param name="root" select="$root"/>
+ <xsl:with-param name="width" select="width"/>
+ <xsl:with-param name="height" select="height"/>
+ </xsl:call-template>
+ </xsl:for-each>
+ </xsl:if><a href="http://validator.w3.org/check/referer">
+ <img class="skin" border="0"
+ src="http://www.w3.org/Icons/valid-html401"
+ alt="Valid HTML 4.01!" height="31" width="88"/></a>
+ </body>
+ </html>
+ </xsl:template>
+<!-- Add links to any standards-compliance logos -->
+ <xsl:template name="compliancy-logos">
+ <xsl:if test="$filename = 'index.html' and //skinconfig/disable-compliance-links = 'false'"><a href="http://validator.w3.org/check/referer">
+ <img class="logoImage"
+ src="{$skin-img-dir}/valid-html401.png"
+ alt="Valid HTML 4.01!" title="Valid HTML 4.01!" height="31" width="88" border="0"/></a><a href="http://jigsaw.w3.org/css-validator/check/referer">
+ <img class="logoImage"
+ src="{$skin-img-dir}/vcss.png"
+ alt="Valid CSS!" title="Valid CSS!" height="31" width="88" border="0"/></a>
+ </xsl:if>
+ </xsl:template>
+<!-- Generates the PDF link -->
+ <xsl:template match="div[@id='skinconf-pdflink']">
+ <xsl:if test="not($config/disable-pdf-link) or $disable-pdf-link = 'false'">
+ <td align="center" width="40" nowrap="nowrap"><a href="{$filename-noext}.pdf" class="dida">
+ <img class="skin" src="{$skin-img-dir}/pdfdoc.gif" alt="PDF"/>
+ <br/>
+ PDF</a>
+ </td>
+ </xsl:if>
+ </xsl:template>
+<!-- Generates the TXT link -->
+ <xsl:template match="div[@id='skinconf-txtlink']">
+ <xsl:if test="$disable-txt-link = 'false'">
+ <td align="center" width="40" nowrap="nowrap"><a href="{$filename-noext}.txt" class="dida">
+ <img class="skin" src="{$skin-img-dir}/txtdoc.png" alt="TXT"/>
+ <br/>
+ TXT</a>
+ </td>
+ </xsl:if>
+ </xsl:template>
+<!-- Generates the POD link -->
+ <xsl:template match="div[@id='skinconf-podlink']">
+ <xsl:if test="$disable-pod-link = 'false'">
+ <td align="center" width="40" nowrap="nowrap"><a href="{$filename-noext}.pod" class="dida">
+ <img class="skin" src="{$skin-img-dir}/poddoc.png" alt="POD"/>
+ <br/>
+ POD</a>
+ </td>
+ </xsl:if>
+ </xsl:template>
+<!-- Generates the XML link -->
+ <xsl:template match="div[@id='skinconf-xmllink']">
+ <xsl:if test="$disable-xml-link = 'false'">
+ <td align="center" width="40" nowrap="nowrap"><a href="{$filename-noext}.xml" class="dida">
+ <img class="skin" src="{$skin-img-dir}/xmldoc.gif" alt="XML"/>
+ <br/>
+ XML</a>
+ </td>
+ </xsl:if>
+ </xsl:template>
+<!-- Generates the "printer friendly version" link -->
+ <xsl:template match="div[@id='skinconf-printlink']">
+ <xsl:if test="$disable-print-link = 'false'">
+<script type="text/javascript" language="Javascript">
+function printit() {
+ if (window.print) {
+ window.focus();
+ window.print();
+ }
+}
+
+var NS = (navigator.appName == "Netscape");
+var VERSION = parseInt(navigator.appVersion);
+if (VERSION > 3) {
+ document.write('<td align="center" width="40" nowrap="nowrap">');
+ document.write(' <a href="javascript:printit()" class="dida">');
+ document.write(' <img class="skin" src="{$skin-img-dir}/printer.gif" alt="Print this Page"/><br />');
+ document.write(' print</a>');
+ document.write('</td>');
+}
+</script>
+ </xsl:if>
+ </xsl:template>
+<!-- handle all obfuscating mail links and disabling external link images -->
+ <xsl:template match="a">
+ <xsl:choose>
+ <xsl:when test="$obfuscate-mail-links='true' and starts-with(@href, 'mailto:') and contains(@href, '@')">
+ <xsl:variable name="mailto-1" select="substring-before(@href,'@')"/>
+ <xsl:variable name="mailto-2" select="substring-after(@href,'@')"/>
+ <xsl:variable name="obfuscation" select="normalize-space(//skinconfig/obfuscate-mail-value)"/><a href="{$mailto-1}{$obfuscation}{$mailto-2}">
+ <xsl:apply-templates/></a>
+ </xsl:when>
+ <xsl:when test="not($disable-external-link-image='true') and contains(@href, ':') and not(contains(@href, //skinconfig/group-url)) and not(contains(@href, //skinconfig/project-url))"><a href="{@href}" class="external">
+ <xsl:apply-templates/></a>
+ </xsl:when>
+ <xsl:otherwise>
+<!-- xsl:copy-of makes sure we copy <a href> as well as <a name>
+ or any other <a ...> forms -->
+ <xsl:copy-of select="."/>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:template>
+ <xsl:template match="div[@id='skinconf-toc-page']">
+ <xsl:if test="$config/toc">
+ <xsl:if test="contains($minitoc-location,'page')">
+ <xsl:if test="(count(//tocitems/tocitem) >= $config/toc/@min-sections) or (//tocitems/@force = 'true')">
+ <xsl:call-template name="minitoc">
+ <xsl:with-param name="tocroot" select="//tocitems"/>
+ </xsl:call-template>
+ </xsl:if>
+ </xsl:if>
+ </xsl:if>
+ </xsl:template>
+ <xsl:template name="minitoc">
+ <xsl:param name="tocroot"/>
+ <xsl:if test="(count($tocroot/tocitem) >= $config/toc/@min-sections) or ($tocroot/@force = 'true')">
+ <xsl:if test="contains($config/toc/@location,'page')">
+ <ul class="minitoc">
+ <xsl:for-each select="$tocroot/tocitem">
+ <li><a href="{@href}">
+ <xsl:value-of select="@title"/></a>
+ <xsl:if test="@level<//skinconfig/toc/@max-depth+1">
+ <xsl:call-template name="minitoc">
+ <xsl:with-param name="tocroot" select="."/>
+ </xsl:call-template>
+ </xsl:if></li>
+ </xsl:for-each>
+ </ul>
+ </xsl:if>
+ </xsl:if>
+ </xsl:template>
+ <xsl:template name="html-meta">
+ <meta name="Generator" content="Apache Forrest"/>
+ <meta name="Forrest-version">
+ <xsl:attribute name="content">
+ <xsl:value-of select="//info/forrest-version"/>
+ </xsl:attribute>
+ </meta>
+ <meta name="Forrest-skin-name">
+ <xsl:attribute name="content">
+ <xsl:value-of select="//info/project-skin"/>
+ </xsl:attribute>
+ </meta>
+ </xsl:template>
+<!-- meta information from v 2.0 documents
+ FIXME: the match is really inefficient -->
+ <xsl:template name="meta-data">
+ <xsl:for-each select="//meta-data/meta">
+ <xsl:element name="meta">
+ <xsl:attribute name="name">
+ <xsl:value-of select="@name"/>
+ </xsl:attribute>
+ <xsl:attribute name="content">
+ <xsl:value-of select="."/>
+ </xsl:attribute>
+ <xsl:if test="@xml:lang">
+ <xsl:attribute name="lang">
+ <xsl:value-of select="@xml:lang"/>
+ </xsl:attribute>
+ </xsl:if>
+ </xsl:element>
+ </xsl:for-each>
+ </xsl:template>
+ <xsl:template name="feedback">
+ <div id="feedback">
+ <xsl:value-of select="$config/feedback"/>
+ <xsl:choose>
+ <xsl:when test="$config/feedback/@href and not($config/feedback/@href='')"><a id="feedbackto">
+ <xsl:attribute name="href">
+ <xsl:value-of select="$config/feedback/@href"/>
+ <xsl:value-of select="$path"/>
+ </xsl:attribute>
+ <xsl:value-of select="$config/feedback/@to"/></a>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:value-of select="$config/feedback/@to"/>
+ </xsl:otherwise>
+ </xsl:choose>
+ </div>
+ </xsl:template>
+ <xsl:template match="node()|@*" priority="-1">
+ <xsl:copy>
+ <xsl:apply-templates select="@*"/>
+ <xsl:apply-templates/>
+ </xsl:copy>
+ </xsl:template>
+<!-- inception year copyright management -->
+ <xsl:template name="current-year">
+<!-- Displays the current year after the inception year (in the copyright i.e: 2002-2005)
+ - the copyright year (2005 by default) can be indicated in the copyrightyear parameter,
+ - the year format (yyyy by default) can be indicated in the dateformat parameter,
+ - the dates separator (- by default) can be indicated in the dateseparator parameter.
+ For instance the following call will format the year on 2 digits and separates the dates
+ with /
+ (copyright 02/05)
+ <xsl:call-template name="current-year">
+ <xsl:with-param name="copyrightyear" select="'02'"/>
+ <xsl:with-param name="dateformat" select="'yy'"/>
+ <xsl:with-param name="dateseparator" select="'/'"/>
+ </xsl:call-template>
+ Warning, to enable inception year, inception attribute must be set to "true" in copyright/year/@inception
+ -->
+ <xsl:param name="copyrightyear">2005</xsl:param>
+ <xsl:param name="dateformat">yyyy</xsl:param>
+ <xsl:param name="dateseparator">-</xsl:param>
+ <xsl:if test="$copyrightyear[@inception = 'true']">
+ <xsl:variable name="tz" select='java:java.util.SimpleTimeZone.new(0,"GMT+00:00")' />
+ <xsl:variable name="formatter" select="java:java.text.SimpleDateFormat.new($dateformat)"/>
+ <xsl:variable name="settz" select="java:setTimeZone($formatter, $tz)" />
+ <xsl:variable name="date" select="java:java.util.Date.new()"/>
+ <xsl:variable name="year" select="java:format($formatter, $date)"/>
+ <xsl:if test="$copyrightyear != $year">
+ <xsl:value-of select="$dateseparator"/>
+ <xsl:value-of select="$year"/>
+ </xsl:if>
+ </xsl:if>
+ </xsl:template>
+</xsl:stylesheet>
diff --git a/src/site/src/documentation/skins/common/xslt/html/split.xsl b/src/site/src/documentation/skins/common/xslt/html/split.xsl
new file mode 100644
index 0000000..14c88e7
--- /dev/null
+++ b/src/site/src/documentation/skins/common/xslt/html/split.xsl
@@ -0,0 +1,124 @@
+<?xml version="1.0"?>
+<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
+<!--
+ This stylesheet was taken from the XSLT FAQ http://www.dpawson.co.uk/xsl/
+
+ Comments and adaption to be used without normalize-space()
+ by forrest-dev@xml.apache.org
+-->
+<!--
+ Input:
+
+<doc>
+
+<para>
+ 123456 2345 343434 545454 43434 343
+ 12345 343434 545454 43434 343
+ 32345645 343434 545454 43434 343
+ 3422222225 343434 545454 43434 343
+ llllllllllllllllllllllooooooooooooooonnnnnnnnnnnggggggggg
+ 345 343434 545454 43434 343
+</para>
+
+</doc>
+
+Output:
+
+<HTML>
+<BODY>
+<PRE>123456 2345 343434 545454
+43434 343 12345 343434 545454
+43434 343 32345645 343434
+545454 43434 343 3422222225
+343434 545454 43434 343
+lllllllllllllllllllllloooooooo
+ooooooonnnnnnnnnnnggggggggg
+345 343434 545454 43434
+343
+</PRE>
+</BODY>
+</HTML>
+
+Fragment ised:
+
+ <xsl:template match="/doc">
+ <HTML><BODY><PRE>
+ <xsl:call-template name="format">
+ <xsl:with-param select="normalize-space(para)" name="txt" />
+ <xsl:with-param name="width">30</xsl:with-param>
+ </xsl:call-template>
+ </PRE></BODY></HTML>
+ </xsl:template>
+
+
+-->
+ <xsl:template match="/body">
+ <body>
+ <xsl:call-template name="format">
+ <xsl:with-param select="source" name="txt" />
+ <xsl:with-param name="width">40</xsl:with-param>
+ </xsl:call-template>
+ </body>
+ </xsl:template>
+ <xsl:template name="format">
+ <xsl:param name="txt" />
+ <xsl:param name="width" />
+<!-- if there is still text left -->
+ <xsl:if test="$txt">
+ <xsl:variable name = "pretxt" select = "substring($txt,0, $width)" />
+ <xsl:choose>
+ <xsl:when test="contains($pretxt, '
')">
+ <xsl:value-of select="substring-before($pretxt, '
')"/>
+<xsl:text>
</xsl:text>
+ <xsl:call-template name="format">
+ <xsl:with-param name="txt" select="substring-after($txt,'
')"/>
+ <xsl:with-param select="$width" name="width" />
+ </xsl:call-template>
+ </xsl:when>
+ <xsl:otherwise>
+<!-- get the width at which to break-->
+ <xsl:variable name="real-width">
+ <xsl:call-template name="tune-width">
+ <xsl:with-param select="$txt" name="txt" />
+ <xsl:with-param select="$width" name="width" />
+ <xsl:with-param select="$width" name="def" />
+ </xsl:call-template>
+ </xsl:variable>
+<!-- output the first part of the broken string -->
+ <xsl:value-of select="substring($txt, 1, $real-width)" />
+<!-- output a newline -->
+<xsl:text>
</xsl:text>
+<!-- call itself with the remaining part of the text -->
+ <xsl:call-template name="format">
+ <xsl:with-param select="substring($txt,$real-width + 1)" name="txt" />
+ <xsl:with-param select="$width" name="width" />
+ </xsl:call-template>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:if>
+ </xsl:template>
+<!-- used by template "format", it calculates the width at the given def
+
+ It starts at def length and comes back till it finds a space -->
+ <xsl:template name="tune-width">
+ <xsl:param name="txt" />
+ <xsl:param name="width" />
+ <xsl:param name="def" />
+ <xsl:choose>
+ <xsl:when test="$width = 0">
+ <xsl:value-of select="$def" />
+ </xsl:when>
+ <xsl:when test="substring($txt, $width, 1 ) = ' '">
+ <xsl:value-of select="$width" />
+ </xsl:when>
+ <xsl:otherwise>
+<!-- otherwise need to tune again, trying with $width - 1 -->
+ <xsl:call-template name="tune-width">
+ <xsl:with-param select="$width - 1" name="width" />
+ <xsl:with-param select="$txt" name="txt" />
+ <xsl:with-param select="$def" name="def" />
+ </xsl:call-template>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:template>
+</xsl:stylesheet>
diff --git a/src/site/src/documentation/skins/common/xslt/html/strip_namespaces.xsl b/src/site/src/documentation/skins/common/xslt/html/strip_namespaces.xsl
new file mode 100644
index 0000000..47dec6a
--- /dev/null
+++ b/src/site/src/documentation/skins/common/xslt/html/strip_namespaces.xsl
@@ -0,0 +1,39 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ 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.
+-->
+<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
+<!-- FIXME: FOR-555. This might not be the best solution though, but it sure works -->
+ <xsl:template match="comment()|processing-instruction()">
+ <xsl:copy>
+ <xsl:apply-templates select="@*|*|text()|processing-instruction()|comment()"/>
+ </xsl:copy>
+ </xsl:template>
+<!-- End fixme FOR-555 -->
+ <xsl:template match="*">
+<!-- remove element prefix (if any) -->
+ <xsl:element name="{local-name()}">
+<!-- process attributes -->
+ <xsl:for-each select="@*">
+<!-- remove attribute prefix (if any) -->
+ <xsl:attribute name="{local-name()}">
+ <xsl:value-of select="."/>
+ </xsl:attribute>
+ </xsl:for-each>
+ <xsl:apply-templates/>
+ </xsl:element>
+ </xsl:template>
+</xsl:stylesheet>
diff --git a/src/site/src/documentation/skins/common/xslt/html/tab-to-menu.xsl b/src/site/src/documentation/skins/common/xslt/html/tab-to-menu.xsl
new file mode 100644
index 0000000..257d291
--- /dev/null
+++ b/src/site/src/documentation/skins/common/xslt/html/tab-to-menu.xsl
@@ -0,0 +1,195 @@
+<?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.
+-->
+<!--
+This stylesheet generates 'tabs' at the top left of the screen. Tabs are
+visual indicators that a certain subsection of the URI space is being browsed.
+For example, if we had tabs with paths:
+
+Tab1: ''
+Tab2: 'community'
+Tab3: 'community/howto'
+Tab4: 'community/howto/xmlform/index.html'
+
+Then if the current path was 'community/howto/foo', Tab3 would be highlighted.
+The rule is: the tab with the longest path that forms a prefix of the current
+path is enabled.
+
+The output of this stylesheet is HTML of the form:
+ <div class="tab">
+ ...
+ </div>
+
+which is then merged by site-to-xhtml.xsl
+
+-->
+<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
+<!-- ================================================================ -->
+<!-- These templates SHOULD be overridden -->
+<!-- ================================================================ -->
+<!-- Called before first level 1 tag -->
+ <xsl:template name="pre-separator"></xsl:template>
+<!-- Called after last level 1 tag -->
+ <xsl:template name="post-separator"></xsl:template>
+<!-- Called between level 1 tags -->
+ <xsl:template name="separator">
+<xsl:text> | </xsl:text>
+ </xsl:template>
+<!-- Called before first level 2 tag -->
+ <xsl:template name="level2-pre-separator"></xsl:template>
+<!-- Called after last level 2 tag -->
+ <xsl:template name="level2-post-separator"></xsl:template>
+<!-- Called between level 2 tags -->
+ <xsl:template name="level2-separator">
+<xsl:text> | </xsl:text>
+ </xsl:template>
+<!--
+ Note: sub-stylesheets can't do apply-imports here, because it would choose
+ the 'tags' template and infinitely recurse. Hence call-template used instead.
+ -->
+<!-- Display a selected level 1 tab node -->
+ <xsl:template name="selected">
+ <xsl:call-template name="base-selected"/>
+ </xsl:template>
+<!-- Display an unselected level 1 tab node -->
+ <xsl:template name="not-selected">
+ <xsl:call-template name="base-not-selected"/>
+ </xsl:template>
+<!-- Display a selected second level tab node -->
+ <xsl:template name="level2-selected">
+ <xsl:call-template name="base-selected"/>
+ </xsl:template>
+<!-- Display an unselected second level tab node -->
+ <xsl:template name="level2-not-selected">
+ <xsl:call-template name="base-not-selected"/>
+ </xsl:template>
+<!-- ================================================================ -->
+<!-- These templates CAN be overridden -->
+<!-- ================================================================ -->
+ <xsl:template match="tabs">
+ <div class="tab">
+ <xsl:call-template name="base-tabs"/>
+ </div>
+ </xsl:template>
+<!-- ================================================================ -->
+<!-- These templates SHOULD NOT be overridden -->
+<!-- ================================================================ -->
+ <xsl:param name="path"/>
+ <xsl:include href="dotdots.xsl"/>
+ <xsl:include href="tabutils.xsl"/>
+<!-- NOTE: Xalan has a bug (race condition?) where sometimes $root is only half-evaluated -->
+ <xsl:variable name="root">
+ <xsl:call-template name="dotdots">
+ <xsl:with-param name="path" select="$path"/>
+ </xsl:call-template>
+ </xsl:variable>
+ <xsl:variable name="skin-img-dir" select="concat(string($root), 'skin/images')"/>
+<!--
+ The longest path of any level 1 tab, whose path is a subset of the current URL. Ie,
+ the path of the 'current' level 1 tab.
+ -->
+ <xsl:variable name="longest-dir">
+ <xsl:call-template name="longest-dir">
+ <xsl:with-param name="tabfile" select="/"/>
+ </xsl:call-template>
+ </xsl:variable>
+<!--
+ The longest path of any level 2 tab, whose path is a subset of the current URL. Ie,
+ the path of the 'current' level 2 tab.
+ -->
+ <xsl:variable name="level2-longest-dir">
+ <xsl:call-template name="level2-longest-dir">
+ <xsl:with-param name="tabfile" select="/"/>
+ </xsl:call-template>
+ </xsl:variable>
+ <xsl:variable name="matching-id">
+ <xsl:call-template name="matching-id"/>
+ </xsl:variable>
+<!-- Called from tabs, after it has written the outer 'div class=tabs' and
+ any other HTML -->
+ <xsl:template name="base-tabs">
+ <xsl:call-template name="pre-separator"/>
+ <xsl:for-each select="tab">
+ <xsl:if test="position()!=1">
+ <xsl:call-template name="separator"/>
+ </xsl:if>
+ <xsl:apply-templates select="." mode="level1"/>
+ </xsl:for-each>
+ <xsl:call-template name="post-separator"/>
+ </xsl:template>
+<!-- Called from tabs, after it has written the outer 'div class=tabs' and
+ any other HTML -->
+ <xsl:template name="level2tabs">
+ <xsl:call-template name="level2-pre-separator"/>
+ <xsl:for-each select="tab[@dir=$longest-dir]/tab|tab[@href=$longest-dir]/tab|tab[tab/@id=$matching-id]/tab">
+ <xsl:if test="position()!=1">
+ <xsl:call-template name="level2-separator"/>
+ </xsl:if>
+ <xsl:apply-templates select="." mode="level2"/>
+ </xsl:for-each>
+ <xsl:call-template name="level2-post-separator"/>
+ </xsl:template>
+ <xsl:template match="tab" mode="level1">
+ <xsl:choose>
+ <xsl:when test="@id and @id = $matching-id">
+ <xsl:call-template name="selected"/>
+ </xsl:when>
+ <xsl:when test="not(@id) and @dir = $longest-dir or @href = $longest-dir">
+ <xsl:call-template name="selected"/>
+ </xsl:when>
+ <xsl:when test="tab[@id = $matching-id]">
+ <xsl:call-template name="selected"/>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:call-template name="not-selected"/>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:template>
+ <xsl:template match="tab" mode="level2">
+ <xsl:choose>
+ <xsl:when test="@id and @id = $matching-id">
+ <xsl:call-template name="level2-selected"/>
+ </xsl:when>
+ <xsl:when test="@dir = $level2-longest-dir">
+ <xsl:call-template name="level2-selected"/>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:call-template name="level2-not-selected"/>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:template>
+<!-- Called from 'selected' -->
+ <xsl:template name="base-selected"><a class="selected">
+ <xsl:attribute name="href">
+ <xsl:call-template name="calculate-tab-href">
+ <xsl:with-param name="tab" select="."/>
+ <xsl:with-param name="path" select="$path"/>
+ </xsl:call-template>
+ </xsl:attribute>
+ <xsl:value-of select="@label"/></a>
+ </xsl:template>
+<!-- Called from 'not-selected' -->
+ <xsl:template name="base-not-selected"><a class="unselected">
+ <xsl:attribute name="href">
+ <xsl:call-template name="calculate-tab-href">
+ <xsl:with-param name="tab" select="."/>
+ <xsl:with-param name="path" select="$path"/>
+ </xsl:call-template>
+ </xsl:attribute>
+ <xsl:value-of select="@label"/></a>
+ </xsl:template>
+</xsl:stylesheet>
diff --git a/src/site/src/documentation/skins/common/xslt/html/tabutils.xsl b/src/site/src/documentation/skins/common/xslt/html/tabutils.xsl
new file mode 100644
index 0000000..0caaaf4
--- /dev/null
+++ b/src/site/src/documentation/skins/common/xslt/html/tabutils.xsl
@@ -0,0 +1,98 @@
+<?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.
+-->
+<!--
+Some callable templates useful when dealing with tab paths. Mostly used in
+tab-to-menu.xsl
+-->
+<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
+ <xsl:param name="site-file" select="'cocoon://abs-menulinks'"/>
+ <xsl:variable name="site" select="document($site-file)"/>
+<!-- Given the current path and a tabs.xml entry, returns a relative path to
+ the specified tab's URL. When rendering a set of tabs, this template will be
+ called once per tab.
+ -->
+ <xsl:template name="calculate-tab-href">
+ <xsl:param name="dir_index" select="'index.html'"/>
+ <xsl:param name="tab"/>
+<!-- current 'tab' node -->
+ <xsl:param name="path" select="$path"/>
+ <xsl:if test="starts-with($tab/@href, 'http')">
+<!-- Absolute URL -->
+ <xsl:value-of select="$tab/@href"/>
+ </xsl:if>
+ <xsl:if test="not(starts-with($tab/@href, 'http'))">
+<!-- Root-relative path -->
+ <xsl:variable name="backpath">
+ <xsl:call-template name="dotdots">
+ <xsl:with-param name="path" select="$path"/>
+ </xsl:call-template>
+<xsl:text>/</xsl:text>
+ <xsl:value-of select="$tab/@dir | $tab/@href"/>
+<!-- If we obviously have a directory, add /index.html -->
+ <xsl:if test="$tab/@dir or substring($tab/@href, string-length($tab/@href),
+ string-length($tab/@href)) = '/'">
+<xsl:text>/</xsl:text>
+ <xsl:if test="$tab/@indexfile">
+ <xsl:value-of select="$tab/@indexfile"/>
+ </xsl:if>
+ <xsl:if test="not(@indexfile)">
+ <xsl:value-of select="$dir_index"/>
+ </xsl:if>
+ </xsl:if>
+ </xsl:variable>
+ <xsl:value-of
+ select="translate(normalize-space(translate($backpath, ' /', '/ ')), ' /', '/ ')"/>
+<!-- Link to backpath, normalizing slashes -->
+ </xsl:if>
+ </xsl:template>
+<!--
+ The id of any tab, whose path is a subset of the current URL. Ie,
+ the path of the 'current' tab.
+ -->
+ <xsl:template name="matching-id" xmlns:l="http://apache.org/forrest/linkmap/1.0">
+ <xsl:value-of select="$site//*[starts-with(@href, $path)]/@tab"/>
+ </xsl:template>
+<!--
+ The longest path of any level 1 tab, whose path is a subset of the current URL. Ie,
+ the path of the 'current' tab.
+ -->
+ <xsl:template name="longest-dir">
+ <xsl:param name="tabfile"/>
+ <xsl:for-each select="$tabfile/tabs/tab[starts-with($path, @dir|@href)]">
+ <xsl:sort select="string-length(@dir|@href)"
+ data-type="number" order="descending"/>
+ <xsl:if test="position()=1">
+ <xsl:value-of select="@dir|@href"/>
+ </xsl:if>
+ </xsl:for-each>
+ </xsl:template>
+<!--
+ The longest path of any level 2 tab, whose path is a subset of the current URL. Ie,
+ the path of the 'current' tab.
+ -->
+ <xsl:template name="level2-longest-dir">
+ <xsl:param name="tabfile"/>
+ <xsl:for-each select="$tabfile/tabs/tab/tab[starts-with($path, @dir|@href)]">
+ <xsl:sort select="string-length(@dir|@href)"
+ data-type="number" order="descending"/>
+ <xsl:if test="position()=1">
+ <xsl:value-of select="@dir|@href"/>
+ </xsl:if>
+ </xsl:for-each>
+ </xsl:template>
+</xsl:stylesheet>
diff --git a/src/site/src/documentation/skins/common/xslt/svg/document-to-svg.xsl b/src/site/src/documentation/skins/common/xslt/svg/document-to-svg.xsl
new file mode 100644
index 0000000..08ca5ba
--- /dev/null
+++ b/src/site/src/documentation/skins/common/xslt/svg/document-to-svg.xsl
@@ -0,0 +1,45 @@
+<?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.
+-->
+<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" >
+ <xsl:output method="xml" media-type="image/svg" omit-xml-declaration="yes" indent="yes"/>
+<!-- the skinconf file -->
+ <xsl:param name="config-file"/>
+ <xsl:variable name="config" select="document($config-file)/skinconfig"/>
+<!-- Get the section depth to use when generating the minitoc (default is 2) -->
+ <xsl:variable name="toc-max-depth" select="number($config/toc/@max-depth)"/>
+ <xsl:param name="numbersections" select="'true'"/>
+<!-- Section depth at which we stop numbering and just indent -->
+ <xsl:param name="numbering-max-depth" select="'3'"/>
+ <xsl:param name="ctxbasedir" select="."/>
+ <xsl:param name="xmlbasedir"/>
+ <xsl:template match="/">
+ <svg width="1305" height="1468" xmlns="http://www.w3.org/2000/svg">
+ <g transform="translate(0 0)">
+ <xsl:apply-templates/>
+ </g>
+ </svg>
+ </xsl:template>
+ <xsl:template match="document">
+ <text x="00px" y="30px" style="font-size:20;">
+ <xsl:value-of select="header/title"/>
+ </text>
+ <text x="0px" y="50px" style="font-size:12;">
+ <xsl:apply-templates/>
+ </text>
+ </xsl:template>
+</xsl:stylesheet>
diff --git a/src/site/src/documentation/skins/lucene/css/basic.css b/src/site/src/documentation/skins/lucene/css/basic.css
new file mode 100644
index 0000000..4ed58b9
--- /dev/null
+++ b/src/site/src/documentation/skins/lucene/css/basic.css
@@ -0,0 +1,166 @@
+/*
+* 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.
+*/
+/**
+ * General
+ */
+
+img { border: 0; }
+
+#content table {
+ border: 0;
+ width: 100%;
+}
+/*Hack to get IE to render the table at 100%*/
+* html #content table { margin-left: -3px; }
+
+#content th,
+#content td {
+ margin: 0;
+ padding: 0;
+ vertical-align: top;
+}
+
+.clearboth {
+ clear: both;
+}
+
+.note, .warning, .fixme {
+ border: solid black 1px;
+ margin: 1em 3em;
+}
+
+.note .label {
+ background: #369;
+ color: white;
+ font-weight: bold;
+ padding: 5px 10px;
+}
+.note .content {
+ background: #F0F0FF;
+ color: black;
+ line-height: 120%;
+ font-size: 90%;
+ padding: 5px 10px;
+}
+.warning .label {
+ background: #C00;
+ color: white;
+ font-weight: bold;
+ padding: 5px 10px;
+}
+.warning .content {
+ background: #FFF0F0;
+ color: black;
+ line-height: 120%;
+ font-size: 90%;
+ padding: 5px 10px;
+}
+.fixme .label {
+ background: #C6C600;
+ color: black;
+ font-weight: bold;
+ padding: 5px 10px;
+}
+.fixme .content {
+ padding: 5px 10px;
+}
+
+/**
+ * Typography
+ */
+
+body {
+ font-family: verdana, "Trebuchet MS", arial, helvetica, sans-serif;
+ font-size: 100%;
+}
+
+#content {
+ font-family: Georgia, Palatino, Times, serif;
+ font-size: 95%;
+}
+#tabs {
+ font-size: 70%;
+}
+#menu {
+ font-size: 80%;
+}
+#footer {
+ font-size: 70%;
+}
+
+h1, h2, h3, h4, h5, h6 {
+ font-family: "Trebuchet MS", verdana, arial, helvetica, sans-serif;
+ font-weight: bold;
+ margin-top: 1em;
+ margin-bottom: .5em;
+}
+
+h1 {
+ margin-top: 0;
+ margin-bottom: 1em;
+ font-size: 1.4em;
+}
+#content h1 {
+ font-size: 160%;
+ margin-bottom: .5em;
+}
+#menu h1 {
+ margin: 0;
+ padding: 10px;
+ background: #336699;
+ color: white;
+}
+h2 { font-size: 120%; }
+h3 { font-size: 100%; }
+h4 { font-size: 90%; }
+h5 { font-size: 80%; }
+h6 { font-size: 75%; }
+
+p {
+ line-height: 120%;
+ text-align: left;
+ margin-top: .5em;
+ margin-bottom: 1em;
+}
+
+#content li,
+#content th,
+#content td,
+#content li ul,
+#content li ol{
+ margin-top: .5em;
+ margin-bottom: .5em;
+}
+
+
+#content li li,
+#minitoc-area li{
+ margin-top: 0em;
+ margin-bottom: 0em;
+}
+
+#content .attribution {
+ text-align: right;
+ font-style: italic;
+ font-size: 85%;
+ margin-top: 1em;
+}
+
+.codefrag {
+ font-family: "Courier New", Courier, monospace;
+ font-size: 110%;
+}
diff --git a/src/site/src/documentation/skins/lucene/css/print.css b/src/site/src/documentation/skins/lucene/css/print.css
new file mode 100644
index 0000000..8916b9f
--- /dev/null
+++ b/src/site/src/documentation/skins/lucene/css/print.css
@@ -0,0 +1,54 @@
+/*
+* 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.
+*/
+body {
+ font-family: Georgia, Palatino, serif;
+ font-size: 12pt;
+ background: white;
+}
+
+#tabs,
+#menu,
+#content .toc {
+ display: none;
+}
+
+#content {
+ width: auto;
+ padding: 0;
+ float: none !important;
+ color: black;
+ background: inherit;
+}
+
+a:link, a:visited {
+ color: #336699;
+ background: inherit;
+ text-decoration: underline;
+}
+
+#top .logo {
+ padding: 0;
+ margin: 0 0 2em 0;
+}
+
+#footer {
+ margin-top: 4em;
+}
+
+acronym {
+ border: 0;
+}
diff --git a/src/site/src/documentation/skins/lucene/css/profile.css.xslt b/src/site/src/documentation/skins/lucene/css/profile.css.xslt
new file mode 100644
index 0000000..a1dcb23
--- /dev/null
+++ b/src/site/src/documentation/skins/lucene/css/profile.css.xslt
@@ -0,0 +1,182 @@
+<?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.
+-->
+<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
+ <xsl:import href="../../common/css/forrest.css.xslt"/>
+<!-- xsl:output is not used by Forrest but makes it possible to debug the
+ stylesheet in standalone editors -->
+ <xsl:output method = "text" omit-xml-declaration="yes" />
+<!-- ==================== main block colors ============================ -->
+ <xsl:template match="color[@name='header']">
+#top { background-color: <xsl:value-of select="@value"/>;}
+</xsl:template>
+ <xsl:template match="color[@name='tab-selected']">
+#top .header .current { background-color: <xsl:value-of select="@value"/>;}
+#top .header .current a:link { color: <xsl:value-of select="@link"/>; }
+#top .header .current a:visited { color: <xsl:value-of select="@vlink"/>; }
+#top .header .current a:hover { color: <xsl:value-of select="@hlink"/>; }
+</xsl:template>
+ <xsl:template match="color[@name='tab-unselected']">
+#tabs li { background-color: <xsl:value-of select="@value"/> ;}
+#tabs li a:link { color: <xsl:value-of select="@link"/>; }
+#tabs li a:visited { color: <xsl:value-of select="@vlink"/>; }
+#tabs li a:hover { color: <xsl:value-of select="@hlink"/>; }
+</xsl:template>
+ <xsl:template match="color[@name='subtab-selected']">
+#level2tabs a.selected { background-color: <xsl:value-of select="@value"/> ;}
+#level2tabs a:link { color: <xsl:value-of select="@link"/>; }
+#level2tabs a:visited { color: <xsl:value-of select="@vlink"/>; }
+#level2tabs a:hover { color: <xsl:value-of select="@hlink"/>; }
+</xsl:template>
+ <xsl:template match="color[@name='subtab-unselected']">
+#level2tabs { background-color: <xsl:value-of select="@value"/>;}
+#level2tabs a.unselected:link { color: <xsl:value-of select="@link"/>; }
+#level2tabs a.unselected:visited { color: <xsl:value-of select="@vlink"/>; }
+#level2tabs a.unselected:hover { color: <xsl:value-of select="@hlink"/>; }
+</xsl:template>
+ <xsl:template match="color[@name='heading']">
+.heading { background-color: <xsl:value-of select="@value"/>;}
+</xsl:template>
+ <xsl:template match="color[@name='subheading']">
+.boxed { background-color: <xsl:value-of select="@value"/>;}
+.underlined_5 {border-bottom: solid 5px <xsl:value-of select="@value"/>;}
+.underlined_10 {border-bottom: solid 10px <xsl:value-of select="@value"/>;}
+table caption {
+background-color: <xsl:value-of select="@value"/>;
+color: <xsl:value-of select="@font"/>;
+}
+</xsl:template>
+ <xsl:template match="color[@name='feedback']">
+#feedback {
+color: <xsl:value-of select="@font"/>;
+background: <xsl:value-of select="@value"/>;
+text-align: <xsl:value-of select="@align"/>;
+}
+#feedback #feedbackto {
+color: <xsl:value-of select="@font"/>;
+}
+</xsl:template>
+ <xsl:template match="color[@name='breadtrail']">
+#main .breadtrail {
+background: <xsl:value-of select="@value"/>;
+color: <xsl:value-of select="@font"/>;
+}
+#main .breadtrail a:link { color: <xsl:value-of select="@link"/>; }
+#main .breadtrail a:visited { color: <xsl:value-of select="@vlink"/>; }
+#main .breadtrail a:hover { color: <xsl:value-of select="@hlink"/>; }
+#top .breadtrail {
+background: <xsl:value-of select="@value"/>;
+color: <xsl:value-of select="@font"/>;
+}
+#top .breadtrail a:link { color: <xsl:value-of select="@link"/>; }
+#top .breadtrail a:visited { color: <xsl:value-of select="@vlink"/>; }
+#top .breadtrail a:hover { color: <xsl:value-of select="@hlink"/>; }
+</xsl:template>
+<!--Fix for other (old) profiles-->
+ <xsl:template match="color[@name='navstrip']">
+#publishedStrip {
+color: <xsl:value-of select="@font"/>;
+background: <xsl:value-of select="@value"/>;
+}
+</xsl:template>
+<!--has to go after the nav-strip (no 'navstrip')-->
+ <xsl:template match="color[@name='published']">
+#publishedStrip {
+color: <xsl:value-of select="@font"/>;
+background: <xsl:value-of select="@value"/>;
+}
+</xsl:template>
+ <xsl:template match="color[@name='toolbox']">
+#menu .menupagetitle { background-color: <xsl:value-of select="@value"/>;
+ color: <xsl:value-of select="@font"/>;}
+</xsl:template>
+ <xsl:template match="color[@name='border']">
+#menu { border-color: <xsl:value-of select="@value"/>;}
+#menu .menupagetitle { border-color: <xsl:value-of select="@value"/>;}
+#menu .menupageitemgroup { border-color: <xsl:value-of select="@value"/>;}
+</xsl:template>
+ <xsl:template match="color[@name='menu']">
+#menu { background-color: <xsl:value-of select="@value"/>;}
+#menu { color: <xsl:value-of select="@font"/>;}
+#menu a:link { color: <xsl:value-of select="@link"/>;}
+#menu a:visited { color: <xsl:value-of select="@vlink"/>;}
+#menu a:hover {
+background-color: <xsl:value-of select="@value"/>;
+color: <xsl:value-of select="@hlink"/>;}
+</xsl:template>
+ <xsl:template match="color[@name='dialog']">
+#menu .menupageitemgroup {
+background-color: <xsl:value-of select="@value"/>;
+}
+#menu .menupageitem {
+color: <xsl:value-of select="@font"/>;
+}
+#menu .menupageitem a:link { color: <xsl:value-of select="@link"/>;}
+#menu .menupageitem a:visited { color: <xsl:value-of select="@vlink"/>;}
+#menu .menupageitem a:hover {
+background-color: <xsl:value-of select="@value"/>;
+color: <xsl:value-of select="@hlink"/>;
+}
+</xsl:template>
+ <xsl:template match="color[@name='menuheading']">
+#menu h1 {
+color: <xsl:value-of select="@font"/>;
+background-color: <xsl:value-of select="@value"/>;
+}
+</xsl:template>
+ <xsl:template match="color[@name='searchbox']">
+#top .searchbox {
+background-color: <xsl:value-of select="@value"/> ;
+color: <xsl:value-of select="@font"/>;
+}
+</xsl:template>
+ <xsl:template match="color[@name='body']">
+body{
+background-color: <xsl:value-of select="@value"/>;
+color: <xsl:value-of select="@font"/>;
+}
+a:link { color:<xsl:value-of select="@link"/>}
+a:visited { color:<xsl:value-of select="@vlink"/>}
+a:hover { color:<xsl:value-of select="@hlink"/>}
+
+</xsl:template>
+ <xsl:template match="color[@name='footer']">
+#footer { background-color: <xsl:value-of select="@value"/>;}
+</xsl:template>
+<!-- ==================== other colors ============================ -->
+ <xsl:template match="color[@name='highlight']">
+.highlight { background-color: <xsl:value-of select="@value"/>;}
+</xsl:template>
+ <xsl:template match="color[@name='fixme']">
+.fixme { border-color: <xsl:value-of select="@value"/>;}
+</xsl:template>
+ <xsl:template match="color[@name='note']">
+.note { border-color: <xsl:value-of select="@value"/>;}
+</xsl:template>
+ <xsl:template match="color[@name='warning']">
+.warning { border-color: <xsl:value-of select="@value"/>;}
+</xsl:template>
+ <xsl:template match="color[@name='code']">
+.code { border-color: <xsl:value-of select="@value"/>;}
+</xsl:template>
+ <xsl:template match="color[@name='table']">
+.ForrestTable { background-color: <xsl:value-of select="@value"/>;}
+</xsl:template>
+ <xsl:template match="color[@name='table-cell']">
+.ForrestTable td { background-color: <xsl:value-of select="@value"/>;}
+</xsl:template>
+</xsl:stylesheet>
diff --git a/src/site/src/documentation/skins/lucene/css/screen.css b/src/site/src/documentation/skins/lucene/css/screen.css
new file mode 100644
index 0000000..aa8c457
--- /dev/null
+++ b/src/site/src/documentation/skins/lucene/css/screen.css
@@ -0,0 +1,587 @@
+/*
+* 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.
+*/
+body { margin: 0px 0px 0px 0px; font-family: Verdana, Helvetica, sans-serif; }
+
+h1 { font-size : 160%; margin: 0px 0px 0px 0px; padding: 0px; }
+h2 { font-size : 140%; margin: 1em 0px 0.8em 0px; padding: 0px; font-weight : bold;}
+h3 { font-size : 130%; margin: 0.8em 0px 0px 0px; padding: 0px; font-weight : bold; }
+.h3 { margin: 22px 0px 3px 0px; }
+h4 { font-size : 120%; margin: 0.7em 0px 0px 0px; padding: 0px; font-weight : normal; text-align: left; }
+.h4 { margin: 18px 0px 0px 0px; }
+h4.faq { font-size : 120%; margin: 18px 0px 0px 0px; padding: 0px; font-weight : bold; text-align: left; }
+h5 { font-size : 100%; margin: 14px 0px 0px 0px; padding: 0px; font-weight : normal; text-align: left; }
+
+/**
+* table
+*/
+table .title { background-color: #000000; }
+.ForrestTable {
+ color: #ffffff;
+ background-color: #7099C5;
+ width: 100%;
+ font-size : 100%;
+ empty-cells: show;
+}
+table caption {
+ padding-left: 5px;
+ color: white;
+ text-align: left;
+ font-weight: bold;
+ background-color: #000000;
+}
+.ForrestTable td {
+ color: black;
+ background-color: #f0f0ff;
+}
+.ForrestTable th { text-align: center; }
+/**
+ * Page Header
+ */
+
+#top {
+ position: relative;
+ float: left;
+ width: 100%;
+ background: #294563; /* if you want a background in the header, put it here */
+}
+
+#top .breadtrail {
+ background: #CFDCED;
+ color: black;
+ border-bottom: solid 1px white;
+ padding: 3px 10px;
+ font-size: 75%;
+}
+#top .breadtrail a { color: black; }
+
+#top .header {
+ float: left;
+ width: 100%;
+ background: url("images/header_white_line.gif") repeat-x bottom;
+}
+
+#top .grouplogo {
+ padding: 7px 0 10px 10px;
+ float: left;
+ text-align: left;
+}
+#top .projectlogo {
+ padding: 7px 0 10px 10px;
+ float: left;
+ width: 33%;
+ text-align: right;
+}
+#top .projectlogoA1 {
+ padding: 7px 0 10px 10px;
+ float: right;
+}
+html>body #top .searchbox {
+ bottom: 0px;
+}
+#top .searchbox {
+ position: absolute;
+ right: 10px;
+ height: 42px;
+ font-size: 70%;
+ white-space: nowrap;
+ text-align: right;
+ color: white;
+ background-color: #000000;
+ z-index:0;
+ background-image: url(images/rc-t-l-5-1header-2searchbox-3searchbox.png);
+ background-repeat: no-repeat;
+ background-position: top left;
+ bottom: -1px; /* compensate for IE rendering issue */
+}
+
+#top .searchbox form {
+ padding: 5px 10px;
+ margin: 0;
+}
+#top .searchbox p {
+ padding: 0 0 2px 0;
+ margin: 0;
+}
+#top .searchbox input {
+ font-size: 100%;
+}
+
+#tabs {
+ clear: both;
+ padding-left: 10px;
+ margin: 0;
+ list-style: none;
+}
+/* background: #CFDCED url("images/tab-right.gif") no-repeat right top;*/
+#tabs li {
+ float: left;
+ background-image: url(images/rc-t-r-5-1header-2tab-unselected-3tab-unselected.png);
+ background-repeat: no-repeat;
+ background-position: top right;
+ background-color: #000000;
+ margin: 0 3px 0 0;
+ padding: 0;
+}
+
+/*background: url("images/tab-left.gif") no-repeat left top;*/
+#tabs li a {
+ float: left;
+ display: block;
+ font-family: verdana, arial, sans-serif;
+ text-decoration: none;
+ color: black;
+ white-space: nowrap;
+ background-image: url(images/rc-t-l-5-1header-2tab-unselected-3tab-unselected.png);
+ background-repeat: no-repeat;
+ background-position: top left;
+ padding: 5px 15px 4px;
+ width: .1em; /* IE/Win fix */
+}
+
+#tabs li a:hover {
+
+ cursor: pointer;
+ text-decoration:underline;
+}
+
+#tabs > li a { width: auto; } /* Rest of IE/Win fix */
+
+/* Commented Backslash Hack hides rule from IE5-Mac \*/
+#tabs a { float: none; }
+/* End IE5-Mac hack */
+
+#top .header .current {
+ background-color: #4C6C8F;
+ background-image: url(images/rc-t-r-5-1header-2tab-selected-3tab-selected.png);
+ background-repeat: no-repeat;
+ background-position: top right;
+}
+#top .header .current a {
+ font-weight: bold;
+ padding-bottom: 5px;
+ color: white;
+ background-image: url(images/rc-t-l-5-1header-2tab-selected-3tab-selected.png);
+ background-repeat: no-repeat;
+ background-position: top left;
+}
+#publishedStrip {
+ padding-right: 10px;
+ padding-left: 20px;
+ padding-top: 3px;
+ padding-bottom:3px;
+ color: #ffffff;
+ font-size : 60%;
+ font-weight: bold;
+ background-color: #4C6C8F;
+ text-align:right;
+}
+
+#level2tabs {
+margin: 0;
+float:left;
+position:relative;
+
+}
+
+
+
+#level2tabs a:hover {
+
+ cursor: pointer;
+ text-decoration:underline;
+
+}
+
+#level2tabs a{
+
+ cursor: pointer;
+ text-decoration:none;
+ background-image: url('images/chapter.gif');
+ background-repeat: no-repeat;
+ background-position: center left;
+ padding-left: 6px;
+ margin-left: 6px;
+}
+
+/*
+* border-top: solid #4C6C8F 15px;
+*/
+#main {
+ position: relative;
+ background: white;
+ clear:both;
+}
+#main .breadtrail {
+ clear:both;
+ position: relative;
+ background: #CFDCED;
+ color: black;
+ border-bottom: solid 1px black;
+ border-top: solid 1px black;
+ padding: 0px 180px;
+ font-size: 75%;
+ z-index:10;
+}
+/**
+* Round corner
+*/
+#roundtop {
+ background-image: url(images/rc-t-r-15-1body-2menu-3menu.png);
+ background-repeat: no-repeat;
+ background-position: top right;
+}
+
+#roundbottom {
+ background-image: url(images/rc-b-r-15-1body-2menu-3menu.png);
+ background-repeat: no-repeat;
+ background-position: top right;
+}
+
+img.corner {
+ width: 15px;
+ height: 15px;
+ border: none;
+ display: block !important;
+}
+
+.roundtopsmall {
+ background-image: url(images/rc-t-r-5-1header-2searchbox-3searchbox.png);
+ background-repeat: no-repeat;
+ background-position: top right;
+}
+
+#roundbottomsmall {
+ background-image: url(images/rc-b-r-5-1header-2tab-selected-3tab-selected.png);
+ background-repeat: no-repeat;
+ background-position: top right;
+}
+
+img.cornersmall {
+ width: 5px;
+ height: 5px;
+ border: none;
+ display: block !important;
+}
+/**
+ * Side menu
+ */
+#menu a { font-weight: normal; text-decoration: none;}
+#menu a:visited { font-weight: normal; }
+#menu a:active { font-weight: normal; }
+#menu a:hover { font-weight: normal; text-decoration:underline;}
+
+#menuarea { width:10em;}
+#menu {
+ position: relative;
+ float: left;
+ width: 160px;
+ padding-top: 0px;
+ top:-18px;
+ left:10px;
+ z-index: 20;
+ background-color: #f90;
+ font-size : 70%;
+
+}
+
+.menutitle {
+ cursor:pointer;
+ padding: 3px 12px;
+ margin-left: 10px;
+ background-image: url('images/chapter.gif');
+ background-repeat: no-repeat;
+ background-position: center left;
+ font-weight : bold;
+
+
+}
+
+.menutitle:hover{text-decoration:underline;cursor: pointer;}
+
+#menu .menuitemgroup {
+ margin: 0px 0px 6px 8px;
+ padding: 0px;
+ font-weight : bold; }
+
+#menu .selectedmenuitemgroup{
+ margin: 0px 0px 0px 8px;
+ padding: 0px;
+ font-weight : normal;
+
+ }
+
+#menu .menuitem {
+ padding: 2px 0px 1px 13px;
+ background-image: url('images/page.gif');
+ background-repeat: no-repeat;
+ background-position: center left;
+ font-weight : normal;
+ margin-left: 10px;
+}
+
+#menu .menupage {
+ margin: 2px 0px 1px 10px;
+ padding: 0px 3px 0px 12px;
+ background-image: url('images/page.gif');
+ background-repeat: no-repeat;
+ background-position: center left;
+ font-style : normal;
+}
+#menu .menupagetitle {
+ padding: 0px 0px 0px 1px;
+ font-style : normal;
+ border-style: solid;
+ border-width: 1px;
+ margin-right: 10px;
+
+}
+#menu .menupageitemgroup {
+ padding: 3px 0px 4px 6px;
+ font-style : normal;
+ border-bottom: 1px solid ;
+ border-left: 1px solid ;
+ border-right: 1px solid ;
+ margin-right: 10px;
+}
+#menu .menupageitem {
+ font-style : normal;
+ font-weight : normal;
+ border-width: 0px;
+ font-size : 90%;
+}
+#menu #credit {
+ text-align: center;
+}
+#menu #credit2 {
+ text-align: center;
+ padding: 3px 3px 3px 3px;
+ background-color: #ffffff;
+}
+#menu .searchbox {
+ text-align: center;
+}
+#menu .searchbox form {
+ padding: 3px 3px;
+ margin: 0;
+}
+#menu .searchbox input {
+ font-size: 100%;
+}
+
+#content {
+ padding: 20px 20px 20px 180px;
+ margin: 0;
+ font : small Verdana, Helvetica, sans-serif;
+ font-size : 80%;
+}
+
+#content ul {
+ margin: 0;
+ padding: 0 25px;
+}
+#content li {
+ padding: 0 5px;
+}
+#feedback {
+ color: black;
+ background: #CFDCED;
+ text-align:center;
+ margin-top: 5px;
+}
+#feedback #feedbackto {
+ font-size: 90%;
+ color: black;
+}
+#footer {
+ clear: both;
+ position: relative; /* IE bugfix (http://www.dracos.co.uk/web/css/ie6floatbug/) */
+ width: 100%;
+ background: #CFDCED;
+ border-top: solid 1px #4C6C8F;
+ color: black;
+}
+#footer .copyright {
+ position: relative; /* IE bugfix cont'd */
+ padding: 5px;
+ margin: 0;
+ width: 45%;
+}
+#footer .lastmodified {
+ position: relative; /* IE bugfix cont'd */
+ float: right;
+ width: 45%;
+ padding: 5px;
+ margin: 0;
+ text-align: right;
+}
+#footer a { color: white; }
+
+#footer #logos {
+ text-align: left;
+}
+
+
+/**
+ * Misc Styles
+ */
+
+acronym { cursor: help; }
+.boxed { background-color: #a5b6c6;}
+.underlined_5 {border-bottom: solid 5px #4C6C8F;}
+.underlined_10 {border-bottom: solid 10px #4C6C8F;}
+/* ==================== snail trail ============================ */
+
+.trail {
+ position: relative; /* IE bugfix cont'd */
+ font-size: 70%;
+ text-align: right;
+ float: right;
+ margin: -10px 5px 0px 5px;
+ padding: 0;
+}
+
+#motd-area {
+ position: relative; /* IE bugfix cont'd */
+ float: right;
+ width: 35%;
+ background-color: #f0f0ff;
+ border-top: solid 1px #4C6C8F;
+ border-bottom: solid 1px #4C6C8F;
+ margin-bottom: 15px;
+ margin-left: 15px;
+ margin-right: 10%;
+ padding-bottom: 5px;
+ padding-top: 5px;
+}
+
+#minitoc-area {
+ border-top: solid 1px #4C6C8F;
+ border-bottom: solid 1px #4C6C8F;
+ margin: 15px 10% 5px 15px;
+ /* margin-bottom: 15px;
+ margin-left: 15px;
+ margin-right: 10%;*/
+ padding-bottom: 7px;
+ padding-top: 5px;
+}
+.minitoc {
+ list-style-image: url('images/current.gif');
+ font-weight: normal;
+}
+
+li p {
+ margin: 0;
+ padding: 0;
+}
+
+.pdflink {
+ position: relative; /* IE bugfix cont'd */
+ float: right;
+ margin: 0px 5px;
+ padding: 0;
+}
+.pdflink br {
+ margin-top: -10px;
+ padding-left: 1px;
+}
+.pdflink a {
+ display: block;
+ font-size: 70%;
+ text-align: center;
+ margin: 0;
+ padding: 0;
+}
+
+.pdflink img {
+ display: block;
+ height: 16px;
+ width: 16px;
+}
+.xmllink {
+ position: relative; /* IE bugfix cont'd */
+ float: right;
+ margin: 0px 5px;
+ padding: 0;
+}
+.xmllink br {
+ margin-top: -10px;
+ padding-left: 1px;
+}
+.xmllink a {
+ display: block;
+ font-size: 70%;
+ text-align: center;
+ margin: 0;
+ padding: 0;
+}
+
+.xmllink img {
+ display: block;
+ height: 16px;
+ width: 16px;
+}
+.podlink {
+ position: relative; /* IE bugfix cont'd */
+ float: right;
+ margin: 0px 5px;
+ padding: 0;
+}
+.podlink br {
+ margin-top: -10px;
+ padding-left: 1px;
+}
+.podlink a {
+ display: block;
+ font-size: 70%;
+ text-align: center;
+ margin: 0;
+ padding: 0;
+}
+
+.podlink img {
+ display: block;
+ height: 16px;
+ width: 16px;
+}
+
+.printlink {
+ position: relative; /* IE bugfix cont'd */
+ float: right;
+}
+.printlink br {
+ margin-top: -10px;
+ padding-left: 1px;
+}
+.printlink a {
+ display: block;
+ font-size: 70%;
+ text-align: center;
+ margin: 0;
+ padding: 0;
+}
+.printlink img {
+ display: block;
+ height: 16px;
+ width: 16px;
+}
+
+p.instruction {
+ display: list-item;
+ list-style-image: url('../images/instruction_arrow.png');
+ list-style-position: outside;
+ margin-left: 2em;
+}
diff --git a/src/site/src/documentation/skins/lucene/note.txt b/src/site/src/documentation/skins/lucene/note.txt
new file mode 100644
index 0000000..d34c8db
--- /dev/null
+++ b/src/site/src/documentation/skins/lucene/note.txt
@@ -0,0 +1,50 @@
+Notes for developer:
+
+--Legend-------------------
+TODO -> blocker
+DONE -> blocker
+ToDo -> enhancement bug
+done -> enhancement bug
+
+--Issues-------------------
+- the corner images should be rendered through svg with the header color.
+-> DONE
+-> ToDo: get rid of the images and use only divs!
+
+- the menu points should be displayed "better".
+-> DONE
+-- Use the krysalis-site menu approach for the overall menu display.
+-> DONE
+-- Use the old lenya innermenu approch to further enhance the menu .
+-> DONE
+
+- the content area needs some attention.
+-> DONE
+-- introduce the heading scheme from krysalis (<headings type="clean|box|underlined"/>)
+-> DONE
+-> ToDo: make box with round corners
+-> done: make underlined with variable border height
+-> ToDo: make underline with bottom round corner
+-- introduce the toc for each html-page
+-> DONE
+-- introduce the external-link-images.
+-> DONE
+
+- the publish note should be where now only a border is.
+Like <div id="published"/>
+-> DONE
+, but make it configurable.
+-> DONE
+- footer needs some attention
+-> DONE
+-- the footer do not have the color profile! Enable it!
+-> DONE
+-- the footer should as well contain a feedback link.
+See http://issues.apache.org/eyebrowse/ReadMsg?listName=forrest-user@xml.apache.org&msgNo=71
+-> DONE
+
+- introduce credits alternativ location
+-> DONE
+
+- border for published / breadtrail / menu /tab divs
+-> ToDo
\ No newline at end of file
diff --git a/src/site/src/documentation/skins/lucene/skinconf.xsl b/src/site/src/documentation/skins/lucene/skinconf.xsl
new file mode 100644
index 0000000..2f8df12
--- /dev/null
+++ b/src/site/src/documentation/skins/lucene/skinconf.xsl
@@ -0,0 +1,137 @@
+<?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.
+-->
+<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
+ <xsl:template match="skinconfig">
+ <xsl:if test="not(colors)">
+ <colors>
+<!-- Lenya -->
+ <color name="header" value="#ffffff"/>
+ <color name="tab-selected" value="#4C6C8F" link="#ffffff" vlink="#ffffff" hlink="#ffffff"/>
+ <color name="tab-unselected" value="#E5E4D9" link="#000000" vlink="#000000" hlink="#000000"/>
+ <color name="subtab-selected" value="#4C6C8F" link="#ffffff" vlink="#ffffff" hlink="#ffffff"/>
+ <color name="subtab-unselected" value="#E5E4D9" link="#000000" vlink="#000000" hlink="#000000"/>
+ <color name="heading" value="#E5E4D9"/>
+ <color name="subheading" value="#E5E4D9"/>
+ <color name="published" value="#4C6C8F" font="#FFFFFF"/>
+ <color name="feedback" value="#4C6C8F" font="#FFFFFF" align="center"/>
+ <color name="navstrip" value="#E5E4D9" font="#000000"/>
+ <color name="toolbox" value="#CFDCED" font="#000000"/>
+ <color name="border" value="#999999"/>
+ <color name="menu" value="#4C6C8F" font="#ffffff" link="#ffffff" vlink="#ffffff" hlink="#ffffff" />
+ <color name="menuheading" value="#cfdced" font="#000000" />
+ <color name="searchbox" value="#E5E4D9" font="#000000"/>
+ <color name="dialog" value="#E5E4D9" font="#000000"/>
+ <color name="body" value="#ffffff" />
+ <color name="table" value="#ccc"/>
+ <color name="table-cell" value="#ffffff"/>
+ <color name="highlight" value="#ffff00"/>
+ <color name="fixme" value="#cc6600"/>
+ <color name="note" value="#006699"/>
+ <color name="warning" value="#990000"/>
+ <color name="code" value="#003366"/>
+ <color name="footer" value="#E5E4D9"/>
+ </colors>
+ </xsl:if>
+ <xsl:copy>
+ <xsl:copy-of select="@*"/>
+ <xsl:copy-of select="node()[not(name(.)='colors')]"/>
+ <xsl:apply-templates select="colors"/>
+ </xsl:copy>
+ </xsl:template>
+ <xsl:template match="colors">
+ <xsl:copy>
+ <xsl:copy-of select="@*"/>
+ <xsl:copy-of select="node()[name(.)='color']"/>
+ <xsl:if test="not(color[@name='header'])">
+ <color name="header" value="#FFFFFF"/>
+ </xsl:if>
+ <xsl:if test="not(color[@name='tab-selected'])">
+ <color name="tab-selected" value="#4C6C8F" link="#ffffff" vlink="#ffffff" hlink="#ffffff"/>
+ </xsl:if>
+ <xsl:if test="not(color[@name='tab-unselected'])">
+ <color name="tab-unselected" value="#E5E4D9" link="#000000" vlink="#000000" hlink="#000000"/>
+ </xsl:if>
+ <xsl:if test="not(color[@name='subtab-selected'])">
+ <color name="subtab-selected" value="#4C6C8F" link="#ffffff" vlink="#ffffff" hlink="#ffffff"/>
+ </xsl:if>
+ <xsl:if test="not(color[@name='subtab-unselected'])">
+ <color name="subtab-unselected" value="#E5E4D9" link="#000000" vlink="#000000" hlink="#000000"/>
+ </xsl:if>
+ <xsl:if test="not(color[@name='heading'])">
+ <color name="heading" value="#E5E4D9"/>
+ </xsl:if>
+ <xsl:if test="not(color[@name='subheading'])">
+ <color name="subheading" value="#E5E4D9"/>
+ </xsl:if>
+ <xsl:if test="not(color[@name='feedback'])">
+ <color name="feedback" value="#4C6C8F" font="#FFFFFF" align="center"/>
+ </xsl:if>
+ <xsl:if test="not(color[@name='published'])">
+ <color name="published" value="#4C6C8F" font="#FFFFFF"/>
+ </xsl:if>
+ <xsl:if test="not(color[@name='navstrip'])">
+ <color name="navstrip" value="#E5E4D9" font="#000000"/>
+ </xsl:if>
+ <xsl:if test="not(color[@name='toolbox'])">
+ <color name="toolbox" value="#CFDCED" font="#000000"/>
+ </xsl:if>
+ <xsl:if test="not(color[@name='border'])">
+ <color name="border" value="#999999"/>
+ </xsl:if>
+ <xsl:if test="not(color[@name='menu'])">
+ <color name="menu" value="#4C6C8F" font="#ffffff" link="#ffffff" vlink="#ffffff" hlink="#ffffff" />
+ </xsl:if>
+ <xsl:if test="not(color[@name='menuheading'])">
+ <color name="menuheading" value="#cfdced" font="#000000" />
+ </xsl:if>
+ <xsl:if test="not(color[@name='searchbox'])">
+ <color name="searchbox" value="#E5E4D9" font="#000000"/>
+ </xsl:if>
+ <xsl:if test="not(color[@name='dialog'])">
+ <color name="dialog" value="#E5E4D9" font="#000000" link="#000000" vlink="#000000" hlink="#000000"/>
+ </xsl:if>
+ <xsl:if test="not(color[@name='body'])">
+ <color name="body" value="#ffffff" />
+ </xsl:if>
+ <xsl:if test="not(color[@name='table'])">
+ <color name="table" value="#ccc"/>
+ </xsl:if>
+ <xsl:if test="not(color[@name='table-cell'])">
+ <color name="table-cell" value="#ffffff"/>
+ </xsl:if>
+ <xsl:if test="not(color[@name='highlight'])">
+ <color name="highlight" value="#ffff00"/>
+ </xsl:if>
+ <xsl:if test="not(color[@name='fixme'])">
+ <color name="fixme" value="#c60"/>
+ </xsl:if>
+ <xsl:if test="not(color[@name='note'])">
+ <color name="note" value="#069"/>
+ </xsl:if>
+ <xsl:if test="not(color[@name='warning'])">
+ <color name="warning" value="#900"/>
+ </xsl:if>
+ <xsl:if test="not(color[@name='code'])">
+ <color name="code" value="#a5b6c6"/>
+ </xsl:if>
+ <xsl:if test="not(color[@name='footer'])">
+ <color name="footer" value="#E5E4D9"/>
+ </xsl:if>
+ </xsl:copy>
+ </xsl:template>
+</xsl:stylesheet>
diff --git a/src/site/src/documentation/skins/lucene/xslt/fo/document-to-fo.xsl b/src/site/src/documentation/skins/lucene/xslt/fo/document-to-fo.xsl
new file mode 100644
index 0000000..0fb2a23
--- /dev/null
+++ b/src/site/src/documentation/skins/lucene/xslt/fo/document-to-fo.xsl
@@ -0,0 +1,22 @@
+<?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.
+-->
+<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
+ xmlns:fo="http://www.w3.org/1999/XSL/Format"
+ version="1.0">
+ <xsl:import href="../../../common/xslt/fo/document-to-fo.xsl"/>
+</xsl:stylesheet>
diff --git a/src/site/src/documentation/skins/lucene/xslt/html/book-to-menu.xsl b/src/site/src/documentation/skins/lucene/xslt/html/book-to-menu.xsl
new file mode 100644
index 0000000..5242fc8
--- /dev/null
+++ b/src/site/src/documentation/skins/lucene/xslt/html/book-to-menu.xsl
@@ -0,0 +1,53 @@
+<?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.
+-->
+<!--
+book-to-menu.xsl generates the HTML menu. See the imported book-to-menu.xsl for
+details.
+-->
+<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
+ <xsl:import href="../../../common/xslt/html/book-to-menu.xsl"/>
+ <xsl:template match="book">
+ <div id="menu">
+ <ul>
+ <xsl:apply-templates select="menu"/>
+ </ul>
+ </div>
+ </xsl:template>
+ <xsl:template match="menu">
+ <li><h1>
+ <xsl:value-of select="@label"/>
+ </h1>
+ <ul>
+ <xsl:apply-templates/>
+ </ul></li>
+ </xsl:template>
+ <xsl:template match="menu-item[@type='hidden']"/>
+ <xsl:template match="menu-item">
+ <li><xsl:apply-imports/></li>
+ </xsl:template>
+ <xsl:template name="selected">
+ <div class="current">
+ <xsl:value-of select="@label"/>
+ </div>
+ </xsl:template>
+ <xsl:template name="print-external">
+ <font color="#ffcc00">
+ <xsl:apply-imports/>
+ </font>
+ </xsl:template>
+</xsl:stylesheet>
diff --git a/src/site/src/documentation/skins/lucene/xslt/html/document-to-html.xsl b/src/site/src/documentation/skins/lucene/xslt/html/document-to-html.xsl
new file mode 100644
index 0000000..2d337bf
--- /dev/null
+++ b/src/site/src/documentation/skins/lucene/xslt/html/document-to-html.xsl
@@ -0,0 +1,154 @@
+<?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.
+-->
+<!--
+This stylesheet contains templates for converting documentv11 to HTML. See the
+imported document-to-html.xsl for details.
+-->
+<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
+ <xsl:import href="../../../common/xslt/html/document-to-html.xsl"/>
+ <xsl:template match="document">
+ <meta-data>
+ <xsl:apply-templates select="header/meta"/>
+ </meta-data>
+ <div id="content">
+ <div id="skinconf-printlink"/>
+ <div id="skinconf-xmllink"/>
+ <div id="skinconf-podlink"/>
+ <div id="skinconf-txtlink"/>
+ <div id="skinconf-pdflink"/>
+ <div id="disable-font-script"/>
+ <xsl:if test="normalize-space(header/title)!=''">
+ <h1>
+ <xsl:value-of select="header/title"/>
+ </h1>
+ </xsl:if>
+ <xsl:if test="normalize-space(header/subtitle)!=''">
+ <h3>
+ <xsl:value-of select="header/subtitle"/>
+ </h3>
+ </xsl:if>
+<!--
+ <xsl:apply-templates select="header/type"/>
+ <xsl:apply-templates select="header/notice"/>
+ <xsl:apply-templates select="header/abstract"/>
+ <xsl:apply-templates select="body"/>
+
+ <div class="attribution">
+ <xsl:apply-templates select="header/authors"/>
+ <xsl:if test="header/authors and header/version">
+ <xsl:text>; </xsl:text>
+ </xsl:if>
+ <xsl:apply-templates select="header/version"/>
+ </div>
+ -->
+ <xsl:if test="header/abstract">
+ <div class="abstract">
+ <xsl:value-of select="header/abstract"/>
+ </div>
+ </xsl:if>
+ <xsl:apply-templates select="body"/>
+ <xsl:if test="header/authors">
+ <p align="right">
+ <font size="-2">
+ <xsl:for-each select="header/authors/person">
+ <xsl:choose>
+ <xsl:when test="position()=1">by </xsl:when>
+ <xsl:otherwise>, </xsl:otherwise>
+ </xsl:choose>
+ <xsl:value-of select="@name"/>
+ </xsl:for-each>
+ </font>
+ </p>
+ </xsl:if>
+ <xsl:if test="header/version">
+ <xsl:apply-templates select="header/version"/>
+ </xsl:if>
+ </div>
+ </xsl:template>
+ <xsl:template match="body">
+ <div id="skinconf-toc-page"/>
+ <xsl:apply-templates/>
+ </xsl:template>
+ <xsl:template match="@id">
+ <xsl:apply-imports/>
+ </xsl:template>
+ <xsl:template match="section"><a name="{generate-id()}"/>
+ <xsl:apply-templates select="@id"/>
+ <xsl:variable name = "level" select = "count(ancestor::section)+1" />
+ <xsl:choose>
+ <xsl:when test="$level=1">
+ <div class="skinconf-heading-{$level}">
+ <h1>
+ <xsl:value-of select="title"/>
+ </h1>
+ </div>
+ <div class="section">
+ <xsl:apply-templates select="*[not(self::title)]"/>
+ </div>
+ </xsl:when>
+ <xsl:when test="$level=2">
+ <div class="skinconf-heading-{$level}">
+ <h2>
+ <xsl:value-of select="title"/>
+ </h2>
+ </div>
+ <xsl:apply-templates select="*[not(self::title)]"/>
+ </xsl:when>
+<!-- If a faq, answer sections will be level 3 (1=Q/A, 2=part) -->
+ <xsl:when test="$level=3 and $notoc='true'">
+ <h4 class="faq">
+ <xsl:value-of select="title"/>
+ </h4>
+ <div align="right"><a href="#{@id}-menu">^</a>
+ </div>
+ <div style="margin-left: 15px">
+ <xsl:apply-templates select="*[not(self::title)]"/>
+ </div>
+ </xsl:when>
+ <xsl:when test="$level=3">
+ <h4>
+ <xsl:value-of select="title"/>
+ </h4>
+ <xsl:apply-templates select="*[not(self::title)]"/>
+ </xsl:when>
+ <xsl:otherwise>
+ <h5>
+ <xsl:value-of select="title"/>
+ </h5>
+ <xsl:apply-templates select="*[not(self::title)]"/>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:template>
+ <xsl:template match="figure">
+ <xsl:apply-templates select="@id"/>
+ <div style="text-align: center;" id="{@id}">
+ <img src="{@src}" alt="{@alt}" class="figure" id="{@id}">
+ <xsl:if test="@height">
+ <xsl:attribute name="height">
+ <xsl:value-of select="@height"/>
+ </xsl:attribute>
+ </xsl:if>
+ <xsl:if test="@width">
+ <xsl:attribute name="width">
+ <xsl:value-of select="@width"/>
+ </xsl:attribute>
+ </xsl:if>
+ </img>
+ </div>
+ </xsl:template>
+</xsl:stylesheet>
diff --git a/src/site/src/documentation/skins/lucene/xslt/html/site-to-xhtml.xsl b/src/site/src/documentation/skins/lucene/xslt/html/site-to-xhtml.xsl
new file mode 100644
index 0000000..c929756
--- /dev/null
+++ b/src/site/src/documentation/skins/lucene/xslt/html/site-to-xhtml.xsl
@@ -0,0 +1,808 @@
+<?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.
+-->
+<!--
+site-to-xhtml.xsl is the final stage in HTML page production. It merges HTML from
+document-to-html.xsl, tab-to-menu.xsl and book-to-menu.xsl, and adds the site header,
+footer, searchbar, css etc. As input, it takes XML of the form:
+
+<site>
+ <div class="menu">
+ ...
+ </div>
+ <div class="tab">
+ ...
+ </div>
+ <div class="content">
+ ...
+ </div>
+</site>
+
+-->
+<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
+ xmlns:i18n="http://apache.org/cocoon/i18n/2.1" exclude-result-prefixes="i18n">
+ <xsl:import href="../../../common/xslt/html/site-to-xhtml.xsl"/>
+<!--+
+ |Overall site template
+ +-->
+ <xsl:template match="site">
+<!--html lang="en" xml:lang="en"-->
+ <html>
+<!--+
+ |HTML-head
+ +-->
+ <head>
+<!--+
+ |generator meta
+ +-->
+<!-- Add some Forrest-specific metadata -->
+ <xsl:call-template name="html-meta"/>
+<!-- Add any metadata from the documents -->
+ <xsl:call-template name="meta-data"/>
+<!--+
+ |title
+ +-->
+ <title><xsl:value-of select="div[@id='content']/h1"/>
+ <xsl:if test="$config/motd">
+ <xsl:for-each select="$config/motd/motd-option">
+ <xsl:choose>
+ <xsl:when test="@starts-with='true'">
+ <xsl:if test="starts-with($path, @pattern)">
+ <xsl:if test="normalize-space(motd-title) != ''">
+<xsl:text> (</xsl:text>
+ <xsl:value-of select="motd-title"/>
+<xsl:text>)</xsl:text>
+ </xsl:if>
+ </xsl:if>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:if test="contains($path, @pattern)">
+ <xsl:if test="normalize-space(motd-title) != ''">
+<xsl:text> (</xsl:text>
+ <xsl:value-of select="motd-title"/>
+<xsl:text>)</xsl:text>
+ </xsl:if>
+ </xsl:if>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:for-each>
+ </xsl:if></title>
+<!--+
+ |stylesheets
+ +--><link rel="stylesheet" href="{$root}skin/basic.css" type="text/css"
+ /><link rel="stylesheet" href="{$root}skin/screen.css"
+ type="text/css" media="screen" /><link rel="stylesheet" href="{$root}skin/print.css" type="text/css"
+ media="print" /><link rel="stylesheet" href="{$root}skin/profile.css"
+ type="text/css" />
+<!--+
+ |Javascripts
+ +-->
+<script type="text/javascript" language="javascript"
+ src="{$root}skin/getBlank.js"></script>
+<script type="text/javascript" language="javascript"
+ src="{$root}skin/getMenu.js"></script>
+<script type="text/javascript" language="javascript"
+ src="{$root}skin/fontsize.js"></script>
+<!--+
+ |favicon
+ +-->
+ <xsl:if test="//skinconfig/favicon-url"><link rel="shortcut icon">
+ <xsl:attribute name="href">
+ <xsl:value-of
+ select="concat($root,//skinconfig/favicon-url)"/>
+ </xsl:attribute></link>
+ </xsl:if>
+ </head>
+<!--+
+ |HTML-body
+ +-->
+ <body onload="init()">
+<script type="text/javascript">ndeSetTextSize();</script>
+<!--+Site structure
+ +++++++++++++++++++++++++++
+ +=========================+
+ | topstrip |
+ +=========================+
+ | |
+ | centerstrip |
+ | |
+ | |
+ +=========================+
+ | bottomstrip |
+ +=========================+
+ +++++++++++++++++++++++++++
+ +-->
+<!--+
+ |topstrip with logos and search box
+ +-->
+ <div id="top">
+<!--breadcrumbs org location-->
+ <xsl:if test="not ($config/trail/@location)">
+ <xsl:comment>+
+ |breadtrail
+ +</xsl:comment>
+ <div class="breadtrail">
+ <xsl:call-template name="breadcrumbs"/>
+ </div>
+ </xsl:if>
+ <xsl:comment>+
+ |header
+ +</xsl:comment>
+ <div class="header">
+ <xsl:comment>+
+ |start group logo
+ +</xsl:comment>
+ <xsl:if test="$config/group-url">
+ <div class="grouplogo">
+ <xsl:call-template name="renderlogo">
+ <xsl:with-param name="name" select="$config/group-name"/>
+ <xsl:with-param name="url" select="$config/group-url"/>
+ <xsl:with-param name="logo" select="$config/group-logo"/>
+ <xsl:with-param name="root" select="$root"/>
+ <xsl:with-param name="description" select="$config/group-description"/>
+ </xsl:call-template>
+ </div>
+ </xsl:if>
+ <xsl:comment>+
+ |end group logo
+ +</xsl:comment>
+ <xsl:comment>+
+ |start Project Logo
+ +</xsl:comment>
+ <xsl:variable name="xtest">
+ <xsl:choose>
+ <xsl:when
+ test="$config/group-url and $config/search and not($config/search/@box-location = 'alt')">
+<xsl:text>true</xsl:text>
+ </xsl:when>
+ <xsl:otherwise>
+<xsl:text>false</xsl:text>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:variable>
+ <div class="projectlogo">
+ <xsl:if test="$xtest='false'" >
+ <xsl:attribute name="class">
+<xsl:text>projectlogoA1</xsl:text>
+ </xsl:attribute>
+ </xsl:if>
+ <xsl:call-template name="renderlogo">
+ <xsl:with-param name="name" select="$config/project-name"/>
+ <xsl:with-param name="url" select="$config/project-url"/>
+ <xsl:with-param name="logo" select="$config/project-logo"/>
+ <xsl:with-param name="root" select="$root"/>
+ <xsl:with-param name="description" select="$config/project-description"/>
+ </xsl:call-template>
+ </div>
+ <xsl:comment>+
+ |end Project Logo
+ +</xsl:comment>
+ <xsl:if
+ test="$config/search and not($config/search/@box-location = 'alt')">
+ <xsl:comment>+
+ |start Search
+ +</xsl:comment>
+ <div class="searchbox">
+ <xsl:variable name="search-prompt">
+ <i18n:text>Search the site with</i18n:text>
+<xsl:text> </xsl:text>
+ <xsl:value-of select="$config/search/@provider"/>
+ </xsl:variable>
+ <xsl:choose>
+ <xsl:when test="$config/search/@provider = 'lucene'">
+<!-- Lucene search -->
+ <form method="get" action="{$root}{$lucene-search}">
+ <input type="text" id="query" name="queryString" size="25" onFocus="getBlank (this, '{$search-prompt}');">
+ <xsl:attribute name="value">
+ <xsl:value-of select="$search-prompt"/>
+ </xsl:attribute>
+ </input> 
+ <input type="submit" value="Search" name="Search" i18n:attr="value"/>
+ </form>
+ </xsl:when>
+ <xsl:otherwise>
+ <form class="roundtopsmall" method="get" action="http://search.lucidimagination.com/p:lucene">
+ <input type="text" id="query" name="q" size="25" onFocus="getBlank (this, '{$search-prompt}');">
+ <xsl:attribute name="value">
+ <xsl:value-of select="$search-prompt"/>
+ </xsl:attribute>
+ </input> 
+ <input type="submit" value="Search" name="Search" i18n:attr="value"/>
+ </form>
+ <div style="position: relative; top: -5px; left: -10px">Powered by <a style="color: #033268" href="http://www.lucidimagination.com">Lucid Imagination</a></div>
+ </xsl:otherwise>
+ </xsl:choose>
+<!--div id="roundbottomsmall">
+ <img
+ src="{$skin-img-dir}/rc-b-l-5-1body-2menu-3menu.png"
+ alt="" width="5" height="5" class="cornersmall"
+ style="display: none" />
+ </div-->
+ </div>
+ <xsl:comment>+
+ |end search
+ +</xsl:comment>
+ </xsl:if>
+ <xsl:comment>+
+ |start Tabs
+ +</xsl:comment>
+ <xsl:apply-templates select="ul[@id='tabs']"/>
+ <xsl:comment>+
+ |end Tabs
+ +</xsl:comment>
+ </div>
+ </div>
+<!--+
+ |centerstrip with menu and mainarea
+ +-->
+ <div id="main">
+ <div id="publishedStrip">
+ <xsl:comment>+
+ |start Subtabs
+ +</xsl:comment>
+ <div id="level2tabs">
+ <xsl:apply-templates select="span[@id='level2tabs']/node()"/>
+ </div>
+ <xsl:comment>+
+ |end Endtabs
+ +</xsl:comment>
+ <xsl:call-template name="last-published"/>
+ </div>
+ <xsl:comment>+
+ |breadtrail
+ +</xsl:comment>
+ <div class="breadtrail">
+ <xsl:choose>
+ <xsl:when test="$config/trail/@location='alt'">
+<!--breadtrail location='alt'-->
+ <xsl:call-template name="breadcrumbs"/>
+ </xsl:when>
+ <xsl:otherwise>
+<!--*NO* breadtrail-->
+  
+ </xsl:otherwise>
+ </xsl:choose>
+ </div>
+ <xsl:comment>+
+ |start Menu, mainarea
+ +</xsl:comment>
+ <xsl:if test="div[@id='menu']/ul/li">
+ <xsl:call-template name="menu"/>
+ </xsl:if>
+ <xsl:comment>+
+ |start content
+ +</xsl:comment>
+ <xsl:apply-templates select="div[@id='content']"/>
+ <xsl:comment>+
+ |end content
+ +</xsl:comment>
+ <div class="clearboth"> </div>
+ </div>
+<!--+
+ |bottomstrip with footer
+ +-->
+ <div id="footer">
+ <xsl:comment>+
+ |start bottomstrip
+ +</xsl:comment>
+ <div class="lastmodified">
+ <xsl:call-template name="last-published"/>
+ </div>
+ <xsl:if test="not($config/disable-copyright-footer = 'true')">
+ <div class="copyright">
+ Copyright ©
+ <xsl:text> </xsl:text>
+ <xsl:value-of select="$config/year"/>
+ <xsl:call-template name="current-year">
+ <xsl:with-param name="copyrightyear" select="$config/year"/>
+ </xsl:call-template>
+<xsl:text> </xsl:text>
+ <xsl:choose>
+ <xsl:when test="$config/copyright-link"><a>
+ <xsl:attribute name="href">
+ <xsl:value-of select="$config/copyright-link"/>
+ </xsl:attribute>
+ <xsl:value-of select="$config/vendor"/></a>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:value-of select="$config/vendor"/>
+ </xsl:otherwise>
+ </xsl:choose>
+ </div>
+ </xsl:if>
+ <xsl:if test="$filename = 'index.html'">
+ <div id="logos" >
+ <xsl:if test="$config/disable-compliance-links/@align">
+ <xsl:attribute name="style">text-align: <xsl:value-of select="$config/disable-compliance-links/@align"/>
+ </xsl:attribute>
+ </xsl:if>
+<!-- W3C logos style="text-align: center;"-->
+ <xsl:call-template name="compliancy-logos"/>
+ <xsl:if test="$filename = 'index.html' and $config/credits">
+ <xsl:for-each select="$config/credits/credit[not(@role='pdf')]">
+ <xsl:if test="not(@box-location = 'alt') and not(@box-location = 'alt2')">
+ <xsl:variable name="name" select="name"/>
+ <xsl:variable name="url" select="url"/>
+ <xsl:variable name="image" select="image"/>
+ <xsl:variable name="width" select="width"/>
+ <xsl:variable name="height" select="height"/><a href="{$url}">
+ <img alt="{$name} - logo" title="{$name}" border="0">
+ <xsl:attribute name="src">
+ <xsl:if test="not(starts-with($image, 'http://'))">
+ <xsl:value-of select="$root"/>
+ </xsl:if>
+ <xsl:value-of select="$image"/>
+ </xsl:attribute>
+ <xsl:attribute name="style">
+ <xsl:if test="$width">width: <xsl:value-of select="$width"/>px;</xsl:if>
+ <xsl:if test="$height">height: <xsl:value-of select="$height"/>px;</xsl:if>
+ </xsl:attribute>
+ </img></a>
+ </xsl:if>
+ </xsl:for-each>
+ </xsl:if>
+ </div>
+ </xsl:if>
+ <xsl:if test="$config/host-logo and not($config/host-logo = '')">
+ <div class="host">
+ <xsl:call-template name="renderlogo">
+ <xsl:with-param name="name" select="$config/host-name"/>
+ <xsl:with-param name="url" select="$config/host-url"/>
+ <xsl:with-param name="logo" select="$config/host-logo"/>
+ <xsl:with-param name="root" select="$root"/>
+ </xsl:call-template>
+ </div>
+ </xsl:if>
+ <xsl:if test="$config/feedback">
+ <xsl:call-template name="feedback"/>
+ </xsl:if>
+ <xsl:comment>+
+ |end bottomstrip
+ +</xsl:comment>
+ </div>
+ </body>
+ </html>
+ </xsl:template>
+ <xsl:template name="last-published">
+<script type="text/javascript"><![CDATA[<!--
+document.write("]]><i18n:text >Last Published:</i18n:text><![CDATA[ " + document.lastModified);
+// -->]]></script>
+ </xsl:template>
+<!--headings-->
+ <xsl:template match="div[@class = 'skinconf-heading-1']">
+ <xsl:choose>
+ <xsl:when test="//skinconfig/headings/@type='underlined'">
+ <h2 class="underlined_10">
+ <xsl:value-of select="h1"/>
+ </h2>
+ </xsl:when>
+ <xsl:when test="//skinconfig/headings/@type='boxed'">
+ <h2 class="boxed">
+ <xsl:value-of select="h1"/>
+ </h2>
+ </xsl:when>
+ <xsl:otherwise>
+ <h2 class="h3">
+ <xsl:value-of select="h1"/>
+ </h2>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:template>
+ <xsl:template match="div[@class = 'skinconf-heading-2']">
+ <xsl:choose>
+ <xsl:when test="//skinconfig/headings/@type='underlined'">
+ <h3 class="underlined_5">
+ <xsl:value-of select="h2"/>
+ </h3>
+ </xsl:when>
+ <xsl:when test="//skinconfig/headings/@type='boxed'">
+ <h3 class="boxed">
+ <xsl:value-of select="h2"/>
+ </h3>
+ </xsl:when>
+ <xsl:otherwise>
+ <h3 class="h4">
+ <xsl:value-of select="h2"/>
+ </h3>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:template>
+<!-- Add links to any standards-compliance logos -->
+ <xsl:template name="compliancy-logos">
+ <xsl:if test="$filename = 'index.html' and $config/disable-compliance-links = 'false'"><a href="http://validator.w3.org/check/referer">
+ <img class="logoImage"
+ src="{$skin-img-dir}/valid-html401.png"
+ alt="Valid HTML 4.01!" title="Valid HTML 4.01!" style="height: 31px; width: 88px;" /></a><a href="http://jigsaw.w3.org/css-validator/check/referer">
+ <img class="logoImage"
+ src="{$skin-img-dir}/vcss.png"
+ alt="Valid CSS!" title="Valid CSS!" style="height: 31px; width: 88px;"/></a>
+ </xsl:if>
+ </xsl:template>
+ <xsl:template name="menu">
+ <xsl:comment>+
+ |start Menu
+ +</xsl:comment>
+ <div id="menu">
+<!--menu - inner-->
+ <xsl:for-each select = "div[@id='menu']/ul/li">
+ <xsl:call-template name = "innermenuli" >
+ <xsl:with-param name="id" select="concat('1.', position())"/>
+ </xsl:call-template>
+ </xsl:for-each>
+<!--
+ <xsl:apply-templates select="div[@id='menu']/*" />
+ -->
+<!-- Search box: alternative location -->
+ <xsl:if
+ test="$config/search and $config/search/@box-location='alt'">
+ <xsl:comment>+
+ |start Search
+ +</xsl:comment>
+ <div class="searchbox">
+ <hr />
+ <xsl:variable name="search-prompt">
+ <i18n:text>Search the site with</i18n:text>
+<xsl:text> </xsl:text>
+ <xsl:value-of select="$config/search/@provider"/>
+ </xsl:variable>
+ <xsl:choose>
+ <xsl:when test="$config/search/@provider = 'lucene'">
+<!-- Lucene search -->
+ <form method="get" action="{$root}{$lucene-search}">
+ <input type="text" id="query" name="queryString" size="18" onFocus="getBlank (this, '{$search-prompt}');">
+ <xsl:attribute name="value">
+ <xsl:value-of select="$search-prompt"/>
+ </xsl:attribute>
+ </input> 
+ <input type="submit" value="Search" name="Search" i18n:attr="value"/>
+ </form>
+ </xsl:when>
+ <xsl:otherwise>
+ <form class="roundtopsmall" method="get" action="http://search.lucidimagination.com/p:lucene">
+ <input type="text" id="query" name="q" size="25" onFocus="getBlank (this, '{$search-prompt}');">
+ <xsl:attribute name="value">
+ <xsl:value-of select="$search-prompt"/>
+ </xsl:attribute>
+ </input> 
+ <input type="submit" value="Search" name="Search" i18n:attr="value"/>
+ </form>
+ </xsl:otherwise>
+ </xsl:choose>
+ </div>
+ <xsl:comment>+
+ |end search
+ +</xsl:comment>
+ </xsl:if>
+<!--credits in alternative location-->
+ <div id="credit">
+ <xsl:if test="$filename = 'index.html' and $config/credits and ($config/credits/credit/@box-location = 'alt')">
+ <hr />
+ <xsl:for-each select="$config/credits/credit[not(@role='pdf')]">
+ <xsl:if test="@box-location = 'alt'">
+ <xsl:variable name="name" select="name"/>
+ <xsl:variable name="url" select="url"/>
+ <xsl:variable name="image" select="image"/>
+ <xsl:variable name="width" select="width"/>
+ <xsl:variable name="height" select="height"/><a href="{$url}">
+ <img alt="{$name} - logo" title="{$name}" border="0">
+ <xsl:attribute name="src">
+ <xsl:if test="not(starts-with($image, 'http://'))">
+ <xsl:value-of select="$root"/>
+ </xsl:if>
+ <xsl:value-of select="$image"/>
+ </xsl:attribute>
+ <xsl:attribute name="style">
+ <xsl:if test="$width">width: <xsl:value-of select="$width"/>px;</xsl:if>
+ <xsl:if test="$height">height: <xsl:value-of select="$height"/>px;</xsl:if>
+ </xsl:attribute>
+ </img></a>
+ </xsl:if>
+ </xsl:for-each>
+ </xsl:if>
+<!-- Message of the day -->
+ <xsl:if test="$config/motd">
+ <xsl:for-each select="$config/motd/motd-option">
+ <xsl:choose>
+ <xsl:when test="@starts-with='true'">
+ <xsl:if test="starts-with($path, @pattern)">
+ <xsl:if test="motd-page/@location='alt' or motd-page/@location='both'">
+ <hr />
+ <xsl:value-of select="motd-page"/>
+ <xsl:if test="motd-page-url">
+<xsl:text> (</xsl:text><a>
+ <xsl:attribute name="href">
+ <xsl:value-of select="motd-page-url"/>
+ </xsl:attribute>
+<xsl:text>More</xsl:text></a>
+<xsl:text>)</xsl:text>
+ </xsl:if>
+ </xsl:if>
+ </xsl:if>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:if test="contains($path, @pattern)">
+ <xsl:if test="motd-page/@location='alt' or motd-page/@location='both'">
+ <hr />
+ <xsl:value-of select="motd-page"/>
+ <xsl:if test="motd-page-url">
+<xsl:text> (</xsl:text><a>
+ <xsl:attribute name="href">
+ <xsl:value-of select="motd-page-url"/>
+ </xsl:attribute>
+<xsl:text>More</xsl:text></a>
+<xsl:text>)</xsl:text>
+ </xsl:if>
+ </xsl:if>
+ </xsl:if>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:for-each>
+ </xsl:if>
+ </div>
+ <div id="roundbottom">
+ <img
+ src="{$skin-img-dir}/rc-b-l-15-1body-2menu-3menu.png"
+ alt="" width="15" height="15" class="corner"
+ style="display: none" />
+ </div>
+<!--credits in alternative location #2-->
+ <xsl:comment>+
+ |alternative credits
+ +</xsl:comment>
+ <div id="credit2">
+ <xsl:if test="$config/credits and ($config/credits/credit/@box-location = 'alt2')">
+ <xsl:for-each select="$config/credits/credit[not(@role='pdf')]">
+ <xsl:if test="@box-location = 'alt2'">
+ <xsl:variable name="name" select="name"/>
+ <xsl:variable name="url" select="url"/>
+ <xsl:variable name="image" select="image"/>
+ <xsl:variable name="width" select="width"/>
+ <xsl:variable name="height" select="height"/><a href="{$url}">
+ <img alt="{$name} - logo" title="{$name}" border="0">
+ <xsl:attribute name="src">
+ <xsl:if test="not(starts-with($image, 'http://'))">
+ <xsl:value-of select="$root"/>
+ </xsl:if>
+ <xsl:value-of select="$image"/>
+ </xsl:attribute>
+ <xsl:attribute name="style">
+ <xsl:if test="$width">width: <xsl:value-of select="$width"/>px;</xsl:if>
+ <xsl:if test="$height">height: <xsl:value-of select="$height"/>px;</xsl:if>
+ </xsl:attribute>
+ </img></a>
+ </xsl:if>
+ </xsl:for-each>
+ </xsl:if>
+ </div>
+ </div>
+ <xsl:comment>+
+ |end Menu
+ +</xsl:comment>
+ </xsl:template>
+ <xsl:template name="innermenuli">
+ <xsl:param name="id"/>
+ <xsl:variable name="tagid">
+ <xsl:choose>
+ <xsl:when test="descendant-or-self::node()/li/div/@class='current'">
+ <xsl:value-of select="concat('menu_selected_',$id)"/>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:value-of select="concat('menu_',concat(font,$id))"/>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:variable>
+ <xsl:variable name="whichGroup">
+ <xsl:choose>
+ <xsl:when test="descendant-or-self::node()/li/div/@class='current'">selectedmenuitemgroup</xsl:when>
+ <xsl:otherwise>menuitemgroup</xsl:otherwise>
+ </xsl:choose>
+ </xsl:variable>
+ <div class="menutitle" id="{$tagid}Title"
+ onclick="SwitchMenu('{$tagid}', '{$root}skin/')">
+ <xsl:if test="contains($tagid, '_selected_')" >
+ <xsl:attribute name="style">
+<xsl:text>background-image: url('</xsl:text>
+ <xsl:value-of select="$root"/>
+<xsl:text>skin/images/chapter_open.gif');</xsl:text>
+ </xsl:attribute>
+ </xsl:if>
+ <xsl:value-of select="h1"/>
+ </div>
+ <div class="{$whichGroup}" id="{$tagid}">
+ <xsl:if test="contains($tagid, '_selected_')" >
+ <xsl:attribute name="style">
+<xsl:text>display: block;</xsl:text>
+ </xsl:attribute>
+ </xsl:if>
+ <xsl:for-each select= "ul/li">
+ <xsl:choose>
+ <xsl:when test="a">
+ <div class="menuitem"><a>
+ <xsl:attribute name="href">
+ <xsl:value-of select="a/@href"/>
+ </xsl:attribute>
+ <xsl:if test="a/@title!=''">
+ <xsl:attribute name="title">
+ <xsl:value-of select="a/@title"/>
+ </xsl:attribute>
+ </xsl:if>
+ <xsl:value-of select="a"/></a>
+ </div>
+ </xsl:when>
+ <xsl:when test="div/@class='current'">
+ <div class="menupage">
+ <div class="menupagetitle">
+ <xsl:value-of select="div" />
+ </div>
+ <xsl:if test="$config/toc/@max-depth > 0
+ and contains($minitoc-location,'menu')
+ and count(//tocitems/tocitem) >= $config/toc/@min-sections">
+ <div class="menupageitemgroup">
+ <xsl:for-each select = "//tocitems/tocitem">
+ <div class="menupageitem">
+ <xsl:choose>
+ <xsl:when test="string-length(@title)>15"><a href="{@href}" title="{@title}">
+ <xsl:value-of select="substring(@title,0,20)" />...</a>
+ </xsl:when>
+ <xsl:otherwise><a href="{@href}">
+ <xsl:value-of select="@title" /></a>
+ </xsl:otherwise>
+ </xsl:choose>
+ </div>
+ </xsl:for-each>
+ </div>
+ </xsl:if>
+ </div>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:call-template name = "innermenuli">
+ <xsl:with-param name="id" select="concat($id, '.', position())"/>
+ </xsl:call-template>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:for-each>
+ </div>
+ </xsl:template>
+<!--+
+ |Generates the PDF link
+ +-->
+ <xsl:template match="div[@id='skinconf-pdflink']">
+ <xsl:if test="not($config/disable-pdf-link) or $disable-pdf-link = 'false'">
+ <div class="pdflink" title="Portable Document Format"><a href="{$filename-noext}.pdf" class="dida">
+ <img class="skin" src="{$skin-img-dir}/pdfdoc.gif" alt="PDF -icon" />
+ <br/>
+ PDF</a>
+ </div>
+ </xsl:if>
+ </xsl:template>
+ <xsl:template match="div[@id='skinconf-xmllink']">
+ <xsl:if test="not($config/disable-xml-link) or $disable-xml-link = 'false'">
+ <div class="xmllink" title="raw XML"><a href="{$filename-noext}.xml" class="dida">
+ <img class="skin" src="{$skin-img-dir}/xmldoc.gif" alt="XML - icon" />
+ <br/>
+ XML</a>
+ </div>
+ </xsl:if>
+ </xsl:template>
+ <xsl:template match="div[@id='skinconf-txtlink']">
+ <xsl:if test="not($config/disable-txt-link) or $disable-txt-link = 'false'">
+ <div class="podlink" title="Plain Text Documentation"><a href="{$filename-noext}.txt" class="dida">
+ <img class="skin" src="{$skin-img-dir}/txtdoc.png" alt="TXT - icon" />
+ <br/>
+ TXT</a>
+ </div>
+ </xsl:if>
+ </xsl:template>
+ <xsl:template match="div[@id='skinconf-podlink']">
+ <xsl:if test="not($config/disable-pod-link) or $disable-pod-link = 'false'">
+ <div class="podlink" title="Plain Old Documentation"><a href="{$filename-noext}.pod" class="dida">
+ <img class="skin" src="{$skin-img-dir}/poddoc.png" alt="POD - icon" />
+ <br/>
+ POD</a>
+ </div>
+ </xsl:if>
+ </xsl:template>
+ <xsl:template match="div[@id='skinconf-printlink']">
+ <xsl:if test="not($config/disable-print-link) or $disable-print-link = 'false'">
+<script type="text/javascript" language="Javascript">
+function printit() {
+ if (window.print) {
+ window.focus();
+ window.print();
+ }
+}
+ </script>
+<script type="text/javascript" language="Javascript">
+var NS = (navigator.appName == "Netscape");
+var VERSION = parseInt(navigator.appVersion);
+if (VERSION > 3) {
+ document.write('<div class="printlink" title="Print this Page">');
+ document.write(' <a href="javascript:printit()" class="dida">');
+ document.write(' <img class="skin" src="{$skin-img-dir}/printer.gif" alt="print - icon" />');
+ document.write(' <br />');
+ document.write(' PRINT</a>');
+ document.write('</div>');
+}
+ </script>
+ </xsl:if>
+ </xsl:template>
+ <xsl:template match="div[@id='disable-font-script']">
+ <xsl:if test="$disable-font-script = 'false'">
+ <div class="trail">
+ <i18n:text >Font size:</i18n:text>
+  <input type="button" onclick="ndeSetTextSize('reset'); return false;" title="Reset text" class="resetfont" value="Reset"/>
+  <input type="button" onclick="ndeSetTextSize('decr'); return false;" title="Shrink text" class="smallerfont" value="-a"/>
+  <input type="button" onclick="ndeSetTextSize('incr'); return false;" title="Enlarge text" class="biggerfont" value="+a"/>
+ </div>
+ </xsl:if>
+ </xsl:template>
+ <xsl:template match="div[@id='skinconf-toc-page']">
+<!-- Message of the day -->
+ <xsl:if test="$config/motd">
+ <xsl:for-each select="$config/motd/motd-option">
+ <xsl:choose>
+ <xsl:when test="@starts-with='true'">
+ <xsl:if test="starts-with($path, @pattern)">
+ <xsl:if test="motd-page/@location='page' or motd-page/@location='both'">
+ <div id="motd-area">
+ <xsl:value-of select="motd-page"/>
+ <xsl:if test="motd-page-url">
+<xsl:text> (</xsl:text><a>
+ <xsl:attribute name="href">
+ <xsl:value-of select="motd-page-url"/>
+ </xsl:attribute>
+<xsl:text>More</xsl:text></a>
+<xsl:text>)</xsl:text>
+ </xsl:if>
+ </div>
+ </xsl:if>
+ </xsl:if>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:if test="contains($path, @pattern)">
+ <xsl:if test="motd-page/@location='page' or motd-page/@location='both'">
+ <div id="motd-area">
+ <xsl:value-of select="motd-page"/>
+ <xsl:if test="motd-page-url">
+<xsl:text> (</xsl:text><a>
+ <xsl:attribute name="href">
+ <xsl:value-of select="motd-page-url"/>
+ </xsl:attribute>
+<xsl:text>More</xsl:text></a>
+<xsl:text>)</xsl:text>
+ </xsl:if>
+ </div>
+ </xsl:if>
+ </xsl:if>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:for-each>
+ </xsl:if>
+<!-- Table of Contents ToC -->
+ <xsl:if test="$config/toc">
+ <xsl:if test="contains($minitoc-location,'page')">
+ <xsl:if test="(count(//tocitems/tocitem) >= $config/toc/@min-sections) or (//tocitems/@force = 'true')">
+ <div id="minitoc-area">
+ <xsl:call-template name="minitoc">
+ <xsl:with-param name="tocroot" select="//tocitems"/>
+ </xsl:call-template>
+ </div>
+ </xsl:if>
+ </xsl:if>
+ </xsl:if>
+ </xsl:template>
+</xsl:stylesheet>
diff --git a/src/site/src/documentation/skins/lucene/xslt/html/tab-to-menu.xsl b/src/site/src/documentation/skins/lucene/xslt/html/tab-to-menu.xsl
new file mode 100644
index 0000000..3253adb
--- /dev/null
+++ b/src/site/src/documentation/skins/lucene/xslt/html/tab-to-menu.xsl
@@ -0,0 +1,66 @@
+<?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.
+-->
+<!--
+This stylesheet generates 'tabs' at the top left of the screen. Tabs are
+visual indicators that a certain subsection of the URI space is being browsed.
+For example, if we had tabs with paths:
+
+Tab1: ''
+Tab2: 'community'
+Tab3: 'community/howto'
+Tab4: 'community/howto/form/index.html'
+
+Then if the current path was 'community/howto/foo', Tab3 would be highlighted.
+The rule is: the tab with the longest path that forms a prefix of the current
+path is enabled.
+
+The output of this stylesheet is HTML of the form:
+ <div class="tab">
+ ...
+ </div>
+
+which is then merged by site-to-xhtml.xsl
+
+-->
+<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
+ <xsl:import href="../../../common/xslt/html/tab-to-menu.xsl"/>
+ <xsl:template match="tabs">
+ <ul id="tabs">
+ <xsl:call-template name="base-tabs"/>
+ </ul>
+ <span id="level2tabs">
+ <xsl:call-template name="level2tabs"/>
+ </span>
+ </xsl:template>
+ <xsl:template name="pre-separator"></xsl:template>
+ <xsl:template name="post-separator"></xsl:template>
+ <xsl:template name="separator"></xsl:template>
+ <xsl:template name="level2-separator"></xsl:template>
+ <xsl:template name="selected">
+ <li class="current"><xsl:call-template name="base-selected"/></li>
+ </xsl:template>
+ <xsl:template name="not-selected">
+ <li><xsl:call-template name="base-not-selected"/></li>
+ </xsl:template>
+ <xsl:template name="level2-not-selected">
+ <xsl:call-template name="base-not-selected"/>
+ </xsl:template>
+ <xsl:template name="level2-selected">
+ <xsl:call-template name="base-selected"/>
+ </xsl:template>
+</xsl:stylesheet>