mirror of
				https://github.com/apache/httpd.git
				synced 2025-11-03 17:53:20 +03:00 
			
		
		
		
	git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/trunk@421020 13f79535-47bb-0310-9956-ffa450edef68
		
			
				
	
	
		
			324 lines
		
	
	
		
			9.5 KiB
		
	
	
	
		
			XML
		
	
	
	
	
	
			
		
		
	
	
			324 lines
		
	
	
		
			9.5 KiB
		
	
	
	
		
			XML
		
	
	
	
	
	
<?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"
 | 
						|
                  xmlns="http://www.w3.org/1999/xhtml">
 | 
						|
 | 
						|
 | 
						|
<!-- ==================================================================== -->
 | 
						|
<!-- Ordinary HTML that must be converted to latex                        -->
 | 
						|
<!-- ==================================================================== -->
 | 
						|
 | 
						|
<xsl:template match="ul">
 | 
						|
<xsl:text>\begin{itemize}
 | 
						|
</xsl:text>
 | 
						|
<xsl:apply-templates/>
 | 
						|
<xsl:text>\end{itemize}
 | 
						|
</xsl:text>
 | 
						|
</xsl:template>
 | 
						|
 | 
						|
<xsl:template match="ol">
 | 
						|
<xsl:text>\begin{enumerate}
 | 
						|
</xsl:text>
 | 
						|
<xsl:apply-templates/>
 | 
						|
<xsl:text>\end{enumerate}
 | 
						|
</xsl:text>
 | 
						|
</xsl:template>
 | 
						|
 | 
						|
<xsl:template match="li">
 | 
						|
<xsl:text>\item </xsl:text>
 | 
						|
<xsl:apply-templates/>
 | 
						|
<xsl:text>
 | 
						|
</xsl:text>
 | 
						|
</xsl:template>
 | 
						|
 | 
						|
<xsl:template match="dl">
 | 
						|
<xsl:text>\begin{description}
 | 
						|
</xsl:text>
 | 
						|
<xsl:apply-templates/>
 | 
						|
<xsl:text>\end{description}
 | 
						|
</xsl:text>
 | 
						|
</xsl:template>
 | 
						|
 | 
						|
<xsl:template match="dt">
 | 
						|
<xsl:text>\item[</xsl:text><xsl:apply-templates/>
 | 
						|
<xsl:text>] </xsl:text>
 | 
						|
</xsl:template>
 | 
						|
 | 
						|
<xsl:template match="dd">
 | 
						|
<xsl:apply-templates/>
 | 
						|
</xsl:template>
 | 
						|
 | 
						|
<!-- Latex doesn't like successive line breaks, so replace any
 | 
						|
     sequence of two or more br separated only by white-space with
 | 
						|
     one line break followed by smallskips. -->
 | 
						|
<xsl:template match="br">
 | 
						|
<xsl:choose>
 | 
						|
<xsl:when test="name(preceding-sibling::node()[1])='br' or name(preceding-sibling::node()[1])='indent'">
 | 
						|
<xsl:text>\smallskip </xsl:text>
 | 
						|
</xsl:when>
 | 
						|
<xsl:when test="name(preceding-sibling::node()[2])='br' or name(preceding-sibling::node()[2])='indent'">
 | 
						|
  <xsl:choose>
 | 
						|
  <xsl:when test="normalize-space(preceding-sibling::node()[1])=''">
 | 
						|
    <xsl:text>\smallskip </xsl:text>
 | 
						|
  </xsl:when>
 | 
						|
  <xsl:otherwise>
 | 
						|
    <!-- Don't put a line break if we are the last thing -->
 | 
						|
    <xsl:if test="not(position()=last()) and not(position()=last()-1 and normalize-space(following-sibling::node()[1])='')">
 | 
						|
      <xsl:text>\\ </xsl:text>
 | 
						|
    </xsl:if>
 | 
						|
  </xsl:otherwise>
 | 
						|
  </xsl:choose>
 | 
						|
</xsl:when>
 | 
						|
<xsl:otherwise>
 | 
						|
    <!-- Don't put a line break if we are the last thing -->
 | 
						|
    <xsl:if test="not(position()=last()) and not(position()=last()-1 and normalize-space(following-sibling::node()[1])='')">
 | 
						|
      <xsl:text>\\ </xsl:text>
 | 
						|
    </xsl:if>
 | 
						|
</xsl:otherwise>
 | 
						|
</xsl:choose>
 | 
						|
</xsl:template>
 | 
						|
 | 
						|
<xsl:template match="p">
 | 
						|
<xsl:apply-templates/>
 | 
						|
<xsl:text>\par
 | 
						|
</xsl:text>
 | 
						|
</xsl:template>
 | 
						|
 | 
						|
<xsl:template match="code">
 | 
						|
<xsl:text>\texttt{</xsl:text>
 | 
						|
<xsl:apply-templates/>
 | 
						|
<xsl:text>}</xsl:text>
 | 
						|
</xsl:template>
 | 
						|
 | 
						|
<xsl:template match="strong">
 | 
						|
<xsl:text>\textbf{</xsl:text>
 | 
						|
<xsl:apply-templates/>
 | 
						|
<xsl:text>}</xsl:text>
 | 
						|
</xsl:template>
 | 
						|
 | 
						|
<xsl:template match="em">
 | 
						|
<xsl:text>\textit{</xsl:text>
 | 
						|
<xsl:apply-templates/>
 | 
						|
<xsl:text>}</xsl:text>
 | 
						|
</xsl:template>
 | 
						|
 | 
						|
<!-- Value-of used here explicitly because we don't wan't latex-escaping
 | 
						|
performed.  Of course, this will conflict with html where some tags are
 | 
						|
interpreted in pre -->
 | 
						|
<xsl:template match="pre">
 | 
						|
<xsl:text>\begin{verbatim}
 | 
						|
</xsl:text>
 | 
						|
<xsl:value-of select="."/>
 | 
						|
<xsl:text>\end{verbatim}
 | 
						|
</xsl:text>
 | 
						|
</xsl:template>
 | 
						|
 | 
						|
<xsl:template match="blockquote">
 | 
						|
<xsl:text>\begin{quotation}
 | 
						|
</xsl:text>
 | 
						|
<xsl:apply-templates/>
 | 
						|
<xsl:text>\end{quotation}
 | 
						|
</xsl:text>
 | 
						|
</xsl:template>
 | 
						|
 | 
						|
<!-- XXX: We need to deal with table headers -->
 | 
						|
 | 
						|
<xsl:template match="table">
 | 
						|
<xsl:variable name="table-type">
 | 
						|
  <xsl:choose>
 | 
						|
  <xsl:when test="count(tr) > 15">longtable</xsl:when>
 | 
						|
  <xsl:otherwise>tabular</xsl:otherwise>
 | 
						|
  </xsl:choose>
 | 
						|
</xsl:variable>
 | 
						|
 | 
						|
<xsl:text>\begin{</xsl:text><xsl:value-of select="$table-type"/>
 | 
						|
<xsl:text>}{|</xsl:text>
 | 
						|
<xsl:choose>
 | 
						|
<xsl:when test="columnspec">
 | 
						|
  <xsl:for-each select="columnspec/column">
 | 
						|
    <xsl:text>l</xsl:text>
 | 
						|
    <xsl:if test="../../@border and not(position()=last())">
 | 
						|
      <xsl:text>|</xsl:text>
 | 
						|
    </xsl:if>
 | 
						|
  </xsl:for-each>
 | 
						|
</xsl:when>
 | 
						|
<xsl:otherwise>
 | 
						|
  <xsl:for-each select="tr[1]/*">
 | 
						|
    <xsl:text>l</xsl:text>
 | 
						|
    <xsl:if test="../../@border and not(position()=last())">
 | 
						|
      <xsl:text>|</xsl:text>
 | 
						|
    </xsl:if>
 | 
						|
  </xsl:for-each>
 | 
						|
</xsl:otherwise>
 | 
						|
</xsl:choose>
 | 
						|
<xsl:text>|}\hline
 | 
						|
</xsl:text>
 | 
						|
<xsl:apply-templates select="tr"/>
 | 
						|
<xsl:text>\hline\end{</xsl:text>
 | 
						|
<xsl:value-of select="$table-type"/>
 | 
						|
<xsl:text>}
 | 
						|
</xsl:text>
 | 
						|
</xsl:template>
 | 
						|
 | 
						|
<xsl:template match="tr">
 | 
						|
  <xsl:apply-templates select="td|th"/>
 | 
						|
  <xsl:text>\\</xsl:text>
 | 
						|
  <xsl:if test="../@border and not(position()=last())">
 | 
						|
    <xsl:text>\hline</xsl:text>
 | 
						|
  </xsl:if>
 | 
						|
  <xsl:text>
 | 
						|
</xsl:text>
 | 
						|
</xsl:template>
 | 
						|
 | 
						|
<xsl:template match="td">
 | 
						|
    <xsl:variable name="pos" select="position()"/>
 | 
						|
    <xsl:text>\begin{minipage}[t]{</xsl:text>
 | 
						|
    <xsl:choose>
 | 
						|
    <xsl:when test="../../columnspec">
 | 
						|
      <xsl:value-of select="../../columnspec/column[$pos]/@width"/>
 | 
						|
    </xsl:when>
 | 
						|
    <xsl:otherwise>
 | 
						|
      <xsl:value-of select=".95 div last()"/>
 | 
						|
    </xsl:otherwise>
 | 
						|
    </xsl:choose>
 | 
						|
    <xsl:text>\textwidth}\small </xsl:text>
 | 
						|
    <xsl:apply-templates/>
 | 
						|
    <xsl:text>\end{minipage}</xsl:text>
 | 
						|
    <xsl:if test="not(position()=last())">
 | 
						|
      <xsl:text> & </xsl:text>
 | 
						|
    </xsl:if>
 | 
						|
</xsl:template>
 | 
						|
 | 
						|
<xsl:template match="th">
 | 
						|
    <xsl:variable name="pos" select="position()"/>
 | 
						|
    <xsl:text>\begin{minipage}[t]{</xsl:text>
 | 
						|
    <xsl:choose>
 | 
						|
    <xsl:when test="../../columnspec">
 | 
						|
      <xsl:value-of select="../../columnspec/column[$pos]/@width"/>
 | 
						|
    </xsl:when>
 | 
						|
    <xsl:otherwise>
 | 
						|
      <xsl:value-of select=".95 div last()"/>
 | 
						|
    </xsl:otherwise>
 | 
						|
    </xsl:choose>
 | 
						|
    <xsl:text>\textwidth}\bfseries </xsl:text>
 | 
						|
    <xsl:apply-templates/>
 | 
						|
    <xsl:text>\end{minipage}</xsl:text>
 | 
						|
    <xsl:if test="not(position()=last())">
 | 
						|
      <xsl:text> & </xsl:text>
 | 
						|
    </xsl:if>
 | 
						|
</xsl:template>
 | 
						|
 | 
						|
<!--
 | 
						|
   This is a horrible hack, but it seems to mostly work.  It does a
 | 
						|
   few things:
 | 
						|
 | 
						|
   1. Transforms references starting in http:// to footnotes with the
 | 
						|
      appropriate hyperref macro to make them clickable.  (This needs
 | 
						|
      to be expanded to deal with news: and needs to be adjusted to
 | 
						|
      deal with "#", which is creating bad links at the moment.)
 | 
						|
 | 
						|
   2. For intra-document references, constructs the appropriate absolute
 | 
						|
      reference using a latex \pageref.  
 | 
						|
      This involves applying a simplified version of the
 | 
						|
      general URL resolution rules to deal with ../.  It only works for
 | 
						|
      one level of subdirectory.
 | 
						|
 | 
						|
   3. It is also necessary to deal with the fact that index pages
 | 
						|
      get references as "/".
 | 
						|
-->
 | 
						|
<xsl:template match="a">
 | 
						|
<xsl:apply-templates/>
 | 
						|
<xsl:if test="@href">
 | 
						|
<xsl:variable name="relpath" select="document(/*/@metafile)/metafile/relpath" />
 | 
						|
<xsl:variable name="path" select="document(/*/@metafile)/metafile/path" />
 | 
						|
<xsl:variable name="fileref">
 | 
						|
  <xsl:choose>
 | 
						|
  <xsl:when test="contains(@href, '.html')">
 | 
						|
    <xsl:value-of select="substring-before(@href, '.html')"/>
 | 
						|
  </xsl:when>
 | 
						|
  <xsl:otherwise>
 | 
						|
    <xsl:value-of select="concat(@href, 'index')"/>
 | 
						|
  </xsl:otherwise>
 | 
						|
  </xsl:choose>
 | 
						|
</xsl:variable>
 | 
						|
<xsl:choose>
 | 
						|
 | 
						|
<xsl:when test="starts-with(@href, 'http:') or starts-with(@href, 'news:') or starts-with(@href, 'mailto:')">
 | 
						|
  <xsl:if test="not(.=@href)">
 | 
						|
    <xsl:text>\footnote{</xsl:text>
 | 
						|
      <xsl:text>\href{</xsl:text>
 | 
						|
      <xsl:call-template name="replace-string">
 | 
						|
        <xsl:with-param name="text" select="@href"/>
 | 
						|
        <xsl:with-param name="replace" select="'#'"/>
 | 
						|
        <xsl:with-param name="with" select="'\#'"/>
 | 
						|
      </xsl:call-template>
 | 
						|
      <xsl:text>}{</xsl:text>
 | 
						|
    <xsl:call-template name="ltescape">
 | 
						|
      <xsl:with-param name="string" select="@href"/>
 | 
						|
    </xsl:call-template>
 | 
						|
    <xsl:text>}}</xsl:text>
 | 
						|
  </xsl:if>
 | 
						|
</xsl:when>
 | 
						|
<xsl:when test="starts-with(@href, '#')">
 | 
						|
<!-- Don't do inter-section references -->
 | 
						|
</xsl:when>
 | 
						|
<xsl:otherwise>
 | 
						|
  <xsl:text> (p.\ \pageref{</xsl:text>
 | 
						|
    <xsl:call-template name="replace-string">
 | 
						|
      <xsl:with-param name="replace" select="'#'"/>
 | 
						|
      <xsl:with-param name="with" select="':'"/>
 | 
						|
      <xsl:with-param name="text">
 | 
						|
      <xsl:choose>
 | 
						|
      <xsl:when test="$relpath='.'">
 | 
						|
        <xsl:value-of select="concat('/',$fileref)"/>
 | 
						|
      </xsl:when>
 | 
						|
      <xsl:otherwise>
 | 
						|
        <xsl:choose>
 | 
						|
        <xsl:when test="starts-with($fileref,'..')">
 | 
						|
          <xsl:value-of select="substring-after($fileref,'..')"/>
 | 
						|
        </xsl:when>
 | 
						|
        <xsl:otherwise>
 | 
						|
          <xsl:value-of select="concat($path,$fileref)"/>
 | 
						|
        </xsl:otherwise>
 | 
						|
        </xsl:choose>
 | 
						|
      </xsl:otherwise>
 | 
						|
      </xsl:choose>
 | 
						|
      </xsl:with-param>
 | 
						|
     </xsl:call-template>
 | 
						|
  <xsl:text>}) </xsl:text>
 | 
						|
</xsl:otherwise>
 | 
						|
</xsl:choose>
 | 
						|
</xsl:if>
 | 
						|
</xsl:template>
 | 
						|
 | 
						|
<xsl:template match="img">
 | 
						|
<xsl:variable name="path" select="document(/*/@metafile)/metafile/path" />
 | 
						|
<xsl:text>\includegraphics{</xsl:text>
 | 
						|
      <xsl:call-template name="replace-string">
 | 
						|
        <xsl:with-param name="text" select="concat('.',$path,@src)"/>
 | 
						|
        <xsl:with-param name="replace" select="'.gif'"/>
 | 
						|
        <xsl:with-param name="with" select="''"/>
 | 
						|
      </xsl:call-template>
 | 
						|
<xsl:text>}</xsl:text>
 | 
						|
</xsl:template>
 | 
						|
 | 
						|
</xsl:stylesheet>
 |