You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@forrest.apache.org by ni...@apache.org on 2003/01/15 12:55:38 UTC

cvs commit: xml-forrest/src/resources/library/xslt html2document.xsl

nicolaken    2003/01/15 03:55:38

  Added:       src/resources/library/xslt html2document.xsl
  Log:
  Update Jetty to latest version
  
  Revision  Changes    Path
  1.1                  xml-forrest/src/resources/library/xslt/html2document.xsl
  
  Index: html2document.xsl
  ===================================================================
  <?xml version="1.0"?>
  
  <xsl:stylesheet
      version="1.0"
      xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  
      <xsl:output method = "xml"  
                  version="1.0"
                  omit-xml-declaration="no" 
                  indent="no"
                  encoding="ISO-8859-1"
                  doctype-system="document-v11.dtd"
                  doctype-public="-//APACHE//DTD Documentation V1.1//EN" />
  
      <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:text disable-output-escaping = "yes"><![CDATA[ <!-- ]]></xsl:text>
          <xsl:copy>
              <xsl:apply-templates select="node()|@*"/>
          </xsl:copy>
        <xsl:text disable-output-escaping = "yes"><![CDATA[ --> ]]></xsl:text> 
      </xsl:template>  
      
      <!--infer structure from sibling headings-->
      <xsl:template match="body">
         <body>
           <xsl:for-each select="h1">
             <section>
               <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>
         </body>
      </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: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|div|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/>
      </xsl:template>
          
  
                  
      <xsl:template match="node()|@*" priority="-1">
          <xsl:copy>
              <xsl:apply-templates select="node()|@*"/>
          </xsl:copy>
      </xsl:template>
  
  
  </xsl:stylesheet>