mirror of
https://github.com/apache/httpd.git
synced 2025-07-05 16:21:14 +03:00
usually an accident. git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/trunk@1565001 13f79535-47bb-0310-9956-ffa450edef68
399 lines
12 KiB
XML
399 lines
12 KiB
XML
<?xml version="1.0"?>
|
|
<!DOCTYPE xsl:stylesheet [
|
|
<!ENTITY lf SYSTEM "../xsl/util/lf.xml">
|
|
]>
|
|
|
|
<!--
|
|
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">
|
|
|
|
|
|
<!-- load utility snippets -->
|
|
<xsl:include href="../xsl/util/pretrim.xsl" />
|
|
|
|
<!-- ==================================================================== -->
|
|
<!-- Ordinary HTML that must be converted to latex -->
|
|
<!-- ==================================================================== -->
|
|
|
|
<xsl:template match="ul">
|
|
<xsl:text>\begin{itemize}</xsl:text>&lf;
|
|
<xsl:apply-templates/>
|
|
<xsl:text>\end{itemize}</xsl:text>&lf;
|
|
</xsl:template>
|
|
|
|
<xsl:template match="ol">
|
|
<xsl:text>\begin{enumerate}</xsl:text>&lf;
|
|
<xsl:apply-templates/>
|
|
<xsl:text>\end{enumerate}</xsl:text>&lf;
|
|
</xsl:template>
|
|
|
|
<xsl:template match="li">
|
|
<xsl:text>\item </xsl:text>
|
|
<xsl:apply-templates/>
|
|
&lf;
|
|
</xsl:template>
|
|
|
|
<xsl:template match="dl">
|
|
<xsl:text>\begin{description}</xsl:text>&lf;
|
|
<xsl:apply-templates/>
|
|
<xsl:text>\end{description}</xsl:text>&lf;
|
|
</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>
|
|
|
|
<xsl:template match="br">
|
|
<xsl:call-template name="br">
|
|
<xsl:with-param name="result" select="'\\'" />
|
|
</xsl:call-template>
|
|
</xsl:template>
|
|
|
|
<xsl:template match="br" mode="tabular">
|
|
<xsl:call-template name="br">
|
|
<xsl:with-param name="result" select="'\newline'" />
|
|
</xsl:call-template>
|
|
</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 name="br">
|
|
<xsl:param name="result" />
|
|
|
|
<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:value-of select="$result" />
|
|
<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:value-of select="$result" />
|
|
<xsl:text> </xsl:text>
|
|
</xsl:if>
|
|
</xsl:otherwise>
|
|
</xsl:choose>
|
|
</xsl:template>
|
|
|
|
<xsl:template match="p">
|
|
<xsl:apply-templates/>
|
|
<xsl:text>\par</xsl:text>&lf;
|
|
</xsl:template>
|
|
|
|
<xsl:template match="code|program">
|
|
<xsl:text>\texttt{</xsl:text>
|
|
<xsl:apply-templates/>
|
|
<xsl:text>}</xsl:text>
|
|
</xsl:template>
|
|
|
|
<xsl:template match="code|program" mode="tabular">
|
|
<xsl:text>\texttt{</xsl:text>
|
|
<xsl:apply-templates mode="tabular"/>
|
|
<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="strong" mode="tabular">
|
|
<xsl:text>\textbf{</xsl:text>
|
|
<xsl:apply-templates mode="tabular"/>
|
|
<xsl:text>}</xsl:text>
|
|
</xsl:template>
|
|
|
|
<xsl:template match="em|var|cite|q|dfn">
|
|
<xsl:text>\textit{</xsl:text>
|
|
<xsl:apply-templates mode="tabular"/>
|
|
<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|highlight">
|
|
<xsl:text>\begin{verbatim}</xsl:text>
|
|
|
|
<!-- If it's a one-liner, trim the initial indentation as well -->
|
|
<!-- it's most likely an accident -->
|
|
<xsl:call-template name="pre-ltrim-one">
|
|
<xsl:with-param name="string">
|
|
<xsl:call-template name="pre-rtrim">
|
|
<xsl:with-param name="string">
|
|
<xsl:call-template name="pre-ltrim">
|
|
<xsl:with-param name="string">
|
|
<xsl:value-of select="." />
|
|
</xsl:with-param>
|
|
</xsl:call-template>
|
|
</xsl:with-param>
|
|
</xsl:call-template>
|
|
</xsl:with-param>
|
|
</xsl:call-template>
|
|
|
|
<xsl:text>\end{verbatim}</xsl:text>&lf;
|
|
</xsl:template>
|
|
|
|
<xsl:template match="blockquote">
|
|
<xsl:text>\begin{quotation}</xsl:text>&lf;
|
|
<xsl:apply-templates/>
|
|
<xsl:text>\end{quotation}</xsl:text>&lf;
|
|
</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>&lf;
|
|
<xsl:apply-templates select="tr"/>
|
|
<xsl:text>\hline\end{</xsl:text>
|
|
<xsl:value-of select="$table-type"/>
|
|
<xsl:text>}</xsl:text>&lf;
|
|
</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>
|
|
&lf;
|
|
</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" mode="tabular">
|
|
<xsl:apply-templates mode="tabular"/>
|
|
<xsl:call-template name="a"/>
|
|
</xsl:template>
|
|
|
|
<xsl:template match="a">
|
|
<xsl:apply-templates/>
|
|
<xsl:call-template name="a"/>
|
|
</xsl:template>
|
|
|
|
<xsl:template name="a">
|
|
<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="href">
|
|
<xsl:choose>
|
|
<xsl:when test="starts-with(@href, './')">
|
|
<xsl:value-of select="substring(@href, 3)" />
|
|
</xsl:when>
|
|
<xsl:otherwise>
|
|
<xsl:value-of select="@href" />
|
|
</xsl:otherwise>
|
|
</xsl:choose>
|
|
</xsl:variable>
|
|
<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, 'https:') or starts-with(@href, 'ftp:') 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="replace" select="'%'"/>
|
|
<xsl:with-param name="with" select="'\%'"/>
|
|
<xsl:with-param name="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:call-template name="replace-string">
|
|
<xsl:with-param name="replace" select="'#'"/>
|
|
<xsl:with-param name="with" select="'\#'"/>
|
|
<xsl:with-param name="text" select="@href"/>
|
|
</xsl:call-template>
|
|
</xsl:with-param>
|
|
</xsl:call-template>
|
|
</xsl:with-param>
|
|
</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:call-template name="img"/>
|
|
</xsl:template>
|
|
|
|
<xsl:template match="img" mode="tabular">
|
|
<xsl:call-template name="img"/>
|
|
</xsl:template>
|
|
|
|
<xsl:template name="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>
|