forrest-svn mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From cross...@apache.org
Subject svn commit: r239571 - /forrest/trunk/etc/test-whitespace/html2document.xsl
Date Wed, 24 Aug 2005 08:27:37 GMT
Author: crossley
Date: Wed Aug 24 01:27:34 2005
New Revision: 239571

URL: http://svn.apache.org/viewcvs?rev=239571&view=rev
Log:
A more complex example with confused tabs.

Added:
    forrest/trunk/etc/test-whitespace/html2document.xsl   (with props)

Added: forrest/trunk/etc/test-whitespace/html2document.xsl
URL: http://svn.apache.org/viewcvs/forrest/trunk/etc/test-whitespace/html2document.xsl?rev=239571&view=auto
==============================================================================
--- forrest/trunk/etc/test-whitespace/html2document.xsl (added)
+++ forrest/trunk/etc/test-whitespace/html2document.xsl Wed Aug 24 01:27:34 2005
@@ -0,0 +1,314 @@
+<?xml version="1.0"?>
+<!--
+  Copyright 2002-2005 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
+
+      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:key name="h2s" match="h2" use="generate-id(preceding-sibling::h1[1])"/>
+    <xsl:key name="h3s" match="h3" use="generate-id(preceding-sibling::h2[1])"/>
+    <xsl:key name="h4s" match="h4" use="generate-id(preceding-sibling::h3[1])"/>
+    <xsl:key name="h5s" match="h5" use="generate-id(preceding-sibling::h4[1])"/>
+    <xsl:key name="h6s" match="h6" use="generate-id(preceding-sibling::h5[1])"/>
+
+    <xsl:template match="/">
+     <xsl:choose>
+   	   <xsl:when test="name(child::node())='html'">
+         <xsl:apply-templates/>
+	   </xsl:when>
+	     
+	   <xsl:otherwise>
+	     <document>
+	      <header><title>Error in conversion</title></header>
+	      <body>
+	       <warning>This file is not in a html format, please convert manually.</warning>
+	      </body>
+	     </document>
+	   </xsl:otherwise>
+     </xsl:choose>
+    </xsl:template>
+           
+    <xsl:template match="html">
+        <document>
+            <xsl:apply-templates/>
+        </document>
+    </xsl:template>
+
+    <xsl:template match="head">
+        <header>
+            <xsl:apply-templates/>
+        </header>
+    </xsl:template>
+        
+    <xsl:template match="meta">
+        <xsl:copy>
+            <xsl:apply-templates select="node()|@*"/>
+        </xsl:copy>
+    </xsl:template>  
+    
+    <!--infer structure from sibling headings-->
+    <xsl:template match="body">
+       <body>
+          <xsl:apply-templates select="*[1]" mode="next"/>
+          <xsl:call-template name="process_h1"/>
+       </body>
+    </xsl:template>
+    
+    <xsl:template name="process_h1">
+       <xsl:for-each select="h1">
+         <section>
+           <xsl:if test="a/@name">
+             <xsl:attribute name="id"><xsl:value-of select="a/@name"/></xsl:attribute>
+           </xsl:if>
+           <title><xsl:apply-templates/></title>
+           <xsl:apply-templates select="following-sibling::*[1]" mode="next"/>
+           <xsl:for-each select="key('h2s',generate-id(.))">
+             <section>
+               <title><xsl:apply-templates/></title>
+               <xsl:apply-templates select="following-sibling::*[1]" mode="next"/>
+               <xsl:for-each select="key('h3s',generate-id(.))">
+                 <section>
+                   <title><xsl:apply-templates/></title>
+                   <xsl:apply-templates select="following-sibling::*[1]"
+                                        mode="next"/>
+                   <xsl:for-each select="key('h4s',generate-id(.))">
+                     <section>
+                       <title><xsl:apply-templates/></title>
+                       <xsl:apply-templates select="following-sibling::*[1]"
+                                            mode="next"/>
+                       <xsl:for-each select="key('h5s',generate-id(.))">
+                         <section>
+                           <title><xsl:apply-templates/></title>
+                           <xsl:apply-templates select="following-sibling::*[1]"
+                                                mode="next"/>
+                           <xsl:for-each select="key('h6s',generate-id(.))">
+                             <section>
+                               <title><xsl:apply-templates/></title>
+                            <xsl:apply-templates select="following-sibling::*[1]" mode="next"/>
+                             </section>
+                           </xsl:for-each>
+                         </section>
+                       </xsl:for-each>
+                     </section>
+                   </xsl:for-each>
+                 </section>
+               </xsl:for-each>
+             </section>
+           </xsl:for-each>
+         </section>
+       </xsl:for-each>
+    </xsl:template>
+    
+    <!--process each sibling in order until the next heading level-->
+
+    <xsl:template match="*" mode="next">
+       <xsl:if test="not( translate( local-name(.),'123456','' ) = 'h' )">
+         <xsl:apply-templates select="."/>
+         <xsl:apply-templates select="following-sibling::*[1]" mode="next"/>
+       </xsl:if>
+    </xsl:template>
+      
+    <xsl:template match="P|p">
+        <p>
+          <xsl:if test="@class">
+            <xsl:attribute name="class"><xsl:value-of select="@class"/></xsl:attribute>

+          </xsl:if>
+          <xsl:apply-templates/>
+        </p>
+    </xsl:template>
+    
+    <xsl:template match="img">
+       <xsl:choose>
+    	<xsl:when test="name(..)='section'">
+          <figure alt="{@alt}" src= "{@src}"/>
+    	</xsl:when>
+    	<xsl:otherwise>
+          <img alt="{@alt}" src= "{@src}"/>
+    	</xsl:otherwise>
+       </xsl:choose>
+    </xsl:template>
+    
+    <xsl:template match="source|blockquote">
+      <xsl:choose>
+    	<xsl:when test="name(..)='p'">
+    	  <code>
+    	    <xsl:value-of select="." />
+    	  </code> 
+    	</xsl:when>
+      
+    	<xsl:otherwise>
+    	  <source>
+    	    <xsl:value-of select="." />
+    	  </source> 
+    	</xsl:otherwise>
+       </xsl:choose>
+    </xsl:template>
+
+  
+    <!-- convert a to link -->
+    <xsl:template match="a">
+      <xsl:if test="@name">
+        <!-- Attach an id to the current node -->
+        <xsl:attribute name="id"><xsl:value-of select="translate(@name, ' $', '__')"/></xsl:attribute>
+        <xsl:apply-templates/>
+      </xsl:if>
+      <xsl:if test="@href">
+        <link href="{@href}">
+          <xsl:apply-templates/>
+        </link>
+      </xsl:if>
+    </xsl:template>
+    
+    <xsl:template match="@valign | @align"/>
+        
+    <xsl:template match="center">
+      <xsl:choose>
+    	<xsl:when test="name(..)='p'">
+    	    <xsl:apply-templates/>
+    	</xsl:when>
+      
+    	<xsl:otherwise>
+    	  <p>
+    	    <xsl:apply-templates/>
+    	  </p> 
+    	</xsl:otherwise>
+       </xsl:choose>
+    </xsl:template>
+
+    <xsl:template match="ol">
+      <xsl:choose>
+    	<xsl:when test="name(..)='p'">
+    	   <xsl:text disable-output-escaping="yes"><![CDATA[</p>]]></xsl:text>
+    	    <ol>
+    	     <xsl:apply-templates/>
+    	    </ol>
+    	   <xsl:text disable-output-escaping="yes"><![CDATA[<p>]]></xsl:text>
+    	</xsl:when>
+      	<xsl:otherwise>
+    	    <ol>
+    	     <xsl:apply-templates/>
+    	    </ol>
+    	</xsl:otherwise>
+       </xsl:choose>
+    </xsl:template>
+    
+    <xsl:template match="ul">
+      <xsl:choose>
+    	<xsl:when test="name(..)='p'">
+    	   <xsl:text disable-output-escaping="yes"><![CDATA[</p>]]></xsl:text>
+    	    <ul>
+    	     <xsl:apply-templates/>
+    	    </ul>
+    	   <xsl:text disable-output-escaping="yes"><![CDATA[<p>]]></xsl:text>
+    	</xsl:when>
+      	<xsl:otherwise>
+    	    <ul>
+    	     <xsl:apply-templates/>
+    	    </ul>
+    	</xsl:otherwise>
+       </xsl:choose>
+    </xsl:template>
+        
+    <xsl:template match="b">
+      <strong>
+        <xsl:value-of select = "."/>
+      </strong>
+    </xsl:template>
+    
+    <xsl:template match="i">
+      <em>
+        <xsl:value-of select = "."/>
+      </em>
+    </xsl:template>
+
+    <xsl:template match="u">
+      <u>
+        <xsl:value-of select = "."/>
+      </u>
+    </xsl:template>
+    
+    <xsl:template match="table">
+      <table>
+            <xsl:apply-templates select="node()"/>
+      </table>
+    </xsl:template>
+    
+            
+    <xsl:template match="br">
+      <xsl:choose>
+	    <xsl:when test="normalize-space(text())">
+	    	    
+		  <xsl:choose>
+		    <xsl:when test="name(..)='p'">
+		        <xsl:apply-templates/>
+		      <br/> 
+		    </xsl:when>
+	  	    <xsl:otherwise>
+		      <p>
+	            <xsl:apply-templates/>
+		      </p>
+		    </xsl:otherwise>
+	       </xsl:choose>
+	      
+	    </xsl:when>
+  	    <xsl:otherwise>
+	      <br/>
+	    </xsl:otherwise>
+       </xsl:choose>
+    </xsl:template>
+    
+    <!-- Strip -->
+    <xsl:template match="font|big">
+      <xsl:apply-templates/>
+    </xsl:template>
+
+
+    <xsl:template match="span">
+		  <xsl:choose>
+		    <xsl:when test="contains(@style,'bold')">
+		       <strong>
+		        <xsl:apply-templates/>
+		       </strong>
+		    </xsl:when>
+		    <xsl:when test="contains(@style,'italic')">
+		       <em>
+		        <xsl:apply-templates/>
+		       </em>
+		    </xsl:when>
+		    <xsl:when test="contains(@style,'underline')">
+		       <u>
+		        <xsl:apply-templates/>
+		       </u>
+		    </xsl:when>
+	  	    <xsl:otherwise>
+	  	        <!-- Strip -->
+	            <xsl:apply-templates/>
+		    </xsl:otherwise>
+	    </xsl:choose>
+    
+      <xsl:apply-templates select="./*"/>
+    </xsl:template>
+
+    <xsl:template match="@*|*|text()|processing-instruction()|comment()">
+      <xsl:copy>
+        <xsl:apply-templates select="@*|*|text()|processing-instruction()|comment()"/>
+      </xsl:copy>
+    </xsl:template>
+
+
+</xsl:stylesheet>

Propchange: forrest/trunk/etc/test-whitespace/html2document.xsl
------------------------------------------------------------------------------
    svn:eol-style = native



Mime
View raw message