diff options
Diffstat (limited to 'docs/manual/style/latex/html.xsl')
-rw-r--r-- | docs/manual/style/latex/html.xsl | 179 |
1 files changed, 135 insertions, 44 deletions
diff --git a/docs/manual/style/latex/html.xsl b/docs/manual/style/latex/html.xsl index c77f1ec3a9..844afe951e 100644 --- a/docs/manual/style/latex/html.xsl +++ b/docs/manual/style/latex/html.xsl @@ -1,4 +1,7 @@ <?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 @@ -27,34 +30,27 @@ <!-- ==================================================================== --> <xsl:template match="ul"> -<xsl:text>\begin{itemize} -</xsl:text> +<xsl:text>\begin{itemize}</xsl:text>&lf; <xsl:apply-templates/> -<xsl:text>\end{itemize} -</xsl:text> +<xsl:text>\end{itemize}</xsl:text>&lf; </xsl:template> <xsl:template match="ol"> -<xsl:text>\begin{enumerate} -</xsl:text> +<xsl:text>\begin{enumerate}</xsl:text>&lf; <xsl:apply-templates/> -<xsl:text>\end{enumerate} -</xsl:text> +<xsl:text>\end{enumerate}</xsl:text>&lf; </xsl:template> <xsl:template match="li"> <xsl:text>\item </xsl:text> <xsl:apply-templates/> -<xsl:text> -</xsl:text> +&lf; </xsl:template> <xsl:template match="dl"> -<xsl:text>\begin{description} -</xsl:text> +<xsl:text>\begin{description}</xsl:text>&lf; <xsl:apply-templates/> -<xsl:text>\end{description} -</xsl:text> +<xsl:text>\end{description}</xsl:text>&lf; </xsl:template> <xsl:template match="dt"> @@ -66,10 +62,24 @@ <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 match="br"> +<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> @@ -82,7 +92,8 @@ <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:value-of select="$result" /> + <xsl:text> </xsl:text> </xsl:if> </xsl:otherwise> </xsl:choose> @@ -90,7 +101,8 @@ <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:value-of select="$result" /> + <xsl:text> </xsl:text> </xsl:if> </xsl:otherwise> </xsl:choose> @@ -98,45 +110,88 @@ <xsl:template match="p"> <xsl:apply-templates/> -<xsl:text>\par -</xsl:text> +<xsl:text>\par</xsl:text>&lf; </xsl:template> -<xsl:template match="code"> +<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="em"> +<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/> +<xsl:apply-templates mode="tabular"/> <xsl:text>}</xsl:text> </xsl:template> +<!-- O(log(n)) (stack usage!) string reverter --> +<xsl:template name="string-reverse"> +<xsl:param name="string"/> +<xsl:variable name="length" select="string-length($string)"/> + +<xsl:choose> +<xsl:when test="$length < 2"> + <xsl:value-of select="$string"/> +</xsl:when> +<xsl:when test="$length = 2"> + <xsl:value-of select="concat(substring($string, 2, 1), substring($string, 1, 1))"/> +</xsl:when> +<xsl:otherwise> + <xsl:variable name="middle" select="floor($length div 2)"/> + + <xsl:call-template name="string-reverse"> + <xsl:with-param name="string" select="substring($string, $middle + 1, $middle + 1)"/> + </xsl:call-template> + <xsl:call-template name="string-reverse"> + <xsl:with-param name="string" select="substring($string, 1, $middle)"/> + </xsl:call-template> +</xsl:otherwise> +</xsl:choose> +</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:text>\begin{verbatim}</xsl:text> + +<!-- string trimming: ltrim is easy, rtrim is not. so, we're sneaky and use +ltrim only. The output is then: string-reverse(ltrim(string-reverse(ltrim(.)))) --> +<xsl:variable name="reversed"> +<xsl:call-template name="string-reverse"> +<xsl:with-param name="string" select="substring(., string-length(substring-before(., substring(normalize-space(.), 1, 1))) + 1, string-length(.))"/> +</xsl:call-template> +</xsl:variable> +<xsl:call-template name="string-reverse"> +<xsl:with-param name="string" select="substring($reversed, string-length(substring-before($reversed, substring(normalize-space($reversed), 1, 1))) + 1, string-length($reversed))"/> +</xsl:call-template> + +<xsl:text>\end{verbatim}</xsl:text>&lf; </xsl:template> <xsl:template match="blockquote"> -<xsl:text>\begin{quotation} -</xsl:text> +<xsl:text>\begin{quotation}</xsl:text>&lf; <xsl:apply-templates/> -<xsl:text>\end{quotation} -</xsl:text> +<xsl:text>\end{quotation}</xsl:text>&lf; </xsl:template> <!-- XXX: We need to deal with table headers --> @@ -169,13 +224,11 @@ interpreted in pre --> </xsl:for-each> </xsl:otherwise> </xsl:choose> -<xsl:text>|}\hline -</xsl:text> +<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> +<xsl:text>}</xsl:text>&lf; </xsl:template> <xsl:template match="tr"> @@ -184,8 +237,7 @@ interpreted in pre --> <xsl:if test="../@border and not(position()=last())"> <xsl:text>\hline</xsl:text> </xsl:if> - <xsl:text> -</xsl:text> + &lf; </xsl:template> <xsl:template match="td"> @@ -244,31 +296,62 @@ interpreted in pre --> 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 test="contains($href, '.html')"> + <xsl:value-of select="substring-before($href, '.html')"/> </xsl:when> <xsl:otherwise> - <xsl:value-of select="concat(@href, 'index')"/> + <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: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="text" select="@href"/> - <xsl:with-param name="replace" select="'#'"/> - <xsl:with-param name="with" select="'\#'"/> + <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"> @@ -310,6 +393,14 @@ interpreted in pre --> </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"> |