mirror of
https://github.com/moparisthebest/xeps
synced 2024-10-31 15:35:07 -04:00
452 lines
15 KiB
XML
Executable File
452 lines
15 KiB
XML
Executable File
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:str="http://xsltsl.org/string">
|
|
<!--
|
|
* Copyright (c) 2008 - 2010, Tobias Markmann
|
|
* All rights reserved.
|
|
*
|
|
* Redistribution and use in source and binary forms, with or without
|
|
* modification, are permitted provided that the following conditions are met:
|
|
* * Redistributions of source code must retain the above copyright
|
|
* notice, this list of conditions and the following disclaimer.
|
|
* * Redistributions in binary form must reproduce the above copyright
|
|
* notice, this list of conditions and the following disclaimer in the
|
|
* documentation and/or other materials provided with the distribution.
|
|
* * Neither the name of the <organization> nor the
|
|
* names of its contributors may be used to endorse or promote products
|
|
* derived from this software without specific prior written permission.
|
|
*
|
|
* THIS SOFTWARE IS PROVIDED BY TOBIAS MARKMANN ''AS IS'' AND ANY
|
|
* EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
|
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
|
* DISCLAIMED. IN NO EVENT SHALL TOBIAS MARKMANN BE LIABLE FOR ANY
|
|
* DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
|
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
|
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
|
|
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
|
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
|
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
|
|
Thanks to the XSLT Standard Library http://xsltsl.sourceforge.net/.
|
|
-->
|
|
|
|
<!--<xsl:include href="xsltsl/string.xsl"/>-->
|
|
<xsl:import href="http://xsltsl.sourceforge.net/modules/stdlib.xsl"/>
|
|
|
|
<!-- Create a variable named $maxXEPVersiom containing the MAX version -->
|
|
<xsl:variable name="maxXEPVersion">
|
|
<xsl:value-of select='/xep/header/revision[position()=1]/version'/>
|
|
</xsl:variable>
|
|
|
|
<!-- Create a variable named $maxXEPDate containing the MAX date -->
|
|
<xsl:variable name="maxXEPDate">
|
|
<xsl:for-each select="/xep/header/revision">
|
|
<xsl:sort select="date" data-type="text" order="descending" />
|
|
<xsl:if test="position() = 1">
|
|
<xsl:value-of select="date" />
|
|
</xsl:if>
|
|
</xsl:for-each>
|
|
</xsl:variable>
|
|
|
|
<!-- Format URLs for the front page. Putting too long URLs in the footnotes. -->
|
|
<xsl:template name="formatURL">
|
|
<xsl:param name="url"/>
|
|
<xsl:choose>
|
|
<xsl:when test="string-length($url) > 80">
|
|
<cmd name="thanks"><parm><cmd name="url"><parm><xsl:value-of select="$url"/></parm></cmd></parm></cmd> \hspace{0.5 cm}
|
|
</xsl:when>
|
|
<xsl:otherwise>
|
|
<cmd name="url"><parm><xsl:value-of select="$url"/></parm></cmd> \\
|
|
</xsl:otherwise>
|
|
</xsl:choose>
|
|
</xsl:template>
|
|
|
|
<!-- convert "document": create header and continue -->
|
|
<xsl:template match="xep">
|
|
<TeXML>
|
|
<!-- create header -->
|
|
<TeXML escape="0">
|
|
%!TEX TS-program = xelatex
|
|
%!TEX encoding = UTF-8 Unicode
|
|
\documentclass[DIV=10]{scrartcl}
|
|
\KOMAoptions{paper=a4}
|
|
|
|
\usepackage[
|
|
pdftitle={XEP-<xsl:value-of select="/xep/header/number"/>: <xsl:value-of select="/xep/header/title"/>},
|
|
pdfauthor={XMPP Standards Foundation},
|
|
pdfcreator={XEP2PDF},
|
|
pdfproducer={XEP2PDF},
|
|
breaklinks = true,
|
|
unicode,
|
|
pagebackref,
|
|
xetex]{hyperref}
|
|
|
|
% break URLs at more places
|
|
\renewcommand{\UrlBreaks}{\do\/\do\a\do\b\do\c\do\d\do\e\do\f\do\g\do\h\do\i\do\j\do\k\do\l\do\m\do\n\do\o\do\p\do\q\do\r\do\s\do\t\do\u\do\v\do\w\do\x\do\y\do\z\do\A\do\B\do\C\do\D\do\E\do\F\do\G\do\H\do\I\do\J\do\K\do\L\do\M\do\N\do\O\do\P\do\Q\do\R\do\S\do\T\do\U\do\V\do\W\do\X\do\Y\do\Z\do\0\do\1}
|
|
|
|
\usepackage{xcolor}
|
|
\usepackage{graphicx}
|
|
\usepackage{fancyhdr}
|
|
\usepackage{tabu}
|
|
\usepackage{longtable}
|
|
\usepackage{listings}
|
|
\usepackage{varwidth}
|
|
\usepackage{titling}
|
|
\usepackage{titletoc}
|
|
\usepackage{float}
|
|
\usepackage{adjustbox}
|
|
|
|
\usepackage{hyphenat}
|
|
|
|
\hypersetup{colorlinks, linkcolor=blue, anchorcolor=blue, urlcolor=blue}
|
|
|
|
|
|
\usepackage{fontspec,xltxtra,xunicode}
|
|
\defaultfontfeatures{Mapping=tex-text}
|
|
\setromanfont[Ligatures={Common}]{Gentium Basic}
|
|
\setsansfont[Scale=MatchLowercase]{Gentium Basic}
|
|
\setmonofont[Scale=MatchLowercase]{Inconsolata}
|
|
|
|
\setkomafont{descriptionlabel}{\normalfont\bfseries}
|
|
|
|
\usepackage[english]{babel}
|
|
|
|
\pagestyle{fancy}
|
|
\fancyfoot{}
|
|
\fancyhead{}
|
|
%% page numbering
|
|
|
|
\newcommand{\XEPNumber}[0]{<xsl:value-of select="/xep/header/number"/>}
|
|
\newcommand{\XEPVersion}[0]{<xsl:value-of select="$maxXEPVersion"/>}
|
|
|
|
\newcolumntype{L}{>{\raggedright\arraybackslash}X}
|
|
|
|
\fancyhead[L,L]{\includegraphics[totalheight=10pt]{xmpp.pdf} \slshape \leftmark}
|
|
\fancyfoot[C,C]{\thepage}
|
|
|
|
\pretitle{
|
|
\begin{figure*}[h]
|
|
\begin{center}
|
|
\includegraphics[totalheight=7.5cm]{xmpp-text.pdf}
|
|
\end{center}
|
|
\end{figure*}
|
|
\begin{center}\LARGE
|
|
}
|
|
|
|
\sloppy
|
|
</TeXML>
|
|
|
|
<cmd name="title" nl2="1">
|
|
<parm>XEP-<cmd name="XEPNumber" />: <xsl:value-of select="/xep/header/title"/></parm>
|
|
</cmd>
|
|
<cmd name="author">
|
|
<parm><TeXML escape="0">
|
|
<xsl:for-each select='/xep/header/author'><xsl:value-of select="firstname"/><xsl:text> </xsl:text><xsl:value-of select="surname"/> \\
|
|
<xsl:if test="email"><xsl:call-template name="formatURL"><xsl:with-param name="url">mailto:<xsl:value-of select="email"/></xsl:with-param></xsl:call-template></xsl:if>
|
|
<xsl:if test="jid"><xsl:call-template name="formatURL"><xsl:with-param name="url">xmpp:<xsl:value-of select="jid"/></xsl:with-param></xsl:call-template></xsl:if>
|
|
<xsl:if test="uri"><xsl:call-template name="formatURL"><xsl:with-param name="url"><xsl:value-of select="uri"/></xsl:with-param></xsl:call-template></xsl:if> <xsl:if test='position() != last()'> \and </xsl:if>
|
|
</xsl:for-each>
|
|
</TeXML></parm>
|
|
</cmd>
|
|
<cmd name="date">
|
|
<parm><TeXML escape="0"><xsl:value-of select="$maxXEPDate"/>\\ Version <xsl:value-of select="$maxXEPVersion"/></TeXML></parm>
|
|
</cmd>
|
|
<!-- process content -->
|
|
<env name="document">
|
|
<TeXML escape="0">
|
|
<cmd name="lstset">
|
|
<parm>language=XML,
|
|
breaklines=true,
|
|
emptylines=5,
|
|
frame=single,
|
|
rulecolor=\color{black},
|
|
basicstyle=\ttfamily\small\color{darkgray},
|
|
keywordstyle=\color{cyan},
|
|
stringstyle=\color{blue},
|
|
tagstyle=\color{purple},
|
|
markfirstintag=true
|
|
</parm>
|
|
</cmd>
|
|
|
|
</TeXML>
|
|
<cmd name="KOMAoptions"><parm>DIV=24</parm></cmd>
|
|
<cmd name="pagestyle"><parm>empty</parm></cmd>
|
|
<cmd name="maketitle" />
|
|
<cmd name="thispagestyle"><parm>empty</parm></cmd>
|
|
<env name="center">
|
|
<env name="tabular"><parm>ccc</parm>
|
|
<TeXML escape="0">
|
|
<cmd name="textbf"><parm>Status</parm></cmd> & <cmd name="textbf"><parm>Type</parm></cmd> & <cmd name="textbf"><parm>Short Name</parm></cmd> \\
|
|
<xsl:value-of select="/xep/header/status"/> & <xsl:value-of select="/xep/header/type"/> & <TeXML escape="1"><xsl:value-of select="/xep/header/shortname"/></TeXML>
|
|
</TeXML>
|
|
</env>
|
|
</env>
|
|
<env name="abstract">
|
|
<xsl:value-of select="/xep/header/abstract"/>
|
|
</env>
|
|
<cmd name="newpage" nl2="1"/>
|
|
<TeXML escape="0">
|
|
\fancyhead[L,L]{\includegraphics[totalheight=10pt]{xmpp.pdf} \slshape \leftmark}
|
|
\fancyfoot[C,C]{\thepage}
|
|
</TeXML>
|
|
<cmd name="KOMAoptions"><parm>DIV=10</parm></cmd>
|
|
<cmd name="section*" nl2="1"><parm>Legal</parm></cmd>
|
|
<xsl:apply-templates select="/xep/header/legal" />
|
|
<cmd name="newpage" nl2="1"/>
|
|
<cmd name="tableofcontents" nl2="1"/>
|
|
<cmd name="newpage" nl2="1"/>
|
|
<cmd name="pagestyle" nl2="1"><parm>fancy</parm></cmd>
|
|
<cmd name="setcounter" nl2="1"><parm>page</parm><parm>1</parm></cmd>
|
|
<xsl:apply-templates/>
|
|
</env>
|
|
</TeXML>
|
|
</xsl:template>
|
|
|
|
<!-- for legal crap -->
|
|
<xsl:template match="copyright">
|
|
<cmd name="subsection*" nl2="1"><parm>Copyright</parm></cmd>
|
|
<group><cmd name="small" />
|
|
<xsl:apply-templates/>
|
|
</group>
|
|
</xsl:template>
|
|
|
|
<xsl:template match="permissions">
|
|
<cmd name="subsection*" nl2="1"><parm>Permissions</parm></cmd>
|
|
<group><cmd name="small" />
|
|
<xsl:apply-templates/>
|
|
</group>
|
|
</xsl:template>
|
|
|
|
<xsl:template match="warranty">
|
|
<cmd name="subsection*" nl2="1"><parm>Warranty</parm></cmd>
|
|
<group><cmd name="small" />
|
|
<xsl:apply-templates/>
|
|
</group>
|
|
</xsl:template>
|
|
|
|
<xsl:template match="liability">
|
|
<cmd name="subsection*"><parm>Liability</parm></cmd>
|
|
<group><cmd name="small" />
|
|
<xsl:apply-templates/>
|
|
</group>
|
|
</xsl:template>
|
|
|
|
<xsl:template match="conformance">
|
|
<cmd name="subsection*"><parm>Conformance</parm></cmd>
|
|
<group><cmd name="small" />
|
|
<xsl:apply-templates/>
|
|
</group>
|
|
</xsl:template>
|
|
|
|
|
|
<xsl:template match="header">
|
|
</xsl:template>
|
|
|
|
|
|
<!-- table -->
|
|
<xsl:template match='table'>
|
|
<TeXML escape="0">
|
|
<env name="center">
|
|
<env name='longtabu'>
|
|
<parm><xsl:for-each select='tr[1]/th | tr[1]/td'><xsl:if test="position() = 1">l</xsl:if><xsl:if test='position() != last() and position() > 1'>X</xsl:if><xsl:if test='position() = last()'>X</xsl:if></xsl:for-each></parm>
|
|
<xsl:for-each select='tr'>
|
|
<xsl:for-each select='td | th'><xsl:if test='position() > 1'> & </xsl:if><TeXML escape="1"><xsl:value-of select='.'/></TeXML><xsl:if test='position() = last()'> \\</xsl:if></xsl:for-each>
|
|
<xsl:if test="position() = 1">
|
|
\hline
|
|
\hline
|
|
\endhead
|
|
</xsl:if>
|
|
</xsl:for-each>
|
|
</env>
|
|
</env>
|
|
</TeXML>
|
|
</xsl:template>
|
|
|
|
|
|
<!-- link -->
|
|
<xsl:template match="span">
|
|
<xsl:apply-templates/>
|
|
</xsl:template>
|
|
|
|
<xsl:template match="link">
|
|
<xsl:variable name="isHTTP">
|
|
<xsl:call-template name="str:string-match">
|
|
<xsl:with-param name="text"><xsl:value-of select="text()"/></xsl:with-param>
|
|
<xsl:with-param name="pattern">*http*</xsl:with-param>
|
|
</xsl:call-template>
|
|
</xsl:variable>
|
|
<xsl:variable name="isInternal">
|
|
<xsl:call-template name="str:string-match">
|
|
<xsl:with-param name="text"><xsl:value-of select="@url"/></xsl:with-param>
|
|
<xsl:with-param name="pattern">#*</xsl:with-param>
|
|
</xsl:call-template>
|
|
</xsl:variable>
|
|
<xsl:if test="$isInternal = 0">
|
|
<cmd name="href">
|
|
<parm>
|
|
<TeXML escape="0"><xsl:value-of select='@url'/></TeXML>
|
|
</parm>
|
|
<parm>
|
|
<xsl:if test="$isHTTP = 1">
|
|
<cmd name="url"><parm><xsl:apply-templates/></parm></cmd>
|
|
</xsl:if>
|
|
<xsl:if test="$isHTTP = 0">
|
|
<xsl:apply-templates/>
|
|
</xsl:if>
|
|
</parm>
|
|
</cmd>
|
|
</xsl:if>
|
|
<xsl:if test="$isInternal = 1">
|
|
<cmd name="hyperref">
|
|
<opt><TeXML escape="0"><xsl:value-of select='@url'/></TeXML></opt>
|
|
<parm><xsl:apply-templates/></parm>
|
|
</cmd>
|
|
<!--<TeXML escape="0"> { </TeXML><cmd name="footnotesize" /><cmd name="pageref"><parm><TeXML escape="0"><xsl:value-of select='@url'/></TeXML></parm></cmd><TeXML escape="0"> } </TeXML>-->
|
|
</xsl:if>
|
|
</xsl:template>
|
|
|
|
<!-- note -->
|
|
<xsl:template match="note">
|
|
<cmd name="footnote"><parm><xsl:apply-templates/></parm></cmd>
|
|
</xsl:template>
|
|
|
|
<!-- em -->
|
|
<xsl:template match="em">
|
|
<cmd name="emph"><parm><xsl:apply-templates/></parm></cmd>
|
|
</xsl:template>
|
|
|
|
<!-- strong -->
|
|
<xsl:template match="strong">
|
|
<cmd name="textbf"><parm><xsl:apply-templates/></parm></cmd>
|
|
</xsl:template>
|
|
|
|
<!-- sub -->
|
|
<xsl:template match="sub">
|
|
<math><cmd name="textsuperscript"><parm><xsl:apply-templates/></parm></cmd></math>
|
|
</xsl:template>
|
|
|
|
<!-- span[@class='super'] -->
|
|
<xsl:template match="span[@class='super']">
|
|
<math><spec cat="sup"/><spec cat="bg"/><xsl:apply-templates/><spec cat="eg"/></math>
|
|
</xsl:template>
|
|
|
|
|
|
<!-- p -->
|
|
<xsl:template match="p">
|
|
<xsl:apply-templates/><TeXML escape="0" emptylines="1"><xsl:text>\\
|
|
|
|
</xsl:text></TeXML>
|
|
</xsl:template>
|
|
|
|
<!-- li -->
|
|
<xsl:template match="li">
|
|
<TeXML escape="1" emptylines="1">
|
|
<cmd name="item" /> <xsl:apply-templates/><xsl:text>
|
|
|
|
</xsl:text>
|
|
</TeXML>
|
|
</xsl:template>
|
|
|
|
<!-- ul -->
|
|
<xsl:template match="ul">
|
|
<env name="itemize">
|
|
<xsl:apply-templates/>
|
|
</env>
|
|
</xsl:template>
|
|
|
|
<!-- ol -->
|
|
<xsl:template match="ol">
|
|
<env name="enumerate">
|
|
<xsl:apply-templates/>
|
|
</env>
|
|
</xsl:template>
|
|
|
|
<!-- dl -->
|
|
<xsl:template match="dl">
|
|
<env name="description">
|
|
<xsl:apply-templates/>
|
|
</env>
|
|
</xsl:template>
|
|
|
|
<!-- di -->
|
|
<xsl:template match="di">
|
|
<TeXML escape="1" emptylines="1">
|
|
<cmd name="item"><opt><xsl:value-of select="./dt" /></opt></cmd>
|
|
<xsl:text>
|
|
</xsl:text>
|
|
<xsl:value-of select="./dd" />
|
|
</TeXML>
|
|
</xsl:template>
|
|
|
|
<!-- example -->
|
|
<xsl:template match="example">
|
|
<env name="lstlisting">
|
|
<opt>caption=<group><TeXML escape="1"><xsl:value-of select="@caption"/></TeXML></group></opt>
|
|
<TeXML escape="0" emptylines="1">
|
|
<xsl:apply-templates />
|
|
</TeXML>
|
|
</env>
|
|
</xsl:template>
|
|
|
|
<xsl:template match="br">
|
|
<!--<cmd name="newline" gr="0"/>-->
|
|
|
|
</xsl:template>
|
|
|
|
<!-- code -->
|
|
<xsl:template match="code">
|
|
<xsl:if test='@class = "inline"'>
|
|
<cmd name='path'><parm><TeXML escape="0"><xsl:value-of select="."/></TeXML></parm></cmd>
|
|
</xsl:if>
|
|
<xsl:if test='not(@class)'>
|
|
<env name="lstlisting">
|
|
<TeXML escape="0" emptylines="1" ligatures="1">
|
|
<xsl:value-of select="."/>
|
|
</TeXML>
|
|
</env>
|
|
</xsl:if>
|
|
</xsl:template>
|
|
|
|
<!-- img -->
|
|
<xsl:template match="img">
|
|
<env name="figure"><opt>H</opt>
|
|
<cmd name="centering" />
|
|
<cmd name="adjustimage"><parm><TeXML escape="0">max size={.9\textwidth}{.9\textheight}</TeXML></parm><parm>inlineimage-<xsl:value-of select="/xep/header/number" />-<xsl:value-of select="count(preceding::img)" /></parm></cmd>
|
|
</env>
|
|
</xsl:template>
|
|
|
|
<!-- section3 -->
|
|
<xsl:template match="section3">
|
|
<cmd name="subsubsection" nl2="1">
|
|
<parm><xsl:text></xsl:text><xsl:value-of select="@topic"/></parm>
|
|
</cmd>
|
|
<cmd name="label">
|
|
<parm><TeXML escape="0"><xsl:value-of select="@anchor" /></TeXML></parm>
|
|
</cmd>
|
|
<xsl:apply-templates />
|
|
</xsl:template>
|
|
|
|
<!-- section2 -->
|
|
<xsl:template match="section2">
|
|
<cmd name="subsection" nl2="1">
|
|
<parm><xsl:text></xsl:text><xsl:value-of select="@topic"/></parm>
|
|
</cmd>
|
|
<cmd name="label">
|
|
<parm><TeXML escape="0"><xsl:value-of select="@anchor" /></TeXML></parm>
|
|
</cmd>
|
|
<xsl:apply-templates />
|
|
</xsl:template>
|
|
|
|
<!-- section1 -->
|
|
<xsl:template match="section1">
|
|
<cmd name="section" nl2="1">
|
|
<parm><xsl:text></xsl:text><xsl:value-of select="@topic"/></parm>
|
|
</cmd>
|
|
<cmd name="label" nl2="1">
|
|
<parm><TeXML escape="0"><xsl:value-of select="@anchor" /></TeXML></parm>
|
|
</cmd>
|
|
<xsl:apply-templates />
|
|
</xsl:template>
|
|
|
|
|
|
|
|
</xsl:stylesheet>
|