You are viewing a plain text version of this content. The canonical link for it is here.
Posted to svn@forrest.apache.org by tw...@apache.org on 2005/09/06 16:12:50 UTC

svn commit: r279002 - /forrest/trunk/whiteboard/plugins/org.apache.forrest.plugin.internal.xhtml2/resources/stylesheets/xhtml2html.xsl

Author: twilliams
Date: Tue Sep  6 07:12:39 2005
New Revision: 279002

URL: http://svn.apache.org/viewcvs?rev=279002&view=rev
Log:
XHTML 2 to HTML transformation.  Gotten from:
http://etherealwake.com/projects/xhtml2html/

Temporary transform while we get up and going with XHTML2 in core.

Added:
    forrest/trunk/whiteboard/plugins/org.apache.forrest.plugin.internal.xhtml2/resources/stylesheets/xhtml2html.xsl   (with props)

Added: forrest/trunk/whiteboard/plugins/org.apache.forrest.plugin.internal.xhtml2/resources/stylesheets/xhtml2html.xsl
URL: http://svn.apache.org/viewcvs/forrest/trunk/whiteboard/plugins/org.apache.forrest.plugin.internal.xhtml2/resources/stylesheets/xhtml2html.xsl?rev=279002&view=auto
==============================================================================
--- forrest/trunk/whiteboard/plugins/org.apache.forrest.plugin.internal.xhtml2/resources/stylesheets/xhtml2html.xsl (added)
+++ forrest/trunk/whiteboard/plugins/org.apache.forrest.plugin.internal.xhtml2/resources/stylesheets/xhtml2html.xsl Tue Sep  6 07:12:39 2005
@@ -0,0 +1,976 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+  - Copyright (c) 2004, Jonathan McGee
+  - All rights reserved.
+  -
+  - Redistribution and use in source and binary forms, with or without
+  - modification, are permitted provided that the following conditions
+  - are met:
+  -
+  - * Redistributions of source code must retain the above copyright
+  -   notice, this list of conditions and the following disclaimer. 
+  - * Redistributions in binary form must reproduce the above copyright
+  -   notice, this list of conditions and the following disclaimer in
+  -   the documentation and/or other materials provided with the
+  -   distribution. 
+  - * Neither the name of the author nor the names of his contributors
+  -   may be used to endorse or promote products derived from this
+  -   software without specific prior written permission. 
+  - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+  - "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+  - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+  - FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+  - COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+  - INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+  - (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+  - SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+  - HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
+  - STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+  - ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+  - ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+  -->
+<xsl:stylesheet version="1.0" 
+  xmlns="http://www.w3.org/2002/06/xhtml2" 
+  xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
+  xmlns:html="http://www.w3.org/2002/06/xhtml2"
+  >
+  <!-- If imported into another stylesheet, allow the first level heading
+    -  depth to be configured -->
+  <xsl:param name="xhtml-heading" select="1"/>
+
+  <!-- Use XHTML 1.0 as the output schema -->
+  <xsl:output method="html" version="1.0" encoding="utf-8"
+    omit-xml-declaration="yes" media-type="text/html"
+    doctype-public="-//W3C//DTD HTML 4.01//EN"
+    doctype-system="http://www.w3.org/TR/html4/strict.dtd"/>
+
+  <!-- Copy elements by default -->
+  <xsl:template match="comment()">
+   <xsl:comment><xsl:value-of select="."/></xsl:comment>
+  </xsl:template>
+
+  <!-- Do not process elements and attributes by default -->
+  <xsl:template match="html:*"/>
+  <xsl:template match="html:*/@*" priority="0"/>
+  <xsl:template match="html:*/@*" mode="insdel" priority="0"/>
+  <xsl:template match="html:*/@*" mode="image" priority="0"/>
+  <xsl:template match="html:*/@*" mode="quote" priority="0"/>
+  <xsl:template match="html:*/@*" mode="link" priority="0"/>
+
+  <!--
+    - XHTML Attribute Collections
+    -->
+
+  <!-- Core Attribute Collection -->
+  <xsl:template match="@class">
+   <xsl:param name="class"/>
+   <xsl:attribute name="class">
+    <xsl:if test="$class">
+     <xsl:value-of select="$class"/>
+     <xsl:text> </xsl:text>
+    </xsl:if>
+    <xsl:value-of select="."/>
+   </xsl:attribute>
+  </xsl:template>
+  <xsl:template match="@id|@title">
+   <xsl:attribute name="{local-name()}">
+    <xsl:value-of select="."/>
+   </xsl:attribute>
+  </xsl:template>
+
+  <!-- I18N Attribute Collection -->
+  <xsl:template match="@xml:lang">
+   <xsl:attribute name="lang"><xsl:value-of select="."/></xsl:attribute>
+  </xsl:template>
+
+  <!-- Bi-directional Text Collection -->
+  <xsl:template match="@dir">
+   <!-- TODO: Need to handle lro and rlo.  Not in HTML4 -->
+   <xsl:attribute name="dir"><xsl:value-of select="."/></xsl:attribute>
+  </xsl:template>
+
+  <!-- Edit Collection -->
+  <xsl:template match="@edit" mode="insdel"/>
+  <xsl:template match="@datetime" mode="insdel">
+   <xsl:attribute name="datetime"><xsl:value-of select="."/></xsl:attribute>
+  </xsl:template>
+
+  <!-- Hypertext Attribute Collection -->
+  <xsl:template match="@href|@rel|@rev|@accesskey|@target" mode="link">
+   <xsl:attribute name="{local-name()}">
+    <xsl:value-of select="."/>
+   </xsl:attribute>
+  </xsl:template>
+  <xsl:template match="@navindex" mode="link">
+   <xsl:attribute name="tabindex"><xsl:value-of select="."/></xsl:attribute>
+  </xsl:template>
+  <!-- Make sure only one tag gets the cite attribute -->
+  <xsl:template match="@cite" mode="insdel">
+   <xsl:attribute name="cite"><xsl:value-of select="."/></xsl:attribute>
+  </xsl:template>
+  <xsl:template match="@cite" mode="quote">
+   <xsl:if test="count(@edit)=0">
+    <xsl:attribute name="cite"><xsl:value-of select="."/></xsl:attribute>
+   </xsl:if>
+  </xsl:template>
+
+  <!-- Embedding Attribute Collection -->
+  <xsl:template match="@src" mode="image">
+   <xsl:attribute name="src"><xsl:value-of select="."/></xsl:attribute>
+  </xsl:template>
+  <xsl:template match="html:link/@type" mode="link">
+   <xsl:attribute name="type"><xsl:value-of select="."/></xsl:attribute>
+  </xsl:template>
+
+  <!-- Image Map Attribute Collection -->
+  <xsl:template match="@usemap|@ismap" mode="image">
+   <xsl:attribute name="{local-name()}">
+    <xsl:value-of select="."/>
+   </xsl:attribute>
+  </xsl:template>
+
+  <!-- Style Attribute Collection -->
+  <xsl:template match="@style">
+   <xsl:attribute name="style"><xsl:value-of select="."/></xsl:attribute>
+  </xsl:template>
+
+  <!--
+    - Block rendering templates
+    -->
+  <!-- If the edit attribute has been used, add a ins or del as appropriate -->
+  <xsl:template name="block">
+   <xsl:param name="element"/>
+   <xsl:param name="class"/>
+   <xsl:choose>
+    <!-- No edit attribute, just call next level -->
+    <xsl:when test="count(@edit)=0">
+     <xsl:call-template name="block-element">
+      <xsl:with-param name="element" select="$element"/>
+      <xsl:with-param name="class" select="$class"/>
+     </xsl:call-template>
+    </xsl:when>
+    <!-- Edit attribute set to "deleted", create a del element -->
+    <xsl:when test="@edit='deleted'">
+     <del>
+      <xsl:apply-templates select="@*" mode="insdel">
+       <xsl:with-param name="element" select="$element"/>
+       <xsl:with-param name="class" select="$class"/>
+      </xsl:apply-templates>
+      <xsl:call-template name="block-element">
+       <xsl:with-param name="element" select="$element"/>
+       <xsl:with-param name="class" select="$class"/>
+      </xsl:call-template>
+     </del>
+    </xsl:when>
+    <!-- Edit attribute set to "inserted", "changed", "moved", create an ins
+      -  element -->
+    <xsl:otherwise>
+     <ins>
+      <xsl:apply-templates select="@*" mode="insdel">
+       <xsl:with-param name="element" select="$element"/>
+       <xsl:with-param name="class" select="$class"/>
+      </xsl:apply-templates>
+      <xsl:call-template name="block-element">
+       <xsl:with-param name="element" select="$element"/>
+       <xsl:with-param name="class" select="$class"/>
+      </xsl:call-template>
+     </ins>
+    </xsl:otherwise>
+   </xsl:choose>
+  </xsl:template>
+
+  <!-- Create the element before any automatic inline children -->
+  <xsl:template name="block-element">
+   <xsl:param name="element"/>
+   <xsl:param name="class"/>
+   <xsl:choose>
+    <!-- The hr element is empty -->
+    <xsl:when test="$element='hr'">
+     <hr>
+      <xsl:apply-templates select="@*">
+       <xsl:with-param name="element" select="$element"/>
+       <xsl:with-param name="class" select="$class"/>
+      </xsl:apply-templates>
+     </hr>
+    </xsl:when>
+    <!-- Create element -->
+    <xsl:otherwise>
+     <xsl:element name="{$element}">
+      <xsl:if test="$class">
+       <xsl:attribute name="class">
+        <xsl:value-of select="$class"/>
+       </xsl:attribute>
+      </xsl:if>
+      <xsl:apply-templates select="@*">
+       <xsl:with-param name="element" select="$element"/>
+       <xsl:with-param name="class" select="$class"/>
+      </xsl:apply-templates>
+      <xsl:call-template name="block-quote">
+       <xsl:with-param name="element" select="$element"/>
+       <xsl:with-param name="class" select="$class"/>
+      </xsl:call-template>
+     </xsl:element>
+    </xsl:otherwise>
+   </xsl:choose>
+  </xsl:template>
+
+  <!-- If the cite attribute appears without edit, create a quote element -->
+  <xsl:template name="block-quote">
+   <xsl:param name="element"/>
+   <xsl:param name="class"/>
+   <xsl:choose>
+    <!-- If no cite attribute or edit was defined, continue to next level -->
+    <xsl:when test="(count(@cite)=0) or (count(@edit)!=0)
+      or ($element='blockquote')">
+     <xsl:call-template name="block-link">
+      <xsl:with-param name="element" select="$element"/>
+      <xsl:with-param name="class" select="$class"/>
+     </xsl:call-template>
+    </xsl:when>
+    <!-- Create the quote element -->
+    <xsl:otherwise>
+     <q>
+      <xsl:apply-templates select="@*" mode="quote">
+       <xsl:with-param name="element" select="$element"/>
+       <xsl:with-param name="class" select="$class"/>
+      </xsl:apply-templates>
+      <xsl:call-template name="block-link">
+       <xsl:with-param name="element" select="$element"/>
+       <xsl:with-param name="class" select="$class"/>
+      </xsl:call-template>
+     </q>
+    </xsl:otherwise>
+   </xsl:choose>
+  </xsl:template>
+
+  <!-- If the href attribute appears, make a hyperlink -->
+  <xsl:template name="block-link">
+   <xsl:param name="element"/>
+   <xsl:param name="class"/>
+   <xsl:choose>
+    <!-- If no href attribute appears, continue to next level -->
+    <xsl:when test="count(@href)=0">
+     <xsl:call-template name="block-image">
+      <xsl:with-param name="element" select="$element"/>
+      <xsl:with-param name="class" select="$class"/>
+     </xsl:call-template>
+    </xsl:when>
+    <!-- href has been used, so create an anchor -->
+    <xsl:otherwise>
+     <a>
+      <xsl:apply-templates select="@*" mode="link">
+       <xsl:with-param name="element" select="$element"/>
+       <xsl:with-param name="class" select="$class"/>
+      </xsl:apply-templates>
+      <xsl:call-template name="block-image">
+       <xsl:with-param name="element" select="$element"/>
+       <xsl:with-param name="class" select="$class"/>
+      </xsl:call-template>
+     </a>
+    </xsl:otherwise>
+   </xsl:choose>
+  </xsl:template>
+
+  <!-- If the src attribute appears, make an image -->
+  <xsl:template name="block-image">
+   <xsl:param name="element"/>
+   <xsl:param name="class"/>
+   <xsl:choose>
+    <!-- If no src attribute appears, continue to next level -->
+    <xsl:when test="count(@src)=0">
+     <xsl:apply-templates/>
+    </xsl:when>
+    <!-- src has been used, so replace with an image -->
+    <xsl:otherwise>
+     <img alt="{.}">
+      <xsl:apply-templates select="@*" mode="image">
+       <xsl:with-param name="element" select="$element"/>
+       <xsl:with-param name="class" select="$class"/>
+      </xsl:apply-templates>
+     </img>
+    </xsl:otherwise>
+   </xsl:choose>
+  </xsl:template>
+
+  <!--
+    - Inline rendering templates
+    -->
+  <!-- If the edit attribute has been used, add a ins or del as appropriate -->
+  <xsl:template name="inline">
+   <xsl:param name="element"/>
+   <xsl:param name="class"/>
+   <xsl:choose>
+    <!-- No edit attribute, just call next level -->
+    <xsl:when test="count(@edit)=0">
+     <xsl:call-template name="inline-quote">
+      <xsl:with-param name="element" select="$element"/>
+      <xsl:with-param name="class" select="$class"/>
+     </xsl:call-template>
+    </xsl:when>
+    <!-- Edit attribute set to "deleted", create a del element -->
+    <xsl:when test="@edit='deleted'">
+     <del>
+      <xsl:apply-templates select="@*" mode="insdel">
+       <xsl:with-param name="element" select="$element"/>
+       <xsl:with-param name="class" select="$class"/>
+      </xsl:apply-templates>
+      <xsl:call-template name="inline-quote">
+       <xsl:with-param name="element" select="$element"/>
+       <xsl:with-param name="class" select="$class"/>
+      </xsl:call-template>
+     </del>
+    </xsl:when>
+    <!-- Edit attribute set to "inserted", "changed", "moved", create an ins
+      -  element -->
+    <xsl:otherwise>
+     <ins>
+      <xsl:apply-templates select="@*" mode="insdel">
+       <xsl:with-param name="element" select="$element"/>
+       <xsl:with-param name="class" select="$class"/>
+      </xsl:apply-templates>
+      <xsl:call-template name="inline-quote">
+       <xsl:with-param name="element" select="$element"/>
+       <xsl:with-param name="class" select="$class"/>
+      </xsl:call-template>
+     </ins>
+    </xsl:otherwise>
+   </xsl:choose>
+  </xsl:template>
+
+  <!-- If the cite attribute appears without edit, create a quote element -->
+  <xsl:template name="inline-quote">
+   <xsl:param name="element"/>
+   <xsl:param name="class"/>
+   <xsl:choose>
+    <!-- If no cite attribute or edit was defined, continue to next level -->
+    <xsl:when test="(count(@cite)=0) or (count(@edit)!=0)">
+     <xsl:call-template name="inline-link">
+      <xsl:with-param name="element" select="$element"/>
+      <xsl:with-param name="class" select="$class"/>
+     </xsl:call-template>
+    </xsl:when>
+    <!-- Create the quote element -->
+    <xsl:otherwise>
+     <q>
+      <xsl:apply-templates select="@*" mode="quote">
+       <xsl:with-param name="element" select="$element"/>
+       <xsl:with-param name="class" select="$class"/>
+      </xsl:apply-templates>
+      <xsl:call-template name="inline-link">
+       <xsl:with-param name="element" select="$element"/>
+       <xsl:with-param name="class" select="$class"/>
+      </xsl:call-template>
+     </q>
+    </xsl:otherwise>
+   </xsl:choose>
+  </xsl:template>
+
+  <!-- If the href attribute appears, make a hyperlink -->
+  <xsl:template name="inline-link">
+   <xsl:param name="element"/>
+   <xsl:param name="class"/>
+   <xsl:choose>
+    <!-- If no href attribute appears, continue to next level -->
+    <xsl:when test="count(@href)=0">
+     <xsl:call-template name="inline-image">
+      <xsl:with-param name="element" select="$element"/>
+      <xsl:with-param name="class" select="$class"/>
+     </xsl:call-template>
+    </xsl:when>
+    <!-- href has been used, so create an anchor -->
+    <xsl:otherwise>
+     <a>
+      <xsl:apply-templates select="@*" mode="link">
+       <xsl:with-param name="element" select="$element"/>
+       <xsl:with-param name="class" select="$class"/>
+      </xsl:apply-templates>
+      <xsl:call-template name="inline-image">
+       <xsl:with-param name="element" select="$element"/>
+       <xsl:with-param name="class" select="$class"/>
+      </xsl:call-template>
+     </a>
+    </xsl:otherwise>
+   </xsl:choose>
+  </xsl:template>
+
+  <!-- If the src attribute appears, make an image -->
+  <xsl:template name="inline-image">
+   <xsl:param name="element"/>
+   <xsl:param name="class"/>
+   <xsl:choose>
+    <!-- If no src attribute appears, continue to next level -->
+    <xsl:when test="count(@src)=0">
+     <xsl:call-template name="inline-element">
+      <xsl:with-param name="element" select="$element"/>
+      <xsl:with-param name="class" select="$class"/>
+     </xsl:call-template>
+    </xsl:when>
+    <!-- src has been used, so replace with an image -->
+    <xsl:otherwise>
+     <img alt="{.}">
+      <xsl:apply-templates select="@*" mode="image">
+       <xsl:with-param name="element" select="$element"/>
+       <xsl:with-param name="class" select="$class"/>
+      </xsl:apply-templates>
+     </img>
+    </xsl:otherwise>
+   </xsl:choose>
+  </xsl:template>
+
+  <!-- Finally, create the element (assuming not quote) -->
+  <xsl:template name="inline-element">
+   <xsl:param name="element"/>
+   <xsl:param name="class"/>
+   <xsl:choose>
+    <!-- If element is 'q' or 'a', it has already been made -->
+    <xsl:when test="($element='q') or ($element='a')">
+     <xsl:apply-templates select="@*">
+      <xsl:with-param name="element" select="$element"/>
+      <xsl:with-param name="class" select="$class"/>
+     </xsl:apply-templates>
+     <xsl:apply-templates/>
+    </xsl:when>
+    <!-- If element is 'br', make a span and put br at end -->
+    <xsl:when test="$element='br'">
+     <span class="line">
+      <xsl:apply-templates select="@*">
+       <xsl:with-param name="element" select="$element"/>
+       <xsl:with-param name="class" select="$class"/>
+      </xsl:apply-templates>
+      <xsl:apply-templates/><br/>
+     </span>
+    </xsl:when>
+    <!-- Create element -->
+    <xsl:otherwise>
+     <xsl:element name="{$element}">
+      <xsl:apply-templates select="@*">
+       <xsl:with-param name="element" select="$element"/>
+       <xsl:with-param name="class" select="$class"/>
+      </xsl:apply-templates>
+      <xsl:apply-templates/>
+     </xsl:element>
+    </xsl:otherwise>
+   </xsl:choose>
+  </xsl:template>
+
+  <!--
+    - List rendering templates
+    -->
+  <!-- If the edit attribute has been used, add a ins or del as appropriate -->
+  <xsl:template name="list">
+   <xsl:param name="element"/>
+   <xsl:param name="class"/>
+   <xsl:choose>
+    <!-- No edit attribute, just call next level -->
+    <xsl:when test="count(@edit)=0">
+     <xsl:call-template name="list-quote">
+      <xsl:with-param name="element" select="$element"/>
+      <xsl:with-param name="class" select="$class"/>
+     </xsl:call-template>
+    </xsl:when>
+    <!-- Edit attribute set to "deleted", create a del element -->
+    <xsl:when test="@edit='deleted'">
+     <del>
+      <xsl:apply-templates select="@*" mode="insdel">
+       <xsl:with-param name="element" select="$element"/>
+       <xsl:with-param name="class" select="$class"/>
+      </xsl:apply-templates>
+      <xsl:call-template name="list-quote">
+       <xsl:with-param name="element" select="$element"/>
+       <xsl:with-param name="class" select="$class"/>
+      </xsl:call-template>
+     </del>
+    </xsl:when>
+    <!-- Edit attribute set to "inserted", "changed", "moved", create an ins
+      -  element -->
+    <xsl:otherwise>
+     <ins>
+      <xsl:apply-templates select="@*" mode="insdel">
+       <xsl:with-param name="element" select="$element"/>
+       <xsl:with-param name="class" select="$class"/>
+      </xsl:apply-templates>
+      <xsl:call-template name="list-quote">
+       <xsl:with-param name="element" select="$element"/>
+       <xsl:with-param name="class" select="$class"/>
+      </xsl:call-template>
+     </ins>
+    </xsl:otherwise>
+   </xsl:choose>
+  </xsl:template>
+
+  <!-- If the cite attribute appears without edit, create a quote element -->
+  <xsl:template name="list-quote">
+   <xsl:param name="element"/>
+   <xsl:param name="class"/>
+   <xsl:choose>
+    <!-- If no cite attribute or edit was defined, continue to next level -->
+    <xsl:when test="(count(@cite)=0) or (count(@edit)!=0)">
+     <xsl:call-template name="list-element">
+      <xsl:with-param name="element" select="$element"/>
+      <xsl:with-param name="class" select="$class"/>
+     </xsl:call-template>
+    </xsl:when>
+    <!-- Create the quote element -->
+    <xsl:otherwise>
+     <blockquote>
+      <xsl:apply-templates select="@*" mode="quote">
+       <xsl:with-param name="element" select="$element"/>
+       <xsl:with-param name="class" select="$class"/>
+      </xsl:apply-templates>
+      <xsl:call-template name="list-element">
+       <xsl:with-param name="element" select="$element"/>
+       <xsl:with-param name="class" select="$class"/>
+      </xsl:call-template>
+     </blockquote>
+    </xsl:otherwise>
+   </xsl:choose>
+  </xsl:template>
+
+  <!-- Create the element before any automatic inline children -->
+  <xsl:template name="list-element">
+   <xsl:param name="element"/>
+   <xsl:param name="class"/>
+   <xsl:choose>
+    <!-- If going to be replaced with an image, create a para instead -->
+    <xsl:when test="count(@src)">
+     <p>
+      <xsl:apply-templates select="@*">
+       <xsl:with-param name="element" select="$element"/>
+       <xsl:with-param name="class" select="$class"/>
+      </xsl:apply-templates>
+      <xsl:call-template name="list-link">
+       <xsl:with-param name="element" select="$element"/>
+       <xsl:with-param name="class" select="$class"/>
+      </xsl:call-template>
+     </p>
+    </xsl:when>
+    <!-- Create element and continue to children -->
+    <xsl:otherwise>
+     <xsl:element name="{$element}">
+      <xsl:if test="$class">
+       <xsl:attribute name="class">
+        <xsl:value-of select="$class"/>
+       </xsl:attribute>
+      </xsl:if>
+      <xsl:if test="count(html:summary)">
+       <xsl:attribute name="summary">
+        <xsl:value-of select="html:summary"/>
+       </xsl:attribute>
+      </xsl:if>
+      <xsl:apply-templates select="@*">
+       <xsl:with-param name="element" select="$element"/>
+       <xsl:with-param name="class" select="$class"/>
+      </xsl:apply-templates>
+      <xsl:apply-templates/>
+     </xsl:element>
+    </xsl:otherwise>
+   </xsl:choose>
+  </xsl:template>
+
+  <!-- If the href and src are provided, make a linked image -->
+  <xsl:template name="list-link">
+   <xsl:param name="element"/>
+   <xsl:param name="class"/>
+   <xsl:choose>
+    <!-- If no href attribute appears, continue to next level -->
+    <xsl:when test="count(@href)=0">
+     <xsl:call-template name="list-image">
+      <xsl:with-param name="element" select="$element"/>
+      <xsl:with-param name="class" select="$class"/>
+     </xsl:call-template>
+    </xsl:when>
+    <!-- href has been used, so create an anchor -->
+    <xsl:otherwise>
+     <a>
+      <xsl:apply-templates select="@*" mode="link">
+       <xsl:with-param name="element" select="$element"/>
+       <xsl:with-param name="class" select="$class"/>
+      </xsl:apply-templates>
+      <xsl:call-template name="list-image">
+       <xsl:with-param name="element" select="$element"/>
+       <xsl:with-param name="class" select="$class"/>
+      </xsl:call-template>
+     </a>
+    </xsl:otherwise>
+   </xsl:choose>
+  </xsl:template>
+
+  <!-- If the src attribute appears, make an image -->
+  <xsl:template name="list-image">
+   <xsl:param name="element"/>
+   <xsl:param name="class"/>
+   <img alt="{.}">
+    <xsl:apply-templates select="@*" mode="image">
+     <xsl:with-param name="element" select="$element"/>
+     <xsl:with-param name="class" select="$class"/>
+    </xsl:apply-templates>
+   </img>
+  </xsl:template>
+
+  <!--
+    - List Item rendering templates
+    -->
+  <!-- Create the element before any automatic inline children -->
+  <xsl:template name="listitem">
+   <xsl:param name="element"/>
+   <xsl:param name="class"/>
+   <xsl:element name="{$element}">
+    <xsl:if test="$class">
+     <xsl:attribute name="class">
+      <xsl:value-of select="$class"/>
+     </xsl:attribute>
+    </xsl:if>
+    <xsl:apply-templates select="@*">
+     <xsl:with-param name="element" select="$element"/>
+     <xsl:with-param name="class" select="$class"/>
+    </xsl:apply-templates>
+    <xsl:call-template name="listitem-insdel">
+     <xsl:with-param name="element" select="$element"/>
+     <xsl:with-param name="class" select="$class"/>
+    </xsl:call-template>
+   </xsl:element>
+  </xsl:template>
+
+  <!-- If the edit attribute has been used, add a ins or del as appropriate -->
+  <xsl:template name="listitem-insdel">
+   <xsl:param name="element"/>
+   <xsl:param name="class"/>
+   <xsl:choose>
+    <!-- No edit attribute, just call next level -->
+    <xsl:when test="count(@edit)=0">
+     <xsl:call-template name="listitem-link">
+      <xsl:with-param name="element" select="$element"/>
+      <xsl:with-param name="class" select="$class"/>
+     </xsl:call-template>
+    </xsl:when>
+    <!-- Edit attribute set to "deleted", create a del element -->
+    <xsl:when test="@edit='deleted'">
+     <del>
+      <xsl:apply-templates select="@*" mode="insdel">
+       <xsl:with-param name="element" select="$element"/>
+       <xsl:with-param name="class" select="$class"/>
+      </xsl:apply-templates>
+      <xsl:call-template name="listitem-quote">
+       <xsl:with-param name="element" select="$element"/>
+       <xsl:with-param name="class" select="$class"/>
+      </xsl:call-template>
+     </del>
+    </xsl:when>
+    <!-- Edit attribute set to "inserted", "changed", "moved", create an ins
+      -  element -->
+    <xsl:otherwise>
+     <ins>
+      <xsl:apply-templates select="@*" mode="insdel">
+       <xsl:with-param name="element" select="$element"/>
+       <xsl:with-param name="class" select="$class"/>
+      </xsl:apply-templates>
+      <xsl:call-template name="listitem-quote">
+       <xsl:with-param name="element" select="$element"/>
+       <xsl:with-param name="class" select="$class"/>
+      </xsl:call-template>
+     </ins>
+    </xsl:otherwise>
+   </xsl:choose>
+  </xsl:template>
+
+  <!-- If the cite attribute appears without edit, create a quote element -->
+  <xsl:template name="listitem-quote">
+   <xsl:param name="element"/>
+   <xsl:param name="class"/>
+   <xsl:choose>
+    <!-- If no cite attribute or edit was defined, continue to next level -->
+    <xsl:when test="(count(@cite)=0) or (count(@edit)!=0)">
+     <xsl:call-template name="listitem-link">
+      <xsl:with-param name="element" select="$element"/>
+      <xsl:with-param name="class" select="$class"/>
+     </xsl:call-template>
+    </xsl:when>
+    <!-- Create the quote element -->
+    <xsl:otherwise>
+     <q>
+      <xsl:apply-templates select="@*" mode="quote">
+       <xsl:with-param name="element" select="$element"/>
+       <xsl:with-param name="class" select="$class"/>
+      </xsl:apply-templates>
+      <xsl:call-template name="listitem-link">
+       <xsl:with-param name="element" select="$element"/>
+       <xsl:with-param name="class" select="$class"/>
+      </xsl:call-template>
+     </q>
+    </xsl:otherwise>
+   </xsl:choose>
+  </xsl:template>
+
+  <!-- If the href attribute appears, make a hyperlink -->
+  <xsl:template name="listitem-link">
+   <xsl:param name="element"/>
+   <xsl:param name="class"/>
+   <xsl:choose>
+    <!-- If no href attribute appears, continue to next level -->
+    <xsl:when test="count(@href)=0">
+     <xsl:call-template name="listitem-image">
+      <xsl:with-param name="element" select="$element"/>
+      <xsl:with-param name="class" select="$class"/>
+     </xsl:call-template>
+    </xsl:when>
+    <!-- href has been used, so create an anchor -->
+    <xsl:otherwise>
+     <a>
+      <xsl:apply-templates select="@*" mode="link">
+       <xsl:with-param name="element" select="$element"/>
+       <xsl:with-param name="class" select="$class"/>
+      </xsl:apply-templates>
+      <xsl:call-template name="listitem-image">
+       <xsl:with-param name="element" select="$element"/>
+       <xsl:with-param name="class" select="$class"/>
+      </xsl:call-template>
+     </a>
+    </xsl:otherwise>
+   </xsl:choose>
+  </xsl:template>
+
+  <!-- If the src attribute appears, make an image -->
+  <xsl:template name="listitem-image">
+   <xsl:param name="element"/>
+   <xsl:param name="class"/>
+   <xsl:choose>
+    <!-- If no src attribute appears, continue to next level -->
+    <xsl:when test="count(@src)=0">
+     <xsl:apply-templates/>
+    </xsl:when>
+    <!-- src has been used, so replace with an image -->
+    <xsl:otherwise>
+     <img alt="{.}">
+      <xsl:apply-templates select="@*" mode="image">
+       <xsl:with-param name="element" select="$element"/>
+       <xsl:with-param name="class" select="$class"/>
+      </xsl:apply-templates>
+     </img>
+    </xsl:otherwise>
+   </xsl:choose>
+  </xsl:template>
+
+  <!--
+    - XHTML Structure Module
+    -->
+  <!-- Add our Subversion/CVS Id to the root element -->
+  <xsl:template match="html:html">
+   <xsl:comment> $Id: xhtml2html.xslt 127 2004-11-14 03:06:21Z etherealwake $ </xsl:comment>
+   <html>
+    <xsl:apply-templates select="@*"/>
+    <xsl:apply-templates/>
+   </html>
+  </xsl:template>
+  <!-- Specify namespace for metadata (if not using schema.X links) -->
+  <xsl:template match="html:html/@profile">
+   <xsl:attribute name="profile"><xsl:value-of select="."/></xsl:attribute>
+  </xsl:template>
+  <!-- Add a generator tag to the head section -->
+  <xsl:template match="html:head">
+   <head>
+    <xsl:apply-templates select="@*"/>
+    <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
+    <xsl:apply-templates/>
+    <xsl:if test="count(html:meta[@name='generator'])=0">
+     <meta name="generator" content="Ethereal Wake XHTML2 to XHTML1 XSLT"/>
+    </xsl:if>
+   </head>
+  </xsl:template>
+  <!-- <title> and <body> are pretty much copied as is -->
+  <xsl:template match="html:title|html:body">
+   <xsl:element name="{local-name()}">
+    <xsl:apply-templates select="@*"/>
+    <xsl:apply-templates/>
+   </xsl:element>
+  </xsl:template>
+    
+  <!--
+    - XHTML Block Text Module
+    -->
+  <!-- Handle the elements practically unchanged since XHTML 1.0 -->
+  <xsl:template match="html:address|html:blockquote|html:div|html:hr
+    |html:pre|html:hr">
+   <xsl:call-template name="block">
+    <xsl:with-param name="element" select="local-name(.)"/>
+   </xsl:call-template>
+  </xsl:template>
+  <!-- In XHTML 2.0, paragraphs are a bit more sophisticated than in 1.X -->
+  <xsl:template match="html:p">
+   <xsl:choose>
+    <!-- If we have XHTML 1.0 block children, make us a div -->
+    <xsl:when test="count(html:ul|html:ol|html:nl|html:dl|html:blockcode
+      |html:blockquote|html:pre|html:table)&gt;0">
+     <xsl:call-template name="block">
+      <xsl:with-param name="element" select="'div'"/>
+      <xsl:with-param name="class" select="'p'"/>
+     </xsl:call-template>
+    </xsl:when>
+    <!-- If no block children, be a traditional paragraph -->
+    <xsl:otherwise>
+     <xsl:call-template name="block">
+      <xsl:with-param name="element" select="'p'"/>
+     </xsl:call-template>
+    </xsl:otherwise>
+   </xsl:choose>
+  </xsl:template>
+  <!-- We will treat sections as simple <div>s of class section -->
+  <xsl:template match="html:section">
+   <xsl:call-template name="block">
+    <xsl:with-param name="element" select="'div'"/>
+    <xsl:with-param name="class" select="'section'"/>
+   </xsl:call-template>
+  </xsl:template>
+  <!-- <h> gets mapped to a h# based on how many parent sections -->
+  <xsl:template match="html:h">
+   <!-- Count the number of sections -->
+   <xsl:variable name="levelbase">
+    <xsl:value-of select="count(ancestor::html:section)+$xhtml-heading"/>
+   </xsl:variable>
+   <!-- Limit the heading element to h6 -->
+   <xsl:variable name="level">
+    <xsl:choose>
+     <xsl:when test="$levelbase &gt; 6">6</xsl:when>
+     <xsl:otherwise><xsl:value-of select="$levelbase"/></xsl:otherwise>
+    </xsl:choose>
+   </xsl:variable>
+   <!-- Create the appropriate element -->
+   <xsl:call-template name="block">
+    <xsl:with-param name="element" select="concat('h',$level)"/>
+   </xsl:call-template>
+  </xsl:template>
+
+  <!--
+    - XHTML Inline Text Module
+    -->
+  <!-- Handle the elements practically unchanged since XHTML 1.0 -->
+  <xsl:template match="html:abbr|html:cite|html:code|html:dfn|html:em
+    |html:kbd|html:samp|html:span|html:strong|html:sub|html:sup
+    |html:var">
+   <xsl:call-template name="inline">
+    <xsl:with-param name="element" select="local-name()"/>
+   </xsl:call-template>
+  </xsl:template>
+  <!-- quote maps to the 'q' element from XHTML 1.0 -->
+  <xsl:template match="html:quote">
+   <xsl:call-template name="inline">
+    <xsl:with-param name="element" select="'q'"/>
+   </xsl:call-template>
+  </xsl:template>
+  <!-- <l> is a more complex version of HTML's <br> -->
+  <xsl:template match="html:l">
+   <xsl:call-template name="inline">
+    <xsl:with-param name="element" select="'br'"/>
+   </xsl:call-template>
+  </xsl:template>
+
+  <!--
+    - XHTML Hypertext Module
+    -->
+  <xsl:template match="html:a">
+   <xsl:call-template name="inline">
+    <xsl:with-param name="element" select="'a'"/>
+   </xsl:call-template>
+  </xsl:template>
+  <xsl:template match="html:a/@id" mode="link">
+   <xsl:attribute name="id"><xsl:value-of select="."/></xsl:attribute>
+   <xsl:attribute name="name"><xsl:value-of select="."/></xsl:attribute>
+  </xsl:template>
+
+  <!--
+    - XHTML List Module
+    -->
+  <xsl:template match="html:ul|html:ol|html:dl">
+   <xsl:call-template name="list">
+    <xsl:with-param name="element" select="local-name(.)"/>
+   </xsl:call-template>
+  </xsl:template>
+  <xsl:template match="html:li|html:dt|html:dd">
+   <xsl:call-template name="listitem">
+    <xsl:with-param name="element" select="local-name(.)"/>
+   </xsl:call-template>
+  </xsl:template>
+
+  <!--
+    - XHTML Linking Module
+    -->
+  <xsl:template match="html:link">
+   <link><xsl:apply-templates select="@*" mode="link"/></link>
+  </xsl:template>
+  <xsl:template match="html:link/@media" mode="link">
+   <xsl:attribute name="media"><xsl:value-of select="."/></xsl:attribute>
+  </xsl:template>
+  <xsl:template match="html:link/@xml:lang" mode="link">
+   <xsl:attribute name="hreflang"><xsl:value-of select="."/></xsl:attribute>
+  </xsl:template>
+
+  <!--
+    - XHTML Metainformation Module
+    -->
+  <xsl:template match="html:meta">
+   <meta>
+    <xsl:apply-templates select="@*"/>
+    <xsl:attribute name="content"><xsl:value-of select="."/></xsl:attribute>
+   </meta>
+  </xsl:template>
+  <xsl:template match="html:meta/@name">
+   <xsl:attribute name="name"><xsl:value-of select="."/></xsl:attribute>
+  </xsl:template>
+
+  <!--
+    - XHTML Object Module
+    -->
+  <!--
+    - Ruby Module
+    -->
+  <!--
+    - XHTML Scripting Module
+    -->
+  <!--
+    - XHTML Style Sheet Module
+    -->
+  <xsl:template match="html:style">
+   <style>
+    <xsl:apply-templates select="@*"/>
+    <xsl:apply-templates/>
+   </style>
+  </xsl:template>
+  <xsl:template match="html:style/@media">
+   <xsl:attribute name="media"><xsl:value-of select="."/></xsl:attribute>
+  </xsl:template>
+
+  <!--
+    - XHTML Tables Module
+    -->
+  <!-- Some table elements are pretty much left unchanged -->
+  <xsl:template match="html:caption|html:col|html:colgroup|html:thead
+    |html:tfoot|html:tbody|html:tr">
+   <xsl:element name="{local-name()}">
+    <xsl:apply-templates select="@*"/>
+    <xsl:apply-templates/>
+   </xsl:element>
+  </xsl:template>
+  <xsl:template match="html:col/@span|html:colspan/@span">
+   <xsl:attribute name="span"><xsl:value-of select="."/></xsl:attribute>
+  </xsl:template>
+  <!-- td and th are pretty much as they were -->
+  <xsl:template match="html:td|html:th">
+   <xsl:call-template name="listitem">
+    <xsl:with-param name="element" select="local-name()"/>
+   </xsl:call-template>
+  </xsl:template>
+  <xsl:template match="html:td/@abbr|html:td/@axis|html:td/@colspan
+    |html:td/@headers|html:td/@rowspan|html:td/@scope|html:th/@abbr
+    |html:th/@axis|html:th/@colspan|html:th/@headers|html:th/@rowspan
+    |html:th/@scope">
+   <xsl:attribute name="{local-name()}">
+    <xsl:value-of select="."/>
+   </xsl:attribute>
+  </xsl:template>
+  <!-- The table element acts a lot like a list -->
+  <xsl:template match="html:table">
+   <xsl:call-template name="list">
+    <xsl:with-param name="element" select="'table'"/>
+   </xsl:call-template>
+  </xsl:template>
+
+</xsl:stylesheet>

Propchange: forrest/trunk/whiteboard/plugins/org.apache.forrest.plugin.internal.xhtml2/resources/stylesheets/xhtml2html.xsl
------------------------------------------------------------------------------
    svn:eol-style = native